open-standards/wai/wai-web/demo/int_hyper.html
Transaction Science 48e4f106ab
Some checks failed
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 3s
no-vanity-metrics / WAI public text names no comparison (pull_request) Successful in 3s
no-vanity-metrics / WAI public text names no company or product (pull_request) Successful in 3s
standards workspaces build + test / eoc-rs (pull_request) Successful in 1m57s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m23s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m12s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m10s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 3m37s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Successful in 23s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 3m51s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 13s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 2m13s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 26s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 46s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 1m7s
wai formal verification (integer core) / kani (pull_request) Successful in 4m26s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 1m1s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Successful in 1m15s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 57s
WAI section references / cited sections exist (pull_request) Successful in 11s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 3m51s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 1m43s
standards workspaces build + test / jouleclaw-rs (pull_request) Has been cancelled
standards workspaces build + test / aac-rs (pull_request) Has been cancelled
standards workspaces build + test / arl-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-ui-rs (pull_request) Has been cancelled
standards workspaces build + test / joulecontract-rs (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (pull_request) Has been cancelled
standards workspaces build + test / joulehook-rs (pull_request) Has been cancelled
standards workspaces build + test / map-rs (pull_request) Has been cancelled
standards workspaces build + test / mesh-rs (pull_request) Has been cancelled
standards workspaces build + test / openpay (pull_request) Has been cancelled
standards workspaces build + test / sense-rs (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backend (jcp-energy) (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
wai: the integer-payload pin, as SPEC §8 now permits it, and what is final
- SPEC §8 gains *Completing a registration*: a revision may complete the
  registration of a WAI-native string whose row named a decoder and fixed
  no byte layout by pinning one; envelopes carrying another form become
  non-conforming, still parse, and are listed in §5; "fixed forever"
  starts at the pin. SPEC §5, integer-payloads.md §1 and §11, REGISTRY and
  the CHANGELOG cite it, no longer say the pin redefines nothing, and say
  that wai.neural.int_hyper's and wai.video.int_hyper's rows named their
  decoders only.
- integer-payloads.md §8: a refusal of the payload or of the set against
  it is final; set_incomplete, not_dispatchable and unsupported_capability
  route as SPEC §4 routes a capability the sink cannot decode. The neural
  sink now moves on to the fallback (WAI1) or the next entry (WAI2) when
  the build has no decoder for the capability, as it does for
  set_incomplete.
- SPEC §4 and jwp-receipts §7.9 name int_payload::resolve as a place check
  5 runs. The CHANGELOG says what JSON the deprecated JSON entry points
  now refuse, flags the breaking API changes (neural::Decoded gains Int
  and is non_exhaustive; ParamSource and IntParams), and names the
  integer capabilities instead of counting them.
- The int_hyper demo says it decodes the export tool's debug JSON.
- Tests: the WIV1/WIA1/WIS1 equivalence tests say what they compare, and
  video_nk is anchored to the FNV-1a hashes recorded before this revision;
  the preflight's hyper-latent case now exceeds the parser's cap and says
  so. CI runs the conformance workflow on an edit of integer-payloads.md.

Test: neural_native_decode::an_integer_capability_without_a_decoder_moves_on_to_the_fallback
(added to the neural gates step).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 19:47:27 -04:00

58 lines
3.9 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WAI — integer-exact conditional codec, in-browser</title>
<style>
:root { --bg:#06080c; --bg2:#0d1117; --border:#1e2736; --text:#e6edf5; --text2:#8b99ad; --text3:#4a5568; --g:#00e5a0; --w:#f0b429; --mono:'JetBrains Mono','SF Mono',Menlo,monospace; }
* { box-sizing:border-box; margin:0; padding:0; }
body { background:var(--bg); color:var(--text); font-family:var(--mono); padding:24px; }
h1 { font-size:15px; letter-spacing:.04em; margin-bottom:4px; } h1 em { font-style:normal; color:var(--g); }
.sub { font-size:11px; color:var(--text2); margin-bottom:14px; max-width:880px; line-height:1.5; }
code { color:var(--w); }
canvas { background:#04060a; border:1px solid var(--border); border-radius:10px; display:block; image-rendering:pixelated; }
.hud { display:flex; gap:22px; margin-top:10px; font-size:11px; color:var(--text2); flex-wrap:wrap; }
.hud b { color:var(--text); } .hash { color:var(--g); }
#badge { font-size:12px; padding:4px 12px; border-radius:99px; display:inline-block; background:var(--bg2); color:var(--text2); border:1px solid var(--border); margin-top:10px; }
#badge.ok { background:rgba(0,229,160,.12); color:var(--g); border-color:rgba(0,229,160,.5); }
#badge.bad { background:rgba(255,107,107,.12); color:#ff6b6b; border-color:rgba(255,107,107,.5); }
.note { margin-top:14px; font-size:10.5px; color:var(--text3); max-width:880px; line-height:1.55; }
.note b { color:var(--text2); }
</style>
</head>
<body>
<h1>WAI <em>integer-exact conditional codec</em> — in-browser, no ML runtime</h1>
<p class="sub">
This tab decodes the export tool's debug form of a <code>wai.neural.int_hyper</code> bitstream
(<code>cond_bitstream.json</code>; the payload an envelope carries is <code>WIH1</code>, which
<code>decodeWih1</code> reads): a factorized side-stream <code>z</code> and the
Gaussian-conditional main stream <code>y</code>, both rANS-coded. It decodes them to RGB with the
<b>same pure-i64 Rust</b> that decodes natively, compiled to wasm32 — <b>no onnxruntime-web, no WebGPU,
no float anywhere</b>. The <i>whole</i> path is integer: factorized <code>z</code> → integer
hyper-decoder → integer-σ entropy bucketing → integer synthesis. Because of that (the integer-entropy
contract) the reconstruction is byte-identical on every machine, so the page re-checks its FNV-1a against
the hash the native reference produced — a pretrained learned codec verified client-side, no server.
</p>
<canvas id="c" width="512" height="512"></canvas>
<div id="badge">loading model…</div>
<div class="hud">
<span>image <b id="dims">—</b></span>
<span>bitstream <b id="bits">—</b></span>
<span>quality <b id="psnr">—</b></span>
<span>decoded hash <b class="hash" id="got">—</b></span>
<span>native hash <b class="hash" id="want">—</b></span>
</div>
<p class="note">
<b>Why the whole decode is integer:</b> a float learned codec's entropy decode can desync on ~1e-5 of
cross-platform drift in the scale σ, so its output is reproducible only on the same build.
<code>int_hyper</code> is the pretrained mbt2018_mean mean-scale hyperprior, post-training-quantized to
integer (CI requires its decode within 1&nbsp;dB of the same model's float decode on a pinned test
photograph), and its entire decode is integer, so the hash above is portable: this browser, a native
sink, and the conformance corpus all produce the same bytes. The wire carries only the bitstream (its
size is shown above); the model is the installed codec. <b>Note:</b> the model files are large (PTQ weights) and not committed —
generate them with <code>tools/wai_sota_int_synth_export.py</code> into <code>demo/int_hyper/</code>.
</p>
<script type="module" src="int_hyper.js"></script>
</body>
</html>