Skip to main content

Troubleshooting

Common issues and how to resolve them.

Missing Dependencies​

Betamax checks for required tools at startup. If something is missing, you'll see a clear error.

Required​

ToolPurposeInstall (macOS)Install (Linux)
tmuxHeadless terminal sessionsbrew install tmuxapt install tmux
bcTiming calculationsbrew install bcapt install bc
python3Recording and GIF generationIncluded with macOSapt install python3

Optional​

ToolPurposeInstall (macOS)Install (Linux)
termshotPNG screenshotsbrew install homeport/tap/termshotSee termshot repo
ahaHTML outputbrew install ahaapt install aha
ffmpegGIF recordingbrew install ffmpegapt install ffmpeg
PillowDecoration renderingpip install Pillowpip install Pillow

Error examples:

Error: bc is required for betamax timing calculations
Install with: brew install bc (macOS) or apt install bc (Linux)
Error: termshot required for GIF recording
Error: ffmpeg required for GIF recording

You can also use @require in keys files to check for dependencies before execution:

@require:jq
@require:curl

If a required command is missing:

Error: Missing required commands: jq curl

Validation Errors​

Betamax validates keys files before execution and reports errors with line numbers. You can also validate without running:

betamax --validate-only myapp -f demo.keys

Common Validation Errors​

Missing values:

Error: Missing value for cols (line 3: @set:cols:)

Invalid types:

Error: Invalid integer for delay: abc (line 5: @set:delay:abc)
Error: Invalid speed value: fast (must be numeric) (line 7: @set:speed:fast)

Out of range:

Error: Speed must be between 0.25 and 4.0 (got: 10)
Error: shadow_blur must be 0-100 (got: 200)
Error: shadow_opacity must be 0.0-1.0 (got: 2.5)

Invalid colors:

Error: Invalid color format for bar_color: red (expected RRGGBB or #RRGGBB)

Unknown settings:

Error: Unknown setting: colour

Unknown themes:

Error: Unknown theme: darkula (use: dracula, catppuccin-mocha, gruvbox-dark, nord, ...)

Typo Detection​

Betamax suggests corrections for misspelled directives:

Warning: Unknown directive @slep (did you mean @sleep?)
Warning: Unknown directive @import (did you mean @source?)

@source Import Errors​

The @source directive imports keys from other files. Several things can go wrong:

File not found:

Error: @source file not found: ./common/setup.keys
Referenced from: demo.keys

Circular imports:

Error: Circular @source detected
File: /path/to/a.keys
Import chain:
-> /path/to/a.keys
-> /path/to/b.keys
-> /path/to/a.keys (circular)

Depth limit exceeded (max 10 levels):

Error: @source depth limit exceeded (10 levels)
Circular import? Check: /path/to/deep.keys

Source paths are resolved relative to the file containing the @source directive.

@repeat Structure Errors​

Error: Missing repeat count (line 5: @repeat)
Error: Invalid repeat count: abc (line 5: @repeat:abc)
Error: Repeat count must be positive (line 5: @repeat:0)
Error: Nested @repeat not supported (line 8: @repeat:3)
Error: @end without matching @repeat (line 10: @end)
Error: @repeat on line 5 has no matching @end (line 5: @repeat:3)

Betamax does not support nested @repeat blocks. To repeat nested sequences, use @source to import a file that contains its own @repeat.

tmux Session Issues​

Orphaned Sessions​

If betamax is interrupted (e.g. kill -9), tmux sessions may be left running. Betamax uses an isolated tmux socket named betamax.

List orphaned sessions:

tmux -L betamax list-sessions

Kill all betamax sessions:

tmux -L betamax kill-server

Kill a specific session:

tmux -L betamax kill-session -t betamax

Session Already Exists​

Betamax kills any existing session with the same name before starting a new one. If you use custom session names (-s), ensure they don't conflict with other betamax runs.

Inspecting Sessions​

Use --keep / -k to keep the tmux session alive after betamax finishes:

betamax -k myapp -f demo.keys

Attach to inspect:

tmux -L betamax attach -t betamax

Signal Handling​

Pressing Ctrl+C during betamax execution sends SIGINT. Betamax runs with set -e, so this will terminate the script. The tmux session should be cleaned up, but if it isn't, see Orphaned Sessions above.

GIF Recording Issues​

No Frames Captured​

Error: No frames captured

This means @record:start was used but no @frame directives (or @sleep with capture) generated any frames before @record:stop. Ensure your keys file includes timing and content between the record start and stop.

GIF Creation Failed​

Error: Failed to create GIF

Check that ffmpeg is installed and working. Also verify that termshot is available for capturing individual frames.

GIF Filename​

Error: Missing GIF filename for @record:stop
Error: GIF filename must end with .gif

The @record:stop directive requires a filename: @record:stop:output.gif

Platform Notes​

macOS​

  • Dependencies are available via Homebrew
  • The default shell is zsh; use --shell /bin/bash if your keys file assumes bash
  • bc is included with macOS by default

Linux​

  • Install dependencies via your package manager (apt, dnf, pacman, etc.)
  • Ensure your terminal supports truecolor (24-bit color) for accurate theme rendering
  • If running in a headless environment (CI), tmux works without a display since it runs its own terminal

Truecolor Support​

Themes and color options require a terminal that supports truecolor (24-bit RGB). Most modern terminals do. To test:

printf "\x1b[38;2;255;100;0mTruecolor test\x1b[0m\n"

If you see orange text, your terminal supports truecolor.

Timeout Errors​

Error: Timeout waiting for pattern 'Ready'

The --wait / -w pattern wasn't found within the timeout period (default: 30 seconds). Solutions:

  • Increase the timeout: --timeout 60
  • Verify the pattern matches what the application actually prints
  • Check that the application starts correctly in tmux

See Also​