How to Record a Terminal GIF
Step-by-step guide to recording terminal sessions as GIF animations using VHS, asciinema, and AgentGIF CLI.
1. 前提条件
录制终端 GIF 需要以下工具:
- VHS — a terminal recorder by Charm that converts scripted terminal sessions into GIFs
- ttyd——终端 Web 服务器(VHS 依赖项,macOS 上自动安装)
- ffmpeg——用于视频编码(macOS 上自动安装)
VHS 的工作原理是读取描述按键、命令和时序的 .tape 文件——然后在虚拟终端中回放这些操作并将输出捕获为 GIF。
2. 安装 VHS
| 平台 | 安装命令 |
|---|---|
| macOS | brew install vhs |
| Ubuntu/Debian | sudo mkdir -p /etc/apt/keyrings && curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg && echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list && sudo apt update && sudo apt install vhs |
| Arch Linux | yay -S vhs |
| Go | go install github.com/charmbracelet/vhs@latest |
验证安装:
vhs --version
3. 创建 Tape 文件
Tape 文件是一个纯文本脚本,告诉 VHS 输入什么、何时等待以及使用什么设置。创建一个名为 demo.tape 的文件:
Output demo.gif
Set Shell "bash"
Set FontSize 16
Set Width 1000
Set Height 580
Set Theme "Catppuccin Mocha"
Type "echo 'Hello, world!'"
Enter
Sleep 2s
Type "ls -la"
Enter
Sleep 3s
核心命令
| 命令 | 描述 | 示例 |
|---|---|---|
Output | 设置输出文件路径 | Output "demo.gif" |
Type | 输入文本(模拟按键) | Type "git status" |
Enter | 按 Enter 键 | Enter |
Sleep | 等待一段时间 | Sleep 2s |
Ctrl+C | 发送键盘快捷键 | Ctrl+C |
Hide | 停止录制(用于设置) | Hide |
Show | 恢复录制 | Show |
4. 配置设置
将 Set 命令放在 tape 文件顶部,位于所有 Type 命令之前。
AgentGIF 推荐设置
Set Shell "zsh"
Set FontSize 15
Set Width 1000
Set Height 580
Set Padding 20
Set Theme "Catppuccin Mocha"
Set TypingSpeed 50ms
Set CursorBlink false
所有可用设置
| 设置项 | 默认值 | 描述 |
|---|---|---|
Shell | "bash" | 使用的 Shell(bash、zsh、fish、sh) |
FontSize | 14 | 字体大小(像素) |
Width | 800 | 终端宽度(像素) |
Height | 600 | 终端高度(像素) |
Padding | 0 | 终端周围内边距 |
Theme | "default" | Color theme (see theme gallery) |
TypingSpeed | 50ms | 按键间延迟 |
Framerate | 50 | GIF 每秒帧数 |
PlaybackSpeed | 1 | 播放速度倍率 |
CursorBlink | true | 显示闪烁光标 |
LetterSpacing | 0 | 额外字间距 |
LineHeight | 1.0 | 行高倍率 |
主题
VHS 内置 44 个主题。开发文档的热门选择:
| 主题 | 样式 |
|---|---|
| Catppuccin Mocha | 暖色深色(柔和色调点缀) |
| Dracula | 深紫色 |
| Tokyo Night | 蓝调深色 |
| Nord | 极地蓝 |
| One Dark | Atom 风格深色 |
| Solarized Dark | 经典暖色调深色 |
| Monokai | Sublime Text 风格 |
浏览所有主题的实时预览:主题画廊。
5. 录制 GIF
vhs demo.tape
VHS 打开无头浏览器,回放 tape,并保存 GIF。通常录制需要 10-30 秒。
上传前预览:
# macOS
open demo.gif
# Linux
xdg-open demo.gif
6. 优化文件大小
AgentGIF 接受最大 10 MB 的 GIF,但较小的文件加载更快。减小 GIF 大小的技巧:
| 技术 | 影响 |
|---|---|
减小尺寸(Width 800) | 显著——宽度减半,文件大小减为四分之一 |
降低帧率(Framerate 30) | 中等——减少 40% 的帧数 |
| 缩短录制时长 | 显著——目标 5-15 秒 |
使用 PlaybackSpeed 1.5 | 中等——减少总帧数 |
禁用光标闪烁(CursorBlink false) | 较小——减少唯一帧数 |
| 纯色背景(避免透明) | 较小——更好的 GIF 压缩 |
为达到质量和大小的最佳平衡,上述推荐设置可为 10 秒录制生成约 100-300 KB 的 GIF。
7. 上传到 AgentGIF
通过 CLI 上传(最快):
agentgif upload demo.gif \
--title "Git Interactive Rebase" \
--command "git rebase -i HEAD~3" \
--tags git,rebase \
--open
Or upload via the web interface — drag and drop the GIF file.
附带 cast 文件可启用 AI 代理层:
agentgif upload demo.gif --cast demo.cast --title "My Demo"
8. 高级 Tape 功能
隐藏/显示(用于设置)
使用 Hide/Show 运行设置命令而不录制它们:
Hide
Type "cd /tmp/demo-project"
Enter
Type "mkdir -p src"
Enter
Show
# Now recording starts
Type "ls -la"
Enter
Sleep 2s
多种输出格式
VHS 可以同时输出多种格式:
Output demo.gif
Output demo.mp4
Output demo.webm
环境变量
Set Shell "bash"
Type "export PS1='$ '"
Enter
Hide
Sleep 500ms
Show
键盘快捷键
Ctrl+C # Cancel current command
Ctrl+L # Clear screen
Ctrl+D # EOF / exit
Tab # Tab completion
Up # Previous command
Escape # Escape key
9. 替代录制工具
| 工具 | 输出 | 优点 | 缺点 |
|---|---|---|---|
| VHS | GIF, MP4, WebM | 脚本化、可复现、主题 | 需要配置 |
| asciinema | .cast | 实时录制,文件小 | 无 GIF 输出(需要转换) |
| Terminalizer | GIF | 实时录制,YAML 配置 | 文件较大 |
| Peek | GIF, WebM | GUI 屏幕录制工具 | 非终端专用 |
我们推荐使用 VHS 进行脚本化演示(可复现、可版本控制),使用 asciinema + VHS 转换进行实时录制。
See also: asciinema vs AgentGIF comparison.