Skip to content

0.3.0 - 2026-07-06

Choose a tag to compare

@github-actions github-actions released this 07 Jul 00:54

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

  • optimize auto-decides the output format (the "local f_auto"). With no
    --format, it analyzes the image, shortlists up to three candidate formats,
    drives the existing SSIMULACRA2 perceptual search (or the --max-size byte
    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; docs widens the lossless/crisp-text bias; preserve
    keeps the input's format (the previous behavior) (SPEC-048).
  • optimize --explain / --explain=json print 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 (schema crustyimg.optimize.explain/v1) (SPEC-049).
  • A new internal image-analysis layer (src/analysis/): a computed-once
    Analysis context (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 on optimize keeping 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 | sh

Install 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/crustyimg

Download 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