ImageOptim is a GUI for lossless image optimization tools: Zopfli, PNGOUT, OxiPNG, AdvPNG, PNGCrush, JPEGOptim, Jpegtran, Guetzli, Gifsicle, SVGO, svgcleaner and MozJPEG.
This project keeps the native AppKit/XIB workflow and currently targets macOS 13+ on Apple Silicon only (arm64). Intel Macs and older macOS releases are no longer supported by this build configuration.
Prebuilt Apple Silicon builds are published on GitHub Releases:
Each build is for macOS 13+ on Apple Silicon (arm64). If the latest release does not include an app archive yet, build the app locally with the steps below.
The refreshed main window keeps the table-based optimization queue, with:
- Native toolbar actions for Add Files, Stop, Retry Failed, Optimize Again, Clear Done, and Settings.
- Queue totals for Total, Done, Running, Remaining, and Failed, plus determinate progress.
- Queue filters for All, Running, Done, and Failed.
- Task-state labels such as Queued, OxiPng, JpegOptim, Optimized, No change, and Failed.
- A drag-and-drop empty state, a clearer task table, and a selection details strip.
Requires:
- macOS 13+ on an Apple Silicon Mac.
- Xcode with a macOS 13 SDK or newer.
- Rust installed via rustup (not Homebrew).
- Node at
/opt/homebrew/bin/nodefor SVGO support.
git clone --recursive [email protected]:a-j-n/ImageOptimizer.git
cd ImageOptimizerTo get started, open imageoptim/ImageOptim.xcodeproj. It will automatically download and build all subprojects when run in Xcode.
To build the Release app from the command line:
xcodebuild \
-project imageoptim/ImageOptim.xcodeproj \
-scheme ImageOptim \
-configuration Release \
ARCHS=arm64 \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGNING_ALLOWED=NO \
buildRun the release verification script before shipping a build:
scripts/verify-releaseIt lints changed plist/strings files, validates ImageOptim.xib, builds Release for arm64, and checks the final .app plus bundled helpers with lipo -archs.
In case of build errors, these sometimes help:
git submodule update --initcd gifsicle # or pngquant
make clean
makeSome helper projects generate local build artifacts inside submodules. The repository ignores those files so normal helper builds do not dirty the main working tree.