ArcSync

The index page of an ArcSync disc: the title, a count of 11 photos, links to Albums and By date, and a grid of photo thumbnails
The gallery page on the disc
macOS 12+1.0.0MITHomebrew

A small command-line tool that archives a macOS Photos library, or a plain folder of photos, to a hybrid CD/DVD/Blu-ray .iso: the real files filed by capture date, plus a static HTML gallery you can browse straight off the disc.

Win32 asm photo-CD tools, 1998; this is that program after the API grew up. No GUI, a tiny binary, a man page, and a Homebrew formula. It runs on macOS 12 or later and only uses what ships with the system, plus /usr/bin/hdiutil to write the image.

What it is

It’s the 2026 terminal version of those late-90s “burn my pictures to a CD with a browser index” programs.

Optical media is still a useful write-once archive: it’s offline, and it stays readable for decades if the filesystem is boring (ISO 9660 + Joliet + UDF + HFS+). Photos.app hides the originals inside a package and a Core Data database. ArcSync gives you:

  1. The real files, named sanely and filed by capture date.
  2. A human-browsable gallery that still looks like your albums and folders.
  3. An image you can burn with Disk Utility, hdiutil burn or Windows Image Burner.

That’s all it does.

How it works

  1. Pick a source. By default it reads your Photos library; --dir uses a plain folder (a NAS, a RAID, a camera dump) instead.
  2. Dry-run first. arcsync -n shows what it found, how big the payload is and how many discs it needs, without writing anything.
  3. Stage. Originals are copied byte-for-byte into media/YYYY/MM/DD/, with thumbnails, album pages, a by-date page, a manifest.tsv and a missing.txt.
  4. Write the image. hdiutil makehybrid turns the staging folder into one hybrid ISO. If it won’t fit the media, --split makes NAME-1.iso, NAME-2.iso, … and each disc gets its own index.html.
  5. Burn it, now with --burn (a drive is needed) or later with Disk Utility.

Media sizes

The budgets already allow for the thumbnails, the HTML and the filesystem overhead:

--media Budget For
cd 680 MiB 80-min CD-R
dvd 4300 MiB DVD-5 / DVD-R (the default)
dvd-dl 7900 MiB DVD-9
bd 23000 MiB BD-R 25 GB
none no limit one ISO of whatever size

Without --split, a payload that’s too big stops with exit code 5 and tells you how many discs you’d need. A single file bigger than the disc is always an error.

iCloud photos

ArcSync only copies files that are already on this Mac. It doesn’t download anything from iCloud. --cloud decides what happens to photos that are only in the cloud:

--cloud What happens
fail Any cloud-only original stops the run (exit 8) before anything is staged.
skip Local originals only; the rest are listed in missing.txt.
derivative Falls back to the local previews, tagged quality=derivative. Fine for a slideshow, not an archive.

The 1.0.0 release defaults to skip; the current source defaults to fail. Until the next release, pass --cloud fail yourself if you want the safe behaviour. For a family library on “Optimize Mac Storage”, turn on Download Originals to this Mac in Photos, leave the Mac awake on power overnight, dry-run again in the morning, then burn. The man page has the full recipe.

What’s on the disc

index.html          landing page
open-me.html        alias of index.html
autorun.inf         Windows hint
README.txt          how to open this disc
css/style.css
thumbs/             generated JPEG thumbnails
albums/             album / folder pages
media/YYYY/MM/DD/   real files (byte-for-byte)
by-date/index.html
missing.txt
manifest.tsv

Screenshots

A test run on a folder of 11 of my stripboard build photos, in two subfolders.

The By date page: every photo with its path under media/2026/10/02 and media/2026/10/03
By date: the files under media/YYYY/MM/DD/

Every disc also gets a by-date page. The thumbnails link straight to the original files, which sit in plain dated folders, so you can get at them without ArcSync or Photos.

Status and limits

  • 1.0.0, released September 2026. macOS 12 or later; older Photos library versions are best effort.
  • No iCloud downloads inside the tool and no PhotoKit. Originals are copied byte-for-byte.
  • Full Disk Access. Terminal (or iTerm) may need it to read ~/Pictures/Photos Library.photoslibrary; ArcSync can’t grant that for you. If copying the database fails on a lock, close Photos.
  • Small on purpose. The stripped binary has to stay under 233 KiB (make check-size); 1.0.0 ships at about 72 KiB.
  • An experimental Windows (MinGW) port is in the source, for --dir only. It isn’t in a release.

Download and install

With Homebrew:

brew tap SomerledDesign/tap
brew install arcsync

Or build it from the 1.0.0 source (it’s a handful of C files):

make
make install          # PREFIX=/usr/local by default

The release tarball, v1.0.0.tar.gz, has SHA-256 b9d9fc2e87bcf5c2bb954a75281d534eedd89531d3a988093e7b6a1744439f5f, the same as in the Homebrew formula. Then man arcsync.

A first run:

arcsync -n --cloud fail                                   # what's actually on this Mac?
arcsync --dir ~/Pictures/vacation --media dvd --split --out ~/Desktop/vac.iso
arcsync --dir /Volumes/NAS/Masters --media none --out ~/Desktop/masters.iso

Feedback

If you burn a disc with it, I’d like to hear how it went, especially with big or old Photos libraries. Please open an issue on GitHub.

License

ArcSync is under the MIT licence. See the LICENSE. Copyright © 2026 Kevin Murphy.