vhs-cli-demos
Capturing CLI & TUI apps with VHS
VHS (by Charm) drives a real PTY through a headless terminal and records exactly what a user would see — so captures are pixel-accurate, scriptable, and reproducible in CI. It's the right tool for README GIFs, docs/marketing stills, release demos, and terminal visual-regression tests. This skill is the methodology; it transfers to any CLI or TUI regardless of language (Go, Rust, Python, Node, a shell script — VHS only sees the terminal).
The single most important thing to internalize: a .tape is a screenplay, not
a config file. You're directing a short scene — what's typed, how long each
beat holds, when the camera clicks. Two failure modes dominate, and both are
covered below: captures that look wrong (loading spinners, drifting dates, empty
state — a determinism problem) and GIFs that are enormous (10-20 MB — a
file-size problem with a one-line lossless fix).