Using Rawed+ with AI agents
Rawed+ comes with an MCP server, rawed-mcp, so AI agents like Claude Code, Claude Desktop and Codex can edit, cull and export your photos. Here’s how to set it up, what to ask, how privacy works, and every tool.
Requirements
- Rawed+, during the 14-day trial or with a license. Rawed from the Mac App Store has no agent access, but it unlocks Rawed+ on the same Mac.
- macOS 26 or later
- An AI agent app that can run a local MCP server, such as Claude Code, Claude Desktop, Codex CLI or Cursor
Turn on agent access
Open Rawed+, choose Rawed+ › Settings, click AI Agents and turn on Allow AI agents to use Rawed. Help › Using Rawed with AI Agents… opens the same pane. It also shows the commands below with the path of your copy of the app, and which agent is connected.
Connect your agent
The commands below assume Rawed+ is in the Applications folder. If it is somewhere else, copy them from Settings › AI Agents instead.
Claude Code
Run this command in Terminal. --scope user makes Rawed available in all your projects. Then start a new Claude Code session.
claude mcp add --scope user rawed -- "/Applications/Rawed+.app/Contents/MacOS/rawed-mcp"
Claude Desktop
In Claude Desktop, choose Settings › Developer › Edit Config. This shows claude_desktop_config.json, which is in ~/Library/Application Support/Claude. Add the rawed entry below; if the file already has mcpServers, put it inside that. Save the file, then quit and reopen Claude Desktop.
{
"mcpServers": {
"rawed": {
"command": "/Applications/Rawed+.app/Contents/MacOS/rawed-mcp"
}
}
}
Codex CLI
Run this command in Terminal:
codex mcp add rawed -- "/Applications/Rawed+.app/Contents/MacOS/rawed-mcp"
Or add these lines to ~/.codex/config.toml:
[mcp_servers.rawed]
command = "/Applications/Rawed+.app/Contents/MacOS/rawed-mcp"
Cursor and other MCP clients
Add Rawed as a local (stdio) MCP server. Cursor (~/.cursor/mcp.json) and most other clients take this JSON:
{
"mcpServers": {
"rawed": {
"command": "/Applications/Rawed+.app/Contents/MacOS/rawed-mcp"
}
}
}
Clients that ask only for a command take this path:
/Applications/Rawed+.app/Contents/MacOS/rawed-mcp
Rawed+ doesn’t have to be open. When the agent first uses a tool, rawed-mcp opens it in the background. If agent access is turned off, the tools reply with a message that says where to turn it on.
How the tools work
- Every tool that acts on photos takes their file paths. Nothing depends on what Rawed shows or what is selected, so an agent can work on any photo it can name, in any folder, without opening it first.
- Each edit is one step in that photo’s own history, saved next to the photo in a small .rawed.json file like your own edits. Originals are never changed. You can undo the step in Rawed, or the agent can with
undo. - Reading tools such as
get_analysis,render_previewandassess_photoschange nothing. Rating and flagging never delete a photo, and memory cards are never written to. - The one change that can’t be undone is deleting a preset you made, with
manage_preset.
Privacy
Agent access is off until you turn it on. Rawed+ then accepts connections only from programs on the same Mac, through a local socket that only your user account can open, with a key that changes each time access is turned on. It can’t be reached from the network, and Rawed itself sends nothing anywhere.
The agent is a different matter. What it reads through the tools, such as photo information (including the GPS location when a photo has one), measurements and the preview images it asks for (up to 2,048 pixels on the long edge), becomes part of its conversation and goes to the agent’s AI provider, like anything else you type there. How the provider handles it depends on its own terms and privacy policy. An agent that can also read files on its own, as Claude Code can, may read your photos directly; that is a setting of the agent, not of Rawed.
Tool reference
The 42 tools, with the descriptions and arguments agents receive. Agents read this text in English.
get_statelist_photosget_photo_infoget_recipeget_analysisrender_previewlist_presetsopen_folderrecent_foldersselect_photosopen_photoshow_in_finderupdate_recipeauto_adjustrecover_dynamic_rangeapply_presetset_white_balanceapply_tone_curve_presettransformauto_straightenedit_maskjump_to_historyreset_all_editsundoredoset_ratingcopy_settingspaste_settingsmanage_presetexportsave_jpegquick_convertmerge_hdrlist_devicesshow_devicecopy_from_deviceeject_deviceset_viewset_preferencesedit_point_colortargeted_adjustassess_photos
get_state Get app state
Read-only
What the app shows (for orientation only; no tool acts on it): mode (library/edit), open folder, selection, photo shown in the editor with its history, presets, settings clipboard, library sort/filter, editor view (tool, zoom, compare, overlays, selected mask), shown device, recent folders, running batch and preferences.
No arguments.
list_photos List photos
Read-only
Supported photos in a folder (by file name, regardless of the library's filter and sort), with file name, path, file type, rating, flag, color label, capture date, camera and whether edited. Does not change what the app shows.
folder required | string | Absolute folder path |
|---|
get_photo_info Photo info
Read-only
Metadata of a photo (camera, lens, exposure, capture date, dimensions, color profile, location, IPTC keywords; read-only), its rating/flag/label, RAW engine capabilities (decoder versions, supported controls, as-shot white balance, baseline exposure, whether a neural denoise model is installed), its edit history (labels and position, for jump_to_history / undo / redo), save status and whether it is shown in the editor.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
get_recipe Get edit recipe
Read-only
A photo's complete current EditRecipe as JSON (light, toneMapping, toneCurve, color, hsl, pointColors, colorGrading, presence, detail, optics, geometry, effects, masks, raw, whiteBalance). Values use Rawed units: exposure in EV, most sliders -100...100.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
get_analysis Analyse photo
Read-only
Image statistics of a photo: luminance percentiles, clipping, dynamic range (EV), top vs bottom brightness, noise risk.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
render_preview Render preview
Read-only
Render a photo with its current edits and return it as a JPEG image so you can see the result.
max_size | integer | Long edge in pixels (default 1024, max 2048) |
|---|---|---|
original | boolean | Render the unedited original instead (default false) |
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
list_presets List presets
Read-only
Presets with name, whether built in, and the setting groups each one changes.
No arguments.
open_folder Show folder
Read-only
Show a folder of photos in the library (File › Open Folder / Open Recent). View only: other tools take explicit paths and don't need it.
path required | string | Absolute folder path |
|---|
recent_folders Recent folders
Read-only
List File › Open Recent folders, or clear the list.
clear | boolean | Clear the Open Recent menu |
|---|
select_photos Select photos
Read-only
Change the library selection the user sees, like clicking in the grid: select paths, all or none, or step to the previous/next photo (Photo › Previous/Next Photo; in edit mode this shows it). View only: no tool acts on the selection.
all | boolean | Select every visible photo |
|---|---|---|
none | boolean | Clear the selection |
paths | array (string) | Photos to select (replaces the selection) |
step | integer | Move by this many photos in library order (-1 previous, 1 next) |
open_photo Show photo
Read-only
Show a photo to the user in the editor (also photos on a memory card or drive). View only: editing tools take the photo's path and work the same whether or not it is shown.
path required | string | Absolute path of the photo |
|---|
show_in_finder Show in Finder
Read-only
Reveal files or folders in Finder (Photo › Show in Finder). This brings Finder to the front.
paths required | array (string) | Files or folders to reveal |
|---|
update_recipe Update edit recipe
Changes photos or files
Deep-merge a partial EditRecipe into a photo, e.g. {"light": {"exposure": 0.3, "highlights": -40}}. Covers every inspector slider and toggle (light, tone curve points, HSL, color grading, effects, detail incl. noiseReduction.neural, optics, geometry angle/perspective/crop, RAW engine). Arrays (curve points, masks) replace the whole array; prefer edit_mask for masks and set_white_balance for white balance modes. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
changes required | object | Partial EditRecipe to merge |
|---|---|---|
label | string | History label shown in the app (optional) |
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
auto_adjust Auto adjust
Changes photos or files
Run statistical Auto (Photo › Auto Adjust / Auto Landscape) on a photo, from that photo's own statistics. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
mode | stringOne of: standard, landscape | standard, or landscape (also for sunsets: protects the sky, lifts the foreground) |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
recover_dynamic_range Recover dynamic range
Changes photos or files
Protect highlights and lift shadows from the photo's statistics. Repeating it on the same photo right after with another strength re-derives from the same base, like the inspector slider. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|---|---|
strength | number | 0...100 (default 60) |
apply_preset Apply preset
Changes photos or files
Apply a preset by name. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
name required | string | Preset name (see list_presets) |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
set_white_balance White balance
Changes photos or files
White balance: As Shot, Auto (estimated from the photo), Custom temperature/tint, or the eyedropper at a point that should be neutral. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
mode | stringOne of: as_shot, auto, custom | White balance mode |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
pick | objectx, y | Eyedropper point {"x": 0...1, "y": 0...1}, normalized in the uncropped, unrotated photo, top-left origin |
temperature | number | Kelvin, 2000...12000 (custom) |
tint | number | -150...150 (custom) |
apply_tone_curve_preset Tone curve preset
Changes photos or files
Set a point-curve channel to Linear, Medium Contrast or Strong Contrast. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
channel | stringOne of: rgb, red, green, blue | Channel (default rgb) |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
preset required | stringOne of: linear, medium_contrast, strong_contrast | Curve preset |
transform Rotate, flip, crop ratio
Changes photos or files
Geometry, one action per call: rotate 90° (resets the crop), flip, set the crop aspect ratio (centered crop) or reset all geometry. Straighten angle, perspective and the crop rectangle itself are update_recipe geometry values. Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
aspect_ratio | string | "original", "free", or W:H such as "1:1", "4:3", "3:2", "16:9", "5:4" |
|---|---|---|
flip | stringOne of: horizontal, vertical | Flip |
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
reset | boolean | Reset Geometry |
rotate | stringOne of: left, right | Rotate 90° counterclockwise (left) or clockwise (right) |
auto_straighten Auto straighten
Changes photos or files
Level the horizon with horizon detection (Photo › Auto Straighten). Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
edit_mask Edit masks
Changes photos or files
Local adjustment masks of the photo at path; one step in its history per call. Actions: add (new mask from one shape; optional name and adjustments), add_component (to mask_id, combined by operation), update_component (component_id: operation, inverted, or new shape parameters), remove_component, set (mask_id: name, enabled, amount 0...100, adjustments), delete, select (show it in the inspector; only for the photo shown in the editor). Shapes: linear_gradient {start, end} (full effect at start, fading to end); radial_gradient {center, radius_x, radius_y, feather}; brush {strokes: [{points: [[x,y],…], size (fraction of long edge, default 0.08), feather (60), flow (50), density (100), erase}]}; luminance_range {lower, upper (0...1), feather}; color_range {hue (degrees), hue_range, min_saturation (0...1), feather}; sky; subject. Points are {"x","y"} normalized 0...1 in the uncropped, unrotated photo, top-left origin. adjustments: exposure (EV), contrast, highlights, shadows, whites, blacks, temperature, tint, saturation, sharpness, clarity, dehaze (-100...100). Mask and component ids belong to that photo; see get_recipe {path}.masks.
action required | stringOne of: add, add_component, update_component, remove_component, set, delete, select | What to do |
|---|---|---|
adjustments | object | Local adjustments to merge, e.g. {"exposure": -0.5, "highlights": -40} |
amount | number | Mask amount 0...100 |
component_id | string | Component id (update_component, remove_component) |
enabled | boolean | Mask on/off |
inverted | boolean | Invert the component |
mask_id | string | Mask id of this photo (all actions except add) |
name | string | Mask name |
operation | stringOne of: add, subtract, intersect | How a component combines with the previous ones (default add) |
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
shape | object | Shape for add / add_component / update_component: {"kind": linear_gradient|radial_gradient|brush|luminance_range|color_range|sky|subject, …parameters} |
jump_to_history Go to history step
Changes photos or files
Return a photo to a step of its own edit history, as clicking it in the History panel. No step is discarded: jump back to the previous history_position to return; undo / redo {path} step from the jumped-to step. Index 0 is the photo as it was when first edited or shown in this app session; see get_photo_info {path}.history.
index required | integer | History index |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
reset_all_edits Reset all edits
Changes photos or files
Return every setting, the crop and all masks of a photo to its defaults as one step (Photo › Reset All Edits). Acts on the photo at path: one step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app. If the photo is the one shown in the editor, the user sees the change live; otherwise it is edited without changing what the app shows.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
undo Undo
Changes photos or files
Undo the last edit step of the photo at path (made by you or the user), and only of that photo; other photos are never affected. Ratings, flags and labels are not part of a photo's edit history.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
redo Redo
Changes photos or files
Redo the last undone edit step of the photo at path.
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
|---|
set_rating Rate photos
Changes photos or files
Set rating (0-5), flag and/or color label of photos as one step the user can undo in the app (Edit › Undo).
color_label | stringOne of: none, red, yellow, green, blue, purple | Color label |
|---|---|---|
flag | stringOne of: none, pick, reject | Flag |
paths required | array (string) | Absolute paths of the photos to act on (any folder). |
rating | integer | 0...5 |
copy_settings Copy settings
Read-only
Copy a photo's settings to Rawed's settings clipboard for the user's Edit › Paste Settings. No tool reads this clipboard: paste_settings takes its source photo explicitly.
categories | arrayList of: raw, whiteBalance, light, toneMapping, toneCurve, color, hsl, colorGrading, presence, detail, optics, geometry, effects, masks | Setting groups to copy (default: all except geometry, masks and raw) |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
paste_settings Paste settings
Changes photos or files
Copy settings from the photo at source to each photo in paths (Edit › Paste Settings / Paste Selected Settings): one step in each target photo's own history.
categories | arrayList of: raw, whiteBalance, light, toneMapping, toneCurve, color, hsl, colorGrading, presence, detail, optics, geometry, effects, masks | Setting groups to paste (default: all except geometry, masks and raw) |
|---|---|---|
paths required | array (string) | Absolute paths of the photos to paste into |
source required | string | Absolute path of the photo whose settings are copied |
manage_preset Manage presets
Can delete a preset for good
Create a preset from the settings of the photo at path, rename, delete (user presets only; cannot be undone), import a .rspreset file, or export a preset to a file.
action required | stringOne of: create, rename, delete, import, export | What to do |
|---|---|---|
categories | arrayList of: raw, whiteBalance, light, toneMapping, toneCurve, color, hsl, colorGrading, presence, detail, optics, geometry, effects, masks | Groups the new preset stores (create; default: the edited groups except geometry, masks and raw) |
name | string | Preset name (new name for create; existing preset otherwise) |
new_name | string | New name (rename) |
path | string | Photo whose settings the new preset stores (create, required), file to import, or file/folder to export to |
export Export
Can delete a preset for good
Export photos with their current edits, and wait until done (File › Export…). Starts from Rawed defaults, not the Export sheet's last settings: Full-Size JPEG (JPEG 90%, original size, sRGB, all metadata, "{name}", next to the original); quick_convert is the same with the sheet's last settings. Sources on memory cards or in folders that can't be written require a directory argument; no files are written until a usable destination is provided. A directory on a memory card is rejected. Does not change the Export sheet's remembered settings. on_conflict decides what happens when a file with the output name already exists; a name that is one of the exported photos, or that two photos would share, is numbered instead. Returns the written paths and the number of skipped photos.
color_space | stringOne of: sRGB, displayP3 | Color space (default sRGB) |
|---|---|---|
copyright | string | Copyright notice written to the file (TIFF, IPTC) unless metadata is none; empty keeps the original's |
creator | string | Creator written to the file (TIFF Artist, IPTC By-line) unless metadata is none or copyright_only; empty keeps the original's |
directory | string | Destination folder; required if any source folder can't be written or is on a memory card. Omit only to save next to writable originals. |
file_name | string | File name template: {name} = original name, {index} = number in the export (3 digits), {seq:N} = number with N digits, {date} = capture date (yyyy-MM-dd) (default {name}) |
format | stringOne of: jpeg, heif, png, tiff | File format (default jpeg) |
height | integer | fit_within height |
include_metadata | boolean | Older switch, same as metadata: false = none |
long_edge | integer | Pixels for long_edge |
look | stringOne of: edits, original | With the photo's edits (default; photos without edits keep the camera look), or as shot |
megapixels | number | Total pixel count in millions for megapixels, keeping the aspect ratio (never upscales) |
metadata | stringOne of: all, all_except_location, all_except_camera_and_location, copyright_only, none | Metadata kept from the original: everything, without GPS, also without camera and lens (make, model, serial numbers), only the copyright, or nothing. TIFF Software = Rawed is always written |
on_conflict | stringOne of: replace, keep_both, skip | When the file already exists: replace it, keep both (writes <name>-2.<ext> …), or skip the photo (default keep_both). Only files Rawed wrote are replaced; any other file (an original such as a camera JPEG) is kept and the export gets <name>-2.<ext> |
output_sharpening | stringOne of: none, screen, matte, glossy | Sharpening after resizing, for a screen or for printing on matte or glossy paper |
paths required | array (string) | Absolute paths of the photos to act on (any folder). |
percentage | number | Percent of the size for percentage |
preset | stringOne of: full_jpeg, web, share, small, lossless | Start from a preset: Full-Size JPEG (JPEG 90%), Web (JPEG 2048 px 80%), Share (HEIF 50%), Small (JPEG 1280 px), Lossless PNG; the other options override it |
quality | number | 0...1 for JPEG/HEIF (default 0.9) |
remove_location | boolean | Older switch, same as metadata: true = all_except_location |
resolution_ppi | integer | Pixels per inch written to the file (no resampling); 0 keeps the original's |
sharpening_amount | stringOne of: low, standard, high | Output sharpening amount (default standard) |
short_edge | integer | Pixels for short_edge |
size | stringOne of: original, long_edge, short_edge, fit_within, percentage, megapixels | Size mode (default original; long_edge if only long_edge is given) |
subfolder | string | Capture-date subfolder in a date format, e.g. "yyyy-MM-dd" or "yyyy/MM" (/ nests folders); "" or "none" for none |
watermark | objectcolor, font, image, margin, opacity, position, size, text, type | Watermark drawn into the exported files only (not into the photo, the editor or Save as JPEG), after resizing. type is required; the other options left out keep the current watermark's (quick_convert: the Export sheet's last one) or the defaults. {"type": "none"} removes it |
width | integer | fit_within width |
save_jpeg Save as JPEG
Can delete a preset for good
Save photos with their current edits as full-size JPEGs next to the originals (File › Save as JPEG) and wait until done: <name>.jpg, sRGB, quality 90, metadata kept (location removed only when the Export sheet's Remove Location or no-metadata choice says so). A JPEG original, or a photo whose <name>.jpg is a file Rawed didn't write (such as the camera JPEG of a RAW + JPEG pair), gets <name> edited.jpg instead. Originals and their edit files are never changed. on_conflict decides what happens when that JPEG already exists. Photos on memory cards or in folders that can't be written fail (use export with a directory). Returns the written, skipped and failed paths.
on_conflict | stringOne of: replace, keep_both, skip | When the JPEG already exists: replace it, keep both (writes <name> 2.jpg …), or skip the photo (default keep_both) |
|---|---|---|
paths required | array (string) | Absolute paths of the photos to act on (any folder). |
quick_convert Quick Convert
Changes photos or files
Alias of export that starts from the Export sheet's last settings (File › Export…) instead of Rawed defaults, also takes folders, and never asks: an existing file is kept and the new one numbered (<name>-2.<ext>). Without saved settings it starts at Full-Size JPEG (JPEG 90%, original size; earlier versions started at Web). A preset and the other options override them. Sources on memory cards or in folders that can't be written require a directory argument; no files are written until a usable destination is provided. A directory on a memory card is rejected. Returns the written paths.
color_space | stringOne of: sRGB, displayP3 | Color space |
|---|---|---|
copyright | string | Copyright notice written to the file (TIFF, IPTC) unless metadata is none; empty keeps the original's |
creator | string | Creator written to the file (TIFF Artist, IPTC By-line) unless metadata is none or copyright_only; empty keeps the original's |
crop | stringOne of: none, 1:1, 4:3, 3:2, 16:9 | Centered crop (follows each photo's orientation) |
directory | string | Destination folder; required if any source folder can't be written or is on a memory card. Omit only to save next to writable originals. |
file_name | string | File name template: {name} = original name, {index} = number in the export (3 digits), {seq:N} = number with N digits, {date} = capture date (yyyy-MM-dd) (overrides suffix) |
format | stringOne of: jpeg, heif, png, tiff | File format |
height | integer | fit_within height |
include_metadata | boolean | Older switch, same as metadata: false = none |
long_edge | integer | Pixels for long_edge |
look | stringOne of: edits, original | With the photo's edits, or as shot |
megapixels | number | Total pixel count in millions for megapixels, keeping the aspect ratio (never upscales) |
metadata | stringOne of: all, all_except_location, all_except_camera_and_location, copyright_only, none | Metadata kept from the original: everything, without GPS, also without camera and lens (make, model, serial numbers), only the copyright, or nothing. TIFF Software = Rawed is always written |
output_sharpening | stringOne of: none, screen, matte, glossy | Sharpening after resizing, for a screen or for printing on matte or glossy paper |
paths required | array (string) | Photos or folders to convert |
preset | stringOne of: full_jpeg, web, share, small, lossless | Full-Size JPEG (JPEG 90%), Web (JPEG 2048 px 80%), Share (HEIF 50%), Small (JPEG 1280 px), Lossless PNG |
quality | number | 0.3...1 for JPEG/HEIF |
remove_location | boolean | Older switch, same as metadata: true = all_except_location |
resolution_ppi | integer | Pixels per inch written to the file (no resampling); 0 keeps the original's |
sharpening_amount | stringOne of: low, standard, high | Output sharpening amount (default standard) |
short_edge | integer | Pixels for short_edge |
size | stringOne of: original, 50%, 25%, long_edge, short_edge, fit_within, megapixels | Size |
subfolder | string | Capture-date subfolder in a date format, e.g. "yyyy-MM-dd" or "yyyy/MM" (/ nests folders); "" or "none" for none |
suffix | string | Appended to the original name, e.g. "-web" (sets file_name to {name}-web) |
watermark | objectcolor, font, image, margin, opacity, position, size, text, type | Watermark drawn into the exported files only (not into the photo, the editor or Save as JPEG), after resizing. type is required; the other options left out keep the current watermark's (quick_convert: the Export sheet's last one) or the defaults. {"type": "none"} removes it |
width | integer | fit_within width |
merge_hdr Merge to HDR
Changes photos or files
Merge bracketed photos (at least two, in the given order) into a linear HDR TIFF next to the first one when its folder is writable, and show it in the editor (Photo › Merge to HDR). Pass directory when the first photo is on a memory card or its folder can't be written. Waits until done and returns the merged file's path.
align | boolean | Align the frames (default true) |
|---|---|---|
deghosting | number | 0...1 moving-object suppression (default 0.5) |
directory | string | Destination folder; required if the first photo's folder can't be written or is on a memory card. |
paths required | array (string) | Bracketed photos |
list_devices List devices
Read-only
Connected memory cards and external drives.
No arguments.
show_device Show device
Read-only
Show a memory card or drive in the library (sidebar › Devices) and wait for the photo scan, or close it. Returns the photos grouped as in the gallery (RAW + JPEG pairs are one item).
close | boolean | Close the device and return to the folder |
|---|---|---|
filter | stringOne of: all, raw, jpeg | Show all photos, or only RAW / JPEG |
path | string | Volume path from list_devices (default: the device already shown) |
copy_from_device Copy to folder
Changes photos or files
Copy photos from a memory card or drive to a folder on the Mac (File › Copy to Folder) and wait until done. Shows the device in the library while it is scanned. Nothing on the card is changed.
by_date | boolean | Put photos in folders by capture date (default true) |
|---|---|---|
destination required | string | Destination folder |
device required | string | Volume path from list_devices |
paths | array (string) | Photos to copy (any file of a RAW + JPEG pair copies both; default: every photo on the device) |
skip_existing | boolean | Skip photos that were already copied (default true) |
eject_device Eject device
Changes photos or files
Eject a memory card or drive (File › Eject).
path required | string | Volume path from list_devices |
|---|
set_view Control the view
Read-only
Operate the GUI without changing photos: mode, editor tool, zoom, before/after, clipping overlays (highlights, shadows, zebra, heatmap, threshold), EDR preview, sharpening mask, mask overlay and selected mask, inspector and filmstrip visibility, inspector tab, library sort and filter, thumbnail size.
clear_filter | boolean | Clear the library filter |
|---|---|---|
clipping | boolean | Show both highlight and shadow clipping |
compare | stringOne of: off, split, side_by_side | Before/after |
extended_dynamic_range | boolean | EDR preview on HDR displays |
filmstrip | boolean | Show the filmstrip |
filter_file_type | stringOne of: all, raw, jpeg, heif, png, tiff | Library file type filter |
filter_flag | stringOne of: any, pick, reject, unflagged | Library flag filter |
filter_rating | integer | Show photos with at least this many stars (0 = any) |
heatmap | boolean | Exposure heatmap |
highlight_clipping | boolean | Show highlight clipping |
inspector | boolean | Show the inspector |
inspector_tab | stringOne of: adjust, presets, history | Inspector tab |
mask_overlay | boolean | Show the selected mask as an overlay |
mode | stringOne of: library, edit | App mode (edit opens the focused photo) |
selected_mask | string | Mask id to select in the inspector |
shadow_clipping | boolean | Show shadow clipping |
sharpening_mask | boolean | Show the sharpening mask |
show_original | boolean | Show the original instead of the edit (like holding Space) |
sort | stringOne of: capture_time, file_name, rating | Library sort order |
threshold | stringOne of: 95, 98, 100 | Highlight warning threshold in percent |
thumbnail_size | integer | Library thumbnail size in points, 110...320 |
tool | stringOne of: none, crop, mask, white_balance, color_target | Editor tool (color_target: the Point Color eyedropper / targeted adjustment) |
zebra | boolean | Zebra stripes above the threshold |
zoom | string | "fit", "fill", a percentage 5...800 (e.g. "100"), "in" or "out" |
set_preferences Preferences
Read-only
Rawed Settings › Editing defaults for newly opened photos.
extended_dynamic_range | boolean | Use the EDR preview on HDR displays by default |
|---|---|---|
highlight_warning_threshold | stringOne of: 95, 98, 100 | Default highlight warning threshold in percent |
edit_point_color Point Color
Changes photos or files
Point Color (Color panel): change one color picked in the photo — its hue, saturation and luminance — without masks; every pixel close to that color changes, with a smooth falloff. Actions: add (sample the color at `sample`, or give `color`), update (point_id: any of the values below), delete (point_id), move (point_id, offset -1 earlier / 1 later; points apply in order). Values: hue_shift, saturation, luminance (-100...100; luminance 100 = +1 EV on that color), range (0...100, default 50: how far from the color the change reaches), hue_range, saturation_range, luminance_range (0...100, default 50: refine the range per dimension), enabled. `color` is {"lightness", "chroma", "hue"} in OKLCh of the linear working space, or {"hex": "#RRGGBB"} (sRGB). Point ids and targets are in get_recipe.pointColors. One step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app; if the photo is shown in the editor the user sees it live.
action required | stringOne of: add, update, delete, move | What to do |
|---|---|---|
color | object | Target color for add: {"lightness", "chroma", "hue"} (OKLCh) or {"hex": "#RRGGBB"} |
enabled | boolean | Point color on/off |
hue_range | number | 0...100 (default 50) |
hue_shift | number | -100...100 (±30° hue rotation) |
luminance | number | -100...100 (±1 EV) |
luminance_range | number | 0...100 (default 50) |
offset | integer | move: -1 earlier, 1 later |
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
point_id | string | Point color id (update, delete, move) |
range | number | 0...100 (default 50) |
sample | objectx, y | Point {"x": 0...1, "y": 0...1}, normalized in the uncropped, unrotated photo, top-left origin (as for masks and the white balance picker) |
saturation | number | -100...100 |
saturation_range | number | 0...100 (default 50) |
targeted_adjust Targeted adjustment
Changes photos or files
Change the color at a point of the photo, like dragging up or down on it with the targeted adjustment tool: target color_mixer changes the Color Mixer (HSL) bands of that color, weighted as the mixer blends them; target point_color changes the point color that covers that color, adding one sampled there if there is none. `amount` is in slider units (-100...100), added to the current values. Gray colors can't be changed in the Color Mixer. One step in that photo's own edit history (undo with undo {path}), saved next to the photo like an edit in the app; if the photo is shown in the editor the user sees it live.
amount required | number | -100...100 slider units (positive = like dragging up) |
|---|---|---|
path required | string | Absolute path of the photo to act on (any folder). Whether or not it is shown in the editor makes no difference. |
point required | objectx, y | Point {"x": 0...1, "y": 0...1}, normalized in the uncropped, unrotated photo, top-left origin (as for masks and the white balance picker) |
property required | stringOne of: hue, saturation, luminance | Which property changes |
target required | stringOne of: color_mixer, point_color | What changes |
assess_photos Assess photos for culling
Read-only
Measure photos for culling; read-only (nothing is edited, rated or saved). Each photo is measured on a 1024 px sRGB image: RAW files on the camera's embedded preview (as shot, before edits; get_analysis measures the RAW data itself), other files downsampled. Per photo: sharpness — variance of the Laplacian (after a light 3×3 pre-blur) over the frame (global) and in its sharpest 5 % (local, so a sharp subject on a soft background counts as sharp), score 0–100 (log scale, local 5 → 0, 500 → 100), likely_blurry when local < 15 (conservative: mildly soft frames of detailed scenes pass; in a duplicate group compare relative_to_group_best, softer_than_group below 0.5); exposure as shot — highlight_clip_percent (any channel ≥ 250/255), shadow_clip_percent (all ≤ 5/255), ev_offset (mean EV of the frame vs. 18 % gray), likely_overexposed (ev_offset > 1 or > 5 % clipped), likely_underexposed (ev_offset < −2.5 or > 20 % crushed); low-key and high-key scenes can be flagged on purpose; faces (Apple Vision) — count, box (0…1, top-left origin), capture_quality 0…1 (compare the same person across frames), eye openness (height/width of the landmark eye contour; open ≈ 0.25–0.45) and eyes_closed when both are below 0.18 — a heuristic: null for faces under 48 px wide or without landmarks, unreliable for profiles, sunglasses, squinting or looking down. Near-duplicates across the given photos: Vision feature print distance (revision 2, on a 224 px copy) ≤ duplicate_threshold (default 0.6; re-encoded copies ≈ 0.1, different scenes ≈ 1.2), complete linkage (every pair in a group is within the threshold), with suggested_keep per group (no closed eyes, then sharpest, then best face quality, then least clipping) and each photo's nearest match. Thresholds are repeated in the reply. Unreadable files are listed under failures.
duplicate_threshold | number | Feature print distance up to which photos are near-duplicates (default 0.6) |
|---|---|---|
include | arrayList of: sharpness, exposure, faces, duplicates | Measurements to make (default all). duplicates compares the photos with each other. |
paths required | array (string) | Absolute paths of the photos to measure and compare (any folders; up to 500) |
