open-standards/wai/wai-rs/tests/vectors/jpegai
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science f218af5ac0
Some checks failed
wai-ops-gpu integer operators on GPUs / does this change touch it (push) Successful in 25s
WAI operation catalogue / does this change touch it (push) Successful in 34s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 40s
wai-det-jpegai WAISM float-level module of record / does this change touch it (push) Successful in 1m7s
wai-app and Create / wai-app · does this change touch it (push) Successful in 46s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 1m23s
wai-ops integer operators / does this change touch it (push) Successful in 35s
wai-quantum for JavaScript / does this change touch it (push) Successful in 31s
wai-sink-android native sink library / does this change touch it (push) Successful in 18s
wai-pack / wai-pack · does this change touch it (push) Successful in 33s
wai-ledger service / does this change touch it (push) Successful in 1m37s
joule-moq-http live HTTP egress / joule-moq-http · does this change touch it (push) Successful in 1m48s
wai-audit collector and player integration / does this change touch it (push) Successful in 1m44s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 1m47s
wai-key-proxy / does this change touch it (push) Successful in 1m38s
wai-fleet service / does this change touch it (push) Successful in 1m38s
WAI Studio / does this change touch it (push) Successful in 22s
wai-sink-swift native sink package / does this change touch it (push) Successful in 51s
wai-quantum studio and desktop / does this change touch it (push) Successful in 1m9s
wai-ops-gpu integer operators on GPUs / Vulkan GPUs (framework-128gb) (push) Successful in 9m59s
wai-ops-gpu integer operators on GPUs / Vulkan GPUs (jetson-hub) (push) Successful in 11m56s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (push) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-quantum for JavaScript / javascript · linux (push) Has been cancelled
wai-pack / wai-pack · linux (push) Has been cancelled
wai-pack / wai-pack · linux-arm64 (push) Has been cancelled
wai-pack / wai-pack · macos (push) Has been cancelled
wai-pack / wai-pack · independent verifier (Python) (push) Has been cancelled
wai-pack / wai-pack · the floor through a media prober (push) Has been cancelled
wai-pack / wai-pack · dependency licences (push) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (push) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (push) Has been cancelled
wai-ledger service / service · linux (push) Has been cancelled
wai-ledger service / service · macos (push) Has been cancelled
wai-key-proxy / proxy · linux (push) Has been cancelled
wai-fleet service / service · linux (push) Has been cancelled
wai-fleet service / service · macos (push) Has been cancelled
WAI examples / WAI examples · does this change touch them (push) Has been cancelled
WAI examples / WAI examples · portable · linux (push) Has been cancelled
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (push) Has been cancelled
WAI examples / WAI examples · android-app · linux-arm64 (push) Has been cancelled
wai-det-jpegai WAISM float-level module of record / linux · both checkers, F1, F2 on wasmtime (Cranelift, Winch, Pulley) and Wasmi, the planted faults (push) Has been cancelled
wai-det-jpegai WAISM float-level module of record / linux-arm64 · both checkers, F1, F2 on wasmtime (Cranelift, Winch, Pulley) and Wasmi, the planted faults (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Has been cancelled
joule-moq-http live HTTP egress / joule-moq-http, every target (push) Has been cancelled
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 37s
wai-ops integer operators / linux-aarch64 (push) Successful in 4m58s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (push) Successful in 1m1s
wai-ops integer operators / independent checker (Python) (push) Successful in 26s
wai-ops integer operators / wasm32 under Node (push) Successful in 50s
wai-ops integer operators / linux-x86_64 (push) Successful in 3m6s
wai-ffmpeg / wai-ffmpeg · VLC 3.0.24 on the patched FFmpeg, playing the corpora (push) Failing after 4m37s
wai-gstreamer / wai-gstreamer · the plugin on a distribution's GStreamer (push) Failing after 5m59s
wai-ffmpeg / wai-ffmpeg · the series on FFmpeg 9.0.2, checked and fuzzed (push) Successful in 17m38s
wai-ops integer operators / macos-arm64 (push) Successful in 1m55s
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Successful in 9m49s
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Successful in 15m49s
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Successful in 20m14s
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Successful in 14m1s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 12m3s
wai.image.jpegai: the exact decoder decodes the configurations of its bundle's model its vectors hold; two the reference leaves to the machine are refused configuration_undetermined
Completeness row C8. The exact decoder (jpegai_decode) decoded one configuration, the
reference codestream's; every other trapped. With the jpegai/v1 bundle (tools_0, the
high-operation-point synthesis, one eICCI pair) it now decodes:
- pictures whose sides are 128, 192 or 256, any display cropping (the post-filters run on the
  displayed picture; eICCI pads a side to a multiple of 4 by repetition);
- beta_displacement_log from -1069 to 702, the chroma one independent or not;
- LSBS off per plane; residual variance scaling and GRFS both off, or GRFS alone (one band);
- each post-filter off; eICCI on any plane subset with the bundle's pair; no colour transform.
Held by 29 configuration vectors (wai-rs/tests/vectors/jpegai/configs/: synthetic pictures the
reference software's encoder coded at each configuration, its rate search off, and header
edits of them), each pinned to its RGB8 (the same digests on Linux x86_64 and macOS arm64),
decoded the direct way to the same bits at every stage, and max|d| = 1 from the reference
decoder's picture on 2.5% to 6.6% of samples (tests/jpegai_configs.rs; wai-jpegai-e2e.yml).

Refused with a new code, configuration_undetermined (D74): residual variance scaling without
GRFS (the reference dequantises it by an integer shift or a float division as its tables sit,
and raises on a CPU) and a signalled colour matrix (a library inverse, applied by its first
row alone; the reference raises before either). Everything else outside scope is refused as
before, each with a vector or a header test showing where.

Readings fixed (D74): the scale's incomplete 8x8 blocks pad with 1411; LEF samples its scale
surface at the binary32 quotient's floor; no colour transform gives the decoded components.
The float ONNX path keeps the reference codestream's configuration alone
(check_reference_configuration). The scale path's text (integer-operators 13.6.1) gains the
picture's sizes, beta and the RVS modes; 13.6.2 states the graphs' declared sizes as maxima.

Second reader: tools/wai_jpegai_header.py (standard library) reads and writes the headers and
gives each codestream's scope; tools/wai_jpegai_configs.py writes the manifest, checks that
reader against it and holds decodes to the reference pictures; tools/wai_jpegai_make_vectors.py
makes the vectors (the edits regenerate byte for byte).

Planted faults (cfg(wai_planted), never in an ordinary build), each caught by the vectors:
likely-pad-index, beta-after-likely, grfs-only-floor, rvs-mode-swap, lef-nearest-round,
icci-pad-index, crop-index, icci-subset-swap, lsbs-off-ignored, ct0-order.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-12 04:54:58 -05:00
..
configs wai.image.jpegai: the exact decoder decodes the configurations of its bundle's model its vectors hold; two the reference leaves to the machine are refused configuration_undetermined 2026-11-12 04:54:58 -05:00
README.md wai.image.jpegai: the exact decoder decodes the configurations of its bundle's model its vectors hold; two the reference leaves to the machine are refused configuration_undetermined 2026-11-12 04:54:58 -05:00
test256.bin wai: state what each determinism tier guarantees, and make replicate mean it 2026-09-28 18:25:52 -04:00

JPEG AI reference codestream and configuration vectors

test256.bin (367 bytes, SHA-256 99840e5f472423f5a1261c9ec219d12dc910e9623d752672555dfea69ea4a097) is the output of the ISO/IEC 6048-1 reference software's encoder (BSD-3) at its default operating point, for a 256×256 synthetic RGB test image (gradients and blocks). Segment layout: PIH 49 bytes, TON 63, RDI 1, SORP 97, SORS 47, SOZ 83.

It is the configuration the float decode path implements, and one of those wai::jpegai_decode implements, so the unit tests in src/jpegai_decode.rs use it to check the decoder's scope guard: the unmodified codestream is accepted, and copies with a single header field changed (β inside and past the encoder's range, model_id, the colour transform, an LSBS flag, display cropping) are accepted or refused as the field asks. Decoding it to pixels needs the sink-supplied weight bundle, which is not committed; see tests/jpegai_e2e_full.rs.

configs/

The configuration vectors (tests/jpegai_configs.rs): synthetic pictures, made from a seed by tools/wai_jpegai_make_vectors.py, coded by the reference software's encoder (its tree at b0f832cde85bd873fbfa995668b7d7c8d0b0c2fe, BSD licence, Copyright (c) 2010-2022, ITU/ISO/IEC) at one configuration each with its rate search off, and a few header edits of them, each named as such. made.json says how each was made; manifest.json, which tools/wai_jpegai_configs.py writes, gives each one's SHA-256, its scope from the second header reader (tools/wai_jpegai_header.py), and what the exact decoder does with it with the jpegai/v1 bundle: the digest and size of the RGB8 it decodes to, or the refusal. Each vector in scope carries the reference decoder's picture (<name>.ref.png, written by the reference decoder; for no colour transform, the picture it decodes rounded to 8 bits, because its file writer converts that picture again, decisions D74), and the manifest how far the exact decode is from it (apart). Vectors prefixed n- code the same configurations with eICCI off, because the reference encoder chooses eICCI's model per picture and the bundle carries one pair; e- vectors are header edits. x- vectors are refusal fixtures, header edits of test256 each setting one field where the decoder stops, so that every condition of its scope a codestream can fail is caught by a vector (wai_jpegai_configs.py --weakened leaves each condition out of the second reader in turn: 28 of its 29 are caught; the 29th, display cropping removing the whole picture, no codestream in scope can fail, its sides being at least 128 and the cropping at most 63).

Decode time, one host's reading

2026-11-12, 09:15 UTC: macOS arm64, a 28-core build host (one-minute load 12.6 at the start, 17.2 at the end), rustc 1.99.1, a release build, tests/jpegai_configs.rs with the bundle loaded once and each picture decoded through the integer operator set on the host's threads, milliseconds a picture. With eICCI on its three planes, 256 × 256: 931 to 992 (test256, the cropped, colour-0 and eICCI-subset edits of it; on one plane, 973 to 988); with eICCI off, 256 × 256: 319 to 331 (each β, LSBS, RVS, GRFS, post-filter and colour vector), 327 with it on no plane; 256 × 192 and 192 × 256: 239 and 248 (254 cropped); 192 × 192: 194; 128 × 256 and 256 × 128: 189 and 179; 128 × 128: 106; eICCI on one plane at 192 × 192 and 256 × 192: 541 and 717. The eICCI network, in float, is about two thirds of a 256 × 256 decode. No comparison is made with any other decoder.