scan¶
Read metadata and hashes for all raw media. Read-only.
scan walks every directory listed in [scan] include, runs exiftool once over all the files, classifies each file into a device profile, computes a fast content hash, and writes the result to .ingest/manifest.json. It never modifies your media files.
Options¶
--rootpoints at a specific project directory. By default, scan finds the project by walking up from the current directory to the nearestingest.toml.
Example¶
Scanning 1843 files in /Volumes/T7/PROJECTS/2026-03_my-trip ...
Scan summary
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━┓
┃ Device ┃ Files ┃
┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━┩
│ dji-action6 │ 210 │
│ dji-mic │ 64 │
│ dji-osmo-sidecar │ 180 │
│ dji-pocket3 │ 402 │
│ iphone-photo │ 712 │
│ iphone-video │ 251 │
│ photo-generic │ 18 │
│ unknown │ 6 │
│ total │ 1843 │
└───────────────────┴───────┘
Manifest: /Volumes/T7/PROJECTS/2026-03_my-trip/.ingest/manifest.json
6 files were not recognized; 'media-ingest plan' will list them.
What it does¶
For each file, scan records:
- the path relative to the project root,
- file size and a fast content hash,
- the detected device, human label, destination group, and media kind,
- the authoritative capture timestamp and how it should be interpreted (UTC, local wall time, or timezone-aware),
- which metadata field the timestamp came from, and a confidence level,
- the identifier carried into the new filename, and clip duration when available.
Device detection¶
Every file is classified from its exiftool tags. media-ingest recognizes these profiles, verified against real device files:
- DJI Osmo Pocket 3 and Action 6 video: filename is local wall time, QuickTime metadata is UTC.
- DJI Mic 3 internal WAV:
DateTimeOriginaland filename are local time, because the mic syncs its clock to the camera when paired. - DJI Osmo audio backup sidecar WAV or AAC: only the filename carries a timestamp, in local time.
- iPhone video MOV:
CreationDateis timezone-aware and authoritative. - iPhone photo HEIC or JPG:
DateTimeOriginalis local wall time, withOffsetTimeOriginalsupplying the UTC offset on recent iOS. - Generic camera photos and screenshots:
DateTimeOriginalin local time. - GoPro HERO 10 through 19 video: metadata is UTC.
Anything media-ingest cannot confidently identify is classified as unknown and will be left in place, never guessed at. See device knowledge for the timestamp facts behind each profile.
The fast hash¶
scan computes a cheap near-identity hash over the file size plus its head and tail chunks, rather than reading every byte. This is fast enough to run over a full card and is what apply re-checks before moving a file. When plan later suspects two files are duplicates, it confirms them with a full-file hash before excluding either.
Requirements¶
scan is the only step that shells out to exiftool, so exiftool must be on your PATH. Everything after scan works from manifest.json alone.
Next¶
Once the manifest exists, run plan to compute the renames and build the report.