0.3.0 - 2026-07-06
Release Notes
The optimization engine (PROJ-002). optimize now looks at the image and picks
the best output format for you — the "local f_auto" — and explains why. Built
on a new shared image-analysis layer. Zero new default dependencies; the default
build stays pure-Rust / zero-system-deps.
Added
optimizeauto-decides the output format (the "localf_auto"). With no
--format, it analyzes the image, shortlists up to three candidate formats,
drives the existing SSIMULACRA2 perceptual search (or the--max-sizebyte
budget) across them, and ships the smallest artifact that beats the source —
never a larger file (SPEC-048).optimize --profile <web|docs|preserve>selects the bias:web(default)
auto-picks the format;docswidens the lossless/crisp-text bias;preserve
keeps the input's format (the previous behavior) (SPEC-048).optimize --explain/--explain=jsonprint an auditable trace of the
decision — detected features, class, every candidate tried
(format/quality/bytes/met-target), the winner, and the savings — human-readable
to stderr or JSON to stdout (schemacrustyimg.optimize.explain/v1) (SPEC-049).- A new internal image-analysis layer (
src/analysis/): a computed-once
Analysiscontext (histogram, entropy, edge density, alpha coverage, capped
unique-color count, dominant color) plus deterministic, no-ML classification
(photograph / graphic-logo / icon / document / ui-screenshot) that biases the
format decision (SPEC-046, SPEC-047).
Changed
optimize's default now auto-decides the output format instead of
preserving the input format — e.g. a photographic PNG may be shipped as a
smaller JPEG or WebP. Pass--profile preserve(or pin--format/-o <ext>) for the previous format-preserving behavior. The chosen format and
savings are always reported on stderr (silence with--quiet). Breaking
for scripts that relied onoptimizekeeping the input format.
Notes
- AVIF appears as an auto-decision candidate only in
--max-size(byte-budget)
mode and only when built with--features avif— it has no decoder, so it
cannot be perceptually scored (DEC-020). - Indexed/lossy-PNG output is still deferred (it needs a permissive quantizer);
few-color graphics use lossless WebP in the interim.
Install crustyimg 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jysf/crustyimg/releases/download/v0.3.0/crustyimg-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jysf/crustyimg/releases/download/v0.3.0/crustyimg-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install jysf/tap/crustyimgDownload crustyimg 0.3.0
| File | Platform | Checksum |
|---|---|---|
| crustyimg-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| crustyimg-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| crustyimg-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| crustyimg-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |