Files
silo-server/docs/feature-changelog.md
T
af974edfe9 feat(settings): add playback.intro_skip_mode and deprecate auto_skip_intro
Skipping intros stops being a switch and becomes a three-way choice —
never / ask / always — matching what Jellyfin offers and giving viewers a
way to turn the prompt off, which the boolean could not express.

Contract revision 6 → 7: adds playback.intro_skip_mode (enum, default
"ask", profile + profile_device scopes) and marks playback.auto_skip_intro
deprecated without removing it. Every shipped client still reads the
boolean, so for one release the server keeps the pair in step at write
time: canonical PUT/DELETE, the legacy /profiles route, and the legacy
runtime /settings/{key} route all land both rows, and a profile-scope enum
write refreshes user_profiles.auto_skip_intro so GET /profiles stays
truthful. Existing rows are carried onto the new key by a Goose migration
(Postgres) and an InitSchema twin (per-user SQLite); the settings-migrate
planner emits the companion for installs whose backfill runs later.

The spec in docs/design/2026-08-16-intro-skip-mode.md also defines the
prompt state machine every client (web, Android, Apple; browser, tablet,
mobile, TV) implements against this key. It builds on the Android TV
Skip Intro work in silo-android#210 — wall-clock timer, rebuffer-vs-pause
debounce, root-level key handling.

Co-authored-by: evulhotdog <365456+evulhotdog@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 19:38:19 -04:00

4.9 KiB

Feature Changelog

2026-08-16

Let viewers turn the intro prompt off

Skipping intros stops being a switch and becomes a choice of three: leave intros alone, offer a Skip Intro button, or skip automatically and offer an undo.

  • Adds playback.intro_skip_mode (never / ask / always, default ask) at contract revision 7 and deprecates playback.auto_skip_intro, which could not express "never".
  • Migrates every stored auto-skip-intro preference onto the new key, on both the PostgreSQL and per-user SQLite backends, so nobody's existing choice changes.
  • Mirrors the two keys at write time for one release, so a preference set on an older phone, TV, or browser still shows up correctly on an updated one.

2026-04-09

Covers commits from 2026-04-08 22:32 EDT through 2026-04-09 20:02 EDT.

Add artwork selection in the metadata editor

Admins can now browse and apply poster, backdrop, and logo images from enabled metadata providers without leaving the edit flow.

  • Adds an Images tab in the item metadata editor for movies, series, seasons, and episodes.
  • Pulls image options from provider plugins, shows provider badges and popularity ordering, and highlights the current selection.
  • Applies the chosen image through new admin endpoints, caches it to storage, and locks image fields so future refreshes do not overwrite the manual choice.

Add native ASS and SSA subtitle support

The player and backend now preserve styled anime subtitles instead of flattening them into simpler text formats.

  • Serves ASS tracks natively across the main playback API, Jellyfin compatibility routes, and the proxy subtitle path.
  • Integrates JASSUB in the web player so fonts, positioning, karaoke effects, and other advanced subtitle styling render correctly.
  • Keeps existing SRT and VTT handling unchanged while exposing subtitle format badges in the subtitle picker.

Show live server activity in the web app

Admins now get a Plex-style live activity indicator directly in the UI.

  • Adds a real-time dropdown that summarizes direct play, remux, and transcode sessions alongside task progress and active library scans.
  • Keeps the activity affordance visible on admin screens and only exposes it on regular app pages when activity is actually happening.
  • Reuses existing realtime channels instead of introducing new backend plumbing.

Improve playback reliability and control flow

Recent playback work focused on making copy-mode streaming behave more like direct play while reducing restart-related failures.

  • Preserves copy-mode when seeking, enables seek-anywhere manifests when duration is known, and allows supported HDR content to stay in direct play or remux paths instead of forcing full transcodes.
  • Retries Firefox copy-mode startup with a compatibility fallback to reduce failed starts on that browser.
  • Separates player exit and minimize controls so watch-page navigation is less ambiguous.
  • Handles transcode restarts more cleanly during segment waits and fixes copy-mode buffering after a restart so old segments are not served back to the player.

Refresh playback surfaces after watch-state changes

A few related UI changes now keep browsing and episode detail views aligned with what the viewer just watched.

  • Refreshes home sections after watched-state updates so progress-sensitive shelves stay current without a manual reload.
  • Shows sticky version preferences on episode detail pages so preferred cuts or versions remain visible when choosing playback options.

Add a cinematic Playing Next experience

Episode-to-episode playback now transitions through a richer post-roll flow.

  • Replaces the bare post-roll screen with a Playing Next screen that can appear about 30 seconds before the end of an episode.
  • Keeps the current episode running in a resizable mini-player while showing the upcoming episode with a more prominent background treatment.
  • Adds auto-play-next playback settings and supports cross-season next-episode lookups.

Support S3 key prefixes for stored media and assets

Storage configuration can now target a scoped path inside an S3 bucket instead of requiring a bucket root layout.

  • Adds S3 key prefix configuration in server config loading, admin storage settings, and setup flows.
  • Updates the S3 client so Silo reads and writes through the configured prefix consistently.

Add chapter thumbnails and chapter-aware navigation

Playback now has much deeper chapter support, including generated preview images and more resilient thumbnail processing.

  • Scans and stores embedded chapter metadata, exposes it through watch detail responses, and adds player chapter menus and seek-bar chapter affordances.
  • Introduces library settings and backfill tasks for chapter thumbnail generation, with realtime thumbnail delivery into active playback sessions.
  • Tracks thumbnail failure state, retry timing, and HDR thumbnail policy so generation can recover more predictably when extraction fails.