Skip to content

chore: release - #820

Open
github-actions[bot] wants to merge 2 commits into
masterfrom
release-plz-2026-10-16T19-03-46Z
Open

github-actions[bot] wants to merge 2 commits into
masterfrom
release-plz-2026-10-16T19-03-46Z

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

🤖 New release

  • gamut-bitstream: 0.2.4 -> 0.2.5 (✓ API compatible changes)
  • gamut-color: 3.0.0 -> 4.0.0 (⚠ API breaking changes)
  • gamut-dsp: 2.0.1 -> 2.0.2 (✓ API compatible changes)
  • gamut-av1: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • gamut-isobmff: 3.0.0 -> 4.0.0 (✓ API compatible changes)
  • gamut-ifd: 3.0.0 -> 3.1.0 (✓ API compatible changes)
  • gamut-exif: 2.0.0 -> 3.0.0 (⚠ API breaking changes)
  • gamut-icc: 2.0.0 -> 2.1.0 (✓ API compatible changes)
  • gamut-avif: 2.0.0 -> 3.0.0 (✓ API compatible changes)
  • gamut-cmm: 0.1.0 -> 0.2.0 (⚠ API breaking changes)
  • gamut-deflate: 0.1.1 -> 0.1.2 (✓ API compatible changes)
  • gamut-jxl-sys: 0.1.1 -> 0.1.2 (✓ API compatible changes)
  • gamut-jxl: 0.5.0 -> 0.5.1 (✓ API compatible changes)
  • gamut-dng: 1.0.0 -> 2.0.0
  • gamut-heic: 0.2.2 -> 0.3.0
  • gamut-jpeg: 0.1.0 -> 0.1.1
  • gamut-png: 0.1.0 -> 0.2.0
  • gamut-tiff: 1.0.0 -> 2.0.0
  • gamut-tonemap: 1.0.0 -> 1.1.0
  • gamut-vvc: 0.2.1 -> 0.2.2
  • gamut-riff: 0.1.3 -> 1.0.0
  • gamut-webp: 0.3.1 -> 0.4.0
  • gamut: 0.3.2 -> 0.4.0
  • gamut-cli: 0.3.1 -> 0.4.0
  • gamut-ffi: 0.1.3 -> 0.2.0
  • gamut-wasm: 0.1.3 -> 0.1.4
  • gamut-av2: 0.1.4 -> 0.1.5
  • gamut-metadata: 2.0.0 -> 2.0.1

⚠ gamut-color breaking changes

--- failure method_parameter_count_changed: pub method parameter count changed ---

Description:
A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.51.0/src/lints/method_parameter_count_changed.ron

Failed in:
  gamut_color::ycbcr::Yuv420::to_rgb8 takes 1 parameters in /tmp/.tmpT9KRAe/gamut-color/src/ycbcr.rs:278, but now takes 2 parameters in /tmp/.tmpKQH0lX/gamut/crates/gamut-color/src/ycbcr.rs:287
  gamut_color::Yuv420::to_rgb8 takes 1 parameters in /tmp/.tmpT9KRAe/gamut-color/src/ycbcr.rs:278, but now takes 2 parameters in /tmp/.tmpKQH0lX/gamut/crates/gamut-color/src/ycbcr.rs:287

⚠ gamut-exif breaking changes

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.51.0/src/lints/enum_missing.ron

Failed in:
  enum gamut_exif::tag::TagCount, previously in file /tmp/.tmpT9KRAe/gamut-exif/src/tag.rs:73
  enum gamut_exif::TagCount, previously in file /tmp/.tmpT9KRAe/gamut-exif/src/tag.rs:73

⚠ gamut-cmm breaking changes

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.51.0/src/lints/enum_variant_added.ron

Failed in:
  variant PipelineOptimization:PrecalculateF32 in /tmp/.tmpKQH0lX/gamut/crates/gamut-cmm/src/optimize.rs:138
  variant PipelineOptimization:PrecalculateFixed16 in /tmp/.tmpKQH0lX/gamut/crates/gamut-cmm/src/optimize.rs:152
  variant PipelineOptimization:PrecalculateF32 in /tmp/.tmpKQH0lX/gamut/crates/gamut-cmm/src/optimize.rs:138
  variant PipelineOptimization:PrecalculateFixed16 in /tmp/.tmpKQH0lX/gamut/crates/gamut-cmm/src/optimize.rs:152
Changelog

gamut-bitstream

0.2.5 - 2026-11-04

Other

  • (gamut-bitstream) own the T.81 Annex K.2 Huffman table builder shared with gamut-jpeg (#899)

gamut-color

4.0.0 - 2026-11-04

Added

  • (gamut-color, gamut-jpeg, gamut-webp, gamut-avif) [breaking] upsample chroma like each reference decoder by default (#1044)

gamut-dsp

2.0.2 - 2026-11-04

Other

  • (gamut-dsp) fixed-point integer IDCT for the JPEG decoder (#898)

gamut-av1

0.5.1 - 2026-11-04

Fixed

  • (gamut-av1) code every lossy block at the frame quantizer and loop-filter level (#1045)

Other

  • (gamut-av1) mutation survey of tile.rs shard 7/8, and its palette-mark survivors (#933)
  • (gamut-av1) mutation survey of tile.rs shard 6/8, and its survivors (#932)
  • (gamut-av1) mutation survey of tile.rs shard 5/8, and its survivors and TIMEOUT (#931)
  • (gamut-av1) mutation survey of tile.rs shard 4/8, and its survivors (#930)
  • (gamut-av1) mutation survey of tile.rs shard 3/8, and its survivors (#929)
  • (gamut-av1) mutation survey of tile.rs shard 2/8, and its four survivors (#928)
  • (gamut-av1) mutation survey of tile.rs shard 1/8, and its survivors and TIMEOUTs (#927)
  • (gamut-av1) mutation survey of tile.rs shard 0/8, and its seven survivors (#926)
  • (gamut-av1) mutation survey of decode/header.rs shard 0/2, and its survivor and TIMEOUT (#925)
  • (gamut-av1) mutation survey of decode/ and the filter.rs tail, and its 26 survivors (#913)
  • (gamut-av1) mutation survey of headers, transform, geom and quant, and its two loop TIMEOUTs (#912)
  • (gamut-av1) partial mutation survey and its six loop TIMEOUTs (#909)

gamut-isobmff

4.0.0 - 2026-11-04

Added

  • (gamut-metadata) [breaking] wire the facade into png, webp, avif and tiff (#866)

gamut-ifd

3.1.0 - 2026-11-04

Added

  • (ifd) read a directory that has no next-IFD pointer (#1040)
  • (gamut-ifd) shared tag registry for TIFF 6.0 and DNG tags (#892)

gamut-exif

3.0.0 - 2026-11-04

Added

  • (exif) decode Sony MakerNote tags into a read-only view (#1034)
  • (exif) add the Leica MakerNote dialects and decode their tags (#1008)
  • (exif) decode Canon MakerNote tags into a read-only view (#1000)
  • (exif) resolve the MakerNote dispatch layout per vendor (#990)
  • (gamut-ifd) shared tag registry for TIFF 6.0 and DNG tags (#892)

gamut-icc

2.1.0 - 2026-11-04

Added

  • (gamut-icc) locate profile parse errors by byte offset and tag signature (#1007)

gamut-avif

3.0.0 - 2026-11-04

Added

  • (gamut-color, gamut-jpeg, gamut-webp, gamut-avif) [breaking] upsample chroma like each reference decoder by default (#1044)
  • (gamut-metadata) [breaking] wire the facade into png, webp, avif and tiff (#866)

Fixed

  • (gamut-av1) code every lossy block at the frame quantizer and loop-filter level (#1045)

Other

  • (gamut-avif) mutation survey and its three survivors (#894)

gamut-cmm

0.2.0 - 2026-11-04

Added

  • (gamut-jpeg) [breaking] XYB parity with jpegli — B-only subsampling and an sRGB decode through gamut-cmm (#1043)
  • (gamut-cmm) [breaking] add f32 and 16-bit fixed-point CLUT precision tiers (#994)

Other

  • (gamut-cmm) gate LUT sources into a sampled-TRC destination against lcms2 (#1023)
  • (gamut-cmm) add lcms2's 8-bit matrix-shaper pass (#1001)

gamut-deflate

0.1.2 - 2026-11-04

Other

  • (gamut-png) re-measure the peak-RSS figures with the Best match cache (#1002)
  • (gamut-deflate) search each optimal-parse span once (#971)

gamut-jxl-sys

0.1.2 - 2026-11-04

Added

  • (gamut-jxl) expose progressive, responsive and decoding-speed frame settings (#1037)

gamut-jxl

0.5.1 - 2026-11-04

Added

  • (gamut-jxl) expose progressive, responsive and decoding-speed frame settings (#1037)
  • (gamut-jxl) let callers cap decode dimensions and bytes (#1031)

gamut-dng

2.0.0 - 2026-10-12

Added

  • (gamut-dng) surface image-less SubIFDs children per directory (#786)
  • (ifd) report shadowed duplicate-tag entries (#724)
  • (cli) [breaking] report the C2PA manifest store in gamut inspect for AVIF, WebP, TIFF and DNG (#718)
  • (core) shared Segment and covers byte-tiling primitive (#691)
  • (dng) flag a libz the loader took from the build graph
  • (dng) [breaking] type the C2PA manifest store and report both exclusion ranges
  • (dng) [breaking] consume the metadata facade instead of restating it
  • (dng) decode the untyped camera-profile colour tags
  • (dng) keep a vendor preamble at its original offset through a rewrite
  • (dng) type AsShotWhiteXY and derive its camera neutral per DNG 1.7.1 §6
  • (deflate) span the optimal parse instead of disabling it above 1 MiB
  • (dng) [breaking] decode what real cameras actually write
  • (core) add structured error diagnostics

Fixed

  • (gamut-dng) walk a main-chain page once when a SubIFDs entry names it (#818)
  • (gamut-ifd) refuse a recognised type code in UnknownValue::new (#809)
  • (dng) resolve the Exif directory's pointer tags on decode (#804)
  • (gamut-tiff, gamut-dng) report an over-budget sub-IFD as budget exhausted (#802)
  • (gamut-dng) bound lossless-JPEG decode output by its scan bytes (#788)
  • (dng) refuse an Exif sub-IFD the rewrite reader cannot hand back (#767)
  • (gamut-dng) grow raw sample buffers from decoded data, not declared geometry (#759)
  • (gamut-dng) surface interior image-less main-chain pages per page (#671)
  • (dng) bound a C2PA reservation before allocating it
  • (ifd) validate the exclusion set locate builds from a file
  • (dng) print which zlib the benchmark's Deflate arm measured
  • (dng) print only measured numbers from the codec benchmark
  • (dng) give the benchmark's blue plane blue's gain
  • (dng) agree on absence for a duplicated store, and stop dropping a page
  • (dng) recognise the C2PA store tag and refuse one that packs inline
  • (dng) bound Deflate inflation to the expected chunk size
  • (tiff) reject non-progressing CCITT runs

Other

  • (gamut-dng-oracle) link the Adobe DNG SDK against the pinned static zlib (#811)
  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • Merge remote-tracking branch 'origin/master' into perf/163-dng-benchmark-harness
  • (dng-ifd) align C2PA docs with the BigTIFF refusal, the validating constructor and the trailing channel
  • (dng) name the in-memory oracle pin for the extent it checks
  • (dng) say what makes the two candidate zlibs separable, not that they are
  • (dng) say which two zlibs the version string cannot separate
  • (dng) point the benchmark section at the two issues it opened
  • (dng) name the inflate each Deflate arm actually runs
  • (dng) call the export-path arm a bound at its own definition
  • (dng) republish the benchmark's numbers with what they depend on
  • (dng) pin the oracle's in-memory decode where a gate runs it
  • (dng) describe the benchmark's counter rule where it is stated
  • (dng) publish every decode row the harness measures
  • (dng) interleave each codec pair into one benchmark
  • (dng) price the oracle's lossless-JPEG export path
  • (dng) record the two defects the codec benchmark found
  • (dng) pad the benchmark's case column through the formatter
  • (dng) apply rustfmt to the codec benchmark
  • (dng) record the codec benchmark harness and its fairness
  • (dng) benchmark encode and decode against the Adobe DNG SDK
  • (dng) state the preservation contract's two residues where it is made
  • (dng) pin the trailing-extra guard against a surfaced directory
  • (dng) find the maximum black per plane across the repeat pattern
  • (dng) pin the exclusive upper bound of the RATIONAL black-level grid
  • (dng) assert the archival verdict can also be false
  • (dng) reject a malformed BlackLevelDeltaV
  • (dng) find a NoiseProfile that a writer left in IFD 0
  • (dng) cover is_lossy, the LONG level type, and the repeat-dim guards
  • (dng) pin both halves of the WhiteLevel guard and the repeat-dim count
  • (dng) write MD5's F and G in their XOR forms
  • (dng) reject a FLOAT tag that is present but empty
  • (dng) reject a WhiteLevel count that is neither one nor per-plane
  • (dng) name the two differential files for their oracles
  • Merge pull request feat(dng)!: consume the metadata facade instead of restating it #411 from visualcommons/feat/353-dng-metadata-facade
  • (dng) merge master into the colour-projection branch
  • (dng) record the colour projection in the README and status ledger
  • Merge remote-tracking branch 'origin/master' into feat/350-dng-preserve-offsets
  • Merge pull request feat(dng): type AsShotWhiteXY and derive its camera neutral per DNG 1.7.1 §6 #392 from visualcommons/feat/349-dng-asshotwhitexy
  • adopt as_chunks for constant-size slice chunking
  • Merge pull request feat(dng)!: validate against real camera DNGs #348 from visualcommons/feat/174-dng-real-corpus
  • (dng) record the real-camera tier and the v2 breaks
  • (dng) record the Deflate codec split and its measurements
  • (dng) benchmark DNG Deflate against miniz_oxide
  • (dng) encode Deflate strips with gamut-deflate

gamut-heic

0.3.0 - 2026-10-12

Added

  • (gamut-isobmff, gamut-heic, gamut-avif) [breaking] C2PA ranges are a C2paByteRange (#812)
  • (isobmff) skip a sequence moov beside meta instead of refusing the file (#712)
  • (isobmff) typed mdcv mastering-display property (#688)
  • (core) shared Segment and covers byte-tiling primitive (#691)
  • (heic) wire the gamut-metadata facade behind a metadata feature
  • (heic) report every top-level uuid box a C2PA scan sees
  • (heic) report a C2PA box that yielded no manifest store
  • (heic) summarize a located C2PA manifest store without its bytes
  • (heic) locate the C2PA manifest store and report its byte range
  • (gamut-heic) add the high-bit-depth RGBA16 presentation surface
  • (gamut-heic) split annex-b export for platform decoders
  • (core) add structured error diagnostics
  • (gamut-isobmff) parse large and uuid boxes

Fixed

  • (heic) report a merkle box as auxiliary C2PA framing, not as unread
  • (heic) refuse a content-encoded XMP item as Unsupported in blocks()
  • (heic) state every non-empty class in the C2PA headline, in file order
  • (heic) locate an update manifest store past the merkle offset
  • (gamut-heic) prefer nclx for rgba presentation
  • (gamut-heic) correct imir axis semantics

Other

  • (isobmff) share the C2PA uuid lens between gamut-heic and gamut-avif (#781)
  • (isobmff) [breaking] own the clap, pasp, clli and mdcv value structs (#771)
  • (heic) [breaking] replace C2paSummary::is_present with a C2paPresence answer (#742)
  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • Merge remote-tracking branch 'origin/master' into feat/448-cli-inspect-c2pa
  • (heic) build the test image through IsoBmffImage::new
  • Merge remote-tracking branch 'origin/feat/224-png-encoder-efficiency' into feat/448-cli-inspect-c2pa
  • Merge remote-tracking branch 'origin/feat/449-xmp-dcterms-provenance' into feat/420-metadata-facade-wiring
  • (heic) bound the C2PA detail list by the summary, not by its merge
  • (heic) bind the no-byte-leak guard to a buffer that is not static
  • (heic) record what the C2PA report states beside its stores
  • (heic) record the unread-C2PA-box outcome in STATUS
  • (heic) record the C2PA reporting shape in STATUS
  • (heic) rustfmt the byte-leak assertion in the c2pa summary test
  • (heic) build IsoBmffImage through its constructor
  • (isobmff) drop imports the moved tests no longer use
  • (isobmff) share the segment walk with avif and heic
  • (heic) separate per-item adaptation from backend ownership
  • (heic) correct the JUMBF traceability claim and the probe's reach
  • (heic) state the update probe's real strength, not a fail-safe one
  • (heic) correct the JUMBF citation and narrow the scan-scope claim
  • (heic) pin that only a uuid box carries a manifest store
  • (heic) keep the umbrella-feature note in the usage section
  • (heic) record the C2PA manifest-store locator in the ledger
  • (heic) pin the C2PA locator's offsets and rejection branches
  • derive chroma plane sizes from one shared rule
  • adopt as_chunks for constant-size slice chunking
  • Merge pull request feat: high-bit-depth (10/12-bit, BT.709/BT.2020) RGBA presentation surface #360 from visualcommons/feat/303-high-bit-depth-presentation
  • pin the blend rounding and the high-bit-depth paths mutation testing missed
  • record the high-bit-depth presentation surface in STATUS and READMEs
  • (gamut-heic) make the RGBA pipeline generic over sample width

gamut-jpeg

0.1.1 - 2026-10-12

Added

  • (jpeg) wire the gamut-metadata facade behind a metadata feature
  • (jpeg) add the XYB colour encode path
  • (jpeg) rate-distortion optimized coefficient selection
  • (jpeg) route typed presentation through gamut-core convert
  • (jpeg) accept caller-supplied quantization tables
  • (jpeg) emit optimized baseline Huffman tables
  • (core) add structured error diagnostics
  • (gamut-jpeg) add decoder resource limits

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • (jpeg) reformat the metadata wiring with the workspace rustfmt
  • deny unsafe in the hot-path crates instead of forbidding it
  • (jpeg) name the prefix-free check for the one claim it makes
  • adopt as_chunks for constant-size slice chunking
  • merge origin/master into feat/268-pixel-conversion
  • (jpeg) pin the XYB byte count to the appended output
  • merge feat/333-jpeg-trellis-adaptive-quant into feat/334-jpeg-xyb-color
  • (jpeg) kill the RD trellis mutation survivors
  • close the mutation-testing gaps in the conversion paths
  • merge origin/master into feat/268-pixel-conversion
  • (jpeg) ledger the RD-optimized coefficient selection
  • (jpeg) ledger the caller-supplied quantization tables
  • (jpeg) record the optimized baseline table surface

gamut-png

0.2.0 - 2026-10-12

Added

  • (cli) report a PNG's C2PA manifest store in gamut inspect (#784)
  • (png) compose the encoder's size and time knobs into a preset
  • (png) let a caller set the IDAT optimal-parse limit
  • (png) clean a caller-supplied palette before writing it
  • (png) preserve metadata across a re-encode, and refuse the chunk pairs the spec forbids
  • (png) fill a reserved C2PA store in place
  • (png) name the inflation-ratio refusal apart from the byte budget
  • (png) carry the C2PA manifest store in the caBX chunk
  • (png) seal FilterStrategy, and clear only the bigram words a row dirtied
  • (png) bound the deconstruct walk and name what it actually read
  • (png) clean invisible colour on the 16-bit paths too
  • (png) entropy and bigram filter heuristics
  • (png) order the palette, and close the colour-key mutation gaps
  • (png) reduce binary alpha to a tRNS colour key
  • (cli) inspect PNG byte accounting
  • (png) opt-in cleanup of invisible pixel colour
  • (png) account every byte of a PNG with deconstruct
  • (gamut-png) read metadata without decoding pixels
  • (png) extend lossless auto-reduce to grey and 16-bit inputs
  • (png) route typed presentation through gamut-core convert
  • (png) plumb DEFLATE effort through PngEncoder::with_effort
  • (core) add structured error diagnostics

Fixed

  • (gamut-png) compile analyze8/analyze16 only for tests and test-support (#805)
  • (png) bound the top rung's optimal-parse span
  • (png) keep the palette entry a colour-form background names
  • (png) trim the trailing opaque alphas without a loop that can hang
  • (png) race the input layout even where it is outside the profile's family
  • (png) refuse a null only in a text annotation that is written
  • (png) keep auto-reduce in the colour family the ICC profile names
  • (png) write the iCCP profile name as Latin-1, the encoding the reader decodes
  • (png) drop a text string's null instead of refusing the encode
  • (png) check a C2PA reservation's length before allocating it
  • (png) rescale bKGD when auto-reduce lowers the depth
  • (png) reject a C2PA store past the 2^31 - 1 byte chunk limit
  • (png) [breaking] carry an XMP packet's framing, and report what §11.3.3 only advises
  • (png) [breaking] implement §11.3.3's text clauses and stop refusing the colour pair
  • (png) count every ignored C2PA store, and say what is not counted
  • (png) reject a C2PA span the chunk's own length contradicts
  • (png) never read a caBX after IDAT as the manifest store
  • (png) end the C2PA store walk with the datastream
  • (png) count IHDR against the walk's chunk ceiling
  • (png) charge the tally's probe counter per entry examined
  • (png) keep the byte-exact encoding when cleanup ties on size
  • (png) race the chunk-free reduction the raw estimate eliminated
  • (png) resolve a background against the written palette's alpha and origin
  • (png) count chunks, not segments, against max_chunks
  • (png) bound the filter scan's inflation by the stream that claims it
  • (png) emit bKGD and sBIT for the colour type actually written
  • (png) race the cleaned encoding instead of assuming it wins
  • (png-cli) say why the filter scan was skipped
  • (png) budget the quantity the decoder budgets
  • (png) emit a filtered row when every filter candidate ties
  • (png) keep the palette only when it is actually smaller

Other

  • (png) bring gamut-png and gamut-deflate inside the rustdoc and README-doctest gates (#803)
  • (png) adopt gamut-core's shared Segment and covers tiling primitive (#761)
  • (png) pin both ends of the top rung's parse span
  • (png) record the row the top rung's parse span costs bytes on
  • (png) measure the parse span where it is live, and where a rung buys nothing
  • (png) print the size table the ladder's documented command promises
  • (png) measure what the Small to Smallest step costs time from
  • (png) state the ordering the ladder can actually keep
  • (png) wrap an assert the formatter reflows
  • (png) record what each rung of the effort ladder costs and buys
  • (png) cite tRNS and bKGD by the vendored 3rd edition's numbering
  • (png) describe the truncate-form trim and narrow the palette cost claim
  • (png) renumber the background unconditionally
  • (png) say which background forms cleaning keeps, and name OPAQUE once
  • (png) record what cleaning a caller's palette buys
  • (png) give the trailing-opaque tRNS trim one owner
  • Merge remote-tracking branch 'origin/feat/440-png-cabx' into fix/483-png-metadata-preservation
  • (png) resolve the two intra-doc links this change broke, and name itxt_entry
  • (png) let the notice list stay the enum's, and name both payloads a null drops
  • (png) name the conformance clause, and stop contradicting the colour record
  • (png) cite the sections the vendored spec actually numbers
  • (png) say whose job the colour-chunk ranking is
  • (png) pin both readings of an XMP chunk's iTXt framing
  • (png) correct what preservation carries and what it only reports
  • (png) give the C2PA store-location rule one owner
  • Merge remote-tracking branch 'origin/feat/224-png-encoder-efficiency' into feat/440-png-cabx
  • (png) cite §11.3 chunk clauses by the vendored 3rd edition's numbering
  • (png) align C2PA read rule, fill step and counts with the code
  • (png) format the missing-IEND accounting test
  • (png) pin is_intact's IEND conjunct with a clean-EOF datastream
  • (png) point the colour-key race tests at reduce::Reductions
  • (png) state the tie order's reason as the module doc does, and match the README range to the table
  • (png) pin what end_carry separates and what a dropped payload is called
  • (png) record the clauses metadata preservation implements
  • (png) pin Latin-1 text, the refused chunk pairs, and what a re-encode carries
  • (png) read the C2PA chunk header as bytes, not offsets
  • (png) pin the exact fit in the C2PA fill's bounds check
  • (png) separate C2PA carriage from what a decode admits
  • (png) name what a metadata walk returns
  • Merge remote-tracking branch 'origin/feat/224-png-encoder-efficiency' into feat/440-png-cabx
  • (png) state the tie-break rule once, without appealing to encode order
  • (png) say what moving the chunk ceiling into push actually fixed
  • Merge remote-tracking branch 'origin/feat/224-png-encoder-efficiency' into feat/440-png-cabx
  • (png) rustfmt the chunk-ceiling closure and its boundary test
  • (png) shrink the distinct-type fixture to the count it needs
  • (png) qualify the bKGD/sBIT contract by axis and state what a bomb still costs
  • (png) count the tally's lookup probes instead of trusting its shape
  • (png) a grey sBIT needs all three channels to agree, not two
  • (png) [breaking] record FilterStrategy as non-exhaustive
  • (png) record what the races cost and how the chunks follow them
  • (png) pin the chunk tally's constant-time lookup structurally
  • (png) kill the five mutants the new walk code left alive
  • (png) correct the cost model and the size claim against the encoder
  • (png) pin the greyscale colour key the race declines
  • (png) drop a palette sort key that cannot change the order
  • (png) pin the walk's ceilings, its saturation and the unread verdict
  • (png) pin the cleanup tie-break and the entropy weighting
  • merge origin/master into feat/224-png-encoder-efficiency
  • (png) drop a stray blank line in the size contract
  • (png) say which efficiency tables are gated and which only report
  • (png) derive every size budget from its measurement
  • (png) delete choose_min_sum_abs
  • (png) re-pin sub-byte indexed auto-reduce
  • (png) pin the size race a colour key can lose
  • (png) cover the greyscale colour key
  • settle the counter rule, the png authority row and two counts
  • (png) index the chunk tally by type
  • (png) separate palette ordering from discovery order
  • (png) make the colour-key arms total instead of unreachable
  • (png) read the bigram index as one big-endian pair
  • (png) pin the tRNS overhead term with a translucent palette
  • Merge pull request fix(mutants): unblock libtiff's oracle, and close gamut-png's 12 survivors #486 from visualcommons/chore/110-survey-tier1-rest
  • (png) close the remaining survivors of the first survey
  • (png) pin the encoding analyze8 chooses, not just that it reduces
  • (png) refresh the efficiency tables after palette ordering
  • (png) record the colour key in the axis scorecard
  • (png) close the mutation gaps in the new efficiency code
  • record the gamut-png efficiency baseline and the benchmarking convention
  • (png) accelerate CRC-32 and the scanline filter loops
  • (png) pin the output size against libpng at maximum compression
  • (png) benchmark encode size, bpp and per-stage throughput
  • (png) expose the encoder stages behind test-support
  • deny unsafe in the hot-path crates instead of forbidding it
  • (png) pin each auto-reduce claim separately
  • adopt as_chunks for constant-size slice chunking
  • merge origin/master into feat/268-pixel-conversion
  • close the mutation-testing gaps in the conversion paths
  • (png) close the mutation gaps in the reduce/decoder extension

gamut-tiff

2.0.0 - 2026-10-12

Added

  • (ifd) report shadowed duplicate-tag entries (#724)
  • (cli) [breaking] report the C2PA manifest store in gamut inspect for AVIF, WebP, TIFF and DNG (#718)
  • (tiff) carry the C2PA manifest store over the shared placement rules
  • (tiff) carry ICC, XMP, IPTC-IIM and an Exif sub-IFD
  • (tiff) add the TiffInfo pre-decode probe
  • (tiff) encode 16-bit grayscale, RGB and RGBA
  • (tiff) decode 16-bit grayscale, RGB, RGBA and CMYK samples
  • (tiff) add the SampleFormat tag type and reject non-integer samples
  • (tiff) [breaking] require an explicit policy for lossy presentation
  • (core) add structured error diagnostics
  • (gamut-tiff) support deflate compression

Fixed

  • (gamut-ifd) refuse a recognised type code in UnknownValue::new (#809)
  • (gamut-tiff, gamut-dng) report an over-budget sub-IFD as budget exhausted (#802)
  • (gamut-tiff) refuse an ExifIFD array of two or more directories on read (#773)
  • (tiff) reject SamplesPerPixel = 0 in page_info instead of panicking (#723)
  • (gamut-ifd) keep a tag in one store across set and set_sub_ifd (#678)
  • (tiff) read an IPTC/NAA block that Adobe software types LONG
  • (tiff) give the duplicate-tag anomaly the severity its sibling carries
  • (tiff) grade a directory that repeats a tag
  • (tiff) refuse a field and a group under one Exif tag
  • (tiff) decide an Exif pointer field by its on-disk type code
  • (tiff) refuse an Exif pointer tag carried as a plain field
  • (tiff) keep an Exif directory whose only content is a group
  • (tiff) resolve every standard pointer inside the Exif subtree
  • (tiff) keep the classic-count guard out of a mutant's reach
  • (tiff) refuse a store classic TIFF's count word cannot describe
  • (tiff) refuse an Exif tree deeper than the reader walks back
  • (tiff) kill the diff mutants the round-4 repairs left alive
  • (tiff) refuse a C2PA reservation no buffer could hold
  • (tiff) stop a pointer on a discarded page from failing the read
  • (tiff) refuse a bad C2PA configuration before every pixel path
  • (tiff) stop a pointer the metadata never returns from failing the read
  • (tiff) make the metadata seam agree with its own contracts
  • (tiff) stop LZW decoding once the strip is satisfied
  • (tiff) reject non-progressing CCITT runs

Other

  • (tiff) state that a dangling IFD-0 ExifIFD withholds every metadata block (#581) (#760)
  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • (tiff) hoist the scoped sub-IFD resolver into gamut-ifd (#683)
  • (tiff) name the overlapping-store refusal c2pa_exclusions inherits
  • (tiff) read the C2PA exclusion ranges through their accessors
  • (tiff) state that a multi-directory ExifIFD array reads back as its first directory
  • (tiff) list every configuration refusal under the encoders' error sections
  • (tiff) list Anomaly::DuplicateTag and its grading change among the gamut-tiff: build a metadata seam, then carry the C2PA manifest store #446 additions
  • (tiff) return map_audit_findings its doc line from check_duplicate_tags
  • (tiff) derive the second strip's offset from the strip length
  • (tiff) name the constant the IFD-0 sweep is actually derived from
  • (tiff) pin the one direction in which the writer is stricter than the reader
  • (tiff) pin what the duplicate-tag pass's silent skip promises
  • (tiff) repeat the tag the oracle's readout actually depends on
  • (tiff) state the repeated-tag refusal and the type-code rule where each is claimed
  • (tiff) ask libtiff what a directory repeating a tag means
  • (tiff) pin the IFD-0 pointer set against the constant it names
  • (tiff) fail the IFD-0 scoping test under the regression it names
  • (tiff) restate the Exif subtree's refusals where each is claimed
  • (tiff) assert the group a written Exif directory carries, not its count
  • (tiff) correct what the seam claims about pointers and offsets
  • (tiff) make the classic count bound assertable at its boundary
  • (tiff) pin the configuration refusal on every public encode surface
  • (tiff) say why the restated pointer match carries no feature guard
  • (tiff) narrow the discarded-page test to the rule it names
  • (tiff) find a visited sub-IFD offset in log time, not linear
  • (tiff) pin the store on the pixel paths nothing else encoded
  • (tiff) make the C2PA check load-bearing instead of discarded
  • (tiff) stop claiming more than the seam delivers
  • (tiff) record the seam's normalisations and its IFD-0 placement
  • (tiff) pin the palette path's C2PA manifest store
  • (tiff) fuzz the metadata entry points and pin a BigTIFF store
  • (tiff) read the multi-page store reservation as a let-chain
  • (tiff) record the metadata seam and the C2PA manifest store
  • (tiff) re-attach a #[test] this branch had split off
  • (tiff) diagnose the audit's three sub-IFD findings
  • (tiff) pin the LZW decoder's 12-bit code-width cap
  • (tiff) assert the archival verdict through its public wrapper
  • (tiff) the fifth and last shift-or equivalent
  • (tiff) pin T.6's vertical code table and PackBits' two-run rule
  • (tiff) pin the SHORT/LONG boundary, and a fourth shift-or equivalent
  • (tiff) two more CCITT equivalents, removed rather than excluded
  • (tiff) pin the 64 make-up boundary and the half-present tile pair
  • (tiff) assert LZW compresses, the third encoder to hide behind a round trip
  • (tiff) assert LZW's width bound at compile time instead of guarding it
  • (tiff) pin that G4 chooses pass mode, which no oracle could see
  • (tiff) make two G4 colour decisions falsifiable
  • (tiff) assert PackBits actually compresses, not just that it round-trips
  • (tiff) share the two patterns the libtiff cross-checks both use
  • adopt as_chunks for constant-size slice chunking
  • (tiff) pin the 16-bit CMYK narrowing to its depth policy
  • merge origin/master into feat/268-pixel-conversion
  • (tiff) pin which guard rejects a mismatched sample count
  • (tiff) record 16-bit sample support in the scope ledger
  • (tiff) extract page-header parsing from the decode funnel
  • (tiff) scope the decode-size guard to a named helper

gamut-tonemap

1.1.0 - 2026-10-12

Added

  • (tonemap) state Drago's monotonicity condition instead of promising it
  • (core) add structured error diagnostics

Fixed

  • (tonemap) divide the smaller numerator in ReinhardExtended
  • (tonemap) reject a Hable white point whose divisor cancels to zero

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • (fuzz) drive the gamut-core and gamut-tonemap laws under libFuzzer
  • (tonemap) state the ToneCurve contract as executable laws

gamut-vvc

0.2.2 - 2026-10-12

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)

gamut-riff

1.0.0 - 2026-10-12

Added

  • (cli) [breaking] report the C2PA manifest store in gamut inspect for AVIF, WebP, TIFF and DNG (#718)
  • (riff) [breaking] carry the C2PA manifest store in the C2PA chunk
  • (riff) [breaking] enforce reconstruction-chunk order and carry unknown chunks
  • (riff) [breaking] validate the spec's size and canvas bounds
  • (core) add structured error diagnostics

Fixed

  • (riff) [breaking] keep a carried C2PA chunk when no store is configured
  • (riff) let the c2pa field own the C2PA chunk it writes

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • (webp) correct the C2PA exclusion-span rationale
  • (riff) clarify the c2pa_span walk and its pad-byte note
  • (ifd) close the mutation survivors the corpus pass left
  • (riff) release v1.0.0
  • (riff) ledger the v1 surface and correct the RFC citations
  • (riff) spec fixtures, robustness sweep, and a libwebp demux oracle
  • (riff) [breaking] narrow the frozen public surface
  • (riff) drop the unused gamut-bitstream dependency

gamut-webp

0.4.0 - 2026-10-12

Added

  • (cli) [breaking] report the C2PA manifest store in gamut inspect for AVIF, WebP, TIFF and DNG (#718)
  • (webp) carry the C2PA manifest store in the C2PA chunk
  • (cli) add --webp-effort and --webp-near-lossless
  • (webp) fill in the VP8 effort ladder
  • (webp) add near-lossless preprocessing
  • (webp) fill in the VP8L effort ladder
  • (webp) [breaking] require an explicit policy for lossy presentation
  • (webp) add the compression-effort knob
  • (riff) [breaking] enforce reconstruction-chunk order and carry unknown chunks
  • (riff) [breaking] validate the spec's size and canvas bounds
  • (core) add structured error diagnostics

Fixed

  • (webp) [breaking] ask gamut-riff which chunks it writes rather than listing them
  • (webp) [breaking] refuse a chunk that would displace one of the encoder's own
  • (webp) guarantee the run-length loop advances
  • (webp) discard a zero-length LZ77 match instead of looping on it
  • (webp) [breaking] report an oversized VP8 control partition
  • (webp) widen the probability-cost accumulator to u64
  • (webp) quantize near-lossless uniformly and never inflate
  • (webp) make VP8L entropy-group assignment deterministic

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • (webp) correct the C2PA exclusion-span rationale
  • (webp) band the segmentation fixture across all four segments
  • (webp) re-attach a #[test] and drop a one-element loop
  • (webp) pin the entropy image's block-size field
  • (webp) pin the degenerate histograms, and count used symbols with !=
  • (webp) mask the LZ77 extra bits instead of subtracting an offset
  • (webp) write the partition size as little-endian bytes
  • (webp) reconstruct a macroblock that is both B_PRED and skipped
  • (webp) write the bool decoder's range doubling as a multiply
  • (webp) read the partition size as one integer, and pin its high byte
  • (webp) drop a cache-bits guard the constructor already makes
  • (webp) size the prefix-code descriptions, and name the trim's floor
  • (webp) pin the segmented stream, which nothing else could see
  • (webp) pin the canonical code assignment for a sparse alphabet
  • (webp) separate the decode and encode poisoning paths
  • (webp) use is_multiple_of in the break-even search
  • (webp) pin the deferral's strictness and exclude the equivalent mutants
  • (webp) pin the deferred parse's tokens, not just that it differs
  • (webp) drive the lazy parse and cache deltas directly
  • (webp) add the tiled fixture for the VP8L parse plans
  • (webp) add the smooth high-quality fixture to the effort pins
  • (webp) give the effort pins fixtures the decisions are visible in
  • (webp) pin the effort ladder's output and its boundary decisions
  • merge origin/master into feat/261-webp-encoder-knobs
  • adopt as_chunks for constant-size slice chunking
  • merge origin/master into feat/261-webp-encoder-knobs
  • (webp) repair two comments the effort work left behind
  • close the mutation-testing gaps in the conversion paths
  • merge origin/master into feat/268-pixel-conversion
  • (webp) resolve VP8L distance codes from a table
  • (webp) route VP8L encoding through a candidate-plan harness
  • (webp) emit the smallest VP8L prefix-code description
  • (webp) [breaking] future-proof the v1 public API
  • (riff) ledger the v1 surface and correct the RFC citations

gamut

0.4.0 - 2026-10-12

Added

  • (gamut) forward the format crates' metadata features from the umbrella
  • (gamut-cmm) new crate with the pipeline/stage model
  • (metadata) [breaking] carry downstream typed models in a namespaced extension table

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • (gamut) scope the forward pin to the metadata feature's own entries
  • (gamut) pin the umbrella's three metadata feature forwards
  • (gamut) state what the umbrella tests cannot catch
  • merge origin/master into feat/324-cmm-scaffold
  • merge feat/333-jpeg-trellis-adaptive-quant into feat/334-jpeg-xyb-color
  • (gamut) pin the XYB ICC profile at the umbrella
  • wire gamut-cmm into the workspace docs

gamut-cli

0.4.0 - 2026-10-12

Added

  • (gamut-isobmff, gamut-heic, gamut-avif) [breaking] C2PA ranges are a C2paByteRange (#812)
  • (gamut-avif, gamut-cli) [breaking] follow gamut-av1's Balanced default speed (#810)
  • (cli) report a PNG's C2PA manifest store in gamut inspect (#784)
  • (color) model H.273 transfer code points 6 and 15 (#779)
  • (cli) add --output json to gamut inspect (#768)
  • (icc) report the §10.3 cicp MatrixCoefficients clause from validate (#740)
  • (cli) [breaking] report the C2PA manifest store in gamut inspect for AVIF, WebP, TIFF and DNG (#718)
  • (gamut-cli) AVIF encoder flags for speed, threads, alpha quality, clean alpha, matrix, depth and chroma (#744)
  • (isobmff) skip a sequence moov beside meta instead of refusing the file (#712)
  • (gamut-cli) [breaking] batch convert — many inputs in parallel, stdin/stdout, overwrite, quiet, AVIF size breakdown (#705)
  • (isobmff) typed mdcv mastering-display property (#688)
  • (gamut-cli) keep alpha, depth, ICC and Exif when converting to AVIF (#682)
  • (cli) put the PNG effort ladder on gamut convert
  • (cli) cap the C2PA list and say when a format was asserted
  • (cli) say what metadata a conversion could not carry
  • (cli) report a HEIC's C2PA manifest store in gamut inspect
  • (png) name the inflation-ratio refusal apart from the byte budget
  • (cli) inspect PNG byte accounting
  • (cli) add --webp-effort and --webp-near-lossless
  • (cli) decode PNG and JPEG through gamut's own decoders
  • (cli) add --png-effort to convert
  • (cli) add --jxl-modular to gamut convert

Fixed

  • (cli) list a missing IEND as a PNG inspect finding
  • (png) [breaking] carry an XMP packet's framing, and report what §11.3.3 only advises
  • (cli) confirm a sniffed container is a HEVC still image
  • (cli) restore the truncated-list notice for TIFF and DNG
  • (cli) gate inspect on what it read, and bound the lists it prints
  • (png-cli) say why the filter scan was skipped
  • (webp) quantize near-lossless uniformly and never inflate

Other

  • (isobmff) share the C2PA uuid lens between gamut-heic and gamut-avif (#781)
  • (isobmff) [breaking] own the clap, pasp, clli and mdcv value structs (#771)
  • align gamut-color and gamut-cli crate doc summaries with their code (#739)
  • gate rustdoc warnings and compile README code blocks as doctests (#713)
  • Merge remote-tracking branch 'origin/master' into feat/484-png-effort-dial
  • Merge remote-tracking branch 'origin/master' into fix/483-png-metadata-preservation
  • (cli) build the inspect fixtures through IsoBmffImage::new
  • Merge remote-tracking branch 'origin/feat/224-png-encoder-efficiency' into feat/448-cli-inspect-c2pa
  • (cli) resolve --png-preset through gamut-png's own ladder
  • Merge remote-tracking branch 'origin/feat/440-png-cabx' into fix/483-png-metadata-preservation
  • (cli) pin the carried-with-a-caveat report and the profile-family reduction
  • Merge remote-tracking branch 'origin/master' into feat/224-png-encoder-efficiency
  • (cli) format the ISOBMFF-movie route test
  • (cli) pin that an ISOBMFF movie is refused by the HEIC parse, not by brand
  • (cli) drive all three PNG inspect verdicts through the binary
  • (cli) drive the shape the C2PA cap can hide through the binary
  • (png) pin Latin-1 text, the refused chunk pairs, and what a re-encode carries
  • (cli) drive gamut inspect's HEIC arm through the built binary
  • (cli) record the gamut inspect exit-code contract in docs/
  • (cli) state why inspect's verification gate is PNG-only
  • (cli) build the isobmff demo image through the constructor
  • (cli) state what inspect's exit code means per format
  • merge origin/master into feat/261-webp-encoder-knobs
  • adopt as_chunks for constant-size slice chunking
  • merge origin/master into feat/261-webp-encoder-knobs
  • merge origin/master into feat/268-pixel-conversion
  • merge origin/master into feat/268-pixel-conversion

gamut-ffi

0.2.0 - 2026-10-12

Added

  • (gamut-isobmff, gamut-heic, gamut-avif) [breaking] C2PA ranges are a C2paByteRange (#812)
  • (ffi) expose AvifEncoder::with_keep_opaque_alpha as gamut_avif_encoder_set_keep_opaque_alpha (#728)
  • (avif) drop an all-opaque alpha plane on RGBA encode (#720)
  • (ffi) expose AVIF alpha quality as gamut_avif_encoder_set_alpha_quality (#704)
  • (ffi) AVIF C2PA slot setters and the encode report's slot range (#700)
  • (ffi) add AVIF encode and container-parse C entry points (#681)
  • (gamut-cmm) new crate with the pipeline/stage model
  • (core) add structured error diagnostics

Fixed

  • (gamut-core) [breaking] make PixelFormat::ALL a slice (#669)

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)

gamut-wasm

0.1.4 - 2026-10-12

Other

  • gate rustdoc warnings and compile README code blocks as doctests (#713)

gamut-av2

0.1.5 - 2026-11-04

Other

  • updated the following local packages: gamut-bitstream, gamut-color, gamut-dsp

gamut-metadata

2.0.1 - 2026-11-04

Other

  • updated the following local packages: gamut-exif, gamut-icc


This PR was generated with release-plz.

@github-actions
github-actions Bot force-pushed the release-plz-2026-10-16T19-03-46Z branch 30 times, most recently from 4ef32a2 to cd393ba Compare October 17, 2026 06:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants