github themartz90/jellydash v1.15.1

3 hours ago

v1.15.1 fixes a movie replacement recovery problem in v1.15.0. If you're updating from an earlier version, the v1.15.0 changes are included below too.

Fixed in v1.15.1

Jellyfin can group movies into collections in its API response. This caused Jellydash's recovery scan to stop with "Movie metadata is unavailable. Recovery will retry." Automatic repairs and suggestions for older entries could not proceed.

Recovery now requests individual movies, so it can finish checking the library. Older entries without saved TMDB or IMDb identity still need confirmation under Settings > Movie replacements using Use this movie. You don't need to find item IDs or run commands, and original play records stay intact.

Recovery failures now log their cause for troubleshooting. A failed log write does not interrupt the retry.

Included from v1.15.0

Movie replacements

When a movie is deleted and re-added in Jellyfin, Jellydash can reconnect its old plays to the current item using saved TMDB or IMDb identity. Automatic repair requires one matching movie and no conflicting metadata. Older entries without enough saved identity appear as suggestions under Settings > Movie replacements for you to confirm.

The mapping combines Statistics and monthly recap entries, includes the group's plays in History, and uses the current artwork. Original play records stay intact. Checks run in batches through the normal history worker and manager pages.

  • Review suggestions, choose Keep separate, or undo a repair in Settings.
  • Stale confirmations and older Undo requests are checked against the current group. New conflicting evidence flags the group for review.
  • Command-line chain repairs now retain the previous group for Undo. Older mappings without that record offer Remove mapping instead.
  • Movie card counts and History links stay consistent across equivalent item ID formats and conflicting aliases.

See the movie replacement guide for matching rules and backup details. Keep a full database backup: History CSV exports don't include replacement mappings or saved identity metadata.

History and imports

  • Long polling gaps no longer reset a play's original start, measured watch time or notification state. Unobserved time is not added. Diagnostics warn when the configured polling interval is too long for reliable measurement.
  • Playback Reporting imports preserve confirmed library information and elapsed end times, including pauses. Oversized duration values are rejected before writing to the database.
  • Equivalent ID and timestamp formats no longer create duplicate new imports. Older rows whose identity cannot be established safely are reported as conflicts and left unchanged. Preview and completion show those counts separately.
  • Movie recovery and library backfill coordinate their writes so a replacement decision cannot overlook a concurrent library update.

Authentication and live updates

  • Password resets revoke existing browser sessions and remembered logins. Deleted accounts lose access on their next request.
  • An invalid nonempty AUTH_ENABLED value now stops startup with a configuration error.
  • Live widgets stop polling after authentication expires and keep the sign-in action stable. System status avoids rebuilding unchanged rows during refresh.
  • Push unsubscribe responses no longer disclose whether an endpoint is registered. Activity-cache access denial is scoped to the source that returned it.

Updating

If you're updating from before v1.15.0, you may need to sign in again once. Database changes are applied automatically on both MariaDB and SQLite; no manual SQL import is required.

For Compose installations:

docker compose pull && docker compose up -d

For a pinned image, use ghcr.io/themartz90/jellydash:1.15.1. On Unraid, use the normal container update.

Don't miss a new jellydash release

NewReleases is sending notifications on new releases.