2026-10-21 19:11:07 +00:00
…
…

g*ndora

A radio station that writes its own songs. Type a seed, get a station: a DJ (an LLM) writes each track's sheet music (title, tags, lyrics, bpm, key, length, meter, a line to say), a song model (ACE-Step) renders it, the cover is drawn from the song's own settings, and every reaction you make teaches a small taste model that steers the DJ.

Live at https://gandora.lol (also gandora.yolopreneur.lol). Installable as a PWA; the library plays offline.

Run it

It is one static page. Serve the folder and open it:

python3 -m http.server 8794 && open http://127.0.0.1:8794/

It talks to the factory's inference worker at https://inference.yolopreneur.lol, which only answers pages served from *.yolopreneur.lol or gandora.lol. For local work either add a personal Venice key (open /?key to show the key box) or test with tools/harness.sh, which stubs the backend. Everything the listener makes lives in their browser (IndexedDB) — see STORAGE.md.

Files

  • index.html — the whole app: markup, styles, and the player (a small state machine), station, library, tapes, breaks, covers, sheets, and the hooks brain.js plugs into.
  • brain.js — the taste model (a small net per station and overall), the TASTE screen, the DJ's taste text.
  • sw.js — service worker: caches the shell; stamped with the commit by the shots workflow.
  • manifest.json, icons/, favicon.svg — PWA. Icons are drawn by tools/icons.py (stdlib only).
  • tools/shots.sh — the card image and the icons, run by .gitea/workflows/shots.yml on every push.
  • tools/harness.sh + tools/harness.html (the station loop) + tools/harness-resume.html and tools/harness-cdp.py (resume with autoplay blocked) — the playback regression harness (ARCHITECTURE.md › Testing).
  • STORAGE.md — the IndexedDB contract. ARCHITECTURE.md — how it all fits. HANDOFF.md — read before changing things.

Backend

The page never holds a key. inference.yolopreneur.lol (teahubxyz/time, .github/time/cloudflare/inference.js) routes per capability: chat → Venice (claude-haiku), render → Runware ACE-Step (Venice as fallback), speech → Venice TTS. Secrets and deploys: .github/time/SECRETS.md in that repo.

S
Description
gandora site — served at gandora.yolopreneur.lol by Teahub pages
Readme
12 MiB
0 Stars 2 Watchers 0 Forks
Languages
HTML 84.5%
JavaScript 8.8%
Python 4.7%
Shell 2%