Animated demos of madolt features, built with VHS.
| Clip | Description | Tape file |
|---|---|---|
| 1 | Overview & diffs | clip1-overview.tape |
| 2 | Branch, stage, commit, log & refs | clip2-workflow.tape |
| 3 | Stash & interactive rebase | clip3-stash-rebase.tape |
| 4 | Merge, conflicts, blame, SQL & server | clip4-merge-database.tape |
Each tape produces a .gif (used in the README) and optionally other
formats like .webm — just add extra Output lines to the tape file.
- VHS (requires
ttydandffmpeg) - Dolt
- Emacs 29+
- madolt's Emacs dependencies on your
load-path(via straight.el by default; override withSTRAIGHT_DIR) - SauceCodePro Nerd Font Mono (for consistent rendering)
Install VHS and dependencies:
# macOS / Linux (Homebrew)
brew install vhs
# Or via Go
go install github.com/charmbracelet/vhs@latest
# + install ttyd and ffmpeg separatelyRun from the repository root, not the demo/ directory — the tape
files use relative paths like demo/launch.sh.
# Generate a single clip
vhs demo/clip1-overview.tape
# Generate all clips
for tape in demo/clip*.tape; do vhs "$tape"; doneEach tape file specifies its own Output paths. By default these are
GIF files in demo/. To also produce .webm (or .mp4), add an
extra Output line to the tape:
Output demo/clip1-overview.gif
Output demo/clip1-overview.webm
-
setup.shcreates a temporary Dolt repo attmp/madolt-demo-dbwith a multi-commit history including branches, tags, staged/unstaged/ untracked tables, and a diverged feature branch with conflicting changes. It supports four phases (base,clip2,clip3,clip4) so each clip starts from the right repo state. -
launch.shsets environment variables, runssetup.shwith the appropriate phase, clones the catppuccin Emacs theme if needed, and launchesemacs -Q -nwwithinit.el. -
init.elloads madolt and its dependencies, applies the catppuccin mocha theme, sets up explicit diff face colours for terminal mode, enableskeycast-mode-line-mode(to show keystrokes in the mode line), and opens the madolt status buffer. -
The
.tapefile scripts the interaction: typing commands, pressing keys, and adding pauses for readability. VHS records the terminal and renders the output.
- Change repo data: edit
setup.sh - Change Emacs config: edit
init.el - Change recorded interaction: edit the
.tapefile
After making changes, re-run vhs demo/<clip>.tape to regenerate.
All clips share these VHS settings (defined at the top of each tape):
| Setting | Value |
|---|---|
| Font | SauceCodePro Nerd Font Mono, size 20 |
| Resolution | 1600 x 900 |
| Framerate | 12 fps |
| Terminal theme | Dracula |
| Emacs theme | Catppuccin Mocha |
| Typing speed | 60ms |
| Window bar | Colorful |
The demo repo state advances across clips:
base → clip2 → clip3 → clip4
(initial) (committed) (stashed) (ready for merge)
Each clip's tape file sets DEMO_PHASE before calling launch.sh,
which passes it to setup.sh.