一键导入
vhs-tape
Create a VHS .tape file for recording terminal GIF/MP4/WebM demos. Use when the user wants to create a .tape file for VHS terminal recordings.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create a VHS .tape file for recording terminal GIF/MP4/WebM demos. Use when the user wants to create a .tape file for VHS terminal recordings.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Prepare and cut TFx semver releases (CHANGELOG, validation, tagging via Taskfile). Use when the user asks to prepare a release, update CHANGELOG for a new version, cut vX.Y.Z, run release:patch/minor/major, or avoid post-merge release failures.
Upgrade macOS Go and all module dependencies in TFx via task go:upgrade, then verify build and tests. Use when the user asks to upgrade Go, update dependencies, bump go.mod, or refresh packages.
This skill should be used when the user says "reflection", "reflect on the changes", "reflect on this session", or asks to capture lessons learned from the current conversation.
Create a new function in the data/ package following project conventions
| name | vhs-tape |
| description | Create a VHS .tape file for recording terminal GIF/MP4/WebM demos. Use when the user wants to create a .tape file for VHS terminal recordings. |
VHS reads .tape files and renders them into terminal recordings (GIF, MP4, WebM, or PNG sequences). A tape file is a linear sequence of commands — no loops or conditionals.
Set commands MUST come before all interaction commands. Order within the Set block does not matter.
Output demo.gif # GIF (most common)
Output demo.mp4 # MP4 video
Output demo.webm # WebM video
Output frames/ # Directory for PNG frame sequence
Output demo.txt # ASCII text (for testing)
Require echo # Abort with clear error if program not in PATH
Require fzf
Multiple Output lines are allowed — VHS renders to all of them in one run.
Set Width 1200 # pixels (default: 1200)
Set Height 600 # pixels (default: 600)
Set FontSize 22 # pt (default: 22)
Set FontFamily "RobotoMono Nerd Font" # must be installed on system
Set LetterSpacing 1 # multiplier (default: 1.0)
Set LineHeight 1.2 # multiplier (default: 1.0)
Set Shell "bash" # bash, zsh, fish, etc.
Set TypingSpeed 50ms # delay between typed chars (default: 50ms)
Set Framerate 60 # capture framerate (default: 50)
Set PlaybackSpeed 2 # output speed multiplier (0.5 = slow, 2.0 = fast)
Set LoopOffset 60.4 # % into GIF where looping restarts (avoids blank-terminal loop)
Set LoopOffset 20.99% # same, with explicit %
Set WaitTimeout 15s # how long Wait polls before failing (default: 15s)
Set WaitPattern /regex/ # default pattern for bare Wait command
Set Theme "Catppuccin Mocha" # named theme (350+ available; run `vhs themes` to list)
Set Theme "Dracula"
Set Theme "Nord"
Set Theme "TokyoNight"
Set Theme "One Dark"
Set Theme "Gruvbox Dark"
Set Theme "Rose Pine"
# Inline JSON custom theme:
Set Theme { "name": "Custom", "black": "#535178", "red": "#ef6487", "green": "#5eca89", "yellow": "#fdd877", "blue": "#65aef7", "purple": "#aa7ff0", "cyan": "#43c1be", "white": "#ffffff", "brightBlack": "#535178", "brightRed": "#ef6487", "brightGreen": "#5eca89", "brightYellow": "#fdd877", "brightBlue": "#65aef7", "brightPurple": "#aa7ff0", "brightCyan": "#43c1be", "brightWhite": "#ffffff", "background": "#29283b", "foreground": "#b3b0d6", "selectionBackground": "#3d3c58", "cursorColor": "#b3b0d6" }
Set Padding 50 # internal padding in pixels
Set Margin 20 # external border in pixels
Set MarginFill "#6B50FF" # margin area color (hex)
Set BorderRadius 10 # corner radius in pixels
Set CursorBlink false # cursor animation (default: true)
Set WindowBar "Colorful" # colored traffic-light buttons (recommended for docs)
Set WindowBar "ColorfulRight" # buttons on the right
Set WindowBar "Rings" # monochrome rings
Set WindowBar "RingsRight" # rings on the right
Set WindowBarSize 40 # height in pixels
Sleep 1s # 1 second
Sleep 500ms # 500 milliseconds
Sleep .5 # 0.5 seconds
Sleep 1m # 1 minute
| Format | Example | Meaning |
|---|---|---|
ms suffix | 500ms | Milliseconds |
s suffix | 1.5s | Seconds |
m suffix | 1m | Minutes |
| Decimal | .5 | 0.5 seconds |
Type "hello world" # type at global TypingSpeed
Type 'single quotes work'
Type `backticks work`
Type@500ms "slow emphasis" # override speed for this command only
Type@10ms "fast burst"
Syntax: <Key>[@duration] [count]
Enter # press Enter once
Enter 3 # press Enter 3 times
Enter@100ms 3 # press 3 times with 100ms between each
Backspace
Backspace 2
Backspace@200ms 5
Delete
Delete 2
Insert
Tab
Tab 2
Space
Space 3
Escape
Up
Down
Left
Right
Up 2
Down@50ms 3
PageUp
PageDown
PageUp 2
PageDown@100ms 3
ScrollUp
ScrollDown
ScrollUp 2
ScrollDown@100ms 2
Ctrl+C
Ctrl+L
Ctrl+R
Ctrl+D
Ctrl+Z
Ctrl+A # any letter
Ctrl+Left # ctrl + arrow
Ctrl+Right
Ctrl+Up
Ctrl+Down
Alt+.
Alt+L
Alt+b
Alt+f
Shift+Enter
Shift+Tab
# Multiple modifiers:
Ctrl+Shift+Alt+C
Ctrl+Alt+Down
Blocks until a regex matches or the timeout expires. More reliable than guessing Sleep durations for commands with variable output time.
Wait # wait using WaitPattern setting
Wait /regex/ # wait until regex matches current line
Wait+Line /regex/ # explicit: match current line
Wait+Screen /regex/ # match anywhere on screen buffer
Wait@5s /pattern/ # 5-second timeout override for this Wait
Wait+Screen@10s /done/
Polls every 10ms. Uses Go regex syntax.
Hide setup boilerplate (prompt customization, cd, env exports) from the recording:
Hide
Type "export PS1='$ '"
Enter
Sleep 300ms
Type "cd /tmp/demo"
Enter
Sleep 300ms
Show
# Recording content starts here
Capture a single PNG frame at the current moment:
Screenshot examples/output.png
Copy "text to copy" # copy to clipboard
Paste # paste clipboard contents into terminal
Env HOME "/tmp/demo"
Env FOO "bar"
Include another tape file's commands inline:
Source setup.tape
Source common/header.tape
# This is a comment
Set commands first — they must precede any interaction commands.Hide/Show for setup — hide shell prompt changes, cd commands, env exports that clutter the demo.Sleep after commands — give the terminal time to render output before the next keystroke or the recording ends.Wait instead of long Sleep for commands with variable duration — Wait /\$\s/ waits for the prompt to return rather than guessing.Require to fail fast with a clear error if a dependency is missing.Output lines — produce GIF + MP4 in one run.Set LoopOffset — set to the percentage where the action starts so the loop feels natural, not jumping to a blank terminal.Set WindowBar "Colorful" — adds macOS window chrome; makes demos look polished in documentation.Type@speed modifiers — use slow typing for emphasis, fast for showing speed.Source for shared setup — put common Set blocks and Hide/Show setup in a shared tape for reuse.# tfx demo recording
Output demo/tfx-demo.gif
Output demo/tfx-demo.mp4
Require tfx
Set Shell "zsh"
Set Width 1200
Set Height 600
Set FontSize 14
Set FontFamily "RobotoMono Nerd Font"
Set Theme "Catppuccin Mocha"
Set Padding 20
Set WindowBar "Colorful"
Set BorderRadius 8
Set TypingSpeed 100ms
Set Framerate 60
Set WaitTimeout 30s
Sleep 1s
Type "./tfx tui"
Enter
Sleep 2s
# ============================================================
# RECORDING STARTS HERE
# ============================================================
vhs demo.tape # execute a tape file
vhs new demo.tape # create a starter tape file
vhs record > session.tape # record a live terminal session to tape
vhs themes # list all 350+ available theme names
vhs manual # view the full manual
Create a .tape file for: $ARGUMENTS