Template Variables
Template variables insert information from each item, the current job, or the current date and time into filenames, folders, Apple Photos albums, and metadata text.
Where Variables Are Supported
Depending on the tool and destination, variables are available in:
- Ingest filename and destination templates
- Workflow subfolder, filename, and Apple Photos album templates
- Quick Transfer and Quick Rename templates
- IPTC template text fields
The variable picker in a template field shows the variables available in the current version of PhotoCuller.
Reusable Filename and Folder Templates
On Mac, open the { } menu beside a supported filename or folder field. Choose Save Current as Preset…, name the pattern, and save. Choose its name from the same menu to reuse it. Manage Presets… lets you edit, duplicate, rename, or delete patterns; manager edits save automatically.
On iPad and iPhone, use the bookmark menu in the template editor, or Settings > Filename & Folder Templates.
Filename and folder presets are separate. Choosing one copies its pattern into the field; later preset edits do not rewrite saved workflows. These presets store patterns, not the job values in a Session Variable Preset. Check the destination preview before running.
Basic Syntax
Put each variable in braces and combine it with static text:
{Year}/{MonthPadded}/{FileName}
Example output:
2026/02/DSCF1234
Native variable names are case-sensitive. In Filename, enter the filename stem only; PhotoCuller preserves or adds the appropriate file extension.
For capture-date variables, PhotoCuller uses the best date available in this order: EXIF capture date, IPTC date created, XMP create date, then the selected file’s creation date. Variables that require EXIF camera metadata remain unavailable when that metadata is missing.
Missing Values
In path and filename output, an unavailable variable normally resolves to Unknown. Use default when you need a different fallback:
{CameraModel | default:"NoCamera"}
You can mix variables and static text freely. Use / for nesting in Subfolder.
Practical Examples
Date and client folder structure
{Year}/{MonthPadded}-{MonthName}/{Session.Client}
Sequence-based delivery naming
{Session.Client}_{FullDate}_{Sequence}
High-speed sports naming
{FullDate}_{Session.ProjectName}_{TimeSort}{SubSecond | first:2}
Example output: 2025-04-05_Football_14304512
Mixed metadata naming
{CameraModel}_{ISO}_{FileName}
Variable Modifiers
Modifiers extract or transform part of a resolved value. Add them inside the braces after a pipe, in the order they should run:
{FileName | first:3 | upper}
For DSC_0001, this produces DSC.
| Modifier | Effect |
|---|---|
pad:N | Add leading zeros to reach a minimum of N digits |
first:N | Keep the first N characters |
last:N | Keep the last N characters |
from:N | Keep text starting at character N (1-based) |
chars:N-M | Keep the inclusive character range N through M (1-based) |
drop first:N | Remove the first N characters |
drop last:N | Remove the last N characters |
lower | Convert to lowercase |
upper | Convert to uppercase |
title | Convert to title case |
replace:"find" "replacement" | Replace matching text |
default:"text" | Replace a missing, empty, or Unknown value |
unknown:"text" | Alias for default |
Examples:
{FileName | first:8}
{Session.Client | replace:" " "_" | upper}
{CameraModel | default:"NoCamera"}
Use pad:N for leading zeros, where N is the minimum number of digits. For example, {ImageNumber | pad:3} turns 1 into 001 and 42 into 042. Values already at least N digits long are not shortened: 1234 stays 1234 with pad:3. A rename template such as Photo_{ImageNumber | pad:3} combines the grid’s image number with zero padding.
The variable picker includes a modifier editor, so you do not need to type modifier syntax manually.
Photo Mechanic Compatibility
PhotoCuller translates most common Photo Mechanic-style lowercase variables and legacy modifiers automatically. For example:
{year4}-{month0}-{day0}_{job}_{filenamebase:0,8}
is equivalent to:
{FullDate}_{Session.ProjectName}_{FileName | first:8}
Common Photo Mechanic aliases include {filenamebase}, {year4}, {month0}, {day0}, {job}, {model}, and {rating}. A few niche or application-specific Photo Mechanic variables are not supported, so always verify the live preview before running a production ingest or rename.
Inline Code Replacement Lookup
Look up a value from a named code replacement table with:
{CodeReplacement:TableName:Value}
Add #N to select a later TSV output column:
{CodeReplacement:cities:city_sf#2}
The lookup value can itself be a variable:
{CodeReplacement:clients:{Session.Client}}
{CodeReplacement:clients:{Session.Client}#2}
If the table or code is unavailable, the lookup token remains unchanged. See Code Replacements for table setup and delimiter-based replacements.
Capture Date and Time
These values describe the selected item’s best available capture date. Padded month and day variables are useful when filenames must sort chronologically.
| Variable | Description | Example |
|---|---|---|
{Year} | Four-digit year | 2025 |
{YearShort} | Two-digit year | 25 |
{MonthNumber} | Month without padding | 4 |
{MonthPadded} | Two-digit month | 04 |
{MonthShort} | Abbreviated month name | Apr |
{MonthName} | Full month name | April |
{MonthNameAP} | AP-style abbreviated month | Apr. |
{Day} | Day without padding | 5 |
{DayPadded} | Two-digit day | 05 |
{FullDate} | Date as YYYY-MM-DD | 2025-04-05 |
{DateSort} | Date as YYYYMMDD | 20250405 |
{DateSortDashed} | Date as YYYY-MM-DD | 2025-04-05 |
{DateMilitary} | Military-style date | 05APR25 |
{Hour} | Two-digit 24-hour clock hour | 14 |
{Hour12} | 12-hour clock hour without padding | 2 |
{Hour12Padded} | Two-digit 12-hour clock hour | 02 |
{Hour24} | Two-digit 24-hour clock hour | 14 |
{Minute} | Two-digit minute | 30 |
{Second} | Two-digit second | 45 |
{SubSecond} | EXIF sub-second value, preserving its stored precision | 123 |
{AMPM} | AM or PM | PM |
{Time} | Time as HH-MM-SS | 14-30-45 |
{TimeSort} | Time as HHMMSS | 143045 |
{TimeSortDashed} | Time as HH-MM-SS | 14-30-45 |
{TimeSortLong} | Time as HHMMSSmmm, using milliseconds available in the capture date | 143045000 |
{DateTime} | Date and time as YYYY-MM-DD_HH-MM-SS | 2025-04-05_14-30-45 |
{DayOfWeek} | Full weekday name | Saturday |
{DayOfWeekShort} | Abbreviated weekday name | Sat |
{WeekOfYear} | Two-digit week of year | 14 |
{Quarter} | Calendar quarter | Q2 |
Current Date and Time
These variables use the date and time when PhotoCuller renders the template, not the item’s capture date.
| Variable | Description | Example |
|---|---|---|
{Today} | Current date as YYYY-MM-DD | 2026-01-02 |
{TodaySort} | Current date as YYYYMMDD | 20260102 |
{TodayYear} | Current four-digit year | 2026 |
{TodayYearShort} | Current two-digit year | 26 |
{TodayMonth} | Current month without padding | 1 |
{TodayMonthPadded} | Current two-digit month | 01 |
{TodayMonthName} | Current full month name | January |
{TodayMonthShort} | Current abbreviated month | Jan |
{TodayMonthNameAP} | Current AP-style month | Jan. |
{TodayDay} | Current day without padding | 2 |
{TodayDayPadded} | Current two-digit day | 02 |
{TodayDayOfWeek} | Current full weekday name | Friday |
{TodayDayOfWeekShort} | Current abbreviated weekday | Fri |
{TodayMilitary} | Current military-style date | 02JAN26 |
{Yesterday} | Previous date as YYYY-MM-DD | 2026-01-01 |
{Tomorrow} | Next date as YYYY-MM-DD | 2026-01-03 |
{Now} | Current time as HH-MM-SS | 03-04-05 |
{NowTimeSort} | Current time as HHMMSS | 030405 |
{NowHour24} | Current two-digit 24-hour clock hour | 03 |
{NowHour12} | Current 12-hour clock hour without padding | 3 |
{NowHour12Padded} | Current two-digit 12-hour clock hour | 03 |
{NowMinute} | Current two-digit minute | 04 |
{NowSecond} | Current two-digit second | 05 |
{NowAMPM} | Current AM or PM | AM |
{NowTimeSortLong} | Current time as HHMMSSmmm | 030405123 |
{NowSubSecond} | Current three-digit millisecond value | 123 |
File and Item Properties
| Variable | Description | Example |
|---|---|---|
{FileName} | Original filename without extension | DSC_0001 |
{FileExtension} | Selected file’s extension | RAF |
{FileType} | RAW for RAW files, otherwise the extension | RAW |
{FileSize} | Total size of the item’s files in readable units | 27MB |
{FileSizeBytes} | Total size of the item’s files in bytes | 28311552 |
{ModifiedDate} | File modification date as YYYY-MM-DD | 2025-04-06 |
{ModifiedDateSort} | File modification date as YYYYMMDD | 20250406 |
{ModifiedTime} | File modification time as HH-MM-SS | 07-08-09 |
{ModifiedTimeSort} | File modification time as HHMMSS | 070809 |
{ModifiedDateTime} | File modification date and time | 2025-04-06_07-08-09 |
{Width} | Image width in pixels | 6240 |
{Height} | Image height in pixels | 4160 |
{PixelCount} | Width multiplied by height | 25958400 |
{MaxDimension} | Longer image dimension in pixels | 6240 |
{Megapixels} | Pixel count in megapixels | 26.0 |
{AspectRatio} | Reduced aspect ratio (: in display, x in paths) | 3x2 |
{Rating} | Star rating; rejected items use -1 | 3 |
{IsRejected} | 1 when rejected, otherwise 0 | 0 |
{ColorLabel} | XMP color-label name | Red |
{IsFlagged} | 1 when flagged, otherwise 0 | 1 |
{IsFavorite} | 1 when favorited, otherwise 0 | 0 |
{IsLocked} | 1 when the selected file is locked | 1 |
{FrameNumber} | Trailing digits from the original filename | 0001 |
{MediaType} | Photo or Video | Photo |
Folder and Path
These path variables are available for files opened from folders or mounted drives.
| Variable | Description | Example |
|---|---|---|
{Folder} | Containing folder name | 100FUJI |
{FolderNum} | Leading digits from the containing folder | 100 |
{FolderPath} | Full containing folder path | /Volumes/SD/DCIM/100FUJI |
{FilePath} | Full original file path | /Volumes/SD/DCIM/100FUJI/DSC_0001.RAF |
{ParentFolder} | Parent of the containing folder | DCIM |
Camera and Capture Settings
| Variable | Description | Example |
|---|---|---|
{CameraMake} | Camera manufacturer | Fujifilm |
{CameraModel} | Camera model | X-T5 |
{LensModel} | Lens model | XF 33mm F1.4 |
{LensMake} | Lens manufacturer | Fujifilm |
{Firmware} | EXIF software or firmware value | Firmware 1.20 |
{SerialNumber} | Camera serial number | 12345678 |
{ISO} | ISO speed | 400 |
{Aperture} | F-number | f2.8 |
{ShutterSpeed} | Exposure time (/ in display, - in paths) | 1-250 |
{FocalLength} | Focal length | 33mm |
{FocalLength35} | 35mm-equivalent focal length | 50mm |
{ExposureComp} | Exposure compensation | -0.7 |
{MeteringMode} | Metering mode | Spot |
{ExposureProgram} | Exposure program | Aperture Priority |
{Flash} | Flash status | Fired |
{WhiteBalance} | White-balance mode | Auto |
{ColorSpace} | Color space | sRGB |
{Orientation} | EXIF orientation | Normal |
{Software} | EXIF software value | Adobe Lightroom |
{ApexAperture} | APEX aperture value | 3 |
{ApexTime} | APEX time value | 8 |
{ExposureValue} | Exposure value adjusted for ISO | 11.9 |
{ExposureValue100} | Exposure value at ISO 100 | 10.9 |
{UserComment} | EXIF user comment | Kodak Portra 400 |
Video Details
Use these variables to name or describe clips. Examples below show filename output.
| Variable | Meaning | Example |
|---|---|---|
{VideoDuration} | Duration in hours-minutes-seconds | 00-01-23 |
{VideoDurationSeconds} | Duration in seconds | 83.4 |
{VideoFrameRate} | Frames per second | 29.97 |
{VideoCodec} | Video compression format | HEVC |
{VideoBitRate} | Estimated data rate | 100.0Mbps |
{VideoHasAudio} | 1 if an audio track is present, 0 if absent | 1 |
{VideoWhiteBalance} | Recorded white-balance temperature | 5500K |
{VideoShutterAngle} | Recorded shutter angle | 180deg |
Available values depend on the clip and source. Use a fallback such as {VideoFrameRate;Unknown} when a value may be missing. For capture date, camera, and location, use the existing date, camera, and GPS variables above and below. A Live Photo is still Photo for {MediaType}, even though it includes a video.
GPS and Location
GPS values come from EXIF. The Taken values come from the photo’s IPTC location fields.
| Variable | Description | Example |
|---|---|---|
{GPSLatitude} | Latitude with six decimal places | 48.856600 |
{GPSLongitude} | Longitude with six decimal places | 2.352200 |
{GPSAltitude} | Altitude in whole metres | 35m |
{GPSCoordinates} | Latitude and longitude | 48.856600,2.352200 |
{HasGPS} | 1 when latitude and longitude exist, otherwise 0 | 1 |
{TakenLocation} | Sublocation, city, state, and country | Fort Point, San Francisco, California, United States |
{TakenCity} | IPTC city | San Francisco |
{TakenState} | IPTC state or province | California |
{TakenCountry} | IPTC country | United States |
{TakenCountryCode} | IPTC country code | US |
Image Numbers
| Variable | Description | Example |
|---|---|---|
{ImageNumber} | Image number shown in the grid | 42 |
Use {ImageNumber} in rename templates, such as Photo_{ImageNumber}, to match filenames to the image numbers shown in the grid. Unlike {Sequence}, which generates an incrementing number for the current run or scope, {ImageNumber} uses the grid’s image number.
Sequence Variables
| Variable | Description | Example |
|---|---|---|
{Sequence} | Incrementing item number for the current run or scope | 0001 |
{IngestSequence} | Incrementing source/card number during ingest | 0001 |
{Total} | Total item count in the current run or ingest scope | 150 |
The Sequence starts at value controls both the first number and zero padding:
| Sequence starts at | Example output |
|---|---|
1 | 1, 2, 3 |
01 | 01, 02, 03 |
001 | 001, 002, 003 |
0001 | 0001, 0002, 0003 |
During a multi-source ingest, Sequence Scope controls whether {Sequence} and {Total} restart for each source or continue across the complete ingest. {IngestSequence} is unaffected by that setting: it advances once per selected source and remains the same for every item from that source.
Session Variables
Session variables are values you enter once for a job and reuse across all items. PhotoCuller detects the session variables used by a template and prompts for their values before running it.
| Variable | Description | Example |
|---|---|---|
{Session.ProjectName} | Project name | Wedding2025 |
{Session.Photographer} | Photographer name | JohnDoe |
{Session.Location} | Job location | Paris |
{Session.Client} | Client name | SmithFamily |
{Session.Event} | Event type | Birthday |
{Session.FilmStock} | Film stock | Kodak Portra 400 |
{Session.FilmISO} | Film ISO | 400 |
{Session.Custom1} | Custom field 1 | MyValue |
{Session.Custom2} | Custom field 2 | MyValue |
{Session.Custom3} | Custom field 3 | MyValue |
You can also type a custom alphanumeric key such as {Session.Team}. PhotoCuller uses the key itself as the field label.
Session Variable Presets
Use the Presets menu in a Session Variables section to reuse values across jobs:
- Save Current as Preset… saves the currently filled non-empty values
- Update Current Preset overwrites the active preset
- Clear Values empties the current fields
- Manage Presets… lets you rename or delete presets and inspect their values
Applying a preset replaces the current session values with the preset’s saved values.
IPTC Date and Time
IPTC date-part variables use IPTC Date Created when present, falling back to the item’s best available capture date. {IPTC.DateCreated} itself is only populated when IPTC Date Created exists.
| Variable | Description | Example |
|---|---|---|
{IPTC.DateCreated} | IPTC date created as YYYY-MM-DD | 2025-06-15 |
{IPTC.Year} | Four-digit year | 2025 |
{IPTC.YearShort} | Two-digit year | 25 |
{IPTC.Month} | Month without padding | 6 |
{IPTC.MonthPadded} | Two-digit month | 06 |
{IPTC.MonthName} | Full month name | June |
{IPTC.MonthShort} | Abbreviated month | Jun |
{IPTC.MonthNameAP} | AP-style month | Jun. |
{IPTC.Day} | Day without padding | 15 |
{IPTC.DayPadded} | Two-digit day | 15 |
{IPTC.DayOfWeek} | Full weekday name | Sunday |
{IPTC.DayOfWeekShort} | Abbreviated weekday | Sun |
{IPTC.Time} | Time as HH-MM-SS | 14-30-45 |
{IPTC.TimeSort} | Time as HHMMSS | 143045 |
{IPTC.DateSort} | Date as YYYYMMDD | 20250615 |
{IPTC.Hour12} | 12-hour clock hour without padding | 2 |
{IPTC.Hour12Padded} | Two-digit 12-hour clock hour | 02 |
{IPTC.Hour24} | Two-digit 24-hour clock hour | 14 |
{IPTC.Minute} | Two-digit minute | 30 |
{IPTC.Second} | Two-digit second | 45 |
{IPTC.AMPM} | AM or PM | PM |
{IPTC.WireDate} | News-wire style date | Sunday, Jun. 15, 2025 |
IPTC Content and Classification
Lists of keywords, codes, and names appear as text separated by commas.
| Variable | Description | Example |
|---|---|---|
{IPTC.Title} | Title | Golden Gate at Dusk |
{IPTC.Headline} | Headline | San Francisco Landmarks |
{IPTC.Caption} | Caption or description | The Golden Gate Bridge at sunset. |
{IPTC.Keywords} | Keywords | landscape, bridge, sunset |
{IPTC.AltText} | Accessibility alt text | A bridge at dusk |
{IPTC.ExtendedDescription} | Accessibility extended description | Detailed description text |
{IPTC.Genres} | Genre controlled-vocabulary names | Photojournalism, Fine Art |
{IPTC.IntellectualGenre} | Intellectual genre | Feature Photo |
{IPTC.Category} | Legacy category | sp |
{IPTC.SceneCodes} | IPTC scene codes | 011800, 011900 |
{IPTC.SubjectCodes} | IPTC subject codes | 15008000 |
{IPTC.Instructions} | Instructions | Embargo until 2025-01-01 |
{IPTC.JobId} | Job ID | JOB-2025-001 |
{IPTC.DescriptionWriter} | Caption writer | John Editor |
IPTC Creator and Contact
{IPTC.Creator} uses the first creator name when the item contains more than one.
| Variable | Description | Example |
|---|---|---|
{IPTC.Creator} | First creator name | Jane Smith |
{IPTC.CreatorJobTitle} | Creator job title | Photographer |
{IPTC.Copyright} | Copyright notice | © 2025 Jane Smith |
{IPTC.ContactEmail} | Work email | [email protected] |
{IPTC.ContactPhone} | Work phone | +1 555 0100 |
{IPTC.ContactWebsite} | Website | https://example.com |
{IPTC.ContactAddress} | Address | 123 Main St |
{IPTC.ContactCity} | Contact city | San Francisco |
{IPTC.ContactCountry} | Contact country | USA |
{IPTC.ContactPostalCode} | Postal code | 94105 |
{IPTC.ContactRegion} | State or region | CA |
{IPTC.CreditLine} | Credit line | Photo by Jane Smith / Agency |
{IPTC.Source} | Source | Reuters |
{IPTC.UsageTerms} | Rights usage terms | Editorial use only |
IPTC Locations, People, and Events
| Variable | Description | Example |
|---|---|---|
{IPTC.Sublocation} | Sublocation | Fort Point |
{IPTC.City} | City | San Francisco |
{IPTC.ProvinceState} | State or province | California |
{IPTC.Country} | Country | United States |
{IPTC.CountryCode} | Country code | US |
{IPTC.LocationsCreated} | Formatted locations created | Fort Point, San Francisco, CA, US |
{IPTC.LocationsShown} | Formatted locations shown | Golden Gate, San Francisco, CA, US |
{IPTC.PersonNames} | Person names | Alice, Bob |
{IPTC.PersonsWithDetails} | Names from detailed person records | Alice Johnson, Bob Smith |
{IPTC.OrganizationNames} | Organization names | ACME Corp, Press Agency |
{IPTC.OrganizationCodes} | Organization codes | ACME, PA |
{IPTC.EventName} | Event name | San Francisco Marathon |
{IPTC.EventIds} | Event IDs | EVT-001, EVT-002 |
IPTC Rights, Releases, and Supply Chain
| Variable | Description | Example |
|---|---|---|
{IPTC.WebStatementOfRights} | Web statement of rights URL | https://example.com/rights |
{IPTC.DataMining} | Data-mining permission status | Prohibited |
{IPTC.CopyrightOwners} | Copyright-owner names | Jane Smith, Agency Inc. |
{IPTC.Licensors} | Licensor names | Getty Images, Shutterstock |
{IPTC.ImageSuppliers} | Image-supplier names | Reuters, AP Images |
{IPTC.ImageSupplierIds} | Image-supplier identifiers | reuters-id, ap-id |
{IPTC.ImageSupplierImageId} | Supplier’s image ID | RTR2025-001234 |
{IPTC.ImageCreators} | Image-creator names | Jane Smith, John Doe |
{IPTC.ImageCreatorIds} | Image-creator identifiers | creator-1, creator-2 |
{IPTC.ImageCreatorImageId} | Creator’s image ID | CREATOR-IMG-001 |
{IPTC.Contributors} | Contributor names | Alice Editor, Bob Retoucher |
{IPTC.OtherConstraints} | Other constraints | Not for commercial use |
{IPTC.DigitalImageGUID} | Digital image GUID | 550e8400-e29b-41d4-a716-446655440000 |
{IPTC.ModelReleaseStatus} | Model release status | Unlimited |
{IPTC.ModelReleaseIds} | Model release IDs | MR-001, MR-002 |
{IPTC.PropertyReleaseStatus} | Property release status | Not Applicable |
{IPTC.PropertyReleaseIds} | Property release IDs | PR-001 |
{IPTC.ModelAges} | Model ages | 25, 30 |
{IPTC.MinorModelAgeDisclosure} | Minor-model age disclosure | 25 or Over |
{IPTC.AdditionalModelInfo} | Additional model information | Model info |
IPTC Products, Artwork, Registry, and Dimensions
| Variable | Description | Example |
|---|---|---|
{IPTC.Products} | Product names | Acme Widget, Widget Pro |
{IPTC.ArtworkOrObjects} | Artwork or object titles | Starry Night, Mona Lisa |
{IPTC.AboutCvTerms} | About controlled-vocabulary names | Architecture, Travel |
{IPTC.RegistryEntries} | Registry item IDs | REG-001, REG-002 |
{IPTC.MaxAvailableWidth} | Maximum available width | 6240 |
{IPTC.MaxAvailableHeight} | Maximum available height | 4160 |
IPTC AI and Provenance
| Variable | Description | Example |
|---|---|---|
{IPTC.DigitalSourceType} | Digital source type | Digital Capture |
{IPTC.AISystemUsed} | AI system used | Stable Diffusion |
{IPTC.AISystemVersionUsed} | AI system version | 2.1 |
{IPTC.AIPromptWriterName} | AI prompt writer | Jane Smith |
{IPTC.AIPromptInformation} | AI prompt information | A bridge at golden hour |