Skip to content

Themes And Styling

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.

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

Use the exact listed name in a tape:

Set Theme "Aardvark Blue"

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 Blue. It was chosen as a readable, VHS-like default for examples, not because it has special behavior in the renderer.

These settings affect the raw terminal canvas and PTY grid:

SettingDefaultPurpose
Width1200Raw terminal canvas width in pixels
Height600Raw terminal canvas height in pixels
Padding60Space between cells and the raw canvas edge
FontFamilyJetBrains MonoPreferred font family
FontSize22Font size in pixels
LetterSpacing1Extra pixels between terminal cells
LineHeight1Multiplier applied to font size

Betamax derives PTY columns and rows from these values. Increasing padding or font size usually reduces the terminal grid size; increasing width or height usually increases it.

These settings are applied after the raw terminal frame is rendered:

SettingDefaultPurpose
Margin0Outer frame margin in pixels
MarginFilltheme backgroundOuter margin color
WindowBarempty / disabledSynthetic window bar mode
WindowBarSize30Window bar height in pixels
BorderRadius0Rounded-corner mask radius

WindowBar currently treats any non-empty value as enabled. Modes ending in Right, such as RingsRight and ColorfulRight, place the window buttons on the right. Other non-empty values place them on the left.

Set Margin 12
Set MarginFill "#111111"
Set WindowBar Colorful
Set WindowBarSize 34
Set BorderRadius 8

Framerate controls capture cadence. 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 yet, which mostly matters for future work where parser state may expose palette-aware data directly. The renderer path used for GIFs, PNGs, videos, and state style serialization uses Betamax’s loaded theme.