Skip to content

Releases: nothans/cable-82

0.2.1 - Channel change

Choose a tag to compare

@nothans nothans released this 01 Sep 21:23

The static between channels is now a choice, and the README walks in by stages.

Features:

  • Channel change setting - tuner.cut picks what covers a channel change: static (RF tuner snow, the default), black (the blanked raster of a later cable box), or none (a hard cut). A "Channel change" select in the control room's Channels panel sets it; a note explains that static and black also give a video channel a beat to load its first frame.
  • README in natural stages - Quick start, then the control room, then channels, then channel 82, then the config.json reference, then the CRT notes. A new Channels-panel screenshot shows three channels on the dial and the tuner settings.

Under the hood:

  • The schema is the single authority for tuner.cut; an unknown value falls back to static.
  • tuneToIndex reads a CUTS table (cover before the swap, cover after so the new channel has its first frame up) with a try/finally so a throw never strands the tuner.
  • New #tuner-blank layer for the black cover, tinted with the theme's ink color.
  • Control room fix: the "on the dial" toggle label no longer wraps to three lines.
  • Tests: 38 server + 53 browser-harness, still dependency-free Node 18+, no build step.

0.2.0 - The dial

Choose a tag to compare

@nothans nothans released this 01 Sep 15:08

CABLE 82 is now a cable network: a dial of channels, not just the board.

Features:

  • Video channels - point a channel at a folder of video files and it airs on a real broadcast clock: tune away, tune back, and you land mid-program.
  • Scheduled hours - dayparts like Saturday 8:00 to 11:30, overnight windows ("Saturday 20:00 to 01:00" is one window), and off-air test card, color bars, or static with the resume time on screen.
  • The tuner - keyboard, USB gamepad or joystick, or POST /api/tune; anything that can press a key, close a GPIO pin, or make an HTTP request can change the channel. Every change cuts through a beat of tuner static with a channel banner.
  • RETRO TV demo channel - node channels/fetch-demo-channel.js downloads eight public-domain films from the Internet Archive's Prelinger collection; a working channel in one command.
  • Control room Channels panel - folder picker, schedule editor with day chips, and a week grid of the on-air windows.
  • Seamless playback - a double-buffered player cues the next program while the current one airs, so a file boundary is a cut, not a load.
  • External channels - any URL in a frame; ws4kp makes a fine weather channel.
  • The Community Bulletin Board is bundled as channel 82 and runs the dial by itself out of the box.

Under the hood:

  • New APIs: GET /api/channels, POST /api/tune, GET /api/events (server-sent events), and HTTP Range serving for video seeking - documented in the README.
  • The tuner bus carries events with rising sequence numbers, not state, so a remote never fights the buttons.
  • Only the visible channel does work: the board fully suspends (crawl, music, page loop) behind a video channel.
  • Tests: 38 server + 52 browser-harness, still dependency-free Node 18+, no build step.