A seed variety test, and a metric that had to be gated before it was believed
Every other phase asks whether one video is correct. This asks whether two are different — the failure the suite could not see, since a generator that ignores its seed passes determinism, flash safety and liveness perfectly. Frames reduce to a structural descriptor built to be blind to the cheap axes and sensitive to the expensive ones: standardized luma kills exposure and palette, a Laplacian pyramid gives the radial spectrum, and the gradient-angle histogram is carried through a DFT magnitude so a rotation shifts it without moving it. Colour is measured and never counted; its only job is to expose the case where two seeds differ by a palette swap and nothing else. The score means nothing on its own, so it sits between two references the same instrument produced: a floor of how far one video travels from itself across its own sections, and a ceiling of the same pipeline with every layer recast at random. Two checks gate the instrument before any number from it is trusted — recolour must move structure ~0 while moving colour a lot, and a quarter turn must not move it at all. Three things this got wrong first and now does not. Averaging each video's probes into one descriptor washed out the structure being measured and put the floor above the ceiling; probes are matched instead, which is fair because the track is held fixed. Cosine distance on all-positive histograms scored unrelated scenes at 0.05, too compressed to be read; chi-square replaces it. Single-link clustering in the library sweep chained overlapping pairs into a fourteen-scene group that did not exist; complete-link means every pair inside a group is really a twin. The sweep runs against all 61 visualizations, and it finds what the per-scene distinct gate cannot, because that one compares raw pixels and structural twins are merely differently coloured. Both rendered gates fail as committed. That is the point of them: separation is 0.07 against a 0.35 target, two 4-cliques of scenes are one look each, and a third of the library is never cast. The instrument passes; the generator does not. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -59,6 +59,31 @@ npm run lint:scenes # determinism grep + scene schema/shader agreement
|
||||
`http://localhost:5180/checks.html` runs the GPU gates for every phase. Add
|
||||
`?slow=1` for the full suite, `?phase=5` for one phase.
|
||||
|
||||
### Seed variety test
|
||||
|
||||
Every other phase asks whether one video is correct. Phase 12 asks whether two
|
||||
videos are *different* — the one failure the rest of the suite cannot see, since
|
||||
a generator that ignores its seed passes determinism and liveness perfectly.
|
||||
|
||||
```
|
||||
http://localhost:5180/checks.html?variety=1
|
||||
```
|
||||
|
||||
Frames are reduced to a structural descriptor that is deliberately blind to
|
||||
brightness, contrast, hue and rotation, and sensitive to feature scale,
|
||||
orientation structure, composition, texture statistics and motion. Colour is
|
||||
measured but never counted — its job is to expose the case where two seeds
|
||||
differ only in palette. The score sits between two references the same
|
||||
instrument produced: the **floor** is how far one video travels from itself
|
||||
across its own sections, the **ceiling** is the same pipeline with every layer
|
||||
recast at random. Two checks gate the instrument itself before any number from
|
||||
it is trusted.
|
||||
|
||||
The report also sweeps **all** visualizations in the library, every pair, and
|
||||
names the structural twins — different scenes that are the same look in
|
||||
different colours, which the per-scene `distinct` gate cannot catch because it
|
||||
compares raw pixels.
|
||||
|
||||
## Adding a scene
|
||||
|
||||
Quick walkthrough: `HOWTO-visualizers.md`.
|
||||
|
||||
Reference in New Issue
Block a user