Documentation screenshots¶
The docs embed SVG screenshots and animated GIFs of the CLI in action, all
generated from the manifest at docs/screenshots/shots.yaml — you never
craft or maintain them by hand. Static command output is rendered with
freeze (SVG); interactive TUI and
montage clips with vhs (GIF). Every
asset is captured against the bundled, read-only ioniq-2017 profile with no
device attached, so it's reproducible on any machine and contains no
owner-specific data.
brew install charmbracelet/tap/freeze vhs # one-time: the render tools
make screenshots # regenerate everything
make screenshots-only ONLY="bus decode-plot" # regenerate a subset
make screenshots-check # verify assets present + commands still run
--check (run by CI and the pre-push hook) is deliberately light: it needs
neither freeze nor vhs, and never byte-compares images (they aren't
reproducible). It verifies every manifest asset exists, flags orphans, and runs
each screenshotted command device-free — so a renamed command or dropped flag
fails the check and tells you to regenerate. When you change the output of a
screenshotted command, re-render and commit the updated asset. To add a shot,
append an entry to shots.yaml (a rich command or an anim tape) and
regenerate. Do not screenshot views that surface free-text capture
notes/labels (e.g. captures --sessions) — those can leak PII into public docs.
A few anim assets are marked live: true — recordings of the monitor TUI
polling a real car. These are non-reproducible, so the default make
screenshots skips them and --check only verifies the file is present. Re-record
one manually when a vehicle is reachable: