0.1.4 — Lyrics fallback
Lyrics no longer depend on a single host. If one source is unreachable — an ISP content filter blocking it, an outage, a regional block — Linea now falls back to a second one.
Closes #25.
Why this was needed
Lyrics came only from lrclib.net. When that host is blocked at the network level, every track loses lyrics and there is nothing to fall back to. Measured on a connection where it is blocked:
LRCLIB -> unreachable (223ms)
NETEASE -> lyrics (1634ms) 78 lines
CHAIN -> ok, from netease (954ms)
What changed
A fallback source. NetEase is tried when LRCLIB has nothing or cannot be reached. It sits second and is held to a much stricter matching bar, because rendering the wrong words against a song is worse than rendering none.
Better results from LRCLIB itself, which helps even where nothing is blocked. The exact lookup matches on duration, and LRCLIB entries routinely differ from Spotify's by a few seconds — so it was missing tracks that were sitting right there in the database. A fuzzy search now recovers those.
Faster failure when a source is down. A provider that fails repeatedly is skipped for a few minutes rather than being waited on at every track change.
Correct parsing of shared and short timestamps. Lines where a repeated chorus shares one cue used to be dropped or corrupted, and timestamps with single-digit minutes were skipped silently. Production credit lines are no longer shown as lyrics.
No more stale lyrics. Skipping tracks quickly could leave the previous song's lyrics on screen. Late results are now discarded.
Honest limits
This does not make lyrics universal. Instrumentals have none, obscure and very new tracks are in no database, and Linea shows synced lyrics only. If every source is unreachable the panel still says so — and that message means the lyrics are being blocked before they reach Linea, so check your router or ISP content filtering. Changing DNS will not help when the filtering is inline.
Includes everything from 0.1.1 through 0.1.3.