Skip to content

Differences From VHS

Betamax follows the useful parts of the VHS authoring model: tape files, typed input, waits, themes, frame styling, GIF output, screenshots, and simple examples. The differences below focus on actual user-visible behavior, not implementation details that produce the same result.

Area VHS Betamax
Terminal stack Browser terminal stack PTY plus libghostty-vt, rendered in process
GIF and PNG Supported Supported in process
MP4 and WebM Supported Supported through ffmpeg
State snapshots Not a primary feature JSON viewport, scrollback, cursor, and styles
Source Executes included tapes Parsed, then rejected with a clear not-implemented error
record Records interactive sessions Intentionally not implemented
serve Starts a server workflow Intentionally not implemented
publish Upload/share workflow Intentionally not implemented

The core tape flow should feel familiar if you know VHS:

  • Output declares artifacts.
  • Set controls dimensions, theme, timing, typography, and frame styling.
  • Type, Enter, key commands, Sleep, and waits drive the terminal.
  • Hide and Show keep setup or teardown out of the final animation.
  • Screenshot writes checkpoint PNGs.

Betamax also keeps the simple recording-shell idea. Common shells are started in a cleaner recording environment where possible so the default prompt is stable and VHS-like instead of a host-specific shell prompt.

record, serve, and publish are not planned for the first stable shape. They add product and service surface area that is separate from Betamax’s primary goal: deterministic local rendering and terminal testing.

Source is parsed because existing VHS tapes may contain it. Betamax fails explicitly when running such a tape so users get a targeted migration error instead of an unknown command or silent skip.

State JSON is the main addition. Output demo.json writes final terminal state, and State checkpoint.json writes state at a specific point in the tape. The format includes plain text for easy assertions plus compact styled spans for style-aware snapshot tests.

See Terminal Testing and State JSON for that workflow.

MP4 and WebM use ffmpeg. That keeps container encoding reliable and avoids adding native video encoder complexity to the first cut. GIF, PNG, screenshots, terminal parsing, rasterization, and state JSON are still handled in process.

Use Outputs for installation notes and output selection guidance.