diff --git a/Cargo.lock b/Cargo.lock index fcdd8e15..9e84197e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -228,9 +228,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.0" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -276,9 +276,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.4" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.2" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -306,7 +306,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -368,9 +368,9 @@ checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" dependencies = [ "cfg-if", ] @@ -442,7 +442,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -472,9 +472,9 @@ dependencies = [ [[package]] name = "either" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "equivalent" @@ -527,23 +527,24 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.9.1", + "zlib-rs", ] [[package]] name = "gamut" -version = "0.3.2" +version = "0.3.3" dependencies = [ "gamut-av1", "gamut-av2", @@ -575,7 +576,7 @@ dependencies = [ [[package]] name = "gamut-av1" -version = "0.4.1" +version = "0.5.0" dependencies = [ "aom-oracle", "dav1d-oracle", @@ -588,7 +589,7 @@ dependencies = [ [[package]] name = "gamut-av2" -version = "0.1.3" +version = "0.1.4" dependencies = [ "gamut-bitstream", "gamut-color", @@ -598,7 +599,7 @@ dependencies = [ [[package]] name = "gamut-avif" -version = "1.1.0" +version = "2.0.0" dependencies = [ "dav1d-oracle", "divan", @@ -612,7 +613,7 @@ dependencies = [ [[package]] name = "gamut-bitstream" -version = "0.2.3" +version = "0.2.4" dependencies = [ "divan", "gamut-core", @@ -620,7 +621,7 @@ dependencies = [ [[package]] name = "gamut-cli" -version = "0.3.1" +version = "0.3.2" dependencies = [ "clap", "gamut", @@ -644,11 +645,11 @@ dependencies = [ [[package]] name = "gamut-codec-abi" -version = "0.1.1" +version = "0.1.2" [[package]] name = "gamut-color" -version = "2.0.0" +version = "3.0.0" dependencies = [ "divan", "gamut-core", @@ -659,7 +660,7 @@ dependencies = [ [[package]] name = "gamut-core" -version = "2.0.1" +version = "2.1.0" dependencies = [ "proptest", "serde", @@ -669,17 +670,17 @@ dependencies = [ [[package]] name = "gamut-deflate" -version = "0.1.0" +version = "0.1.1" dependencies = [ "divan", - "miniz_oxide", + "miniz_oxide 0.8.9", "zlib-oracle", "zopfli", ] [[package]] name = "gamut-dng" -version = "1.0.0" +version = "2.0.0" dependencies = [ "divan", "gamut-bitstream", @@ -692,7 +693,7 @@ dependencies = [ "gamut-jxl", "gamut-metadata", "libtiff-oracle", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] @@ -707,14 +708,14 @@ dependencies = [ [[package]] name = "gamut-dsp" -version = "2.0.0" +version = "2.0.1" dependencies = [ "divan", ] [[package]] name = "gamut-exif" -version = "1.0.0" +version = "1.1.0" dependencies = [ "exiv2-oracle", "gamut-core", @@ -725,7 +726,7 @@ dependencies = [ [[package]] name = "gamut-ffi" -version = "0.1.3" +version = "0.1.4" dependencies = [ "gamut", "gamut-codec-abi", @@ -733,7 +734,7 @@ dependencies = [ [[package]] name = "gamut-heic" -version = "0.2.2" +version = "0.2.3" dependencies = [ "gamut-codec-abi", "gamut-color", @@ -744,7 +745,7 @@ dependencies = [ [[package]] name = "gamut-icc" -version = "1.0.0" +version = "1.0.1" dependencies = [ "gamut-core", "lcms2-oracle", @@ -754,7 +755,7 @@ dependencies = [ [[package]] name = "gamut-ifd" -version = "2.0.1" +version = "3.0.0" dependencies = [ "divan", "gamut-core", @@ -763,7 +764,7 @@ dependencies = [ [[package]] name = "gamut-iptc" -version = "1.0.0" +version = "1.0.1" dependencies = [ "divan", "gamut-core", @@ -783,7 +784,7 @@ dependencies = [ [[package]] name = "gamut-isobmff" -version = "2.0.1" +version = "2.1.0" dependencies = [ "divan", "gamut-core", @@ -791,7 +792,7 @@ dependencies = [ [[package]] name = "gamut-jpeg" -version = "0.1.0" +version = "0.1.1" dependencies = [ "gamut-codec-abi", "gamut-color", @@ -802,7 +803,7 @@ dependencies = [ [[package]] name = "gamut-jxl" -version = "0.4.0" +version = "0.5.0" dependencies = [ "gamut-codec-abi", "gamut-core", @@ -812,7 +813,7 @@ dependencies = [ [[package]] name = "gamut-jxl-sys" -version = "0.1.0" +version = "0.1.1" dependencies = [ "cmake", "jpegxl-src", @@ -820,7 +821,7 @@ dependencies = [ [[package]] name = "gamut-metadata" -version = "1.0.0" +version = "2.0.0" dependencies = [ "gamut-exif", "gamut-icc", @@ -831,13 +832,13 @@ dependencies = [ [[package]] name = "gamut-png" -version = "0.1.0" +version = "0.1.1" dependencies = [ "gamut-codec-abi", "gamut-core", "gamut-deflate", "libpng-oracle", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] @@ -851,7 +852,7 @@ dependencies = [ [[package]] name = "gamut-tiff" -version = "1.0.0" +version = "1.1.0" dependencies = [ "divan", "gamut-bitstream", @@ -859,12 +860,12 @@ dependencies = [ "gamut-deflate", "gamut-ifd", "libtiff-oracle", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] name = "gamut-tonemap" -version = "1.0.0" +version = "1.1.0" dependencies = [ "divan", "gamut-core", @@ -873,7 +874,7 @@ dependencies = [ [[package]] name = "gamut-vvc" -version = "0.2.1" +version = "0.2.2" dependencies = [ "gamut-bitstream", "gamut-color", @@ -883,7 +884,7 @@ dependencies = [ [[package]] name = "gamut-wasm" -version = "0.1.3" +version = "0.1.4" dependencies = [ "gamut", "wasm-bindgen", @@ -891,7 +892,7 @@ dependencies = [ [[package]] name = "gamut-webp" -version = "0.3.1" +version = "0.4.0" dependencies = [ "divan", "gamut-codec-abi", @@ -904,7 +905,7 @@ dependencies = [ [[package]] name = "gamut-xmp" -version = "1.0.0" +version = "1.1.0" dependencies = [ "exiv2-oracle", "gamut-core", @@ -924,9 +925,9 @@ dependencies = [ [[package]] name = "geocoordinates" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c1922a103f7c4deca321fa0a4333b5025871905325fb4d18cd6a896ceccf28" +checksum = "c7cbb4470a3ec8b58cb7d46b087c46f9f38d5602125687944b86a398564d6d48" dependencies = [ "geographiclib-rs", "thiserror", @@ -1010,9 +1011,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "07aa2048142242915a31d35844fb311e0e53fcca590c3a0a40dcf1b841fa09eb" dependencies = [ "equivalent", "hashbrown", @@ -1069,9 +1070,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "wasm-bindgen", @@ -1233,9 +1234,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lzma-rs" @@ -1299,6 +1300,16 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "moxcms" version = "0.8.1" @@ -1385,9 +1396,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "png" @@ -1399,7 +1410,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] @@ -1563,9 +1574,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -1636,7 +1647,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1726,9 +1737,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" dependencies = [ "proc-macro2", "quote", @@ -1771,22 +1782,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1800,9 +1811,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.54" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "num-conv", @@ -1910,9 +1921,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -1923,9 +1934,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1933,9 +1944,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", @@ -1946,9 +1957,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] @@ -2071,6 +2082,12 @@ dependencies = [ "build-env", ] +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + [[package]] name = "zmij" version = "1.0.23" @@ -2119,9 +2136,9 @@ dependencies = [ [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-jpeg" diff --git a/Cargo.toml b/Cargo.toml index 28eb775e..12dbd521 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -121,46 +121,46 @@ proptest = { version = "1.11", default-features = false, features = ["std", "bit # crates.io round-trip; `version` is the requirement recorded in the published manifest. # Versions are independent per crate — release-plz rewrites these requirements automatically # when a dependency's version bumps. -gamut-core = { path = "crates/gamut-core", version = "2.0.1" } -gamut-color = { path = "crates/gamut-color", version = "2.0.0" } -gamut-dsp = { path = "crates/gamut-dsp", version = "2.0.0" } -gamut-bitstream = { path = "crates/gamut-bitstream", version = "0.2.3" } +gamut-core = { path = "crates/gamut-core", version = "2.1.0" } +gamut-color = { path = "crates/gamut-color", version = "3.0.0" } +gamut-dsp = { path = "crates/gamut-dsp", version = "2.0.1" } +gamut-bitstream = { path = "crates/gamut-bitstream", version = "0.2.4" } # The shared codestream-backend seam (issue #272): repr(C) vtables + object-safe Rust twins that # let a foreign/alternate codec backend plug into any format crate. no_std, dependency-free. -gamut-codec-abi = { path = "crates/gamut-codec-abi", version = "0.1.1" } -gamut-deflate = { path = "crates/gamut-deflate", version = "0.1.0" } -gamut-png = { path = "crates/gamut-png", version = "0.1.0" } +gamut-codec-abi = { path = "crates/gamut-codec-abi", version = "0.1.2" } +gamut-deflate = { path = "crates/gamut-deflate", version = "0.1.1" } +gamut-png = { path = "crates/gamut-png", version = "0.1.1" } # JPEG-1 (ISO/IEC 10918 / ITU-T T.81) codec (issue #28). -gamut-jpeg = { path = "crates/gamut-jpeg", version = "0.1.0" } -gamut-isobmff = { path = "crates/gamut-isobmff", version = "2.0.1" } +gamut-jpeg = { path = "crates/gamut-jpeg", version = "0.1.1" } +gamut-isobmff = { path = "crates/gamut-isobmff", version = "2.1.0" } gamut-riff = { path = "crates/gamut-riff", version = "1.0.0" } -gamut-av1 = { path = "crates/gamut-av1", version = "0.4.1" } -gamut-av2 = { path = "crates/gamut-av2", version = "0.1.3" } -gamut-avif = { path = "crates/gamut-avif", version = "1.1.0" } +gamut-av1 = { path = "crates/gamut-av1", version = "0.5.0" } +gamut-av2 = { path = "crates/gamut-av2", version = "0.1.4" } +gamut-avif = { path = "crates/gamut-avif", version = "2.0.0" } # `default-features = false` so consumers pick their halves: gamut-dng needs only the pure-Rust # `decode`; the umbrella re-enables both. -gamut-jxl = { path = "crates/gamut-jxl", version = "0.4.0", default-features = false } +gamut-jxl = { path = "crates/gamut-jxl", version = "0.5.0", default-features = false } # Static libjxl build + hand-written FFI for gamut-jxl's encoder. Unlike every other shipped crate, # building this one runs cmake to compile libjxl (see its README); `links = "jxl"`. -gamut-jxl-sys = { path = "crates/gamut-jxl-sys", version = "0.1.0" } -gamut-webp = { path = "crates/gamut-webp", version = "0.3.1" } -gamut-heic = { path = "crates/gamut-heic", version = "0.2.2" } -gamut-vvc = { path = "crates/gamut-vvc", version = "0.2.1" } -gamut-tonemap = { path = "crates/gamut-tonemap", version = "1.0.0" } +gamut-jxl-sys = { path = "crates/gamut-jxl-sys", version = "0.1.1" } +gamut-webp = { path = "crates/gamut-webp", version = "0.4.0" } +gamut-heic = { path = "crates/gamut-heic", version = "0.2.3" } +gamut-vvc = { path = "crates/gamut-vvc", version = "0.2.2" } +gamut-tonemap = { path = "crates/gamut-tonemap", version = "1.1.0" } # Image metadata primitives (issue #34): the shared TIFF/IFD core plus per-format crates. -gamut-ifd = { path = "crates/gamut-ifd", version = "2.0.1" } -gamut-icc = { path = "crates/gamut-icc", version = "1.0.0" } +gamut-ifd = { path = "crates/gamut-ifd", version = "3.0.0" } +gamut-icc = { path = "crates/gamut-icc", version = "1.0.1" } # ICC colour management module — applies profiles parsed by gamut-icc (issue #323). gamut-cmm = { path = "crates/gamut-cmm", version = "0.1.0" } -gamut-xmp = { path = "crates/gamut-xmp", version = "1.0.0" } -gamut-exif = { path = "crates/gamut-exif", version = "1.0.0" } -gamut-iptc = { path = "crates/gamut-iptc", version = "1.0.0" } -gamut-metadata = { path = "crates/gamut-metadata", version = "1.0.0" } +gamut-xmp = { path = "crates/gamut-xmp", version = "1.1.0" } +gamut-exif = { path = "crates/gamut-exif", version = "1.1.0" } +gamut-iptc = { path = "crates/gamut-iptc", version = "1.0.1" } +gamut-metadata = { path = "crates/gamut-metadata", version = "2.0.0" } # Self-contained TIFF 6.0 codec (issue #107). -gamut-tiff = { path = "crates/gamut-tiff", version = "1.0.0" } +gamut-tiff = { path = "crates/gamut-tiff", version = "1.1.0" } # DNG raw-image codec (issue #109): a TIFF/EP profile built on gamut-ifd. -gamut-dng = { path = "crates/gamut-dng", version = "1.0.0" } -gamut = { path = "crates/gamut", version = "0.3.2" } +gamut-dng = { path = "crates/gamut-dng", version = "2.0.0" } +gamut = { path = "crates/gamut", version = "0.3.3" } [profile.release] lto = "thin" diff --git a/crates/gamut-av1/CHANGELOG.md b/crates/gamut-av1/CHANGELOG.md index e37ea07b..32fd31bb 100644 --- a/crates/gamut-av1/CHANGELOG.md +++ b/crates/gamut-av1/CHANGELOG.md @@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.5.0](https://github.com/visualcommons/gamut/compare/gamut-av1-v0.4.1...gamut-av1-v0.5.0) - 2026-09-03 + +### Added + +- *(av1)* parse OBUs and the AV1 sequence and frame headers +- *(av1)* [**breaking**] give every coded plane its own sample geometry +- *(av1)* adapt CDFs while coding tiles +- *(core)* add structured error diagnostics + +### Fixed + +- *(av1)* name monochrome when the decoder refuses a monochrome stream +- *(av1)* check every OBU's trailing bits against its declared size + +### Other + +- *(av1)* separate CDF adaptation from context independence +- merge feat/397-avif-alpha-aux into feat/398-av1-high-bitdepth +- Merge pull request #403 from visualcommons/feat/391-avif-422-profile2 +- Merge pull request #402 from visualcommons/feat/390-avif-420-profile0 +- *(av1)* kill the mutants the header layer pulled into the diff +- *(av1)* supply the monochrome flag at the header parse call sites +- Merge remote-tracking branch 'origin/master' into feat/259-avif-decoder +- *(av1)* kill the surviving tile-spacing and lr_params mutants +- *(av1)* cover the header syntax the encoders never emit +- *(av1)* check the decoder's header layer against libaom +- Merge pull request #394 from visualcommons/feat/389-av1-per-plane-geometry +- *(av1)* kill the mutants the geometry refactor pulled into the diff +- Merge branch 'master' into feat/335-avif-ycbcr-matrix +- *(av1)* record CDF adaptation in STATUS and README + ## [0.4.1](https://github.com/justin13888/gamut/compare/gamut-av1-v0.4.0...gamut-av1-v0.4.1) - 2026-07-20 ### Other diff --git a/crates/gamut-av1/Cargo.toml b/crates/gamut-av1/Cargo.toml index fad085d7..ea5b6307 100644 --- a/crates/gamut-av1/Cargo.toml +++ b/crates/gamut-av1/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-av1" description = "AV1 still-image (intra-frame) encoder — the standalone codec layer beneath AVIF." -version = "0.4.1" +version = "0.5.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-av2/CHANGELOG.md b/crates/gamut-av2/CHANGELOG.md index eda63a7c..0cc71c95 100644 --- a/crates/gamut-av2/CHANGELOG.md +++ b/crates/gamut-av2/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.4](https://github.com/visualcommons/gamut/compare/gamut-av2-v0.1.3...gamut-av2-v0.1.4) - 2026-09-03 + +### Other + +- updated the following local packages: gamut-core, gamut-bitstream, gamut-color, gamut-dsp + ## [0.1.3](https://github.com/justin13888/gamut/compare/gamut-av2-v0.1.2...gamut-av2-v0.1.3) - 2026-07-20 ### Other diff --git a/crates/gamut-av2/Cargo.toml b/crates/gamut-av2/Cargo.toml index 876aa34e..bfc2c083 100644 --- a/crates/gamut-av2/Cargo.toml +++ b/crates/gamut-av2/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-av2" description = "AV2 image encoder and decoder (intra-frame still-image coding from AOMedia Video 2, AV1's successor)." -version = "0.1.3" +version = "0.1.4" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-avif/CHANGELOG.md b/crates/gamut-avif/CHANGELOG.md index 46e11a5c..e3dce15c 100644 --- a/crates/gamut-avif/CHANGELOG.md +++ b/crates/gamut-avif/CHANGELOG.md @@ -7,6 +7,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.0.0](https://github.com/visualcommons/gamut/compare/gamut-avif-v1.1.0...gamut-avif-v2.0.0) - 2026-09-03 + +### Added + +- *(avif)* lower high-bit-depth jobs across the codec-abi seam +- *(avif)* [**breaking**] honour with_chroma on the 16-bit input path +- *(avif)* [**breaking**] default lossy output to 4:2:0 and expose the chroma format +- *(gamut-avif)* add the high-bit-depth RGBA16 presentation surface +- *(core)* add structured error diagnostics +- *(gamut-isobmff)* parse large and uuid boxes + +### Fixed + +- *(avif)* send the backend the chroma the planes actually carry + +### Other + +- *(avif)* close the crate's first mutation survey +- *(isobmff)* drop imports the moved tests no longer use +- *(isobmff)* share the segment walk with avif and heic +- *(avif)* separate grid cropping from tile placement +- *(avif)* pin the sequence-header chroma derivation directly +- merge feat/398-av1-high-bitdepth into feat/399-avif-16bit-inputs +- merge feat/397-avif-alpha-aux into feat/398-av1-high-bitdepth +- merge origin/master into feat/397-avif-alpha-aux +- Merge pull request #403 from visualcommons/feat/391-avif-422-profile2 +- Merge pull request #402 from visualcommons/feat/390-avif-420-profile0 +- *(avif)* say precisely when with_chroma is ignored +- Merge remote-tracking branch 'origin/master' into feat/390-avif-420-profile0 +- close the remaining chroma mutation gaps +- merge origin/master into feat/390-avif-420-profile0 +- cover the chroma derivations directly, not through an encode +- Merge pull request #394 from visualcommons/feat/389-av1-per-plane-geometry +- derive chroma plane sizes from one shared rule +- adopt as_chunks for constant-size slice chunking +- Merge branch 'master' into feat/335-avif-ycbcr-matrix +- Merge pull request #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 + ## [1.1.0](https://github.com/justin13888/gamut/compare/gamut-avif-v1.0.0...gamut-avif-v1.1.0) - 2026-07-20 ### Added diff --git a/crates/gamut-avif/Cargo.toml b/crates/gamut-avif/Cargo.toml index 7dcb0916..38969eab 100644 --- a/crates/gamut-avif/Cargo.toml +++ b/crates/gamut-avif/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-avif" description = "Pure-Rust AVIF still-image encoder and container decoder — lossless and lossy AV1 intra frames in an ISOBMFF/MIAF container, with a pluggable AV1 codestream-decoder hook." -version = "1.1.0" +version = "2.0.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-bitstream/CHANGELOG.md b/crates/gamut-bitstream/CHANGELOG.md index f265b4bc..68055885 100644 --- a/crates/gamut-bitstream/CHANGELOG.md +++ b/crates/gamut-bitstream/CHANGELOG.md @@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.4](https://github.com/visualcommons/gamut/compare/gamut-bitstream-v0.2.3...gamut-bitstream-v0.2.4) - 2026-09-03 + +### Added + +- *(bitstream)* add the AV1 bit reader and symbol decoder + +### Fixed + +- *(bitstream)* compute ns(n) in u64 so n >= 2^31 does not overflow +- *(bitstream)* implement all three of exit_symbol's conformance checks +- *(bitstream)* bound the symbol search by the alphabet, not by the CDF + +### Other + +- *(bitstream)* pin read_f's zero padding and retire two hang mutants +- *(bitstream)* cover read_golomb, which nothing exercised +- *(bitstream)* separate the leb128 length rule from the round trip + ## [0.2.3](https://github.com/justin13888/gamut/compare/gamut-bitstream-v0.2.2...gamut-bitstream-v0.2.3) - 2026-07-20 ### Other diff --git a/crates/gamut-bitstream/Cargo.toml b/crates/gamut-bitstream/Cargo.toml index 287a4da7..177cfc58 100644 --- a/crates/gamut-bitstream/Cargo.toml +++ b/crates/gamut-bitstream/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-bitstream" description = "Low-level bit readers/writers and entropy coders (ANS, arithmetic, Huffman) shared by gamut codecs." -version = "0.2.3" +version = "0.2.4" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-cli/CHANGELOG.md b/crates/gamut-cli/CHANGELOG.md index 33053e13..2d6414c6 100644 --- a/crates/gamut-cli/CHANGELOG.md +++ b/crates/gamut-cli/CHANGELOG.md @@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.3.2](https://github.com/visualcommons/gamut/compare/gamut-cli-v0.3.1...gamut-cli-v0.3.2) - 2026-09-03 + +### Added + +- *(cli)* decode PNG and JPEG through gamut's own decoders + +### Other + +- merge origin/master into feat/261-webp-encoder-knobs +- adopt as_chunks for constant-size slice chunking +- merge origin/master into feat/268-pixel-conversion +- merge origin/master into feat/268-pixel-conversion + ## [0.3.1](https://github.com/visualcommons/gamut/compare/gamut-cli-v0.3.0...gamut-cli-v0.3.1) - 2026-07-30 ### Other diff --git a/crates/gamut-cli/Cargo.toml b/crates/gamut-cli/Cargo.toml index 89c45870..6c07b904 100644 --- a/crates/gamut-cli/Cargo.toml +++ b/crates/gamut-cli/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-cli" description = "Sandbox CLI for the gamut codecs: decode PNG/JPEG/PPM/WebP/JXL and encode AVIF/WebP/TIFF/PNG/JXL/JPEG, plus inspection of the shared color/dsp/bitstream primitives (e.g. `gamut convert input.png output.avif`)." -version = "0.3.1" +version = "0.3.2" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-cmm/CHANGELOG.md b/crates/gamut-cmm/CHANGELOG.md index 11bddf32..d42b8356 100644 --- a/crates/gamut-cmm/CHANGELOG.md +++ b/crates/gamut-cmm/CHANGELOG.md @@ -6,3 +6,39 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] + +## [0.1.0](https://github.com/visualcommons/gamut/releases/tag/gamut-cmm-v0.1.0) - 2026-09-03 + +### Added + +- *(cmm)* [**breaking**] take pipeline optimization on every transform constructor +- *(cmm)* collapse pipeline stages behind an opt-in optimization level +- *(gamut-cmm)* LUT pipelines and per-intent tag selection +- *(gamut-cmm)* matrix/TRC shaper pipelines and the chad convention +- *(gamut-cmm)* N-D multilinear and tetrahedral CLUT interpolation +- *(gamut-cmm)* tone-curve tables and monotonic inversion +- *(gamut-cmm)* new crate with the pipeline/stage model + +### Fixed + +- *(cmm)* sweep the full input domain and re-pin the conformance bounds + +### Other + +- deny unsafe in the hot-path crates instead of forbidding it +- *(cmm)* share one generator across the six oracle suites +- *(cmm)* drop the unreachable axis guard on CLUT resampling +- *(cmm)* record pipeline optimization in the README and status ledger +- *(cmm)* benchmark buffer throughput off, on, and against lcms2 +- *(cmm)* gate the optimized paths against the lcms2 precision budget +- merge origin/master into feat/330-cmm-chaining-conformance +- merge origin/master into feat/329-cmm-intents-bpc +- merge origin/master into feat/328-cmm-lut-pipelines +- *(gamut-cmm)* record the LUT-phase settled decisions +- *(gamut-cmm)* pin LUT profiles and intent selection against Little-CMS +- *(gamut-cmm)* record the shaper and chad settled decisions +- *(gamut-cmm)* pin shaper profiles against Little-CMS +- *(gamut-cmm)* transcribe the tetrahedral decomposition +- *(gamut-cmm)* pin CLUT interpolation against Little-CMS +- *(gamut-cmm)* record the tone-curve phase decisions +- *(gamut-cmm)* pin tone curves against Little-CMS diff --git a/crates/gamut-codec-abi/CHANGELOG.md b/crates/gamut-codec-abi/CHANGELOG.md index d7894511..33baba58 100644 --- a/crates/gamut-codec-abi/CHANGELOG.md +++ b/crates/gamut-codec-abi/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.2](https://github.com/visualcommons/gamut/compare/gamut-codec-abi-v0.1.1...gamut-codec-abi-v0.1.2) - 2026-09-03 + +### Other + +- *(codec-abi)* cover the borrowed-backend blanket impls +- *(codec-abi)* split the seam's tests by the claim each one pins + ## [0.1.1](https://github.com/justin13888/gamut/compare/gamut-codec-abi-v0.1.0...gamut-codec-abi-v0.1.1) - 2026-07-21 ### Other diff --git a/crates/gamut-codec-abi/Cargo.toml b/crates/gamut-codec-abi/Cargo.toml index 1cb33885..8c692f21 100644 --- a/crates/gamut-codec-abi/Cargo.toml +++ b/crates/gamut-codec-abi/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-codec-abi" description = "Shared codestream-backend ABI: repr(C) vtables + object-safe Rust twins for pluggable/FFI codec backends." -version = "0.1.1" +version = "0.1.2" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-color/CHANGELOG.md b/crates/gamut-color/CHANGELOG.md index b8ab2fcf..a485cfd2 100644 --- a/crates/gamut-color/CHANGELOG.md +++ b/crates/gamut-color/CHANGELOG.md @@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [3.0.0](https://github.com/visualcommons/gamut/compare/gamut-color-v2.0.0...gamut-color-v3.0.0) - 2026-09-03 + +### Added + +- *(avif)* [**breaking**] honour with_chroma on the 16-bit input path +- *(color)* report the coded plane count of a chroma layout +- *(dng)* type AsShotWhiteXY and derive its camera neutral per DNG 1.7.1 §6 +- *(color)* correlated colour temperature by Robertson's method +- *(gamut-color)* add CIELab, LCh, xyY, ΔE₀₀, and the ICC PCS encodings +- *(core)* add structured error diagnostics +- add optional serde support to public enums + +### Other + +- deny unsafe in the hot-path crates instead of forbidding it +- *(color)* pin each Lab encoding claim separately +- *(dsp)* share one deterministic generator across the transform sweeps +- *(color)* pin the 16-bit box average to its exact value +- merge feat/398-av1-high-bitdepth into feat/399-avif-16bit-inputs +- merge feat/397-avif-alpha-aux into feat/398-av1-high-bitdepth +- merge origin/master into feat/397-avif-alpha-aux +- Merge branch 'feat/390-avif-420-profile0' into feat/391-avif-422-profile2 +- Merge remote-tracking branch 'origin/master' into feat/390-avif-420-profile0 +- Merge pull request #394 from visualcommons/feat/389-av1-per-plane-geometry +- Merge pull request #392 from visualcommons/feat/349-dng-asshotwhitexy +- merge origin/master into feat/322-lcms2-oracle-transforms +- merge origin/master into feat/321-color-cielab-de2000 +- *(gamut-color)* state the fast-floor gap instead of denying it +- *(gamut-color)* kill the surviving lab mutants +- *(color)* vendor the Sharma CIEDE2000 paper and Lab references + ## [2.0.0](https://github.com/justin13888/gamut/compare/gamut-color-v1.1.0...gamut-color-v2.0.0) - 2026-07-20 ### Added diff --git a/crates/gamut-color/Cargo.toml b/crates/gamut-color/Cargo.toml index a72624ce..7a19d624 100644 --- a/crates/gamut-color/Cargo.toml +++ b/crates/gamut-color/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-color" description = "Color primitives for gamut: CICP code points, coded-plane bit depth and chroma subsampling, identity and BT.601 YCbCr planar buffers, and f64 colour science (encoder-exact transfers, OKLab, gamut mapping)." -version = "2.0.0" +version = "3.0.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-core/CHANGELOG.md b/crates/gamut-core/CHANGELOG.md index 45ec7cb8..2d50aa2a 100644 --- a/crates/gamut-core/CHANGELOG.md +++ b/crates/gamut-core/CHANGELOG.md @@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.1.0](https://github.com/visualcommons/gamut/compare/gamut-core-v2.0.1...gamut-core-v2.1.0) - 2026-09-03 + +### Added + +- *(core)* add format-agnostic pixel conversion +- *(core)* add full-range sample widening and narrowing +- *(core)* add fixed-point luma weights to luminance +- *(core)* add structured error diagnostics +- add optional serde support to public enums + +### Other + +- *(fuzz)* apply nightly rustfmt to the new targets +- *(fuzz)* drive the gamut-core and gamut-tonemap laws under libFuzzer +- *(core)* state the conversion engine's contract as executable laws +- close the mutation-testing gaps in the conversion paths +- *(core)* drive convert through the public API + ## [2.0.1](https://github.com/justin13888/gamut/compare/gamut-core-v2.0.0...gamut-core-v2.0.1) - 2026-07-20 ### Other diff --git a/crates/gamut-core/Cargo.toml b/crates/gamut-core/Cargo.toml index 1789b799..b93a44da 100644 --- a/crates/gamut-core/Cargo.toml +++ b/crates/gamut-core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-core" description = "Core traits, image buffers, dimensions, and error types shared across the gamut image codecs." -version = "2.0.1" +version = "2.1.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-deflate/CHANGELOG.md b/crates/gamut-deflate/CHANGELOG.md index c001a2ae..5827ace8 100644 --- a/crates/gamut-deflate/CHANGELOG.md +++ b/crates/gamut-deflate/CHANGELOG.md @@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.1](https://github.com/visualcommons/gamut/compare/gamut-deflate-v0.1.0...gamut-deflate-v0.1.1) - 2026-09-03 + +### Added + +- *(deflate)* span the optimal parse instead of disabling it above 1 MiB +- *(deflate)* expose optimal-parse effort via DeflateEncoder::with_effort + +### Other + +- *(deflate)* remove five unkillable mutants from the bit packing +- deny unsafe in the hot-path crates instead of forbidding it +- *(deflate)* pin the encoder's output so a silent size regression fails +- *(mutants)* record the failure modes and the one way to run a survey +- *(deflate)* keep the 1 MiB boundary case fast under limit-check mutation +- *(deflate)* document the configurable optimal-parse effort budget +- *(deflate)* pin Level as repr(u8) with explicit discriminants +- *(dng)* record the Deflate codec split and its measurements + ## [0.1.0](https://github.com/justin13888/gamut/releases/tag/gamut-deflate-v0.1.0) - 2026-07-18 ### Added diff --git a/crates/gamut-deflate/Cargo.toml b/crates/gamut-deflate/Cargo.toml index 5feb1077..8cbd5cd5 100644 --- a/crates/gamut-deflate/Cargo.toml +++ b/crates/gamut-deflate/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-deflate" description = "Pure-Rust DEFLATE (RFC 1951) and zlib (RFC 1950) encoder, tuned for space efficiency." -version = "0.1.0" +version = "0.1.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-dng/CHANGELOG.md b/crates/gamut-dng/CHANGELOG.md index 1094db39..5d27cfb8 100644 --- a/crates/gamut-dng/CHANGELOG.md +++ b/crates/gamut-dng/CHANGELOG.md @@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.0.0](https://github.com/visualcommons/gamut/compare/gamut-dng-v1.0.0...gamut-dng-v2.0.0) - 2026-09-03 + +### Added + +- *(dng)* decode the untyped camera-profile colour tags +- *(dng)* type AsShotWhiteXY and derive its camera neutral per DNG 1.7.1 §6 +- *(dng)* [**breaking**] decode what real cameras actually write +- *(core)* add structured error diagnostics + +### Fixed + +- *(tiff)* reject non-progressing CCITT runs + +### Other + +- *(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 #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 pull request #392 from visualcommons/feat/349-dng-asshotwhitexy +- adopt as_chunks for constant-size slice chunking +- Merge pull request #348 from visualcommons/feat/174-dng-real-corpus +- *(dng)* record the real-camera tier and the v2 breaks + ## [1.0.0](https://github.com/justin13888/gamut/releases/tag/gamut-dng-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-dng/Cargo.toml b/crates/gamut-dng/Cargo.toml index ceaabc9a..3b8e7dda 100644 --- a/crates/gamut-dng/Cargo.toml +++ b/crates/gamut-dng/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-dng" description = "DNG (Adobe Digital Negative) 1.7.1 raw-image encoder and decoder." -version = "1.0.0" +version = "2.0.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-dsp/CHANGELOG.md b/crates/gamut-dsp/CHANGELOG.md index 5649c4b4..ac1839db 100644 --- a/crates/gamut-dsp/CHANGELOG.md +++ b/crates/gamut-dsp/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.0.1](https://github.com/visualcommons/gamut/compare/gamut-dsp-v2.0.0...gamut-dsp-v2.0.1) - 2026-09-03 + +### Other + +- deny unsafe in the hot-path crates instead of forbidding it +- *(dsp)* share one deterministic generator across the transform sweeps + ## [2.0.0](https://github.com/justin13888/gamut/compare/gamut-dsp-v1.0.0...gamut-dsp-v2.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-dsp/Cargo.toml b/crates/gamut-dsp/Cargo.toml index a96204fb..062b1423 100644 --- a/crates/gamut-dsp/Cargo.toml +++ b/crates/gamut-dsp/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-dsp" description = "Shared fixed-point DSP kernels for the gamut codecs: bit-exact AV1 transform kernels (DCT/ADST/identity/WHT), cross-codec integer rounding/clamp math, and µ-law companding." -version = "2.0.0" +version = "2.0.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-exif/CHANGELOG.md b/crates/gamut-exif/CHANGELOG.md index d440e53b..35120610 100644 --- a/crates/gamut-exif/CHANGELOG.md +++ b/crates/gamut-exif/CHANGELOG.md @@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.0](https://github.com/visualcommons/gamut/compare/gamut-exif-v1.0.0...gamut-exif-v1.1.0) - 2026-09-03 + +### Added + +- *(gamut-exif)* convert gps metadata to geocoordinates + +### Other + +- *(exif)* close the survivors of this crate's first mutation survey +- *(exif)* separate what equality covers from what it ignores + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-exif-v0.1.1...gamut-exif-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-exif/Cargo.toml b/crates/gamut-exif/Cargo.toml index 9de775fe..e67849e5 100644 --- a/crates/gamut-exif/Cargo.toml +++ b/crates/gamut-exif/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-exif" description = "EXIF (Exif 3.0 / CIPA DC-008) image metadata parser and serializer, built on the shared TIFF/IFD core." -version = "1.0.0" +version = "1.1.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-ffi/CHANGELOG.md b/crates/gamut-ffi/CHANGELOG.md index 60b511eb..9a668414 100644 --- a/crates/gamut-ffi/CHANGELOG.md +++ b/crates/gamut-ffi/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.4](https://github.com/visualcommons/gamut/compare/gamut-ffi-v0.1.3...gamut-ffi-v0.1.4) - 2026-09-03 + +### Added + +- *(gamut-cmm)* new crate with the pipeline/stage model +- *(core)* add structured error diagnostics + ## [0.1.3](https://github.com/visualcommons/gamut/compare/gamut-ffi-v0.1.2...gamut-ffi-v0.1.3) - 2026-07-30 ### Other diff --git a/crates/gamut-ffi/Cargo.toml b/crates/gamut-ffi/Cargo.toml index 1672692a..f3d78c76 100644 --- a/crates/gamut-ffi/Cargo.toml +++ b/crates/gamut-ffi/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-ffi" description = "C-compatible FFI bindings for the gamut image codecs, for use from C, C++, Python, Go, and more." -version = "0.1.3" +version = "0.1.4" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-heic/CHANGELOG.md b/crates/gamut-heic/CHANGELOG.md index a19ef9f3..c3321952 100644 --- a/crates/gamut-heic/CHANGELOG.md +++ b/crates/gamut-heic/CHANGELOG.md @@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.3](https://github.com/visualcommons/gamut/compare/gamut-heic-v0.2.2...gamut-heic-v0.2.3) - 2026-09-03 + +### Added + +- *(heic)* locate the C2PA manifest store and report its byte range +- *(gamut-heic)* add the high-bit-depth RGBA16 presentation surface +- *(core)* add structured error diagnostics +- *(gamut-isobmff)* parse large and uuid boxes + +### Fixed + +- *(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)* 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 #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 + ## [0.2.2](https://github.com/justin13888/gamut/compare/gamut-heic-v0.2.1...gamut-heic-v0.2.2) - 2026-07-21 ### Other diff --git a/crates/gamut-heic/Cargo.toml b/crates/gamut-heic/Cargo.toml index 922963a3..cadff2dd 100644 --- a/crates/gamut-heic/Cargo.toml +++ b/crates/gamut-heic/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-heic" description = "HEIC/HEIF still-image container decoder (HEVC intra items in an ISOBMFF container) with a pluggable codestream-decoder hook." -version = "0.2.2" +version = "0.2.3" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-icc/CHANGELOG.md b/crates/gamut-icc/CHANGELOG.md index 510f3d49..efa4937e 100644 --- a/crates/gamut-icc/CHANGELOG.md +++ b/crates/gamut-icc/CHANGELOG.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.0.1](https://github.com/visualcommons/gamut/compare/gamut-icc-v1.0.0...gamut-icc-v1.0.1) - 2026-09-03 + +### Other + +- *(icc)* split the fixed-point conversions by claim +- merge origin/master into feat/324-cmm-scaffold +- merge origin/master into feat/322-lcms2-oracle-transforms +- adopt as_chunks for constant-size slice chunking + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-icc-v0.1.1...gamut-icc-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-icc/Cargo.toml b/crates/gamut-icc/Cargo.toml index bcd1d678..677617db 100644 --- a/crates/gamut-icc/Cargo.toml +++ b/crates/gamut-icc/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-icc" description = "ICC color profile (ICC.1:2022) parser and serializer — header, tag table, and tag element types — for gamut image metadata." -version = "1.0.0" +version = "1.0.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-ifd/CHANGELOG.md b/crates/gamut-ifd/CHANGELOG.md index 5336c4f9..1f41e1c5 100644 --- a/crates/gamut-ifd/CHANGELOG.md +++ b/crates/gamut-ifd/CHANGELOG.md @@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [3.0.0](https://github.com/visualcommons/gamut/compare/gamut-ifd-v2.0.1...gamut-ifd-v3.0.0) - 2026-09-03 + +### Added + +- *(ifd)* reserve a leading vendor preamble in the writer's layout +- *(ifd)* [**breaking**] name the bytes a file does not account for +- *(core)* add structured error diagnostics +- *(gamut-ifd)* add f64 value coercion + +### Fixed + +- *(ifd)* let the test suite compile under default features +- *(mutants)* retire an exclusion that was a coverage gap, not an equivalence +- *(ifd)* declare the preamble the way an audit reads it +- *(tiff)* reject non-progressing CCITT runs + +### Other + +- *(ifd)* close the mutation survivors the corpus pass left +- *(ifd)* pin where the pool resumes after jumping a pin +- *(ifd)* cover the pinned-span placement rules +- *(ifd)* state the read ledger's laws as executable invariants +- adopt as_chunks for constant-size slice chunking + ## [2.0.1](https://github.com/justin13888/gamut/compare/gamut-ifd-v2.0.0...gamut-ifd-v2.0.1) - 2026-07-20 ### Other diff --git a/crates/gamut-ifd/Cargo.toml b/crates/gamut-ifd/Cargo.toml index b83978a3..afb72c63 100644 --- a/crates/gamut-ifd/Cargo.toml +++ b/crates/gamut-ifd/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-ifd" description = "TIFF Image File Directory (IFD) container core — byte order, field types, and IFD read/write — shared by the TIFF codec and EXIF metadata." -version = "2.0.1" +version = "3.0.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-iptc/CHANGELOG.md b/crates/gamut-iptc/CHANGELOG.md index 04d0490d..bd64ba24 100644 --- a/crates/gamut-iptc/CHANGELOG.md +++ b/crates/gamut-iptc/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.0.1](https://github.com/visualcommons/gamut/compare/gamut-iptc-v1.0.0...gamut-iptc-v1.0.1) - 2026-09-03 + +### Other + +- *(iptc)* name the differential file for the convention its siblings use + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-iptc-v0.1.1...gamut-iptc-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-iptc/Cargo.toml b/crates/gamut-iptc/Cargo.toml index 2ee96a0d..8914058e 100644 --- a/crates/gamut-iptc/Cargo.toml +++ b/crates/gamut-iptc/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-iptc" description = "IPTC photo metadata: the legacy IIM/Photoshop-IRB codec, IPTC Core over XMP, and IIM-XMP reconciliation." -version = "1.0.0" +version = "1.0.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-isobmff/CHANGELOG.md b/crates/gamut-isobmff/CHANGELOG.md index 05f3074d..d4c3b86d 100644 --- a/crates/gamut-isobmff/CHANGELOG.md +++ b/crates/gamut-isobmff/CHANGELOG.md @@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.1.0](https://github.com/visualcommons/gamut/compare/gamut-isobmff-v2.0.1...gamut-isobmff-v2.1.0) - 2026-09-03 + +### Added + +- *(core)* add structured error diagnostics +- *(gamut-isobmff)* parse large and uuid boxes + +### Other + +- *(isobmff)* satisfy clippy::redundant_guards in the accounting test +- *(isobmff)* share the segment walk with avif and heic +- *(isobmff)* separate the largesize body from the cursor advance + ## [2.0.1](https://github.com/justin13888/gamut/compare/gamut-isobmff-v2.0.0...gamut-isobmff-v2.0.1) - 2026-07-20 ### Other diff --git a/crates/gamut-isobmff/Cargo.toml b/crates/gamut-isobmff/Cargo.toml index b81ed1fc..d54da996 100644 --- a/crates/gamut-isobmff/Cargo.toml +++ b/crates/gamut-isobmff/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-isobmff" description = "ISO Base Media File Format (ISOBMFF) still-image container: the typed box tree, with read/write, shared by the AVIF and HEIC codecs." -version = "2.0.1" +version = "2.1.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-jpeg/CHANGELOG.md b/crates/gamut-jpeg/CHANGELOG.md index aa52e740..6ce4e6ee 100644 --- a/crates/gamut-jpeg/CHANGELOG.md +++ b/crates/gamut-jpeg/CHANGELOG.md @@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.1](https://github.com/visualcommons/gamut/compare/gamut-jpeg-v0.1.0...gamut-jpeg-v0.1.1) - 2026-09-03 + +### Added + +- *(jpeg)* rate-distortion optimized coefficient selection +- *(jpeg)* accept caller-supplied quantization tables +- *(jpeg)* emit optimized baseline Huffman tables +- *(core)* add structured error diagnostics +- *(gamut-jpeg)* add decoder resource limits + +### Other + +- 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 +- *(jpeg)* ledger the RD-optimized coefficient selection +- *(jpeg)* ledger the caller-supplied quantization tables +- *(jpeg)* record the optimized baseline table surface + ## [0.1.0](https://github.com/justin13888/gamut/releases/tag/gamut-jpeg-v0.1.0) - 2026-07-18 ### Added diff --git a/crates/gamut-jpeg/Cargo.toml b/crates/gamut-jpeg/Cargo.toml index 525f447b..df9c6135 100644 --- a/crates/gamut-jpeg/Cargo.toml +++ b/crates/gamut-jpeg/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-jpeg" description = "Spec-compliant JPEG (ISO/IEC 10918 / ITU-T T.81) still-image codec." -version = "0.1.0" +version = "0.1.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-jxl-sys/CHANGELOG.md b/crates/gamut-jxl-sys/CHANGELOG.md index 7c206629..b5414b49 100644 --- a/crates/gamut-jxl-sys/CHANGELOG.md +++ b/crates/gamut-jxl-sys/CHANGELOG.md @@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.1](https://github.com/visualcommons/gamut/compare/gamut-jxl-sys-v0.1.0...gamut-jxl-sys-v0.1.1) - 2026-09-03 + +### Added + +- *(jxl-sys)* declare the MODULAR frame-setting id + +### Fixed + +- *(oracles)* bound every native build by the shared parallelism dial +- *(jxl-sys)* stop overriding the caller's cmake build parallelism + ## [0.1.0](https://github.com/justin13888/gamut/releases/tag/gamut-jxl-sys-v0.1.0) - 2026-07-18 ### Added diff --git a/crates/gamut-jxl-sys/Cargo.toml b/crates/gamut-jxl-sys/Cargo.toml index 41489eae..4f30c68d 100644 --- a/crates/gamut-jxl-sys/Cargo.toml +++ b/crates/gamut-jxl-sys/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-jxl-sys" description = "Static build of and hand-written FFI declarations for the reference libjxl, powering gamut-jxl's JPEG XL encoder." -version = "0.1.0" +version = "0.1.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-jxl/CHANGELOG.md b/crates/gamut-jxl/CHANGELOG.md index 0d12d33b..0135aa30 100644 --- a/crates/gamut-jxl/CHANGELOG.md +++ b/crates/gamut-jxl/CHANGELOG.md @@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.5.0](https://github.com/visualcommons/gamut/compare/gamut-jxl-v0.4.0...gamut-jxl-v0.5.0) - 2026-09-03 + +### Added + +- *(jxl)* [**breaking**] require an explicit policy for lossy presentation +- *(core)* add structured error diagnostics + +### Other + +- *(jxl)* separate registry sharing from equality semantics +- adopt as_chunks for constant-size slice chunking +- merge origin/master into feat/268-pixel-conversion +- *(jxl)* pin that colour-as-grayscale is refused before the decode +- close the mutation-testing gaps in the conversion paths +- merge origin/master into feat/268-pixel-conversion + ## [0.4.0](https://github.com/justin13888/gamut/compare/gamut-jxl-v0.3.0...gamut-jxl-v0.4.0) - 2026-07-20 ### Added diff --git a/crates/gamut-jxl/Cargo.toml b/crates/gamut-jxl/Cargo.toml index 4357ba3c..01545845 100644 --- a/crates/gamut-jxl/Cargo.toml +++ b/crates/gamut-jxl/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-jxl" description = "JPEG XL image encoder and decoder." -version = "0.4.0" +version = "0.5.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-metadata/CHANGELOG.md b/crates/gamut-metadata/CHANGELOG.md index 4e32f8af..11941bfe 100644 --- a/crates/gamut-metadata/CHANGELOG.md +++ b/crates/gamut-metadata/CHANGELOG.md @@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.0.0](https://github.com/visualcommons/gamut/compare/gamut-metadata-v1.0.0...gamut-metadata-v2.0.0) - 2026-09-03 + +### Added + +- *(metadata)* add the C2PA manifest store as a fourth carrier +- *(metadata)* [**breaking**] carry downstream typed models in a namespaced extension table + +### Other + +- *(metadata)* pin that remove_extension matches on namespace AND key +- *(metadata)* pin each extension-removal claim separately +- *(metadata)* cite the clause that defines the C2PA manifest store +- *(metadata)* state what the C2PA carrier actually guarantees +- *(metadata)* explain the C2PA carrier and the keystone carve-out +- *(metadata)* cover the C2PA carrier and its no-copy-forward policy + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-metadata-v0.1.1...gamut-metadata-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-metadata/Cargo.toml b/crates/gamut-metadata/Cargo.toml index 468d5d9f..562cea3b 100644 --- a/crates/gamut-metadata/Cargo.toml +++ b/crates/gamut-metadata/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-metadata" description = "Unified image-metadata facade over gamut's EXIF, XMP, ICC, and IPTC crates — extract from and embed into container metadata blocks." -version = "1.0.0" +version = "2.0.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-png/CHANGELOG.md b/crates/gamut-png/CHANGELOG.md index 450195db..5cc2bf97 100644 --- a/crates/gamut-png/CHANGELOG.md +++ b/crates/gamut-png/CHANGELOG.md @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.1](https://github.com/visualcommons/gamut/compare/gamut-png-v0.1.0...gamut-png-v0.1.1) - 2026-09-03 + +### Added + +- *(gamut-png)* read metadata without decoding pixels +- *(png)* route typed presentation through gamut-core convert +- *(core)* add structured error diagnostics + +### Other + +- *(png)* pin the tRNS overhead term with a translucent palette +- Merge pull request #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)* 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 + ## [0.1.0](https://github.com/justin13888/gamut/releases/tag/gamut-png-v0.1.0) - 2026-07-18 ### Added diff --git a/crates/gamut-png/Cargo.toml b/crates/gamut-png/Cargo.toml index 2abaa9d2..8000027a 100644 --- a/crates/gamut-png/Cargo.toml +++ b/crates/gamut-png/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-png" description = "Research-grade, space-efficient PNG (Portable Network Graphics) image encoder and spec-compliant decoder." -version = "0.1.0" +version = "0.1.1" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-riff/CHANGELOG.md b/crates/gamut-riff/CHANGELOG.md index 557a31f5..f2fb28f4 100644 --- a/crates/gamut-riff/CHANGELOG.md +++ b/crates/gamut-riff/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.0.0](https://github.com/visualcommons/gamut/compare/gamut-riff-v0.1.3...gamut-riff-v1.0.0) - 2026-09-03 + +### Added + +- *(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 + +### Other + +- *(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 + ## [0.1.3](https://github.com/visualcommons/gamut/compare/gamut-riff-v0.1.2...gamut-riff-v0.1.3) - 2026-07-30 ### Added diff --git a/crates/gamut-tiff/CHANGELOG.md b/crates/gamut-tiff/CHANGELOG.md index 2d6a9152..e244e159 100644 --- a/crates/gamut-tiff/CHANGELOG.md +++ b/crates/gamut-tiff/CHANGELOG.md @@ -7,6 +7,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.0](https://github.com/visualcommons/gamut/compare/gamut-tiff-v1.0.0...gamut-tiff-v1.1.0) - 2026-09-03 + +### Added + +- *(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 +- *(core)* add structured error diagnostics +- *(gamut-tiff)* support deflate compression + +### Fixed + +- *(tiff)* stop LZW decoding once the strip is satisfied +- *(tiff)* reject non-progressing CCITT runs + +### Other + +- *(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 + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-tiff-v0.2.0...gamut-tiff-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-tiff/Cargo.toml b/crates/gamut-tiff/Cargo.toml index 386402d1..56b575dd 100644 --- a/crates/gamut-tiff/Cargo.toml +++ b/crates/gamut-tiff/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-tiff" description = "TIFF 6.0 (Tagged Image File Format) image encoder and decoder." -version = "1.0.0" +version = "1.1.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-tonemap/CHANGELOG.md b/crates/gamut-tonemap/CHANGELOG.md index 14a20bb7..c6eaf781 100644 --- a/crates/gamut-tonemap/CHANGELOG.md +++ b/crates/gamut-tonemap/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.0](https://github.com/visualcommons/gamut/compare/gamut-tonemap-v1.0.0...gamut-tonemap-v1.1.0) - 2026-09-03 + +### 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 + +- *(fuzz)* drive the gamut-core and gamut-tonemap laws under libFuzzer +- *(tonemap)* state the ToneCurve contract as executable laws + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-tonemap-v0.1.2...gamut-tonemap-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-tonemap/Cargo.toml b/crates/gamut-tonemap/Cargo.toml index 51189ed9..f0671ae3 100644 --- a/crates/gamut-tonemap/Cargo.toml +++ b/crates/gamut-tonemap/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-tonemap" description = "Tone-mapping math primitives: built-in tone curves plus an extensible trait for custom operators." -version = "1.0.0" +version = "1.1.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-vvc/CHANGELOG.md b/crates/gamut-vvc/CHANGELOG.md index df89db14..2d42b3c5 100644 --- a/crates/gamut-vvc/CHANGELOG.md +++ b/crates/gamut-vvc/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.2](https://github.com/visualcommons/gamut/compare/gamut-vvc-v0.2.1...gamut-vvc-v0.2.2) - 2026-09-03 + +### Other + +- updated the following local packages: gamut-core, gamut-bitstream, gamut-color, gamut-dsp + ## [0.2.1](https://github.com/justin13888/gamut/compare/gamut-vvc-v0.2.0...gamut-vvc-v0.2.1) - 2026-07-18 ### Other diff --git a/crates/gamut-vvc/Cargo.toml b/crates/gamut-vvc/Cargo.toml index 381541ff..415031da 100644 --- a/crates/gamut-vvc/Cargo.toml +++ b/crates/gamut-vvc/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-vvc" description = "VVC (H.266) image encoder and decoder (intra-frame still-image coding)." -version = "0.2.1" +version = "0.2.2" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-wasm/CHANGELOG.md b/crates/gamut-wasm/CHANGELOG.md index 0a0da6f5..2f67cda1 100644 --- a/crates/gamut-wasm/CHANGELOG.md +++ b/crates/gamut-wasm/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.1.4](https://github.com/visualcommons/gamut/compare/gamut-wasm-v0.1.3...gamut-wasm-v0.1.4) - 2026-09-03 + +### Other + +- updated the following local packages: gamut + ## [0.1.3](https://github.com/visualcommons/gamut/compare/gamut-wasm-v0.1.2...gamut-wasm-v0.1.3) - 2026-07-30 ### Other diff --git a/crates/gamut-wasm/Cargo.toml b/crates/gamut-wasm/Cargo.toml index 24b44122..c5eb2106 100644 --- a/crates/gamut-wasm/Cargo.toml +++ b/crates/gamut-wasm/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-wasm" description = "WebAssembly bindings for the gamut image codecs, for running encoders in the browser." -version = "0.1.3" +version = "0.1.4" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-webp/CHANGELOG.md b/crates/gamut-webp/CHANGELOG.md index 26acec32..25e4ed18 100644 --- a/crates/gamut-webp/CHANGELOG.md +++ b/crates/gamut-webp/CHANGELOG.md @@ -7,6 +7,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.4.0](https://github.com/visualcommons/gamut/compare/gamut-webp-v0.3.1...gamut-webp-v0.4.0) - 2026-09-03 + +### Added + +- *(webp)* [**breaking**] require an explicit policy for lossy presentation +- *(core)* add structured error diagnostics + +### Fixed + +- *(webp)* guarantee the run-length loop advances +- *(webp)* discard a zero-length LZ77 match instead of looping on it + +### Other + +- *(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 +- close the mutation-testing gaps in the conversion paths +- merge origin/master into feat/268-pixel-conversion + ## [0.3.1](https://github.com/visualcommons/gamut/compare/gamut-webp-v0.3.0...gamut-webp-v0.3.1) - 2026-07-30 ### Added diff --git a/crates/gamut-webp/Cargo.toml b/crates/gamut-webp/Cargo.toml index cc971642..b201ec37 100644 --- a/crates/gamut-webp/Cargo.toml +++ b/crates/gamut-webp/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-webp" description = "WebP image encoder and decoder (intra-frame VP8/VP8L still images in a RIFF container)." -version = "0.3.1" +version = "0.4.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut-xmp/CHANGELOG.md b/crates/gamut-xmp/CHANGELOG.md index 00a87660..fb3c7bf7 100644 --- a/crates/gamut-xmp/CHANGELOG.md +++ b/crates/gamut-xmp/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.0](https://github.com/visualcommons/gamut/compare/gamut-xmp-v1.0.0...gamut-xmp-v1.1.0) - 2026-09-03 + +### Added + +- *(core)* add structured error diagnostics + +### Other + +- *(xmp)* separate the set/get round trip from the replacement rule + ## [1.0.0](https://github.com/justin13888/gamut/compare/gamut-xmp-v0.1.1...gamut-xmp-v1.0.0) - 2026-07-18 ### Added diff --git a/crates/gamut-xmp/Cargo.toml b/crates/gamut-xmp/Cargo.toml index 56fd7ac9..9fafb492 100644 --- a/crates/gamut-xmp/Cargo.toml +++ b/crates/gamut-xmp/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut-xmp" description = "XMP (Extensible Metadata Platform) RDF/XML metadata parser and serializer for gamut image metadata." -version = "1.0.0" +version = "1.1.0" edition.workspace = true rust-version.workspace = true authors.workspace = true diff --git a/crates/gamut/CHANGELOG.md b/crates/gamut/CHANGELOG.md index a6e1ee04..a79a512c 100644 --- a/crates/gamut/CHANGELOG.md +++ b/crates/gamut/CHANGELOG.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.3.3](https://github.com/visualcommons/gamut/compare/gamut-v0.3.2...gamut-v0.3.3) - 2026-09-03 + +### Other + +- *(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 + ## [0.3.2](https://github.com/visualcommons/gamut/compare/gamut-v0.3.1...gamut-v0.3.2) - 2026-07-30 ### Other diff --git a/crates/gamut/Cargo.toml b/crates/gamut/Cargo.toml index 6bbfa6f4..02dd2ac6 100644 --- a/crates/gamut/Cargo.toml +++ b/crates/gamut/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "gamut" description = "Space-efficient image encoding libraries — a unified API over per-format codecs, selected via Cargo features." -version = "0.3.2" +version = "0.3.3" edition.workspace = true rust-version.workspace = true authors.workspace = true