Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 19:55
· 5 commits to master since this release

Choose where the sheets go and what they are called, follow progress photo by photo, read huge film scans – and Intel Mac binaries are back. Shaped by user feedback.

New

Output folder and file name – --output-folder, --name

contact-sheet -o ~/Sheets -n wedding ~/Pictures/2026-10-17
# → ~/Sheets/wedding01.jpg, wedding02.jpg, … or ~/Sheets/wedding.pdf with --format pdf
  • -o, --output-folder DIR – any folder, created if needed (default: the contact-sheet subfolder, as before)
  • -n, --name NAME – base name of the files: NAME01.jpg, … NAME.pdf, NAME-01.pdf (default: contact)
  • Safe in folders full of photos: only names exactly as the program writes them count as its output. With -n IMG_, IMG_07.jpg is a sheet but IMG_0007.jpg is not – photos in the output folder are never overwritten or deleted, and earlier sheets there are never read as photos.

Progress per photo – --progress

Prints one line for every photo as it is processed, skipped ones included:

[12/340] 2026-10-17/IMG_0001.CR2

Handy for progress bars in scripts and programs that run contact-sheet.

Large film scans

TIFF and JPEG files over 512 MiB of pixels – e.g. high-resolution 16-bit film scans – used to be skipped with "Memory limit exceeded". They are now read. Such images are decoded one at a time and shrunk straight away, so a folder full of multi-GB scans does not run out of memory, while smaller files still load in parallel.

macOS (Intel) binaries are back

Prebuilt downloads for Intel Macs are available again (dropped in v0.4.0), including through cargo binstall.

Changed

Important

Exit status 2 when files were skipped. The run now ends with a summary such as Done: 118 photo(s) on 5 page(s), 2 file(s) skipped, and the exit status says how it went:

Exit status Meaning
0 Every photo is on the sheets
1 Error – no sheets were written
2 Sheets were written, but some files could not be read (each is listed on stderr)

Scripts that treat any non-zero status as failure will now notice skipped files.

  • JPEG sheets from an earlier run are no longer deleted before the run starts. After a successful run, only the surplus pages are removed (e.g. contact07.jpg when there are now six pages); the others have been overwritten.

Licences

Release archives now include THIRD-PARTY-LICENSES.txt with the licences of all libraries built into the program. Most are permissive (MIT, Apache-2.0, BSD, Zlib); rawler, which decodes the RAW files, is under the GNU LGPL 2.1 – the file explains where to get its source code and how to build contact-sheet with a modified version.

Install

cargo binstall contact-sheet   # prebuilt binary
cargo install contact-sheet    # build from crates.io (Rust 1.89+)

Or download an archive:

Platform Archive
macOS (Apple silicon) contact-sheet-v0.6.0-aarch64-apple-darwin.tar.gz
macOS (Intel) contact-sheet-v0.6.0-x86_64-apple-darwin.tar.gz
Linux (x86_64, static) contact-sheet-v0.6.0-x86_64-unknown-linux-musl.tar.gz
Linux (ARM64, static) contact-sheet-v0.6.0-aarch64-unknown-linux-musl.tar.gz
Windows (x86_64) contact-sheet-v0.6.0-x86_64-pc-windows-msvc.zip

Each archive has a .sha256 checksum next to it. On macOS, run xattr -d com.apple.quarantine contact-sheet before the first start (the binary is not signed).

Full Changelog: v0.5.0...v0.6.0