VHS — Record Terminal Sessions as GIFs and Videos
VHS by Charmbracelet lets you write terminal recordings as code. Define commands in a .tape file, and VHS generates beautiful GIFs, MP4s, or WebMs — perfect for documentation, README demos, and project showcases.
What it is
VHS is a tool by Charmbracelet that turns terminal recordings into code. You write a .tape file describing the commands to execute, and VHS produces high-quality GIFs, MP4s, or WebMs. No screen recording software, no manual trimming, and fully reproducible output.
Developer advocates, open-source maintainers, and documentation writers use VHS to create polished terminal demos for README files, blog posts, and project showcases without the inconsistency of manual screen captures.
How it saves time or tokens
VHS replaces the manual workflow of recording a terminal session, trimming the output, and converting formats. A .tape file is version-controlled and reproducible, so updating a demo for a new version means editing a text file and re-running VHS. No more re-recording from scratch when commands change.
How to use
- Install VHS using Homebrew, Go install, or download the binary from the releases page.
- Write a .tape file with commands, timing, and display settings.
- Run
vhs your-file.tapeto generate the output GIF, MP4, or WebM.
Example
# demo.tape - VHS recording script
Output demo.gif
Set FontSize 14
Set Width 1200
Set Height 600
Type "echo 'Hello from VHS'"
Enter
Sleep 1s
Type "ls -la"
Enter
Sleep 2s
Type "cat README.md | head -20"
Enter
Sleep 3s
# Generate the GIF
vhs demo.tape
# Output: demo.gif (ready for README or docs)
Related on TokRepo
- AI Tools for Documentation — Tools for creating and maintaining technical documentation
- AI Tools for Content — Content creation and media tools
Common pitfalls
- Setting Sleep durations too short, making the output feel rushed and hard to follow.
- Using system-specific commands in .tape files that break on other operating systems or CI environments.
- Generating very large GIFs by recording long sessions. Keep demos under 30 seconds for README use.
Frequently Asked Questions
VHS supports GIF, MP4, and WebM output formats. You specify the format using the Output directive in the .tape file. GIF is the most common for README files, while MP4 and WebM offer better quality for documentation sites.
Yes. VHS runs headlessly and can be executed in CI environments. This lets you auto-generate updated demo GIFs whenever your CLI tool changes, keeping documentation in sync with code.
On macOS, use brew install charmbracelet/tap/vhs. On Linux, download the binary from the GitHub releases page. VHS also requires ffmpeg and a terminal rendering engine, which are bundled in most installation methods.
Yes. VHS can type text, press keys (Tab, Enter, Ctrl+C), and interact with terminal UIs. The .tape format supports key presses, mouse events, and timing controls for recording interactive tools.
Yes. VHS is open source under the MIT license, published by Charmbracelet on GitHub. It is free for personal and commercial use.
Citations (3)
- VHS GitHub— Terminal recordings as code with .tape files
- VHS README— GIF, MP4, and WebM output support
- Charmbracelet— Charmbracelet terminal tools ecosystem
Related on TokRepo
Discussion
Related Assets
doctest — The Fastest Feature-Rich C++ Testing Framework
doctest is a single-header C++ testing framework designed for minimal compile-time overhead and maximum speed.
Chai — BDD/TDD Assertion Library for Node.js
Chai is a flexible assertion library for Node.js and browsers that supports expect, should, and assert styles.
Supertest — HTTP Assertion Library for Node.js APIs
Supertest provides a high-level API for testing HTTP servers in Node.js with fluent assertion chaining.