Skip to content

Rendering demo GIFs locally

The .tape files under tools/demos/ describe screen recordings of c9s flows for the README and docs site. They are rendered with VHS.

Prerequisites

brew install vhs ttyd
make build

Render the README demo

brew install vhs ttyd     # one-time
make build                # produces ./bin/c9s
vhs tools/demos/c9s.tape  # writes docs/assets/c9s.gif

The tape uses the GruvboxDark VHS theme (and a matching terminal background) so the recording harmonises with c9s's default k9s-gruvbox-dark skin — no skin switching during the demo, single dark theme throughout.

If the :acr-login myregistry step in the tape produces a different error than expected (e.g. az is not installed), the resulting InfoModal body will differ from a previous render but the user-visible flow is the same. Re-render any time you ship a feature you want surfaced in the README; the tape lives at tools/demos/c9s.tape and is the single source of truth for what the README GIF shows.

Render all tapes

mkdir -p docs/assets
for tape in tools/demos/*.tape; do
    echo "Rendering $tape..."
    vhs "$tape"
done

Render a specific tape

vhs tools/demos/containers.tape

The output GIF is written to docs/assets/<name>.gif per the Output directive in each tape file.

Why no CI workflow?

A previous version of this repo had .github/workflows/demos.yml to auto-render on a schedule. It was removed because rendering reliably in CI requires ttyd + vhs + a valid binary execution path that is sensitive to ubuntu-latest image changes. Render locally and commit the resulting GIFs; that's faster and more reliable.

If you want to re-add the workflow, see the VHS GitHub action docs.