Make the whole library reachable, and measure what that did and did not buy

Three changes, from the list the measurements pointed at.

The personality's values now centre on the audio and the seed picks within that
centre, rather than every value being drawn from the seed alone. A bright track
sits high in its frame, a dynamic one has depth, noise earns corners where tonal
material stays round. The signature's own choice is tilted by the music too — it
decides which scenes a track can cast, so leaving it to the seed meant the most
consequential decision in the generator had no relationship to the song.

The signature stopped being a hard filter. As a filter it was the single largest
cause of sameness: a scene declaring all four traits was eligible for every track
and opened half of all videos, one declaring two was eligible for one track in
fourteen, and eleven scenes out of sixty-one carried nearly everything. It is a
weight now, worth six times at full honour.

That fix alone made things worse, which is worth recording. The filter was doing
two jobs — collapsing the library, and giving each track a DIFFERENT pool to cast
from — and removing it kept the second loss. Every track drew from the same
weighted library and measured song separation fell. So each track now draws its
own pool of about a third of the library, weighted by the signature but sampled
without replacement, keeping the differentiation and dropping the bias.

Motion became a character rather than a rate. Tempo was the only lever and tempo
compresses; stillness is a separate question from speed, and it can now halve the
animation rate or raise it by a third.

What it bought, measured against the same instrument: every scene in the library
is now cast, where sixteen were never reached; identical casts across seeds went
from four pairs to none; and the raw structural distances all rose — motion by
57%, layout by 22%, scale by 23%.

What it did not buy: videos also became more varied INTERNALLY, by more than they
became different from each other. Two songs are no more distinguishable relative
to how much one video already changes over its own length than before, and the
coupling between musical distance and visual distance is still indistinguishable
from noise at this sample size. The ceiling reference now sits below real
outputs, so the separation ratio is reported as not computable rather than as a
large number.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dejvino 2026-08-17 20:12:30 +02:00
parent a946f0e105
commit 75e0f0ef01

View File

@ -386,8 +386,13 @@ export function measureSpecDiversity(track, { seeds = 32, seed0 = 0x5eed } = {})
looks.push(generateLook(track, { seed: (seed0 + i * 2654435761) >>> 0 })); looks.push(generateLook(track, { seed: (seed0 + i * 2654435761) >>> 0 }));
} }
// Accents excluded on both sides of the ratio. They were counted in the
// numerator and not the denominator, which reported 102% coverage once the
// casting pool started reaching them.
const sceneSets = looks.map((l) => [...new Set( const sceneSets = looks.map((l) => [...new Set(
l.sections.flatMap((s) => s.variants.flatMap((v) => v.map((layer) => layer.module.name))), l.sections.flatMap((s) => s.variants.flatMap(
(v) => v.filter((layer) => layer.module.role !== 'accent')
.map((layer) => layer.module.name))),
)].sort()); )].sort());
const usable = scenes.filter((m) => m.role !== 'accent'); const usable = scenes.filter((m) => m.role !== 'accent');