A full-size frame under real audio
--frame-at <hop> (Plan 0088) captures one frame at the named hop and writes
it at the full --size. It is the flag every committed documentation image uses,
and the reason it had to exist is that neither of the other two paths produces a
picture worth keeping:
| what you run | what you get | why it is not a documentation image |
|---|---|---|
--frames 120 --out x.png | a clean 1280x720 frame | it runs under silence — the capture path builds a default analysis frame, so a band-driven preset photographs at its resting state |
--at 340 --out x.png | the right stimulus, through the real analyzer | the filmstrip scales every frame to a fixed tile height and draws a gutter round it: a single-hop --at at default size comes back 363x208 with a border |
--set bass=0.8 --frames 120 | full size, and wrong three ways | the three calibration traps — a held beat, band magnitudes no music reaches, and a silent 64-band array |
--frame-at is the first two combined:
# The picture the docs commit: full size, real dynamics, on the loudest beatcargo run -p standalone --example shot --release -- \ --preset-file presets/attractor_leviathan.toml \ --signal dynamic:110 --frame-at 300 --size 1280x720 --tier rich \ --out docs/images/gallery/attractor.pngHop 300 is not arbitrary, and a later hop is worse. dynamic:110’s phrase
builds for six beats and then rests for two at an amplitude of 0.04, and at
110 BPM with a 512-sample hop that rest begins at hop 306 — so anything past that
photographs a reactive preset at its resting state. 300 is the last hop of the
loudest beat: maximum energy, and the most scene time an accumulating family can
have before the rest. The arithmetic is in
scripts/docs-shots.mjs’s header, which is also
where a per-image deviation from 300 has to say why.
It shares everything with the strip except the write: the same hop numbering, the
same capture_audio call, and the same level table on stdout. A hop past the end
of the clip is an error, as --at’s is. Passing both --frame-at and --at is
an error — they answer the same question two ways — and --frame-at without
--signal/--audio is an error naming what is missing, since there is no clip to
advance through.
Two captures of the same (preset, signal, hop, size, tier) on one machine and
binary are byte-identical. That is a same-adapter claim only: the golden suite
treats a 0.02 mean channel difference as ordinary rasterizer drift, so
cross-machine byte equality does not hold and nothing here asserts it.
Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.