Skip to content

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 runwhat you getwhy it is not a documentation image
--frames 120 --out x.pnga clean 1280x720 frameit 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.pngthe right stimulus, through the real analyzerthe 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 120full size, and wrong three waysthe three calibration traps — a held beat, band magnitudes no music reaches, and a silent 64-band array

--frame-at is the first two combined:

Terminal window
# The picture the docs commit: full size, real dynamics, on the loudest beat
cargo 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.png

Hop 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.