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:
parent
a946f0e105
commit
75e0f0ef01
@ -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');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user