Skip to main content

WAI Extension: Prior Carriage

Mirrored from the canonical text at commit 117bad22 ().

Status: Draft. Registers the wire forms a pin’s digest may cover — wai.prior.set, the listing of a parameter set (SPEC.md §3.1), and ISO/IEC 15938-17 (neural-network coding, “NNC”) — registers a candidate general-tensor payload, and fixes how an in-band signature inside such an artifact relates to WAI’s digest. The pin itself, its verification and its refusal reasons are SPEC.md §3.1. Reference impl: wai-rs — container::{Prior, PinRefusal}, pin::{verify_bytes, verify, parse_listing, write_listing, listing_of_dir}, codecs::prior_form, codecs::{CAP_PRIOR_SET, CAP_PRIOR_NNC, CAP_TENSOR_NNC}. Keywords MUST, MUST NOT, SHOULD, MAY are RFC 2119/8174.

1. A prior has a digest, and had no form

A neural capability decodes against a parameter set the envelope does not carry (SPEC.md §1). WAI pins that set’s identity (SPEC.md §3.1): a pin names an id, a sha256 over the whole parameter set and a determinism description, and MAY state a tier and the set it supersedes. A sink verifies the pin before it decodes, refuses a pin its sets do not satisfy with a named reason, and replicate soundness is gated on the declared tier (SPEC §7).

The digest fixes which bytes. Until now nothing fixed what those bytes are: the sink hashes whatever single file it registered — a serialized graph, an integer table bundle — so two implementations can hold the same network under different digests, or agree on a digest while reading the bytes differently. A determinism tier is a claim about reproducing a computation; the computation’s operand needs a form both ends can name.

2. The form field

"prior": {
  "id":          "int_hyper/q4",
  "sha256":      "<64 lowercase hexadecimal digits: the SHA-256 of the set, in its declared form>",
  "determinism": "int-rans/p16+int-synth",
  "form":        "wai.prior.set",
  "tier":        "decode-equivalence"
}

3. Registered form and candidate payload

capabilitypayloadstatus
wai.prior.setthe listing of a parameter set of one or more files (SPEC §3.1)registered; WAI-native; established exact (§5)
wai.prior.nncthe parameters of a trained network as a bitstream conforming to ISO/IEC 15938-17:2024 (NNC, 2nd edition: parameters and their incremental updates, DeepCABAC entropy coding)registered; a coded form
wai.tensor.nncgeneral tensorial data — split-inference feature maps, 3D/4D scene parameters — coded with NNCcandidate: payload format not fixed

The NNC entries are sink-supplied: wai-rs contains no NNC reader or writer. The standard’s reference software is itself standardized, in ISO/IEC 15938-18, Conformance and reference software for compression of neural networks (1st edition 2023, 2nd edition 2025). That part also supplies the conformance bitstreams and the procedures for testing decoders and bitstreams. Its scope makes the software an integral part of it, gives the requirements of ISO/IEC 15938-17 precedence over the software’s behaviour, and does not require an implementation to use it.

Registry classification (codecs::capability_*):

For the NNC entries:

wai.tensor.nnc is a candidate. Coding of general tensorial data is part of an NNC amendment that has not been published (§4), so this payload’s format is not fixed. Until the capability is pinned to a published edition, an encoder MUST NOT emit it and a sink MUST treat it as unsupported. SPEC §5 (Candidate capabilities) states the rule for every candidate, and codecs::is_candidate lists them. SPEC §8’s rule that a registered payload format never changes applies from the edition it is pinned to. It is registered now because split-inference feature maps and scene tensors are a payload class WAI otherwise has no name for. For Gaussian-splat attributes specifically, wai.splat.int_codec is the path with a portable hash (splat-equivalence); wai.tensor.nnc would be an interchange form with no determinism guarantee.

4. What is pinned, what is tracked, and why form is optional

The standard is at two different stages, and WAI treats them differently.

Pinned — the published editions. ISO/IEC 15938-17 is a published International Standard: 1st edition 2022, 2nd edition 2024. wai.prior.nnc is defined against the 2nd edition. Incremental-update coding is in that edition; it is not new, and an implementation MUST NOT describe it as forthcoming.

Tracked, not pinned — the amendment. MPEG’s press release for its 154th meeting (Santa Eulària, 27 April – 1 May 2026) states that a Committee Draft of an amendment to NNC was published. It adds lossless compression, including mixed lossy and lossless compression in one bitstream; source-data-type indication for models with limited bit depth; finer-grained configuration of the quantisation; configurable extensions for initialising, ordering and packing data; coding of other tensorial data, such as split-inference feature maps and the parameters of 3D and 4D scene representations; and signing and verification of data units, which the release says lets a verifier check the authenticity of a set of network parameters, part of a network, or an update. The amendment’s text was not read, so what a data-unit signature covers and how its key is identified are not known here. A committee draft can still change. No rule in this extension depends on any of it. When a published edition carries these features:

Optional, not recommended. form is MAY, and NNC is not a SHOULD, for three reasons:

  1. WAI treats royalty-free implementation as a precondition for adoption (SPEC Appendix C). It does not recommend, for every prior, a form whose royalty status it cannot establish.
  2. WAI’s reference implementation (wai-rs) cannot read or write NNC, so it cannot demonstrate the form end to end.
  3. Whether conforming NNC decoders reconstruct identical tensors is not established (§5), so the form cannot yet carry WAI’s strongest claims.

5. Determinism through a form

6. In-band data-unit signatures and WAI’s digest

MPEG’s press release for its 154th meeting states that the NNC amendment adds signing and verification of data units (§4). Its text was not read, and nothing here depends on its details. This section fixes the precedence now, so the two cannot diverge later. It takes the posture reconstruction-binding takes toward a C2PA manifest: WAI’s binding sits beside the standard’s, never in place of it.

7. Reference implementation

The files the reference decoders read from a set (informative). A set built for another decoder of the capability may name other files; a decode that needs a file the set lacks is refused with set_incomplete.

capabilityshapefiles the reference decoder reads from a set
wai.neural.int_mlicppone filemodel.wmb
wai.neural.int_synthone fileint_synth.json
wai.neural.encodec32, .dac, .mimi, .wavtokenizer, .snac, .video_bmshj2018one filedecoder.onnx
wai.neural.bmshj2018severaldecoder.onnx, cdfs_q<q>.json
wai.neural.mbt2018_meanseveralhyper_cdfs_q<q>.json, hyper_synthesis.onnx, gauss_cdfs_q<q>.json, synthesis.onnx
wai.neural.elicseveralthe mbt2018_mean files, and context.onnx
wai.neural.mlicpp, .mlicv2, .cmicseveralthe mbt2018_mean files, and entropy.onnx
wai.neural.glcseveralhyper_cdfs_q<q>.json, hyper_entropy.onnx, context_entropy.onnx, synthesis.onnx
wai.neural.dcvc_rt, .dcvc_fmseveralhyper_cdfs_q<q>.json, hyper_synthesis.onnx, gauss_cdfs_q<q>.json, temporal_decoder.onnx
wai.image.jpegaiseveralexact path: norm.json, weights/{hs,hyp,synth}_{y,uv}.json, weights/mcm{0..3}_y.json, weights/icci.json. Float path: hyper_scale_decoder_int_weights.json, model_constants.json, jpegai_normative_tables.json, me-tANS/bounds.csv, jpegai_factorized_cdfs.json, jpegai_scaler_vec.json, jpegai_dequant_consts.json, model/CCS_SGMM/tools_0/model_{y,uv}/common_modules/hyper_decoder.onnx, model/CCS_SGMM/tools_0/model_y/common_modules/MCM/stage{0..3}.onnx, model16/CCS_SGMM/tools_0/model_{y,uv}/synthesis16.onnx, e2e/pfchain/icci_{y_m6,uv_m3}.onnx. A set holding only the exact path’s files decodes through that path; where that path refuses (a non-default floating-point environment), the float path needs files the set lacks, and the decode is refused with set_incomplete instead of running on unverified files.
wai.neural.int_hyper, wai.video.int_hyper, wai.audio.int_codec, wai.splat.int_codec, wai.generate.spectralseveral, until an envelope decode path registers its files— (no envelope decode path in the reference sink)

8. Sources