open-standards/wai/live-conformance/splat
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 5c9aff43c1 wai: register wai.splat.exact — registry, wire identifiers, SPEC §5, CHANGELOG, the corpus README and the CI step
The record wai.splat.exact; the document kinds wai-splat-commitment and
wai-splat-view, the scheme wai-splat-render:i1, and the proposed glTF
extension name EXT_gaussian_splatting_compression_wai under a new wire
identifier kind, gltf-extension (schema enum, REGISTRY.md prose). The
wai-conformance.yml step runs the module's tests and splat_exact_verify.py,
and its paths take the extension, its schema and wai_ops_check.py. The
extension's §11 records the GPU run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 03:33:47 -04:00
..
assets splat-exact: the extension text, the draft schema, and corpus cases that separate every check 2026-10-22 03:22:48 -04:00
README.md wai: register wai.splat.exact — registry, wire identifiers, SPEC §5, CHANGELOG, the corpus README and the CI step 2026-10-22 03:33:47 -04:00
vectors.json splat-exact: the extension text, the draft schema, and corpus cases that separate every check 2026-10-22 03:22:48 -04:00

live-conformance/splat — exact splats

The corpus of extensions/splat-exact.md §11: glTF 2.0 assets that carry a wai.splat.int_codec object through EXT_gaussian_splatting_compression_wai (a compression extension of KHR_gaussian_splatting), the origin's commitments to frames of wai-splat-render:i1 at canonical poses, origin claims, and sinks' view statements.

  • assets/<asset>.gltf — an asset's JSON. Its buffer 0 is assets/<scene>.bin: the object's WAI1 envelope, then (where the asset carries it) the parameter set's one file. Its buffer 1, where it has a commitment, is assets/<asset>.commitment.json, the commitment's JCS text. An asset's buffers are named by uri beside it.
  • vectors.json — the index. held maps a parameter set's SHA-256 to the committed file that holds it (paths relative to wai/). Each case names its asset, the sets it holds (held), the splat set's origin claim (origin, a text or null), its view statements (statements, texts), and what a verifier gives it (expect): refused with its reason and its place (at: asset, commitment, view n, origin or statement n), or accepted with the statements of §9.3: the object's content hash, the attributes digest, n_gaussians, each canonical frames digest, and each statement's canonical and class.

Exact-splat equivalence. For each case, a conforming verifier reaches the outcome, place and statements it states. Every code of §10 refuses a case. Among the refused cases are the negative controls §11 names: cluster_reordered (frames committed with a tie of distance broken by the greater index), statement_frame (a frame rendered without the low pass, which does not recompute), cluster_wrong_splats (a commitment over another scene's attributes) and statement_pose (a pose outside the pinned set claimed canonical).

Provenance. Generated here: wai_splat_exact_vectors gen writes every file. Its scenes:

  • shell — the learned cloud of ../../wai-rs/tests/vectors/int_splat/: its payload splat.wis1 and its synthesis splat_gs.bin, which tools/wai_int_splat_export.py trained on a seeded procedural cloud (that directory's README states it). The set is held by digest, not carried in the asset.
  • cluster and tiny — authored here as integer attribute bytes: Gaussians placed by hand (a pair at exactly equal distance from the first pose's eye, elongated and rotated ones, a zero quaternion, one partly off the frame, one inside the near plane and one too wide on screen at the fourth pose), and the rest drawn from a fixed SHA-256 stream. They are carried through the identity set (§11): a one-layer WHM1 network that decodes each latent value to one byte, so the planes are coded as they are. tiny13 and tiny_negscale are tiny with thirteen planes and with a scale range below zero.

Every key is SHA-256 of the corpus's label and an index, every time is a constant, and Ed25519 signing is deterministic, so every file is the same bytes on every machine. No image, model or text here comes from outside the repository.

cd ../../wai-rs
cargo run --no-default-features --features splat_exact --bin wai_splat_exact_vectors -- gen ../live-conformance/splat
cargo run --no-default-features --features splat_exact --bin wai_splat_exact_vectors -- verify ../live-conformance/splat
python3 -I ../live-conformance/splat_exact_verify.py ../live-conformance/splat

The second implementation decodes each payload with the repository's other second implementations (int-payload-conformance/int_payload_verify.py's parser and rANS decoder, and tools/wai_ops_check.py's whm1/1 lowering and interpreter) and renders each view with its own integer renderer. --png DIR writes each committed frame as a PNG.