Drop a folder of images, pick a format and quality, hit Start. ImageCRC fans the work out across every CPU core, shows a smooth progress overlay, and opens the output folder in Finder when it's done. Everything runs locally — no uploads, no telemetry.
- Input: JPG · JPEG · PNG · SVG · WebP · AVIF · HEIC
- Output: JPG · PNG · WebP · AVIF
- Quality slider (0–100%) with format-aware semantics — JPEG/AVIF/WebP scale linearly, PNG goes lossless at 100% and is quantized via
pngquantbelow - Optional resize (Fit / Fill with centered crop) before encoding; never upscales unless asked
- Parallel conversion bounded by
activeProcessorCount, cancellable mid-run - Light / Dark / System appearance toggle with animated transition
- macOS 14 Sonoma or newer (AVIF encoding requires 14+).
- Xcode 15.3+ or Command Line Tools for Xcode 15.3+ — provides the Swift 5.10 toolchain. Verify with
swift --version. If missing:xcode-select --install. - Homebrew — used to install
pngquantbelow. - pngquant —
brew install pngquant. Required for PNG output at quality < 100 (the lossless ImageIO bytes are piped throughpngquantfor indexed-color quantization).Scripts/make-app.shlooks it up viabrew --prefix pngquantand bundles the binary intoContents/Resources/bin/of the.app. Without it,swift buildstill succeeds, butmake-app.shprints a warning and PNG conversion below 100% quality will fail at runtime.
SwiftPM dependencies (libwebp via SDWebImage/libwebp-Xcode) resolve automatically on the first swift build — no manual install needed.
- XcodeGen —
brew install xcodegen. Only needed if you want to regenerateImageCRC.xcodeprojfromproject.yml(xcodegen generate). The SwiftPM build (make-app.sh) does not use Xcode.
All other tools used by the build/packaging scripts (codesign, sips, iconutil, hdiutil, /usr/libexec/PlistBuddy) ship with macOS / the Xcode CLI tools.
./Scripts/make-app.sh
open ./ImageCRC.appThe script runs swift build -c release, assembles a .app bundle with an ad-hoc signature, and leaves it at ./ImageCRC.app. Set CONFIG=debug for a debug build.
./Scripts/make-dmg.sh # → ImageCRC-<version>.dmg
./Scripts/make-icon.sh # regenerate Resources/AppIcon.icns from the 1024×1024 master- Swift + SwiftUI — single-window app,
@Observablestate, no AppKit shell. - ImageIO for JPG / PNG / HEIC / AVIF · libwebp (via
SDWebImage/libwebp-Xcode) for WebP · NSImage for SVG rasterization · pngquant subprocess for PNG lossy. TaskGroup-based parallel pipeline bounded by CPU count, cooperative cancellation between decode → resize → encode → write.- MVVM split —
ConversionViewModelis the only bridge between the UI and anAsyncStream<ConversionEvent>driven byImageConverter.
See CLAUDE.md for the full architecture map.
- Original design — quality semantics, concurrency model
- Resize feature
- Dark theme
pngquant is bundled into the .app and is licensed under GPL v3, so any redistributed binary is a combined GPL v3 work — and therefore not eligible for the Mac App Store.