### `wai.avatar.face`: a talking head from a signed keypoint track, the same bytes on every sink

- **The capability** ([avatars](extensions/avatars.md) §6 to §13) registers `wai.avatar.face`, a
  payload capability of class `GenerativeDeterministic`. A participant commits once to an
  **identity prior**, `WFI1`, a reference picture and its keypoints named by SHA-256, and sends
  **keypoint segments**, `WFK1`: the first frame's coordinates in full, the rest as Exp-Golomb
  coded deltas, in multiples of a stated step of a sixteenth of a pixel. Every sink generates
  the same frames from the segment, the prior and the **generator**, `WFG1`, the capability's
  parameter set of one file, pinned by SHA-256: **face-equivalence**, a case of
  generation-equivalence.
- **An integer generator.** The driver warps the reference picture to the driving keypoints with
  weights from integer-operators §2's exponential, a displacement rounded half away from zero and
  a bilinear sample in sixteenths of a pixel, and draws a map of each keypoint (§7.5). The
  network is ten 3 × 3 convolutions in a small encoder and decoder, lowered by `face-int/1` to
  one `WHG1` graph of `wai-ops/1-i32` operators (§7.6): weights at 2^12, biases at 2^27, Q15
  activations, one rounding per operator, and a mask from a `lut16` logistic table whose every
  entry is an integer computation. The frame is the warped picture and the generated one blended
  by the mask. The graph meets `acc64`.
- **The same frames on every fabric.** The registered generator's frames, and a seeded
  generator's, are the same bytes on the CPU, under `wasm32-wasip2` (the corpus regenerated by
  its generator built for wasm32 and run under wasmtime), and on a GPU with every graph on the
  device (Metal, at `acc64`, every graph compared with the interpreter), and the corpus's second
  implementation gives them in Python's integers (§7.8).
- **A generator trained here.** The open keypoint-driven face-reenactment generators were surveyed
  with their weights' licences first (§7.9): those whose weights carry a permissive licence need
  operators `wai-ops/1` does not define, and the others carry a non-commercial licence or none
  for their weights. `tools/wai_avatar_face_train.py` trains a generator on faces it draws itself,
  with the integer arithmetic emulated in a second phase, and measures it: PSNR and SSIM of the
  integer generator against the floating-point network and against the rendered faces, the
  keypoint error of a separately trained detector, and the keypoint track's bitrate (§7.9).
- **Who drove which face.** The participant's key signs the **identity record**
  (`wai-face-identity`) and each segment's **track record** (`wai-face-track`, chained by `seq`
  and `prev`, optionally stating each frame's SHA-256). That signature is provenance, not a
  permission rule: a track record signed by another key, or a segment that names another prior,
  is refused (§8.3).
- **Synthesis.** Every segment carries an origin claim of class `synthesized`, step `generate`,
  naming the generator and the track record (§8.4); the segment's envelope generates, so a claim
  of any other step is `class_understated`. A player's `present` entry names the frames' digest
  at `generation-equivalence`, a verifier that recomputes the frames refuses one that presents
  other pictures (`present_output_irreproducible`), and a label policy is held to synthesis §10
  (`label_not_shown`) (§8.5).
- **Mappings** (§11): to ISO/IEC 23090-39, read through the openly readable 3GPP TR 26.813
  V20.0.0 §6.3.4 and draft-ietf-avtcore-rtp-avatar-02 §4, its text not being openly readable
  (the identity prior as a component of a base avatar, the generator as a scheme of
  `proprietaryAnimations`, a frame as a landmark animation unit, the identity record beside
  `authenticationFeatures`, and what the unread text leaves open); to the draft's RTP carriage;
  and to the report's two-dimensional avatars, Avatar Representation Assertion, feature
  verification and evaluation framework.
- **Conformance** ([`live-conformance/avatar-face/`](live-conformance/avatar-face/)): the trained
  generator, two held-out faces and their tracks, and the training report, each pinned by
  SHA-256; the files of §7.2 to §7.4 read and refused; frames of a seeded and of the registered
  generator, by digest and, for the seeded ones, in full; and cases accepted and refused with
  every code of §10 and synthesis's `class_understated`, `present_output_irreproducible` and
  `label_not_shown`. `wai_avatar_face_vectors gen|verify`, `tests/avatar_face.rs` and
  `tests/avatar_face_gpu.rs` (feature `avatar_face`), and the second implementation
  `live-conformance/avatar_face_verify.py`. CI: a step of `wai-conformance.yml`'s independent
  verifiers, its job `avatar-face-wasip2`, and a step of `wai-ops-gpu.yml`'s `metal` job.

