Releases: avisforevelyn/Duetto
Releases · avisforevelyn/Duetto
Release list
Duetto 1.0.1
listen together, in tune.
A playback-robustness release — background listening on iOS is now solid.
Fixed
- Background auto-advance rebuilt — track advancement and prefetch now live in a plain module cursor (
window.__lsAdv), mutated synchronously inside theendedhandler. React state is frozen in a backgrounded iOS tab, so the old React-driven advance died after one hop. - The real culprit of silent background playback:
preload='auto'— the audio element eagerly downloaded the whole file the momentsrcwas set, and iOS cuts that network off in the background. Nowpreload='none': the address is set instantly, bytes load onplay(), which iOS allows. - "Advances but pauses" — a track finishing naturally fires a
pauseevent that used to knock the just-advanced next track back into pause. Now guarded (internal-load window +endedcheck). - Personal FM keeps flowing — the module cursor stays in sync when FM batches extend the queue, and switching from FM to a playlist properly escapes the FM queue kind.
- Updates actually reach installed PWAs —
index.htmland the web manifest are served withno-cache.
Upgrade: git pull and restart the service — no schema or config changes.
Duetto 1.0.0
listen together, in tune.
The first public release of Duetto — a self-hostable listen-together player for two, with a bring-your-own-AI companion that actually listens.
Highlights
- Listen together in real time — shared rooms over WebSocket: play, pause, seek, and track changes stay in sync; share songs as cards; status cards record who played, paused, hearted or collected what
- An AI that actually listens — it downloads the very stream you are hearing and listens with a multimodal model (timed-lyrics fallback), once per song, cached forever. Every reply knows the playback position, the exact lyric line playing, your play count together, and the rolling memory grown from your conversations about the song
- Two reply styles — split chat bubbles, or a full single reply with an unfoldable thinking chain
- Quote a lyric — long-press any line and it rides your message as a quote block, archived as the exact passage
- Built-in access gate — first-open PIN protects every API route and the sync socket
- Background-safe playback — a three-track prefetch granary (shuffle draws its plan ahead) keeps lock-screen playback rolling with zero network
- NetEase Cloud Music integration, personal FM auto-continue, five palette skins, per-surface glass controls, installable PWA
Docs
Ships empty of private data — bring your own key, songs, and the person you want to listen with.