Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
daymade avatar

Cli Demo Generator

  • 707 installs
  • 1.3k repo stars
  • Updated August 4, 2026
  • daymade/claude-code-skills

cli-demo-generator is an agent skill that turns terminal command sequences into polished animated GIF demos using VHS recordings for developers who need visual CLI documentation in READMEs or product pages.

About

cli-demo-generator is an agent skill from daymade/claude-code-skills that records professional animated CLI demos as GIFs with VHS terminal tapes. The workflow handles tape file creation, self-bootstrapping demos with hidden setup steps, output noise filtering, post-processing speed-up, and frame-level verification. Four approaches span fully automated to manual tape editing. Developers reach for cli-demo-generator when README files need animated proof of a CLI workflow, product pages must showcase shell commands, or requests mention "record terminal", "VHS tape", "demo GIF", or "animate my CLI". The skill targets documentation and marketing visuals for command-line tools rather than changing tool behavior.

  • Generates professional animated CLI demos as GIFs using VHS terminal recordings
  • Four approaches from fully automated to pixel-precise manual control
  • Supports self-bootstrapping demos that clean their own state before recording
  • Handles tape file creation, output noise filtering, post-processing speed-up, and frame-level verification
  • Triggers on requests to record terminal, create VHS tape, demo GIF, or animate any CLI workflow

Cli Demo Generator by the numbers

  • 707 all-time installs (skills.sh)
  • Ranked #331 of 1,879 Documentation skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/daymade/claude-code-skills --skill cli-demo-generator

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs707
repo stars1.3k
Last updatedAugust 4, 2026
Repositorydaymade/claude-code-skills

How do you record terminal demos as GIFs for READMEs?

Turn any sequence of terminal commands into a polished, animated GIF demo for READMEs, documentation, or product showcases.

Who is it for?

CLI maintainers and developer advocates who need repeatable VHS-recorded GIF demos for README files or product documentation.

Skip if: GUI application screen recordings or teams documenting workflows without any terminal or shell component.

When should I use this skill?

A user asks to record terminal output, create a VHS tape, generate a CLI demo GIF, or animate shell commands for a README.

What you get

VHS .tape files, polished animated GIF demos, filtered terminal output, and frame-verified recordings ready for README or docs embed.

  • VHS .tape file
  • Animated GIF demo
  • Noise-filtered terminal recording

By the numbers

  • Documents four approaches for creating CLI demo GIFs
  • Uses VHS terminal recording with frame-level verification

Files

SKILL.mdMarkdownGitHub ↗

CLI Demo Generator

Create professional animated CLI demos. Four approaches, from fully automated to pixel-precise manual control.

Quick Start

Simplest path — give commands, get GIF:

python3 ${CLAUDE_SKILL_DIR}/scripts/auto_generate_demo.py \
  -c "npm install my-package" \
  -c "npm run build" \
  -o demo.gif

Self-bootstrapping demo — for repeatable recordings that clean their own state:

python3 ${CLAUDE_SKILL_DIR}/scripts/auto_generate_demo.py \
  -c "npm install my-package" \
  -c "npm run build" \
  -o demo.gif \
  --bootstrap "npm uninstall my-package 2>/dev/null" \
  --speed 2

Critical: VHS Parser Limitations

VHS Type strings cannot contain $, \", or backticks. These cause parse errors:

# FAILS — VHS parser rejects special chars
Type "echo \"hello $USER\""
Type "claude() { command claude \"$@\"; }"

Workaround: base64 encode the command, decode at runtime:

# 1. Encode your complex command
echo 'claude() { command claude "$@" 2>&1 | grep -v "noise"; }' | base64
# Output: Y2xhdWRlKCkgey4uLn0K

# 2. Use in tape
Type "echo Y2xhdWRlKCkgey4uLn0K | base64 -d > /tmp/wrapper.sh && source /tmp/wrapper.sh"

This pattern is essential for output filtering, function definitions, and any command with shell special characters.

Approaches

1. Automated Generation (Recommended)

python3 ${CLAUDE_SKILL_DIR}/scripts/auto_generate_demo.py \
  -c "command1" -c "command2" \
  -o output.gif \
  --title "My Demo" \
  --theme "Catppuccin Latte" \
  --font-size 24 \
  --width 1400 --height 600
FlagDefaultDescription
-crequiredCommand to include (repeatable)
-orequiredOutput GIF path
--titlenoneTitle shown at start
--themeDraculaVHS theme name
--font-size16Font size in pt
--width1400Terminal width px
--height700Terminal height px
--bootstrapnoneHidden setup command (repeatable)
--filternoneRegex pattern to filter from output
--speed1Playback speed multiplier (uses gifsicle)
--no-executefalseGenerate .tape only

Smart timing: install/build/test/deploy → 3s, ls/pwd/echo → 1s, others → 2s.

2. Batch Generation

Create multiple demos from one config:

# demos.yaml
demos:
  - name: "Install"
    output: "install.gif"
    commands: ["npm install my-package"]
  - name: "Usage"
    output: "usage.gif"
    commands: ["my-package --help", "my-package run"]
python3 ${CLAUDE_SKILL_DIR}/scripts/batch_generate.py demos.yaml --output-dir ./gifs

3. Interactive Recording

Record a live terminal session:

bash ${CLAUDE_SKILL_DIR}/scripts/record_interactive.sh output.gif --theme "Catppuccin Latte"
# Type commands naturally, Ctrl+D when done

Requires asciinema (brew install asciinema).

4. Manual Tape File

For maximum control, write a tape directly. Templates in assets/templates/:

  • basic.tape — simple command sequence
  • interactive.tape — typing simulation
  • self-bootstrap.tapeself-cleaning demo with hidden setup (recommended for repeatable demos)

Advanced Patterns

These patterns come from production use. See references/advanced_patterns.md for full details.

Self-Bootstrapping Demos

Demos that clean previous state, set up environment, and hide all of it from the viewer:

Hide
Type "cleanup-previous-state 2>/dev/null"
Enter
Sleep 2s
Type "clear"
Enter
Sleep 500ms
Show

Type "the-command-users-see"
Enter
Sleep 3s

The Hide → commands → clearShow sequence is critical. clear wipes the terminal buffer so hidden commands don't leak into the GIF.

Output Noise Filtering

Filter noisy progress lines from commands that produce verbose output:

# Hidden: create a wrapper function that filters noise
Hide
Type "echo <base64-encoded-wrapper> | base64 -d > /tmp/w.sh && source /tmp/w.sh"
Enter
Sleep 500ms
Type "clear"
Enter
Sleep 500ms
Show

# Visible: clean command, filtered output
Type "my-noisy-command"
Enter
Sleep 3s

Frame Verification

After recording, verify GIF content by extracting key frames:

# Extract frames at specific positions
ffmpeg -i demo.gif -vf "select=eq(n\,100)" -frames:v 1 /tmp/frame.png -y 2>/dev/null

# View the frame (Claude can read images)
# Use Read tool on /tmp/frame.png to verify content

Post-Processing Speed-Up

Use gifsicle to speed up recordings without re-recording:

# 2x speed (halve frame delay)
gifsicle -d2 original.gif "#0-" > fast.gif

# 1.5x speed
gifsicle -d4 original.gif "#0-" > faster.gif

Template Placeholder Pattern

Keep tape files generic with placeholders, replace at build time:

# In tape file
Type "claude plugin marketplace add MARKETPLACE_REPO"

# In build script
sed "s|MARKETPLACE_REPO|$DETECTED_REPO|g" template.tape > rendered.tape
vhs rendered.tape

Timing & Sizing Reference

ContextWidthHeightFontDuration
README/docs140060016-2010-20s
Presentation18009002415-30s
Compact embed120060014-1610-15s
Wide output16008001615-30s

See references/best_practices.md for detailed guidelines.

Troubleshooting

ProblemSolution
VHS not installedbrew install charmbracelet/tap/vhs
gifsicle not installedbrew install gifsicle
GIF too largeReduce dimensions, sleep times, or use --speed 2
Text wraps/breaksIncrease --width or decrease --font-size
VHS parse error on $ or \"Use base64 encoding (see Critical section above)
Hidden commands leak into GIFAdd clear + Sleep 500ms before Show
Commands execute before previous finishesIncrease Sleep duration

Dependencies

Required: VHS (brew install charmbracelet/tap/vhs)

Optional: gifsicle (speed-up), asciinema (interactive recording), ffmpeg (frame verification), PyYAML (batch YAML configs)

Related skills

How it compares

Choose cli-demo-generator for scripted terminal GIFs; use screen-capture tools when the demo is GUI-only without shell commands.

FAQ

What tool does cli-demo-generator use to record terminal demos?

cli-demo-generator uses VHS terminal recordings to produce animated GIF demos. The skill handles tape file creation, noise filtering, speed post-processing, and frame-level verification.

Can cli-demo-generator hide setup commands in a demo?

cli-demo-generator supports self-bootstrapping demos with hidden setup steps so published GIFs show only the user-facing CLI flow. Four approaches cover automated and manual tape workflows.

When should developers invoke cli-demo-generator?

cli-demo-generator fits README or docs that need visual proof of shell workflows. Trigger phrases include "record terminal", "VHS tape", "demo GIF", or "animate my CLI".

Documentationdocsintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.