Skip to content

Tempolight 0.4.0

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Nov 12:52
3086176

A redesigned app

  • Four screens instead of ten pages: Stage (your room big and live, the song bar with the song map and sync, the look, Punch and Drama, the pads and a huge drop countdown), Songs (how it hears music, and every song it knows in one list), Looks (a gallery where every effect is a live mini room, saved looks, how it chooses) and Lights (your lights as cards with their timing, the room, finding and adding lights), plus More (Settings, Schedules, Home and sleep, Integrations, Set up with Claude). A bottom tab bar on phones.
  • New full-screen room editor and show editor, a setup wizard where the room lights up as you go (with three tips at the end), a phone remote with big pads, and new guest request and OBS pages.
  • Old addresses (#/music, #/settings, …) open the new screens; the old pages stay under More → The classic pages.
  • A new homepage at tempolight.pages.dev (the online demo moved to /demo/), a new docs site design, a feature tour, and Set up with Claude: one prompt that installs and sets up Tempolight for you (also in the wizard and Settings → About). /llms.txt for AI assistants.
  • Looks are spread over your library, so similar songs no longer all get the same effect.
  • Fixed: the docs and the app gave the Bluetooth timing advice the wrong way round (late sound needs about -150 to -250 ms).

Sync score and song map

  • Music page → In sync: a live meter (Locked / Finding the beat / Not hearing) with the tempo, a beat-1 light and one plain hint ("Too quiet — turn it up or move the mic closer", "No drums — following the melody", "Following the song's beat map", "Beat from DJ Link"…), and the playing song's map: its loudness, sections (repeats share a letter) coloured calm / build-up / drop, the drops, a moving playhead and the next drop; for a song heard live that isn't known, the map grows as it plays. The look and Not this one / Keep sit under it. Home's status line has a small sync dot. API: sync in /api/status, GET /api/song/map, GET /api/songs/:id/map.

Chord colours and stereo

  • Chord colours (Settings → Lighting, on with Automatic colours): each chord has its own shade of the palette, so the colour steps on the bar line when the chord changes and eases in over a beat, never more than once a bar; repeated sections get the same colours. Live listening estimates the chord too, only when it is sure. Stereo (Off / Subtle / Strong, default Subtle): with a stereo source (browser audio, this computer's sound through parec or ffmpeg, a file) the side of the room a hit came from brightens; mono sources are unchanged. API: settings.chordColours, settings.stereo.

Your own music

  • Music → Your own music: add a music folder and every song in it is analysed ahead (beat map, sections, key, mood, its look and show), so it is followed exactly from its first play: at once when a music player here reports the file (VLC, Rhythmbox, mpv and other MPRIS players; Music on a Mac), by title and length otherwise, and after a few seconds of listening live. ffmpeg reads every format when installed; WAV works without it. Worker threads at the lowest priority (one in low-power mode), pausable, resumable, skipping songs already analysed, copies and the same recording twice. Songs live in library/, not the settings file. API: /api/library (admin); Docker: mount the folder and set TEMPOLIGHT_MUSIC.

Drop countdown

  • Tempolight now knows a drop is coming 3-5 seconds ahead while listening live, even for songs it has never heard: it hears the riser (the sound getting brighter, the highs rising, the snares speeding up), counts phrases from the start of the song or the last drop, and catches the dip just before the drop. The lights build toward it in every variety: brighter and faster over the last bars, tighter pulses in the last bar, then the dip and the drop flash (as big as Drama and Punch say; gentler at night, no pulses in safe mode). Live pads shows a big Drop in 4 · 3 · 2 · 1 (Settings → Lighting → Show drop countdown). API: drop: {next, at, conf, source, building} in the status.

One look per song

  • Automatic mode now picks one well-chosen effect and palette for each song when it is analysed, and keeps it for the whole song, on the beat (like picking one LedFx effect). It fits the song: a fast four-on-the-floor track gets a kick-driven effect, a ballad a calm one that doesn't need a beat; the colours come from the mood. The same song always gets the same look; different songs get different ones.
  • The look stays lively from inside: speed follows the tempo, it gets stronger through build-ups, the colour steps at new sections (a chorus that comes back gets the same colour), drops vary every 2 bars, and the pump, the dip before the drop and the drop flash stay.
  • Music page: "Look: Kick Shockwave · Sunset (fast four-on-the-floor, high energy)", with Not this one (the next best look; that one won't come back for the song) and Keep. Live listening picks a look after a few seconds and keeps it for the song.
  • Effects page → Variety: One look per song (the default), Song parts (one effect each for calm parts, build-ups and drops), or Show (effects change with the song, as before, now only from the rated effects). API: show.variety, POST /api/song/look/next, POST /api/song/look/keep, look in the status.

A new sync engine

  • New live beat tracker: lights land on 91% of beats (was 64%) across house, hip-hop, dubstep, broken beats, swing, breaks and tempo changes; it holds the beat through breaks and finds it again in under a second; kicks are heard under sidechained bass; beat 1 of the bar is found live. It also says how sure it is, and reacts to hits instead of guessing when it isn't.
  • Every light shows the beat at the same moment: each frame is drawn a little ahead and faster lights wait for the slowest (Hue, WiZ and WLED now flash together, within a few ms). Each light's delay is set by itself; the timing slider is a fine trim on top. A steadier frame loop.
  • The feel: in drops the whole room pumps on every kick; drops are clearly brighter than calm parts; every style gets a dip on the last beat before a drop, a flash and a hard cut at the drop; effects change on downbeats and 4-bar lines and never last less than a bar; drops vary every 2 bars. New settings: Punch, Drama and drop variations (Settings → Lighting).
  • Song analysis: no more half-tempo readings that turned EDM into hip-hop; the beat grid stays within ~2 ms over a whole song; the key is right for minor songs; songs are split into sections (repeats share a label) with chords and energy per bar; analysis is twice as fast.
  • Song memory recognises songs sooner (median 8 s instead of 14), through EQ, and when played up to 6% faster or slower.
  • Feel and beat checks in npm test (npm run eval:beat, npm run eval:feel), so a change that makes the sync worse fails the tests.