vhs
Original:🇺🇸 English
Translated
Record terminal sessions as GIF/MP4/WebM using VHS (Charm.sh). Use when: create demo GIF, record terminal, terminal recording, demo video, tape file, animate CLI, screencast terminal, showcase command output, README demo, document CLI tool, generate terminal animation.
10installs
Sourcemarcfargas/skills
Added on
NPX Install
npx skill4agent add marcfargas/skills vhsTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →VHS — Terminal Recorder
VHS records terminal sessions from declarative files.
Produces GIF, MP4, or WebM. No screen recording needed — deterministic and reproducible.
.tapeInstall
bash
scoop install vhs # Windows
brew install vhs # macOSRequires (for video encoding). if missing.
ffmpegscoop install ffmpegQuick Start
bash
# Create example tape
vhs new demo.tape
# Record
vhs demo.tape
# Validate without running
vhs validate demo.tape
# Publish to vhs.charm.sh (get shareable URL)
vhs publish demo.gifTape File Syntax
Output
tape
Output demo.gif # GIF (default, best for READMEs)
Output demo.mp4 # MP4 video
Output demo.webm # WebM videoMultiple lines = multiple formats from one tape.
OutputSettings
tape
Set Shell "bash" # Shell to use
Set FontSize 14 # Font size (default 22 — too large for most)
Set FontFamily "JetBrains Mono" # Font family
Set Width 1200 # Terminal width in pixels
Set Height 600 # Terminal height in pixels
Set Padding 15 # Padding around terminal
Set TypingSpeed 50ms # Delay between keystrokes (default 50ms)
Set Theme "Dracula" # Color theme (see Themes below)
Set Framerate 30 # GIF framerate
Set PlaybackSpeed 1.0 # Playback speed multiplier
Set LoopOffset 80% # Where GIF loop restarts (% from end)
Set WindowBar "Colorful" # Window bar: Rings, RingsRight, Colorful, ColorfulRight
Set WindowBarSize 40 # Window bar height in pixels
Set BorderRadius 8 # Terminal border radius
Set MarginFill "#1a1a2e" # Background color outside terminal
Set Margin 20 # Margin size (needs MarginFill)Commands
tape
Type "echo hello" # Type characters
Type@100ms "slow typing" # Type with custom speed
Enter # Press Enter
Enter 3 # Press Enter 3 times
Sleep 2s # Wait 2 seconds
Sleep 500ms # Wait 500 milliseconds
# Special keys
Backspace 5 # Delete 5 chars
Tab # Tab completion
Ctrl+C # Interrupt
Ctrl+L # Clear screen
Up # Arrow up (history)
Down # Arrow down
Left 3 # Move cursor left 3
Right 3 # Move cursor right 3
Escape # Escape key
Space # Space key
PageUp # Page up
PageDown # Page down
# Visibility
Hide # Hide commands from output
Show # Show commands againRequire
tape
Require git # Fail if git not in PATH
Require nodeRecommended Defaults
For README demos and documentation:
tape
Output demo.gif
Set Shell "bash"
Set FontSize 14
Set Width 1100
Set Height 600
Set Theme "Dracula"
Set TypingSpeed 30ms
Set Padding 15
Set WindowBar "Colorful"
Set BorderRadius 8Patterns
Simple command showcase
tape
Output demo.gif
Set Shell "bash"
Set FontSize 14
Set Width 1100
Set Height 600
Set Theme "Dracula"
Set TypingSpeed 30ms
Set Padding 15
Type "my-tool --help"
Enter
Sleep 3s
Type "my-tool run --input data.json"
Enter
Sleep 5sComplex commands (use a wrapper script)
VHS tape files don't support shell quoting well. For complex commands
with quotes, pipes, or multi-line args, write a helper script:
bash
# demo-run.sh
#!/bin/bash
echo "Running analysis..."
my-tool analyze --format json | jq '.results[] | .name'tape
Type "bash demo-run.sh"
Enter
Sleep 10sHide setup, show the interesting part
tape
# Setup (hidden from recording)
Hide
Type "cd /tmp/demo-project"
Enter
Type "export DEMO_MODE=1"
Enter
Sleep 1s
Show
# Visible demo starts here
Type "my-tool init"
Enter
Sleep 3sBefore/after comparison
tape
Type "# Before:"
Enter
Type "cat config.yaml"
Enter
Sleep 3s
Type "# After running fix:"
Enter
Type "my-tool fix config.yaml"
Enter
Sleep 3s
Type "cat config.yaml"
Enter
Sleep 3sRecording live (interactive)
bash
# Record your terminal actions into a tape file
vhs record > my-session.tape
# Then edit the tape to clean up timing, add sleeps, etc.
vhs my-session.tapeThemes
Popular themes for demos:
| Theme | Style |
|---|---|
| Dark purple — high contrast, popular |
| Dark warm — modern, easy on eyes |
| Dark blue — clean |
| Dark muted — professional |
| Dark warm/retro |
| Classic |
| Familiar to devs |
| VS Code-like |
List all:
vhs themesTips
- FontSize 14 — default 22 is way too large for most demos
- TypingSpeed 25-40ms — 50ms default feels slow; 25ms is snappy
- Sleep after Enter — always add after commands to let output render
Sleep - Long commands — use wrapper scripts, VHS quoting is fragile
- GIF size — keep under 5MB for GitHub READMEs; reduce Framerate, Height, or duration
- Multiple outputs — one tape can produce +
.gifsimultaneously.mp4 - Publish — gives a shareable URL on vhs.charm.sh
vhs publish demo.gif - Validate first — catches syntax errors without recording
vhs validate demo.tape
Gotchas
- No shell expansion in Type — types the literal string; variable expansion happens when bash executes it, not in the tape
Type "echo $HOME" - Quoting — avoid nested quotes in Type. Use wrapper scripts for complex commands
- Windows paths — use forward slashes in Type strings (not
C:/dev/...)C:\dev\... - Long recordings — GIFs get huge fast. Keep demos under 30 seconds. Use to compress
Set PlaybackSpeed 2.0 - Terminal size — if output wraps weird, increase Width or reduce FontSize