Bring Your VHS Tapes Straight Into Atmos Casts
VHS provides a concise, readable DSL for scripting terminal recordings: type a command, press a key, pause, and wait for output. Its GIF and video exports are useful for sharing, but committing regenerated media files grows your repository, and VHS does not export asciicast recordings. Atmos lets you keep that scripting language and record compact, text-based .cast files alongside your code in version control.
The Problem
A recording script is easy to review in Git. A history of rendered MP4s and GIFs is much heavier to keep around. Asciicast files store timed terminal output as text, so you can version the recording itself without adding a new video file every time a demo changes.
The Fix
Atmos now interprets a supported subset of VHS tape scripts and records them as asciicast files. Keep the .tape script and .cast recording in Git, play the recording with the Atmos cast player, and render MP4s, GIFs, or screenshots when you need media to embed elsewhere.
How to Use It
Record a tape directly with atmos cast record:
atmos cast record demo/hero.tape --output=hero.cast
Render the saved recording when you need a video or animation:
atmos cast render hero.cast --mp4=hero.mp4 --gif=hero.gif
You can also record a tape as a workflow step:
steps:
- name: hero-demo
type: cast
mode: session
source: demo/hero.tape
output:
cast: hero.cast
The tape runs through Atmos's recorder without requiring the vhs binary. Atmos installs the managed rendering tools automatically when you request GIF or MP4 output.
Supported VHS Features
Atmos supports the core recording instructions:
- Typing and interaction:
Type, Enter, arrow keys, and supported key combinations drive a terminal session. - Timing and presentation:
Sleep, pattern-basedWait, typing speeds,Hide/Show, andScreenshotcontrol what the recording captures. - Reusable scripts and settings:
Source,Require,Output, shell selection, and terminal dimensions are supported. VHS pixel dimensions are converted to terminal columns and rows.
Typed text stays literal, including expressions such as {{.Names}} in a docker ps --format command. Session recordings start from a clean shell by default; use shell_init: user to include your normal shell configuration.
Atmos does not implement every VHS feature:
- Clipboard and environment directives:
Copy,Paste, andEnvare rejected. UseTypefor text and shellexportcommands or the cast step'senvfield for environment variables. - VHS rendering settings: options such as
Set FontFamily,Set Theme, andSet Framerateproduce warnings and are ignored. Atmos uses its own rendering system. - Implicit wait patterns: bare
Waitis rejected, andSet WaitPatternis ignored with a warning. Provide a pattern on each wait. - WebM output: the tape interpreter does not support this format. Use GIF or MP4 for rendered animations.
Use mode: session for these interactive instructions in one continuous terminal session, without per-command exit codes. For scripts that only type and execute commands, mode: steps checks each command's exit code. It rejects standalone keypresses and Hide/Show, and skips Sleep/Wait with a warning because commands execute synchronously. See the mode comparison for details.
Get Involved
See tape interpretation for the full compatibility reference, and atmos cast record to start recording.
