Skip to content

Themes and layout

Betamax uses Ghostty-style theme files to map terminal color indexes and named colors into rendered RGB values. It searches user Ghostty theme directories first, then the copied themes bundled with betamax-core. See Differences from VHS for compatibility details and unsupported features.

Terminal window
betamax themes
betamax themes --json
betamax themes --markdown

Use the exact listed name in a tape:

Set Theme "Aardvark Blue"

Betamax searches user Ghostty theme directories, then the bundled Ghostty themes, then the bundled VHS-only themes. A name with no exact match falls back to the VHS alias table, so tokyonight loads TokyoNight, and then to a match that ignores case, spaces, and punctuation. Unknown names fail with close suggestions.

Bundled themes make tapes portable across machines. User Ghostty themes make local experimentation convenient. Because user themes are searched first, a local theme with the same name as a bundled theme can change a recording on that machine. For reproducible project assets, prefer a bundled theme name and run examples in CI or a consistent environment.

The default theme is Aardvark Ink. Set Preset Default-0.1 restores the 0.1 default, Aardvark Blue. Framed and Inset derive their backdrop and window bar colors from the final theme; see Window styling.

The three official SP Night Ghostty themes are bundled:

Set Theme "sp_night_noite"

Use sp_night_garoa for the quieter gray flavor, or sp_night_jaragua for the green-black flavor. sp_night_noite is Noite Paulista, the regular SP Night palette. These themes are MIT-licensed, copyright 2026 sp night. The full notice and pinned source revision are recorded in betamax-core/THIRD_PARTY.md and included with binary distributions.

These settings affect the final output frame and PTY grid:

Setting Default Purpose
Width 1200 Final output width in pixels
Height 720 Final output height in pixels
Padding 0 Space between cells and terminal edge
FontFamily JetBrains Mono Preferred font family
FontSize 22 Font size in pixels
LetterSpacing 0 Extra pixels between terminal cells
LineHeight 1 Multiplier applied to font size

Betamax derives PTY columns and rows from these values after subtracting the margin, window bar, and any caption row. Increasing padding or font size usually reduces the terminal grid size; increasing width or height usually increases it.

When testing application layout, start with the default FontSize and Margin. Increase the canvas size if needed. See Presentation and layout proof.

The window around the terminal is covered in Window styling: presets, margins, gradient and transparent fills, window bars and titles, borders, corners, and shadows.

Framerate controls capture cadence. GIF plays at most 50 FPS, so rates above 50 only add frames to WebP, video, and frame directories; see GIF encoding. PlaybackSpeed changes output playback speed without speeding up shell execution. LoopOffset rotates animated frames so a GIF loop can begin at a less jarring point.

CursorBlink defaults to true. Set it to false for deterministic demos where a blinking cursor would create unnecessary frame differences.

Set Framerate 50
Set PlaybackSpeed 1.0
Set LoopOffset 10%
Set CursorBlink false

Betamax applies the selected theme in its Rust renderer. The libghostty-vt terminal parser is not initialized with the selected palette. Betamax uses the loaded theme when rendering media and serializing state styles.