https://github.com/HalFrgrd/evp
A terminal recoder powered by libghostty and rust.
https://github.com/HalFrgrd/evp
Last synced: 1 day ago
JSON representation
A terminal recoder powered by libghostty and rust.
- Host: GitHub
- URL: https://github.com/HalFrgrd/evp
- Owner: HalFrgrd
- License: mit
- Created: 2026-05-08T17:14:39.000Z (about 1 month ago)
- Default Branch: master
- Last Pushed: 2026-06-09T07:38:20.000Z (4 days ago)
- Last Synced: 2026-06-09T09:25:11.675Z (4 days ago)
- Language: Rust
- Size: 20.4 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# evp
**evp** — a small Rust CLI
that ingests [VHS](https://github.com/charmbracelet/vhs)-format scripts
and produces GIF, SVG, or JSON outputs using
[libghostty](https://ghostty.org) as the underlying terminal emulator.
`evp` runs a real shell inside an embedded Ghostty VT, schedules typed
input from your `.tape` script onto an absolute timeline, snapshots the
terminal at the configured framerate, then streams frames to one or more
renderer threads.
`evp` is very similar to [VHS](https://github.com/charmbracelet/vhs) except:
- significantly faster. The gif is ready as soon as the recording finishes.
- all key codes possible
- specify full shell path with arguments
- SVG output (as well as gif)
- no runtime dependencies (everything is statically linked)
- embedded, character-subsetted fonts (so SVG renders the same everywhere)
- selectable SVG text
- TODO: mouse support
- TODO: resize support
- TODO: process metrics
- TODO: show the key inputs on screen overlay
- render from a json recording
## Output Formats
`evp` infers the output renderer from the file extension of your `Output` directives or `--output` CLI argument. The following formats are supported:
- **`.gif`**: Animated GIF.
- **`.svg`**: Animated SVG with embedded, character-subsetted fonts.
- **`.svgz`**: Compressed SVG. If the output path ends in `.svgz`, `evp` automatically Gzip-compresses the generated SVG.
- **`.json`**: The raw terminal frame recording in JSON format.
## Acknowledgments
### VHS
evp is based on the vhs project.
They share little code but evp does try use the same `.tape` file format.
The color themes in [`assets/vhs-themes.json`](assets/vhs-themes.json) are taken from the [VHS](https://github.com/charmbracelet/vhs) project and are licensed under the MIT License. See [licenses/VHS-MIT.txt](licenses/VHS-MIT.txt) for the full license text.
Copyright (c) 2022-2023 Charmbracelet, Inc