Archive Pilot
Archive an edit with every file it uses, each copy checked byte for byte.
Working Available to download. Below, a sample run from the terminal.
The problem
Handing off or archiving an edit is where files go missing. You find out months later, when the project opens full of red frames.
What I built
A command line tool that copies everything the project uses into one folder, and calls the archive complete only when every file is there and matches its source.
- Lists what is missing before copying
- Checks every copy against its source
- Never changes the originals
Features and limits
Built and tested
- Reads the media a project references: Final Cut Pro 7 / Premiere Pro XML exports, FCPXML and plain lists; Premiere project files experimentally.
- Plan first: lists found and missing files and the total size, without writing anything.
- Collect copies the project and every file it finds, then checks each copy's SHA-256 against its source.
- COMPLETE only when nothing is missing and every hash matches; otherwise INCOMPLETE, with the missing files named.
- Keeps folder structure below the common root, so files with the same name never collide.
- Writes archive_manifest.json and relink_map.csv; verify re-checks an archive at any time.
- Never modifies sources and never overwrites an existing archive. Dry run by default.
Limits
- After Effects .aep files are binary and are not read; use After Effects' Collect Files.
- Tested on synthetic project files only, not yet on real exports from Premiere Pro or Final Cut Pro. Premiere project reading is experimental.
- Tested on Linux only so far; macOS and Windows are not yet tested.
- It does not rewrite paths inside the project; relink from relink_map.csv in your editor.
Planned
Hash verification, resumable transfers, cross-platform paths and re-link validation.
How to use
- Export your sequence as XML (Premiere: File, Export, Final Cut Pro XML) or FCPXML, or list the files in a text file.
- python3 archive_pilot.py plan project.xml shows what is found and missing.
- python3 archive_pilot.py collect project.xml --out Archive --apply makes the archive.
- python3 archive_pilot.py verify Archive/archive_manifest.json re-checks it, now or years later.
How it works
- References are read from the project XML (pathurl, media-rep src), decoded from file URLs including Windows drive paths, and de-duplicated.
- Copies are streamed and hashed with SHA-256; the project file's own hash is recorded too.
- Archive layout mirrors folders below the common parent of all media.
- Python standard library only.
Tested versions & limits
- Pass Package: COMPLETE only when every file is found and hash-verified; sources untouched; no name collisions Linux, Python 3.13
- Pass Package: a missing file makes the archive INCOMPLETE Linux, Python 3.13
- Pass Package: verify catches a changed archive file Linux, Python 3.13
- Pass Package: dry run writes nothing; existing archive never overwritten Linux, Python 3.13
- Pass Package: reads FCPXML, plain lists, Premiere project XML, Windows file URLs (synthetic files) Linux, Python 3.13
- Pass Release: tests re-run from the unzipped archive, public scan clean Linux
Last verified 2026-10-31.
Works on the listed formats, tested with synthetic projects on Linux. Not yet tested: real Premiere Pro and Final Cut Pro exports, macOS, Windows.
Details
- Input
- An XML or FCPXML export, or a list of media files
- Output
- Portable package and completeness report
- Runs in
- Command line tool for macOS, Linux or Windows with Python 3.9+ (tested on Linux, Python 3.13). No other installs.
- Source
- Original, rebuilt from scratch