Project Icon

vhs

终端会话录制与GIF生成工具

VHS是一款专业的终端会话录制工具,能够生成高质量GIF演示。通过简单的代码指令,用户可自定义终端设置、模拟输入和捕获截图。VHS适用于命令行工具的演示和集成测试,同时提供录制、发布和服务器功能,简化了终端GIF的创建和分享流程。

VHS


最新版本 Go 文档 构建状态

通过编写代码来创建终端 GIF,用于集成测试和演示您的命令行工具。

欢迎使用 VHS

上面的示例是使用 VHS 生成的(查看源代码)。

教程

首先,安装 VHS并创建一个新的 .tape 文件。

vhs new demo.tape

使用您喜欢的 $EDITOR 打开 .tape 文件。

vim demo.tape

Tape 文件由一系列命令组成。这些命令是指示 VHS 在其虚拟终端上执行的操作。有关所有可用命令的列表,请参阅命令参考

# 我们应该在哪里保存 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 中指定的其他名称)的新文件。

由上述 VHS 代码生成的 GIF

更多示例请参见 examples/ 目录。

安装

[!注意] VHS 需要安装 ttydffmpeg,并且这些工具需要在您的 PATH 中可用。

使用包管理器:

# macOS 或 Linux
brew install vhs

# Arch Linux
pacman -S vhs

# Nix
nix-env -iA nixpkgs.vhs

# Windows 使用 scoop
scoop install vhs

或者,使用 Docker 直接运行 VHS,包含所有依赖:

docker run --rm -v $PWD:/vhs ghcr.io/charmbracelet/vhs <cassette>.tape

或者,下载它:

或者,只需使用 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

录制 Tape

VHS 能够从您的终端操作生成 tape 文件!

要录制到 tape 文件,运行:

vhs record > cassette.tape

执行您想要的任何操作,然后 exit 终端会话以停止录制。您可能需要手动编辑生成的 .tape 文件以添加设置或修改操作。然后,您可以生成 GIF:

vhs cassette.tape

发布 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 manual 查看所有 VHS 文档。 VHS 命令主要有以下几种基本类型:

Output

Output 命令允许你指定渲染的位置和文件格式。你可以在一个录像文件中指定多个输出,它们会被渲染到相应的位置。

Output out.gif
Output out.mp4
Output out.webm
Output frames/ # 一个包含 PNG 序列帧的目录

Require

Require 命令允许你为录像文件指定依赖项。如果 $PATH 中缺少所需程序,这些命令有助于尽早发现错误,确保 VHS 执行不会出现意外问题。

Require 命令必须定义在录像文件的顶部,位于任何非设置或非输出命令之前。

# 一个要求 gum 和 glow 在 $PATH 中的录像文件
Require gum
Require glow

Settings

Set 命令允许你更改终端的全局设置,如字体设置、窗口尺寸和 GIF 输出位置。

设置必须在录像文件的顶部进行。除 TypingSpeed 外,任何在非设置或非输出命令之后应用的设置都将被忽略。

设置 Shell

使用 Set Shell <shell> 命令设置 shell

Set Shell fish

设置字体大小

使用 Set FontSize <数字> 命令设置字体大小

Set FontSize 10
Set FontSize 20
Set FontSize 40

设置字体族

使用 Set FontFamily "<字体>" 命令设置字体族

Set FontFamily "Monoflow"

设置宽度

使用 Set Width 命令设置终端的宽度

Set Width 300

设置高度

使用 Set Height 命令设置终端的高度

Set Height 1000

设置字间距

使用 Set LetterSpacing 命令设置字符间的间距(字距)

Set LetterSpacing 20
将字符间距设置为20像素的示例

设置行高

使用 Set LineHeight 命令设置行间距。

Set LineHeight 1.8
将行高更改为1.8的示例

设置打字速度

Set TypingSpeed 500ms # 500毫秒
Set TypingSpeed 1s    # 1秒

设置每次按键的秒数。例如,打字速度为 0.1 会导致每个字符之间有 0.1秒100毫秒)的延迟。

这个设置也可以通过 @<时间> 语法在每个命令中被覆盖。

Set TypingSpeed 0.1
Type "每个字符延迟100毫秒"
Type@500ms "每个字符延迟500毫秒"
在VHS中使用Type命令的示例

设置主题

使用 Set Theme 命令设置终端的主题。主题值应该是一个包含16种基本颜色以及前景色和背景色的JSON字符串。

Set Theme { "name": "Whimsy", "black": "#535178", "red": "#ef6487", "green": "#5eca89", "yellow": "#fdd877", "blue": "#65aef7", "magenta": "#aa7ff0", "cyan": "#43c1be", "white": "#ffffff", "brightBlack": "#535178", "brightRed": "#ef6487", "brightGreen": "#5eca89", "brightYellow": "#fdd877", "brightBlue": "#65aef7", "brightMagenta": "#aa7ff0", "brightCyan": "#43c1be", "brightWhite": "#ffffff", "background": "#29283b", "foreground": "#b3b0d6", "selection": "#3d3c58", "cursor": "#b3b0d6" }
将主题更改为Whimsy的示例

你也可以通过名称设置主题:

Set Theme "Catppuccin Frappe"

运行 vhs themes 或查看 THEMES.md 以获取完整列表。

设置内边距

使用 Set Padding 命令设置终端框架的内边距(以像素为单位)。

Set Padding 0
设置内边距的示例

设置外边距

使用 Set Margin 命令设置视频的外边距(以像素为单位)。

Set Margin 60
Set MarginFill "#6B50FF"
设置外边距的示例

设置窗口栏

使用 Set WindowBar 命令在终端窗口上设置窗口栏的类型(Colorful、ColorfulRight、Rings、RingsRight)。

Set WindowBar Colorful
设置外边距的示例

设置边框圆角

使用 Set BorderRadius 命令设置终端窗口的边框圆角(以像素为单位)。

# 如果使用BorderRadius,你可能还想添加Margin和MarginFill。
Set Margin 20
Set MarginFill "#674EFF"
Set BorderRadius 10
设置边距的示例

设置帧率

使用Set Framerate命令设置VHS捕获帧的速率。

Set Framerate 60

设置播放速度

设置最终渲染的播放速度。

Set PlaybackSpeed 0.5 # 使输出速度减慢2倍
Set PlaybackSpeed 1.0 # 保持输出正常速度(默认)
Set PlaybackSpeed 2.0 # 使输出速度加快2倍

设置循环偏移

设置GIF循环应该开始的偏移量。这允许你使GIF的第一帧(通常用于预览)更有趣。

Set LoopOffset 5 # 从第5帧开始GIF
Set LoopOffset 50% # 从中间开始GIF

设置光标闪烁

设置光标是否应该闪烁。默认启用。

Set CursorBlink false
设置光标闪烁的示例

输入

使用Type来模拟按键操作。也就是说,你可以使用Type来编写在终端中输入的脚本。Type对于输入命令和与终端中的提示和TUI交互都很方便。该命令接受一个字符串参数作为要输入的字符。

你可以用Set TypingSpeed设置标准输入速度,并在某些地方用@time参数覆盖它。

# 输入某些内容
Type "随便你想输入什么"

# 非常慢地输入某些内容!
Type@500ms "慢点,伙计。"

用反引号转义单引号和双引号。

Type `VAR="已转义"`
在VHS中使用Type命令的示例

按键

按键命令可以选择性地带有@time和重复count,用于每隔<time>间隔重复按键。

Key[@<time>] [count]

退格键

使用Backspace命令按退格键。

Backspace 18
按退格键18次的示例

Ctrl键

你可以使用Ctrl命令访问控制修饰键并发送控制序列。

Ctrl+R
按Ctrl+R键进行反向搜索的示例

回车键

使用Enter命令按回车键。

Enter 2
按回车键两次的示例

方向键

使用UpDownLeftRight命令按任意方向键。

Up 2
Down 2
Left
Right
Left
Right
Type "B"
Type "A"
使用方向键导航文本的示例

Tab键

使用Tab命令输入制表符。

Tab@500ms 2
按两次tab键自动完成的示例

空格

使用Space命令按下空格键。

Space 10
按下空格键的示例

上一页/下一页

使用PageUpPageDown命令按下上一页/下一页键。

PageUp 3
PageDown 5

睡眠

Sleep命令允许你在不与终端交互的情况下继续捕获帧。当你需要等待某些内容完成时,这很有用,比如在录制中包含旋转器或加载状态。该命令接受以秒为单位的数字参数。

Sleep 0.5   # 500毫秒
Sleep 2     # 2秒
Sleep 100ms # 100毫秒
Sleep 1s    # 1秒

隐藏

Hide命令指示VHS停止捕获帧。它用于暂停录制以执行隐藏命令。

Hide

这个命令对于执行录制GIF所需的任何设置和清理操作很有帮助,例如构建最新版本的二进制文件,并在演示录制完成后删除该二进制文件。

Output example.gif

# 设置
Hide
Type "go build -o example . && clear"
Enter
Show

# 录制中...
Type 'Running ./example'
...
Enter

# 清理
Hide
Type 'rm example'

显示

Show命令指示VHS再次开始捕获帧。在Hide命令之后使用它来恢复输出的帧录制。

Hide
Type "你看不到这个正在被输入。"
Show
Type "你会看到这个正在被输入。"
在隐藏状态下输入内容的示例

截图

Screenshot命令捕获当前帧(png格式)。

# 在任何时候...
Screenshot examples/screenshot.png

复制/粘贴

CopyPaste命令用于从剪贴板复制和粘贴字符串。

Copy "https://github.com/charmbracelet"
Type "open "
Sleep 500ms
Paste

环境变量

Env命令通过键值对设置环境变量。

Env HELLO "WORLD"

Type "echo $HELLO"
Enter
Sleep 1s

源文件

source命令允许你执行来自另一个磁带文件的命令。

Source config.tape

持续集成

你可以将VHS连接到你的CI管道,使用官方的VHS GitHub Action来保持你的GIF最新:

⚙️ charmbracelet/vhs-action

VHS还可以用于集成测试。使用.txt.ascii输出生成黄金文件。将这些文件存储在git仓库中,以确保磁带文件的多次运行之间没有差异。

Output golden.ascii

语法高亮

对于支持使用tree-sitter进行语法高亮的编辑器,有一个适用于.tape文件的tree-sitter语法:

🌳 charmbracelet/tree-sitter-vhs

它在Neovim、Emacs等编辑器中效果很好!

反馈

我们很乐意听到你对这个项目的想法。随时给我们留言!

许可证

MIT


Charm的一部分。

Charm标志

Charm热爱开源 • Charm loves open source

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号