Implemented Fix
The scroll input and UI rendering are decoupled from poster download.
Uncached remote posters are queued to a dedicated
love.thread worker and the UI renders the existing
empty/placeholder frame until the worker reports completion.
resolve_art_pathno longer shells out tocurlon the main thread.- Remote poster fetches use separate poster request/result channels and do not reuse the audio/channel loader state.
- The Jellyfin broker emits thumbnail poster URLs with
fillWidth=180&fillHeight=270&quality=70, and the broker preserves those query parameters while proxying/image/.../primary.jpg. - Image decoding remains on the main Love2D thread, but it is queued, skipped while directional input is active, and limited to one image per frame.
- Selected poster loading is debounced until scrolling settles for about 250 ms.
- Grid/list drawing queues visible image decode work and renders placeholders until the decode budget catches up.
- Selection changes prefetch only the selected item plus four neighbors on each side. Prefetch downloads only; it does not force immediate image decode. There is no full-catalog cache warmer in this pass.
- Jellyfin catalog loading runs in a dedicated worker after local
indexes load. Local files render immediately, then VOD titles merge when
/catalogreturns. - R2 lock no longer turns the display off. It draws a visible lock
screen with current status and
R2 unlock. - AquaSystem keeps the
RipTidecollection entry, butRipTide.shnow launches the currentriptide-aquatvruntime directory.