Skip to content

Releases: Dhruvch1244/lyric-viewer

Lyric Overlay v0.27.3

Choose a tag to compare

@github-actions github-actions released this 12 Aug 20:22

See CHANGELOG.md for details.

Lyric Overlay v0.27.2

Choose a tag to compare

@github-actions github-actions released this 12 Aug 19:38

See CHANGELOG.md for details.

0.27.0 — punchier beats, no share picker, perf

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 12 Aug 18:43

0.27.0

  • 🥁 Punchier beat reactivity — each kick thumps the whole field inward and fires a shockwave ring from the centre; bigger build-up/drop swings. Lean into the drops.
  • 🎙️ No more share pop-up — enabling audio capture (♫) no longer shows the "Choose what to share" dialog; it just starts.
  • ⚡ Faster build — link-time-optimised release binary.
  • 🖥️ Cross-platform groundwork — a CI pipeline now builds the app for Windows, macOS and Linux. (Now-playing detection + wallpaper mode are Windows-only for now; visuals/lyrics/artwork/translation work everywhere.)

Auto-updates silently from 0.26.0. ~10 MB installer.

0.26.0 — Tauri rebuild (~116 MB → ~10 MB)

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 12 Aug 17:14

The whole app moved off Electron onto Tauri. Same overlay, same visuals — the installer went from ~116 MB to ~10 MB (no bundled Chromium; it uses the Windows WebView2 runtime).

What changed

  • Rust backend: SMTC detection, three synced lyric sources (LRCLIB / NetEase / Kugou), cover art + "choose a different cover" picker, the LLM features (translation, per-line attribution, mood, transliteration), wallpaper mode, tray, global hotkeys, local-file playback, MilkDrop, signed auto-updater, key storage.
  • Auto-transcription runs in-app now (WebAssembly Whisper); the speech model downloads on first use instead of shipping a 22 MB runtime.
  • The visual layer (WebGL swirl, galaxy, MilkDrop, lyric column) is the same web renderer, just hosted by Tauri.

Install

Download LyricOverlay_0.26.0_x64-setup.exe. Existing 0.25.0 (Electron) installs don't auto-migrate — install this fresh to move to the Tauri build. From 0.26.0 onward it self-updates.

Requires the WebView2 runtime (already present on Windows 11 and most Windows 10).

0.25.0 — plain-lyric coverage, phrase cross-fade, smoother starts

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 12 Aug 12:54

Auto-updates silently from 0.24.0.

Added

  • More songs get synced lyrics. When only plain (untimed) words exist, the app finds and caches them (LRCLIB's plain catalogue is far larger than its synced one); with ♫ capture on, a Whisper pass times those correct words to the music.
  • Live-play confirmation — "singers identified — …" and "word-sync active" announce the model-driven features so a single play confirms they fired.

Changed

  • Smoother preset changes — drop-triggered switches cross-fade over four beats, scaled to tempo, landing on a bar boundary.

Fixed

  • Faster track starts — the cover-art palette readback no longer stutters the first second of a new song.

345 tests passing.

0.24.0 — UX fixes, ANGLE-safe galaxy, silent updates

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 12 Aug 11:36

Auto-update from 0.23.0 is silent from here on.

Fixed

  • Coloured rectangles over the screen — GPU galaxy rebuilt as instanced quads (ANGLE-safe). Cannot recur.
  • Gemini CLI -p argument error — prompts now sent via stdin.
  • Updates now install silently (one-click, per-user).
  • Mode switching stalled for seconds — now 7–36ms.

UX

  • अ/EN toggles pinned top-right, always visible.
  • Clickable size menu (▭ Size / ▬ Bar / ▁ Strip / ▨ Desktop) — no more blind cycling.
  • Local-AI CLI picker with verified badges, on-demand and in the 🔑 panel.

345 tests passing.

0.23.0 — karaoke sync, mood-driven motion, and the visuals on the GPU

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 12 Aug 10:22
059f637

The visual-depth release: the words move with the voice, the field moves with
the mood, and the heavy layers moved onto the GPU.

What's new

  • Karaoke word fill. The word being sung lights up left-to-right in time,
    instead of all at once.
  • The visuals match the mood. A calm song moves gently, a driving one
    harder — not just a different colour.
  • A deep-space starfield drifts behind the field, rendered on the GPU.
  • The galaxy runs on the GPU now — the 260-point spiral moved off the CPU
    into the shader, same look, far cheaper.
  • MilkDrop presets stick — a preset you pick no longer snaps back to the
    default when the frame rate dips.

Under the hood

Both new visual layers degrade gracefully: if a shader can't build, the app
falls back to the old path rather than showing nothing.

Install

On 0.22.0 this arrives by auto-update, differentially — a few MB, not the whole
download.

0.22.0 — a desktop mode you can live in

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 12 Aug 06:39

The release that made desktop mode actually usable, and made switching modes
stop throwing your song away.

Fixed

  • Switching modes lost your song. Entering desktop mode used to rebuild the
    whole window, restarting everything. The window is now created once and never
    rebuilt, so the playing track, its position, the lyrics, audio capture and any
    open panel all carry across a switch.
  • Coming back to the overlay showed nothing. Leaving desktop mode left the
    window behind everything else; it now returns to the front properly.
  • Desktop mode was half-usable. Panels like the library and the preset
    browser could open but not scroll. Opening one now brings the window forward
    so scroll, drag and clicks all work, and it settles back behind your icons
    when you close it.
  • A picked MilkDrop preset snapped back to the original. A brief frame-rate
    dip was silently wiping your choice. It now sticks.

Changed

  • One overlay, one desktop toggle. The size chip and Ctrl+Alt+M simply flip
    between the fullscreen overlay and living on your desktop — no more cycling
    through half-finished modes by accident.
  • MilkDrop opens on a good preset, not a random dud, until you pick or like
    your own.

Added

  • A friendly "what's new" card after each update.
  • Local AI fallback. When the cloud AI is unavailable, the app can use a
    developer CLI you already have — Claude, Gemini, Ollama, GitHub Models or
    Antigravity — with your permission. It's also the first way per-line artist
    attribution works without a cloud key.

Install

If you're on 0.21.0, this arrives by auto-update — differentially, thanks to the
blockmap fix, so it's a few MB rather than the whole download.

0.21.0 — updates that arrive, 1754 presets, and a desktop you can live on

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 11 Aug 18:51
fb55174

The release where three things this project believed turned out to be false.
Finding that out was worth more than the features.

Fixed

Updates never actually arrived. The .exe.blockmap was never published, so
electron-updater's differential download has 404'd on every client since
auto-update shipped and every update refetched all 114MB. The install directory
was changeable, which is how an update lands beside the app rather than over
it and leaves you uninstalling by hand. And it checked exactly once, at startup,
on an app people leave running for days that ships most days.

And it never said so. The state lived inside the tray's right-click menu, on
an app whose entire surface is a full-screen overlay — it could download, sit
ready, and the only way to find out was to go looking. There is now a pill while
it downloads and a card with Restart now / Later once there is a decision to
make.

The visual governor was feeding itself. Profiling a real song put resize
at 289ms of self time, for a function that reallocates a WebGL drawing buffer
and should fire a handful of times a session. Its own comment claimed it never
changed faster than once a second; the code only guarded the way up. One long
frame dropped a resolution rung, the reallocation cost another long frame, and
that dropped the next.

The wrong artist was on the mic — 0.20.0's own known issue.

Added

1754 MilkDrop presets, up from 395. The four bundles 0.19.0 shipped were
never the catalogue: butterchurn-presets also ships the corpus they were
compiled from, so 1360 more looks had been sitting in node_modules unused.
They ship as files read on demand, three bundles are deleted, and the installer
grows by almost nothing.

A browser you choose with your eyes. Preset names written by strangers in
2003 tell you nothing about what one looks like, so the browser renders a
preview of each — by the engine itself, cached to disk, and only for cards you
scroll to. Like the ones you want, hide the ones you never want to see again
(hidden ones leave the dice and the beat-synced cycle too), and step through
with the arrow keys, watching rather than reading.

Wallpaper mode. Ctrl+Alt+M cycles to a fourth size that renders behind
the desktop icons rather than over everything — the app becomes something that
is simply on. It stays clickable, which took work: a window parented into the
desktop receives no mouse input from Windows at all.

Per-line artist attribution. One cached pass works out who sings each line
and the named dancer takes the mic. Credited artists and dancers are not the
same list — a registry duo is one credit and two dancers — so the mapping
matches on names and declines rather than guessing.

Kugou as a third synced lyric source, after LRCLIB and NetEase, keyless.

Three beliefs measured out of existence

  • The screen-share prompt does not happen. The roadmap called it adoption
    blocker #3 and named a native WASAPI addon as the fix — one of only two places
    it allowed native code. That was written before the app grew a display-media
    handler that auto-approves with no picker. Photographed 1.2s after a real
    cursor click: no dialog anywhere, capture already running. Dropped, not
    deferred.
  • The frame dips are not MilkDrop's. They reproduce on the swirl engine and
    correlate with startup work, recovering on their own.
  • The progress-bar throttle was already done, and had been for releases,
    while the notes listed it as outstanding.

Known

  • Per-line attribution has never made a successful provider call. Both
    configured providers are failing here — quota, and a token without the
    Inference Providers scope. It starts working with no code change once a key
    does.
  • The installer is 116.6MB; splitting out the ONNX runtime is a module-loading
    change that cannot be verified without installing and transcribing a song.

Install

Download LyricOverlay-Setup-0.21.0.exe. If you are on 0.20.0, this is the
first release your copy can fetch differentially rather than whole.

0.20.0 - the tempo fix real audio found, a preset browser, and a second lyric source

Choose a tag to compare

@Dhruvch1244 Dhruvch1244 released this 11 Aug 14:24
cb276ca

Installer: LyricOverlay-Setup-0.20.0.exe (114 MB). If you are on 0.19.0, auto-update should now offer this to you - see below for why it would not have before.

The first release verified against a real song playing in the real app, start to finish. That immediately found a bug five releases of harness testing had not.

The tempo was drifting, and the visuals ran on it

The offline analysis measures a track in ~100ms and gets it right. The live estimator then re-derived a tempo from a rolling 12-second window every second and overwrote it. On a 138 BPM track it reported 60, 64, 86, 147, 172 and 179 across a single play - confident and wrong - dragging the beat clock and the BPM chip from 138 to 174. The platter and the dancers run on that number.

The whole-song measurement is now a prior the live window cannot casually overrule, and once the tempo is known only the phase is tracked - the part that genuinely has to follow the music. The chip reads 138 for the whole song now. The raw live estimate still bounces between 62 and 177 in the same run, which is rather the point: the noise is real, and the clock is insulated from it.

Auto-update was doing nothing

0.19.0 shipped auto-update and was published with only the installer attached. electron-updater reads latest.yml, not the .exe, so every update check found nothing - silently, with no error anywhere to notice. The manifest is published now, and the release script uploads both artifacts together so it cannot happen again.

A way into the 395 MilkDrop presets

0.19.0 shipped the catalogue and no way to use it: two named entry points, and everything else reachable only by waiting for a drop on a 42-second cooldown. Now there is a browser - search it, click to switch instantly, roll the dice, or pin one to a song so it comes back next play. A pin beats both the preset's own starting point and the beat-synced cycle, because a pin overridden by a drop four bars later would be worse than not offering pinning at all.

MilkDrop mode also gets a legibility scrim behind the lyric. The swirl field is soft and low-contrast by design; MilkDrop presets are neither, and white text over a bright fractal was unreadable in a way this app's own visuals never were.

NetEase, as a second synced lyric source

Coverage was the weakest thing about the app. A second synced source is worth more than a second plain one: a plain source still has to be aligned by Whisper - minutes of CPU, and only from the next play - where this scrolls immediately and offline. NetEase is strongest exactly where LRCLIB is weakest: Mandarin, Cantonese, K-pop and the Asian long tail. It runs only when LRCLIB comes up empty.

Everyone gets a face

The artist registry has six hand-authored entries. Everyone else got the same figure recoloured, which at forty pixels tall reads as one dancer in a dozen shirts. There are now seven head styles, glasses and hair tones, all derived from the artist's name - so nothing is stored, and an artist looks the same on every machine and every replay.

Also

  • Eight bands, spectral centroid, spectral flux. The centroid steers the global hue, because it is the one measure that tells a filtered breakdown from a full-range drop when both are equally loud.
  • The wormhole has its background back, and the field behind it is thinned far harder so the tunnel is actually visible.
  • Compact modes are usable - the floating bar now carries the translation and the sync controls.

Honest notes

  • Frame rate dips to 30-44fps several times per song in fullscreen MilkDrop before recovering. The governor only intervenes below 24, so it never steps in. Undiagnosed.
  • Per-line artist attribution is not done. On a multi-artist track the dancer on the mic is still picked by line number rather than by who is actually singing.
  • Two features were built and then reverted after being seen or measured: the wormhole's transparent background, and NetEase's translation track - which turned out to translate into Chinese and would have captioned English lyrics with Mandarin under a chip labelled EN.