Files
photocraft/docs/batch-naming.md
T
David MannandClaude Opus 5.5 3ce04b52f4 Address CodeRabbit review: Batch writes, recording and dialog edge cases
- CLI batch: recursive inputs keep the engine's tree order for {serial};
  --format picks the encoder whatever extension --naming writes; the
  summary prints before --error-log is written.
- Batch: a jobs.cancel during a write keeps that file in `files`;
  Opened Files refuses a default-named result that replaces another open
  document's file; a recorded Save leaves a document changed when Batch
  writes nothing for it.
- Recording: folded Move-tool nudges add whole-pixel steps; a null
  Check Spelling `action` is recorded as Check Spelling.
- Linked files: a document without links lists none missing; a look
  whose links changed while it ran is dropped.
- Save for Web: a null or empty destination opens the picker; a rename
  while the picker is open writes the picked file.
- Actions: a Check Spelling step fails instead of replacing a dialog
  opened by hand.
- Docs: desktop Batch cancel flow, Check Spelling step shape, filter row
  history count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 03:02:19 +01:00

4.6 KiB

Batch output naming

Select a recorded action, then open File > Automate > Batch. Source can be a folder (with Include All Subfolders) or the open documents. File Naming accepts a template. Leave it blank to keep source stems with the selected output extension. An explicit template spells the whole filename; without {ext}, no extension is added.

Token Value
{name}, {NAME}, {Name} Input filename without its last extension, unchanged, uppercase, or initial capital
{serial}, {serial:1} … {serial:4} Input position plus Starting serial (default 1), padded to at least 3 or the specified number of digits
{letter}, {LETTER} Serial letters: a … z, aa …; uppercase with {LETTER}
{date} UTC date at the start of the batch, in YYYY-MM-DD form
{date:mmddyy}, {date:mmdd}, {date:yyyymmdd}, {date:yymmdd}, {date:yyddmm}, {date:ddmmyy} Other UTC date arrangements
{ext}, {EXT} Output extension, lowercase or uppercase; a dot is added when this is the final component, unless the template already supplied one

For example, {name}_{serial} with starting serial 7 writes photo_007 and photo_008 for two PNG inputs named photo.png; {name}_{serial}{ext} writes photo_007.png and photo_008.png. The file bytes still use the selected output format. A serial after 999 becomes 1000; it does not wrap. Folder inputs use the existing filename order, and an explicit input array keeps its order. Failed inputs consume their position, so later filenames do not shift. Braces in an input filename are literal text, not additional tokens. Batch writes subfolder inputs flat into the output folder in input order. A later same-name result replaces an earlier one, as measured in Photoshop 2026. Stop On Error leaves later inputs unprocessed; Error Log writes a UTF-16 LE file with a BOM and CRLF line endings even when no file fails. It starts with Batch Start, records a File / Error pair per failure, and ends with Batch End. The wording is English because PhotoCraft does not have Photoshop's numeric error codes or German message catalog. Folder batches report progress per file and can be cancelled after the current file. A cancelled batch returns cancelled: true, its completed files, and skipped inputs. Background job status is cancelled and retains the partial result; a waiting control request replies with ok: false, error: "cancelled", and that result. If writing the error log fails, the batch still returns its per-file results with errorLogError instead of errorLog.

Unknown tokens, unmatched braces, invalid parameter types, path separators, reserved filename characters, excessive filename length (255 UTF-8 bytes), and serial overflow are rejected before export writes begin. Starting serial must be an integer from 1 to 4,294,967,295. A custom template that resolves to an existing input file is also rejected before processing; the same guard checks default flat output names. This prevents an early result from destroying a later unread input. Ordinary per-file read, action and save failures still appear in the batch's errors result. Image Processor and lens correction continue to report output-name collisions.

The same options are available on file.automate.batch through the engine command interface:

{
  "input": ["first/photo.png", "second/photo.png"],
  "output": "exports",
  "steps": [["image.adjustments.invert", {}]],
  "format": "png",
  "naming": "{name}_{serial}",
  "startingSerial": 7
}

The CLI has matching batch --recursive, --naming, --start-serial, --stop-on-error, and --error-log flags. Droplets use Batch's flat output and naming behavior.

Reference behavior and conformance

The Photoshop 2026 Batch measurements record flat subfolder output, last-result-wins collisions, and extension components that add a dot only at the end. batch_include_all_subfolders, batch_naming_later_result_replaces_the_earlier_one, and extension_component_only_adds_a_dot_at_the_end check those cases. PhotoCraft deliberately rejects a plan that would replace another input file before it is read, to prevent data loss. The desktop Batch follows the measured flow: it shows no progress in the status bar, previews each input read-only on the canvas, and Esc asks whether to continue or stop. Headless control clients still read the job's progress and stop it with jobs.cancel. The inputs are not live tabs with Layers panel content, so AUTO-219-5 stays partial.