vhs
brew install vhs
v0.11.0
MIT
Your CLI home video recorder
813
30-day installs · #1407
2.3k
90-day · #1498
5.5k
365-day · #1864
20.1k
★ GitHub stars · updated 3mo ago
Runtime dependencies
Build dependencies
GitHub topics
ascii
cli
command-line
gif
recording
terminal
vhs
video
Links
- https://github.com/charmbracelet/vhs
- GitHub: charmbracelet/vhs
- Brew formula source: Formula/v/vhs.rb
Raw metadata
{
"aliases": [],
"alternatives": [],
"build_dependencies": [
"go"
],
"categories": [],
"caveats": null,
"conflicts_with": [],
"dependencies": [
"ffmpeg",
"ttyd"
],
"deprecated": 0,
"deprecation_reason": null,
"desc": "Your CLI home video recorder",
"disable_reason": null,
"disabled": 0,
"enrichment_fetched_at": "2026-06-20T23:41:28+00:00",
"first_seen": "2026-06-20T23:34:18+00:00",
"full_name": "vhs",
"github_default_branch": "main",
"github_last_commit_at": "2026-05-04T10:16:35Z",
"github_readme_excerpt": "# VHS\n\n\u003cp\u003e\n \u003cimg src=\"https://user-images.githubusercontent.com/42545625/198402537-12ca2f6c-0779-4eb8-a67c-8db9cb3df13c.png#gh-dark-mode-only\" width=\"500\" /\u003e\n \u003cimg src=\"https://user-images.githubusercontent.com/42545625/198402542-a305f669-a05a-4d91-b18b-ca76e72b655a.png#gh-light-mode-only\" width=\"500\" /\u003e\n \u003cbr\u003e\n \u003ca href=\"https://github.com/charmbracelet/vhs/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/charmbracelet/vhs.svg\" alt=\"Latest Release\"\u003e\u003c/a\u003e\n \u003ca href=\"https://pkg.go.dev/github.com/charmbracelet/vhs?tab=doc\"\u003e\u003cimg src=\"https://godoc.org/github.com/golang/gddo?status.svg\" alt=\"Go Docs\"\u003e\u003c/a\u003e\n \u003ca href=\"https://github.com/charmbracelet/vhs/actions\"\u003e\u003cimg src=\"https://github.com/charmbracelet/vhs/workflows/build/badge.svg\" alt=\"Build Status\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nWrite terminal GIFs as code for integration testing and demoing your CLI tools.\n\n\u003cimg alt=\"Welcome to VHS\" src=\"https://stuff.charm.sh/vhs/examples/neofetch_3.gif\" width=\"600\" /\u003e\n\nThe above example was generated with VHS ([view source](./examples/neofetch/neofetch.tape)).\n\n## Tutorial\n\nTo get started, [install VHS](#installation) and create a new `.tape` file.\n\n```sh\nvhs new demo.tape\n```\n\nOpen the `.tape` file with your favorite `$EDITOR`.\n\n```sh\nvim demo.tape\n```\n\nTape files consist of a series of [commands](#vhs-command-reference). The commands are\ninstructions for VHS to perform on its virtual terminal. For a list of all\npossible commands see [the command reference](#vhs-command-reference).\n\n```elixir\n# Where should we write the GIF?\nOutput demo.gif\n\n# Set up a 1200x600 terminal with 46px font.\nSet FontSize 46\nSet Width 1200\nSet Height 600\n\n# Type a command in the terminal.\nType \"echo \u0027Welcome to VHS!\u0027\"\n\n# Pause for dramatic effect...\nSleep 500ms\n\n# Run the command by pressing enter.\nEnter\n\n# Admire the output for a bit.\nSleep 5s\n```\n\nOnce you\u0027ve finished, save the file and feed it into VHS.\n\n```sh\nvhs demo.tape\n```\n\nAll done! You should see a new file called `demo.gif` (or whatever you named\nthe",
"github_repo": "charmbracelet/vhs",
"github_stars": 20134,
"github_topics": [
"ascii",
"cli",
"command-line",
"gif",
"recording",
"terminal",
"vhs",
"video"
],
"homepage": "https://github.com/charmbracelet/vhs",
"homepage_og_description": null,
"homepage_og_image": null,
"homepage_title": null,
"installs_30d": 813,
"installs_365d": 5477,
"installs_90d": 2322,
"keg_only": 0,
"keg_only_reason": null,
"last_seen": "2026-06-20T23:34:18+00:00",
"license": "MIT",
"llm_generated_at": null,
"llm_model": null,
"name": "vhs",
"oldnames": [],
"one_liner": null,
"optional_dependencies": [],
"rank_30d": 1407,
"rank_365d": 1864,
"rank_90d": 1498,
"raw_hash": "2c6bab571dab0a7d",
"recommended_dependencies": [],
"revision": 0,
"ruby_source_path": "Formula/v/vhs.rb",
"tap": "homebrew/core",
"test_dependencies": [],
"uses_from_macos": [],
"version_head": "HEAD",
"version_stable": "0.11.0",
"versioned_formulae": [],
"why_use_this": null
}