Skip to content

valveFM

valveFM is a terminal internet-radio player styled as a vintage FM tuner — its whole interaction model is a tune dial. Left/Right “tunes the dial,” Up/Down browses stations, and the aesthetic leans hard into the radio-receiver metaphor. It pulls stations from radio-browser.info (sorted by popularity, paginated 200/page), has a country selector, favorites, and twelve named themes. Like pulsedeck.md, its value is a committed physical-device metaphor doing the UI’s organizing work — here specifically the dial/tuner, which is the one audio-control metaphor the rest of the Batch-8 stack doesn’t cover.

  • The tune-dial metaphor is the core interaction. Left / Right tunes the dial; Up / Down browses stations. The dial is the spatial spine of the UI — turning it is how you move through the audio space.
  • Station list, paginated ([ / ] previous/next page, 200 per page), sorted by popularity.
  • Country selector (L), favorites view (V), search / (server-side in country mode, local in favorites), F toggle favorite.
  • Transport: Enter play, Space stop/resume. ? help, Q/Ctrl+C quit.
  • Twelve themes (T to cycle), persisted to ~/.config/valvefm/config.json: Vintage, Tokyo Night, Nord, Catppuccin Mocha, Catppuccin Latte, Gruvbox Dark, Dracula, Solarized Dark, One Dark, Rose Pine, Kanagawa, Everforest. (“Vintage” is the default and the on-brand one.)

Go throughout; a built-in pure-Go MP3 player with no external dependency (optional mpv/ffplay for AAC/OGG and steadier streaming). Runs as TUI + system tray. Config and favorites persist locally under ~/.config/valvefm/. The radio-browser.info client supplies the station catalog.

valveFM’s contribution is narrow and specific: the dial/tuner metaphor as a control idiom, which is genuinely useful for a music device and absent from the rest of the batch (sequencer grammar, spectrum, waveform, piano, library).

  • The tune-dial is the right metaphor for the Toneline’s continuous “sweep” controls. Some Toneline parameters are best dialed, not typed: tempo (BPM), an FM operator’s frequency ratio, filter cutoff, a parameter sweep, scrubbing through an arrangement. A dial widget — Left/Right turns it, value shown as a position on an arc or a horizontal track — is the natural single-color control for these. valveFM is the reference for making the dial the spine of a surface, not just one widget among many.
  • The radio-receiver framing reinforces the Toneline’s device identity. The Toneline is a self-contained music instrument with a physical-control character (the fiction’s knurled landscape clamshell, line-out, larger speaker). A tuner/dial idiom on screen matches that — the UI metaphor and the hardware metaphor agree, the way pulsedeck.md’s cassette-deck framing does. The Toneline’s “tune” the voice / “tune” the tempo reads naturally.
  • Station browser + favorites + pagination maps to patch/voice browsing + favorites on the Toneline: a paginated list of FM patches or saved phrases, with a favorites set the operator pins for performance. Same browse/favorite/paginate UX, music-authoring content.
  • Theme names are mood-board input. The Toneline is monochrome amber so valveFM’s palettes don’t transfer, but the naming convention for aesthetic modes is reusable — “Vintage” especially fits the KEC retro-hardware fiction. When the Deckline aesthetic-mode roster is named (cf. 4trk.md, aethertune.md theme registries), valveFM’s “Vintage” and the warm-retro vocabulary are a citation.

Deckline note: the dial widget is a general single-color control primitive the Deckline can use anywhere a continuous value is best adjusted by turning rather than typing — it complements upiano.md’s slider (slider = linear track; dial = rotary/arc), giving the Deckline UI kit both continuous-control idioms.

valveFM ships twelve color themes, but the dial metaphor itself needs no color — it is geometry:

  • The dial renders as an arc or a horizontal track with a position marker◄ ──────●──── ► or a radial sweep in box-drawing characters — carried entirely by position + character, amber on black. The value is the marker’s place on the track.
  • The active/tuned station (or selected patch) uses inversion, not a highlight color.
  • The station/patch list and pagination are plain single-color lists with a position indicator (p.3/12).
  • The “Vintage” theme’s intent — warm, old-receiver feel — is exactly the Deckline’s default amber-on-black, so valveFM’s on-brand mode is KN-86’s baseline aesthetic; the other eleven palettes are irrelevant to the monochrome device.

valveFM — vintage FM tuner TUI with dial metaphor

Source: GitHub social card for zorig/valvefm. Shows the tuner-styled radio interface with the dial and station list.

  • One sharp takeaway: the dial/tuner control metaphor, the rotary complement to upiano’s linear slider — together they give the Toneline (and the Deckline UI kit) both continuous-control idioms.
  • Cross-link upiano.md — slider (linear) vs dial (rotary): the two continuous-control widgets a music UI needs.
  • Cross-link pulsedeck.md — same “commit fully to a physical-device metaphor” doctrine (cassette deck there, FM tuner here); both show the metaphor doing real UI work.
  • Cross-link line.md — valveFM dials continuous values; line types discrete phrases. The Toneline needs both input idioms over its parameter space.