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.

AreaVHSBetamax
Terminal stackBrowser terminal stackPTY plus libghostty-vt, rendered in process
GIF and PNGSupportedSupported in process
MP4 and WebMSupportedSupported through ffmpeg
State snapshotsNot a primary featureJSON viewport, scrollback, cursor, and styles
SourceExecutes included tapesParsed, then rejected with a clear not-implemented error
recordRecords interactive sessionsIntentionally not implemented
serveStarts a server workflowIntentionally not implemented
publishUpload/share workflowIntentionally 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.