Docs/Multi-Pilot Caption Templates

Multi-Pilot Caption Templates

Every Participant Preset can carry an IPTC Pro profile — templates for Caption, Headline, Title, Event and Base Keywords that resolve placeholders ({name}, {number}, {team}, {car_model}, {nationality}, {persons}, …) with each photo's matched participant data. When a photo has more than one matched pilot — endurance racing, GT3 fields, podiums, cycling pelotons — the plain placeholders resolve to a comma-joined list of everyone's values, which reads as a mess: "DTM 2026 #90, 7; Manthey, Comtoyou: Feller, Thiim". Wrapping the per-pilot part of a template in a [[ ... ]] per-car repeat block renders it once per matched pilot instead, joined by , : "DTM 2026 [[#{number}; {team}: {name}]] - photo by GC" → "DTM 2026 #90; Manthey: Feller, #7; Comtoyou: Thiim - photo by GC". An account-level default IPTC template can also be saved once and reused across every new preset.

participants screen

How to use it

  1. 1Open a Participant Preset and expand the IPTC Metadata section:
  2. 2In the Caption Template field (→ IPTC:Caption), place the cursor where the per-pilot section should repeat, or select…: the text you want repeated per pilot.
  3. 3Click the [[ per-car ]] button (last button in the Quick Add row, turquoise tint): Selected text gets wrapped in [[ ]]; with no selection, an empty wrapper is inserted with the cursor placed inside. Typing [[ and ]] directly also works.
  4. 4Inside [[ ]], use any of {name}, {surname}, {number}, {team}, {car_model}, {nationality}, {persons} — each block…: iteration uses that individual pilot's data. Variables outside [[ ]] keep the aggregated (comma-joined) values across all pilots, as before — that's why the block exists.
  5. 5The same [[ ]] syntax works in every IPTC template field of the preset: Caption Template, Headline, Title, Event, and…: each Base Keywords entry.
  6. 6Person Shown: (PersonInImage, → XMP-iptcExt:PersonInImage) does not need [[ ]]: it's a list field by IPTC standard, so multi-match already gets one entry per pilot, formatted by the Person Shown Format setting in the Export & IPTC modal — Name only (simple), Extended (number, name, nationality, team, car) (extended), or Custom template (custom, using the Person Shown Template field). Note: the editor's → IPTC:Caption label (step 2) is the field-picker hint, not the literal tag — the writer maps that field to IPTC:Caption-Abstract.
  7. 7The live preview under the Caption Template field shows a single-pilot and a 2-pilot example side by side once the…: template contains [[ ]]; with only one participant in the preset's table it shows a hint to add a second one.
  8. 8To reuse a profile across presets: Settings → IPTC Pro Defaults holds one account-level default template (synced to the account, survives logout). Apply default copies it into the current preset; Save as default promotes the current preset's profile to the account default. A preset's own profile always wins over the default, and the default is only a fallback in the Export & IPTC modal when a preset has no profile at all — existing presets are never auto-modified.

Limits and known behaviour

  • Nested blocks are not supported. A [[ ]] inside another [[ ]] breaks — the parser is non-greedy and closes on the first ]].
  • The join separator is fixed at , (comma + space); no per-block separator yet.
  • Zero matched pilots → the block renders as an empty string (surrounding text and whitespace are cleaned up automatically).
  • One matched pilot → the block renders once, with no separator — visually identical to a template without [[ ]].
  • Templates without [[ ]] are unaffected — existing presets keep their exact prior output.
  • {persons} outside a block resolves to the joined list of each pilot's extended name (buildExtendedName, i.e. (number) name (nationality) - team - car_model), not the format chosen for Caption. Inside a block, {persons} is that one pilot's extended name.
  • Base Keywords also gets each matched pilot's name, team and car model added as separate keyword entries automatically, in addition to whatever the template resolves.
  • The Export & IPTC modal's Person Shown Format selector (simple / extended / custom) is not exposed in the preset's own IPTC Metadata section, only in the export flow — the preset's Person Shown Template field only sets the custom-format string.
  • Where the resolved values land in the file is documented on the metadata-iptc page (field-by-field IPTC/XMP mapping); this page covers only how the template text itself is built.