| Filename | Latest commit message | Latest commit date |
|---|---|---|
A frame rarely reads the table at 0, so the frames alone did not catch a table without §7.6's clamp (the second implementation passed with it). The corpus now states the table's SHA-256 and its entries at nine values, and both implementations check them. Co-Authored-By: Claude Opus 5.5 <[email protected]> |
||
| .. | ||
| identities | ||
| tracks | ||
| generator.wfg | ||
| README.md | ||
| seeded.wfg | ||
| seeded.wfi | ||
| training.json | ||
| vectors.json | ||
live-conformance/avatar-face — faces from keypoints
The corpus of extensions/avatars.md §12: vectors.json, the
inputs it reads, and the two files its generator writes beside it.
| file | what | written by |
|---|---|---|
generator.wfg |
the registered generator (§7.2), WFG1 |
tools/wai_avatar_face_train.py |
identities/face1.wfi, identities/face2.wfi |
identity priors (§7.3) of two faces held out of the generator's training | the same tool |
tracks/face1.json, tracks/face2.json |
their keypoint tracks: {"identity", "keypoints"}, each frame K pairs [x, y] in sixteenths of a pixel |
the same tool |
training.json |
the tool's report: its arguments, seeds and losses, the generator's digest, and §7.9's measurement | the same tool |
seeded.wfg, seeded.wfi |
a generator of three keypoints at 16 × 16 drawn from SHA-256 of a label, trained on nothing, and a picture that is an integer function of a label | wai_avatar_face_vectors gen |
vectors.json |
the vectors | wai_avatar_face_vectors gen |
vectors.json names every input and written file with its SHA-256, and holds:
mask_table: the SHA-256 of §7.6's table (each entry a 16-bit little-endian signed integer,T[0]first) and, inat, its entries at some valuesv, each[v, T[v + 32768]];forms: files of §7.2 to §7.4, each{"name", "form", "hex", "outcome"}with, where it reads,read(the header's fields; for an identity its keypoints and the SHA-256 of its picture; for a segment its fields and every frame's keypoints in sixteenths of a pixel) and, where it is refused,reason;frames: each{"name", "generator", "identity", "keypoints"}, the files by name and the driving keypoints in sixteenths of a pixel, with the SHA-256 of the warped picture (warped_sha256), of the keypoint maps (maps_sha256: each value a 16-bit little-endian unsigned integer, in[K][h][w]order) and of the frame (frame_sha256), each picture RGB8 with rows top to bottom; for the seeded generator alsowarpedandframein hexadecimal. The registered generator's frames are those of every frame of both tracks, each keypoint rounded to a multiple of 4 sixteenths, ties up, as the cases' segments carry them;cases: each a case of §9.1: itspolicy(dual_layer,assistiveandsecond_layer, synthesis §11.1's, andgeneration); its records as JSON texts, list by list (identities,tracks,claims,reviews,label_policy,player); theobjectsit holds, each aWAI1envelope in hexadecimal; and thegeneratorsandpriorsit holds, each{"file"}naming a file of this directory or{"hex"}.
Face-equivalence. For each vector, a conforming implementation reaches what it states: a
form's reading or refusal code; a frame's three digests (and samples); a case's outcome, and
refused, its reason and where, at (["identity", i], ["track", i], or ["synthesis", …]
with synthesis's own place), accepted, the statements of §9.3 (identities, tracks,
claims, labels, reviews_presented, visual_icon). An implementation that reaches another
does not conform.
Provenance. No picture, recording or footage from outside this repository is in the corpus or
was used to train its generator. tools/wai_avatar_face_train.py draws every face it trains on and
every face of this corpus from a seeded parameter set with a renderer of its own (a shaded head,
hair, eyes with lids and pupils, brows, a nose, a mouth with lips and teeth, a background), and
places the sixteen keypoints the parameters put on each picture exactly. Its run with seed
20261022, --identities 6000 and its defaults otherwise (a 64 × 64 generator of widths 24, 48
and 64, gauss 1024, bg 6554) trained the generator; a second run over the same output
directory with --measure-only trained the keypoint detector, measured, and wrote the identity
priors, the tracks and the report. The training is in floating point and is not claimed to
regenerate the same bytes on another machine; the inputs' bytes are what is pinned.
wai_avatar_face_vectors gen writes the rest from fixed seeds: every key is SHA-256 of a label
and an index, every time is a constant, and Ed25519 signing is deterministic.
Licences. Everything here is this repository's work, under its licence (Apache-2.0): the
renderer, the generated faces and tracks, and the generator trained on them. No third-party
weights, data or code were downloaded to make it. Before choosing to train one, the open
keypoint-driven face-reenactment generators were surveyed with their licences (extensions/avatars.md
§7.9): of those surveyed, the networks whose weights carry a permissive licence need operators
wai-ops/1 does not define, and the rest carry a non-commercial licence, grant no licence, or
state none for their weights.
python3 -I ../avatar_face_verify.py .
cargo run --release --no-default-features --features avatar_face --bin wai_avatar_face_vectors -- verify . # from wai/wai-rs, with this directory's path