- Quick chat (Enter in the full player, whatever plays): a box at the
bottom centre in the control bar's place, compact and widening with
the text, sharing its draft with the chat panel; Enter sends, Esc or an
empty Enter closes, it closes by itself after 8 s without typing (the
draft stays). Keys go to it; the Enter that opened it no longer reaches
a focused button. Typing never shows the cursor or the controls: the
frame wakes only on real mouse movement and holds the controls hidden
while the box or its echo is up. Your sent line shows as an echo (or
flies as your own danmaku line); your own chat toast is not repeated.
- Subtitle lift: always for the box, for the control bar as a setting
(off); 4 eased-out sub-pos steps 42 ms apart instead of one per frame.
- Notifications: Toasts / Danmaku (off by default): chat and short notices
fly over the full player, problems stay toasts; every knob of the look
plus boldness, persisted, with a live preview strip in Settings.
- Player panel: ⚙ → Player settings docks a foldable glass panel at the
right (tracks, subtitle size and lift, picture, volume, notifications,
controls) in place of the card; Esc closes it.
- Danmaku preview: the mock dialogue follows the lift; the stand-in page
has the chat box too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- What's next is the server's: state.advance counts down (10 s) when the
media finishes with an Up next item first, holds while its performer or
warm source is gone, and sets queuePlay at its end; cancel is shared, a
seek or swap ends it; the server skips items nobody can put up. Shared
rules in core whats_next.dart; the app's janitor, per-screen countdown
and end-of-episode card are gone.
- The continuation (next Jellyfin episode, next file of a local show
with its gaps) is an auto item under "Continues with", prepared like
Up next's first item.
- Watch tracking by time In (D3): only time played while this viewer is
in counts; away, paused, held, jumps and stalls never do (P7, P9).
WatchTracker + device WatchHistory (files, links); Jellyfin progress
reads the same watch; records are the AniList seam.
- A server restart no longer loses what played: apps hold their media
and one offers it back (swap.restore, first offer wins), Up next is
re-added, the source re-feeds, and the watch carries on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PlayerHost port (MediaKitHost): players by role, pins, hwdec policy,
render probe, log routing, disposal order; the only media_kit user.
- MediaPipeline: plan (one pure switch over state, origin, caps,
presence) -> resolve -> open (prepared player promoted, else fresh)
-> ready; commands queued during a switch apply once (P15); viewers
play the buffer and wait for a dropped source without seek loops (D6).
- Every web page resolved by our yt-dlp into an EDL with headers and
cookies (danmaku excluded); mpv's ytdl_hook no longer used (ytdl=no).
- D11: sign-in errors say which cookies were used and whether they hold
any for the site.
- Relay: 256 KiB slices read as they fill, superseded pulls released
(seek-to-play ~4.2 s -> ~2.8 s, P29); own Jellyfin relay channel only
when someone needs it (P28).
- STARSYNC_SMOKE run and a Windows CI smoke step after the build.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- One server per app run (loopback, no password); Invite attaches an
all-interfaces listener to the same server and Stop sharing detaches
it (guests told with 4016); members, media and Up next never reset.
No solo mode: you're home on your own server unless in a friend's.
- Navigation: none / yours / friend; a join passes a version gate on
/health first (clear "they/you need to update", update offer).
- Invite as a value (host, port, name, password flag, version, fp
reserved); addresses filtered (loopback, link-local, 198.18/15,
bridges) and ranked; Sharing chip, Copy invite, Stop sharing.
- Alone looks like a plain player (alone replaces solo).
- AppGraph builds and disposes systems; widgets use AppScope;
SessionState deleted; a test caps the remaining singletons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>