charmbracelet/vhs
GitHub: charmbracelet/vhs
一个将终端会话录制为可回放 GIF/ASCII 的 CLI 工具,解决自动化演示与回归测试的一致性难题。
Stars: 19385 | Forks: 405
# VHS
编写终端 GIF 以用于集成测试和演示你的 CLI 工具。

上述示例是使用 VHS 生成的([查看源码](./examples/neofetch/neofetch.tape))。
## 教程
要开始,请[安装 VHS](#installation) 并创建一个新的 `.tape` 文件。
```
vhs new demo.tape
```
用你喜欢的 `$EDITOR` 打开 `.tape` 文件。
```
vim demo.tape
```
磁带文件由一系列[命令](#vhs-command-reference)组成。
这些命令是
在虚拟终端上执行 VHS 操作的指令。欲了解所有可能的命令,请参见[命令参考](#vhs-command-reference)。
```
# 我们应该在哪里写 GIF?
Output demo.gif
# 设置一个 1200x600 终端,字体为 46px。
Set FontSize 46
Set Width 1200
Set Height 600
# 在终端中输入命令。
Type "echo 'Welcome to VHS!'"
# 暂停以产生戏剧效果...
Sleep 500ms
# 按下回车运行命令。
Enter
# 稍作欣赏输出。
Sleep 5s
```
完成后,保存文件并将其输入 VHS。
```
vhs demo.tape
```
大功告成!你应该会看到一个名为 `demo.gif` 的新文件(或者你命名的
`Output`)在当前目录中。
更多示例请查看 [`examples/`](https://github.com/charmbracelet/vhs/tree/main/examples) 目录。
## 安装
使用软件包管理器:
```
# macOS 或 Linux
brew install vhs
# Arch Linux(顺便一提)
pacman -S vhs
# Nix
nix-env -iA nixpkgs.vhs
# 使用 scoop 的 Windows
scoop install vhs
```
或者,使用 Docker 直接运行 VHS(包含依赖项):
```
docker run --rm -v $PWD:/vhs ghcr.io/charmbracelet/vhs
.tape
```
或者,直接下载它:
- [软件包][releases] 以 Debian 和 RPM 格式提供
- [二进制文件][releases] 适用于 Linux、macOS 和 Windows
或者,使用 `go` 安装:
```
go install github.com/charmbracelet/vhs@latest
```
Windows、Debian、Ubuntu、Fedora、RHEL、Void 安装说明
- Debian / Ubuntu
```
# Debian/Ubuntu
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
# 从 https://github.com/tsl0922/ttyd/releases 安装 ttyd
sudo apt update && sudo apt install vhs ffmpeg
```
- Fedora / RHEL
```
echo '[charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=1
gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo
# 从 https://github.com/tsl0922/ttyd/releases 安装 ttyd
sudo yum install vhs ffmpeg
```
- Void
```
sudo xbps-install vhs
```
- Windows
```
winget install charmbracelet.vhs
# 或 scoop
scoop install vhs
```
## 录制磁带
VHS 具备从你的终端操作生成磁带文件的能力!
要录制磁带文件,请运行:
```
vhs record > cassette.tape
```
执行你想要的操作,然后退出终端会话以停止录制。
你可能需要手动编辑生成的 `.tape` 文件以添加设置或修改操作。
接着,你可以生成 GIF:
```
vhs cassette.tape
```
## 发布磁带
VHS 允许你将 GIF 发布到我们的服务器,以便与朋友和同事轻松分享。
指定要分享的文件,然后使用 `publish` 子命令将其托管在 `vhs.charm.sh` 上。
输出将为你提供可通过浏览器、HTML 和 Markdown 分享 GIF 的链接。
```
vhs publish demo.gif
```
## VHS 服务器
VHS 内置 SSH 服务器!当你自建 VHS 时,可以像本地安装一样访问它。
VHS 将拥有对主机命令和应用程序的访问权限,因此你无需在机器上安装它们。
要启动服务器,请运行:
```
vhs serve
```
配置选项
- `VHS_PORT`:监听端口(`1976`)
- `VHS_HOST`:监听主机(`localhost`)
- `VHS_GID`:以该组 ID 运行服务器(当前用户的 GID)
- `VHS_UID`:以该用户 ID 运行服务器(当前用户的 UID)
- `VHS_KEY_PATH`:用于 SSH 的密钥路径(`.ssh/vhs_ed25519`)
- `VHS_AUTHORIZED_KEYS_PATH`:授权密钥文件路径(空,允许公开访问)
然后,通过 `ssh` 从另一台机器访问 VHS:
```
ssh vhs.example.com < demo.tape > demo.gif
```
## VHS 命令参考
有一些基本的 VHS 命令类型:
- [`Output `](#output):指定文件输出
- [`Require `](#require):指定磁带文件所需的程序
- [`Set Value`](#settings):设置录制设置
- [`Type ""`](#type):模拟按键输入
- [`Left`](#arrow-keys) [`Right`](#arrow-keys) [`Up`](#arrow-keys) [`Down`](#arrow-keys):方向键
- [`Backspace`](#backspace) [`Enter`](#enter) [`Tab`](#tab) [`Space`](#space):特殊键
- [`ScrollUp`](#scroll-up--down) [`ScrollDown`](#scroll-up--down):滚动终端视口
- [`Ctrl[+Alt][+Shift]+`](#ctrl):按下控制键和/或修饰键
- [`Sleep 标签:Charm工具, EVTX分析, GIF录制, Go语言, Home Video Recorder, SEO: CLI测试工具, SEO: VHS CLI, SEO: 命令行GIF, SEO: 终端录制, SOC Prime, tape文件, VHS, 内存分配, 命令行演示, 开发工具, 日志审计, 测试工具, 程序破解, 终端录制, 自动化演示, 虚拟终端, 视频录制, 请求拦截, 集成测试