RoyalDownloader v1.0.0-rc.3
Pre-release
Pre-release
·
302 commits
to main
since this release
RoyalDownloader v1.0.0-rc.3
This release candidate significantly expands Royal Downloader's queue
management, discovery experience, setup workflow, provider coverage, and
deployment reliability while preserving the established Legacy, /api/v1,
WebSocket, Docker, update, and integration contracts.
Download queue
- Replace the former slug-only queue representation with persistent logical
download jobs identified by stablejob_idvalues. - Preserve the same logical job identity throughout preparation, provider and
hoster fallback, restart recovery, and user-triggered retries. - Add a unique
attempt_idfor each execution and retry, persist the
cancellingstate before signalling a worker, and block retries until the
previous worker has actually completed. - Reject stale progress and completion callbacks from older attempts and use a
separate staging directory for every attempt. - Persist active queue jobs and the latest 500 completed, failed, or cancelled
jobs in an atomically written queue snapshot. - Migrate existing slug-based queue files automatically without changing
Watchlist, Telegram, Seerr, or media correlation keys. - Restore interrupted preparation and download jobs as queued work after an
application or container restart instead of presenting stale in-memory
transfers as still running. - Add dedicated Legacy and
/api/v1endpoints for active jobs, queue history,
cancellation, retry, ordering, and manually waking provider checks. - Return an explicit conflict response when a client attempts to pause an
active transfer that cannot be resumed reliably across all supported
download engines and hosters. - Add
job_idto versioned WebSocket snapshots, progress updates, and terminal
events while retaining the existing slug-based event contracts. - Expand the queue interface with per-job progress, transferred and total
bytes, speed, ETA, provider, hoster, errors, ordering controls, cancellation,
retry, and a separate download history. - Improve responsive and touch-friendly queue controls for mobile devices.
- Fail queue-changing API transactions closed when the persistent snapshot
cannot be written instead of silently accepting an in-memory-only state.
Discovery and recommendations
- Add a new guided Mood Mode that recommends content for the current viewing
session based on mood, company, desired intensity, and preferred format. - Add stricter family-selection rules that avoid unsuitable genres and prefer
accessible family, animation, comedy, fantasy, and adventure content. - Combine Mood Mode selections with locally stored taste preferences while
applying only weak preference signals so that a single evening does not
dominate the long-term recommendation profile. - Add global search across movies, series, and anime with Jellyfin availability
filters and batched library matching. - Run catalog searches only after an explicit submission instead of sending
requests continuously while the user is typing. - Change the home-page Top 10 from a weekly selection to a deterministic daily
rotation. - Expand the home discovery program with larger, distinct content lanes and a
manual shuffle action. - Reduce repeated titles across discovery sections and improve distribution
between movies and series. - Keep the home-page series section populated from other enabled providers when
the primary trending source is unavailable. - Improve TMDB artwork hydration so duplicate appearances of the same series
receive the same backdrop and metadata updates. - Restrict portrait-poster fallbacks to ranked Top 10 cards while regular
discovery cards continue to prefer landscape artwork. - Expand the Royal Archive into a searchable media-center-style view for local
and managed content. - Replace the large taste-feedback buttons with a compact, accessible two-way
control for positive and negative recommendations.
Series and episode handling
- Preserve announced future episodes in series details together with their
provider-supplied release date and time. - Display scheduled episodes as unavailable until their release time instead of
hiding them completely. - Prevent scheduled or otherwise unreleased episodes from being added through
subscriptions, automation, or direct queue API requests. - Improve SerienStream season parsing to distinguish playable episodes from
rows that already contain a future episode URL. - Restore hero artwork after an embedded series trailer finishes instead of
leaving the player active indefinitely. - Improve series source resolution and fallback matching across configured
providers.
Providers
- Add Filmo as a movie provider.
- Integrate Filmo into movie search, new and top catalogs, genre discovery,
movie details, source resolution, and configurable provider ordering. - Migrate existing installations to include Filmo at its intended default
priority without repeatedly overwriting later user changes. - Improve Huhu compatibility and provider regression coverage.
- Improve provider and hoster source metadata used by queue jobs and download
status reporting. - Retain configured provider fallback behavior when an individual provider is
unavailable or temporarily blocked.
Setup and deployment
- Add explicit Regular computer and NAS / home server operating modes to
the first-run wizard and settings. - Configure appropriate network binding, browser startup, storage expectations,
and deployment guidance for each operating mode. - Start fresh installations in English and translate the visible setup wizard
immediately when another language is selected. - Require and validate a TMDB API key or read access token before a new setup
can be completed. - Add safe
.envgeneration from.env.examplewhen setup is completed. - Preserve unknown and user-defined environment variables when changing the
operating mode or updating managed values. - Write environment-file changes atomically and apply restrictive file
permissions where supported. - Add
start_windows.cmdas a convenient launcher for regular Windows
installations. - Improve
start.shand mounted-source NAS startup behavior. - Detect deliberately replaced mounted project bundles and activate the changed
source as a new versioned runtime release. - Keep a newer in-app-updated runtime active when the mounted source bundle has
not changed. - Exclude virtual environments, test caches, and runtime identity files from
copied application releases.
Jellyfin and metadata
- Integrate Jellyfin availability information into the expanded global search.
- Improve batched movie and series library matching for large search result
collections. - Improve movie availability-status regression coverage and prevent stale
metadata from replacing newer catalog state. - Expand TMDB summary handling for catalog entries, artwork, genres, runtime,
ratings, and recommendation data. - Continue to prevent already-owned movies and episodes from being added to the
queue.
User interface
- Fix the mobile bottom navigation so it fills the viewport width, respects
device safe areas, and distributes five or six visible destinations without
wrapping. - Improve mobile catalog lazy loading by observing document scrolling as well
as desktop tab-container scrolling. - Add responsive layouts and styling for Mood Mode, expanded discovery lanes,
global search, queue history, and the Royal Archive. - Improve keyboard and focus handling for the new recommendation and search
interfaces. - Refresh frontend cache keys for all affected modules and stylesheets.
Documentation
- Rewrite the main README in English with clearer desktop, NAS,
start.sh, and
Docker Compose installation paths. - Document the two operating modes, required TMDB configuration, persistent
storage, updates, backups, and rollback behavior. - Add dedicated persistent queue job documentation covering states, migration,
atomic persistence, restart recovery, compatibility, and API behavior. - Expand the Android API documentation with persistent job identities, queue
history, controls, and additive WebSocket fields. - Update Docker and provider documentation for the new setup and runtime
behavior.
Quality and maintenance
- Add regression tests for persistent queue migration, atomic snapshots,
history retention, retry and cancellation controls, ordering, and restart
recovery. - Add tests for safe environment-file creation and updates.
- Add provider tests for Filmo and additional Huhu behavior.
- Add tests for scheduled episode release metadata and queue rejection.
- Add tests for operating modes, mandatory TMDB validation, TMDB summaries,
Jellyfin availability, and mounted-runtime activation. - Expand frontend contract coverage for global search, daily Top 10 rotation,
discovery shuffling, Mood Mode, mobile navigation, queue controls, archive
behavior, scheduled episodes, trailer cleanup, and accessible taste feedback. - Update the reviewed Python dependency lock and CI action versions.
- Continue running Python and JavaScript syntax checks, frontend contract tests,
Ruff, Bandit, dependency auditing, Docker Compose validation, the Python test
suite, image builds, health checks, persistence checks, and restart smoke
tests.
Compatibility
- Preserve all existing slug-based queue routes and correlation keys.
- Preserve the established Legacy and
/api/v1HTTP aliases. - Preserve existing WebSocket event names while adding job information
additively. - Preserve existing Docker mounts, media destinations, Stable/Overnight update
channels, backup behavior, and rollback paths. - Existing installations are migrated automatically; no manual queue or
settings conversion is required.
This is a release candidate, not the final v1.0.0 release. Back up at
least .env and data/ before updating. Third-party providers may change
their pages, domains, availability, or protection mechanisms at any time.
What's Changed
- fix(ui): repair mobile bottom navigation by @TimeLance89 in #26
- feat(queue): add persistent download jobs by @TimeLance89 in #27
- Projektstand aktualisieren by @TimeLance89 in #28
- Promote overnight to main by @TimeLance89 in #29
- Projektstand aktualisieren by @TimeLance89 in #30
- Projektstand aktualisieren by @TimeLance89 in #31
- Overnight by @TimeLance89 in #32
- Projektstand aktualisieren by @TimeLance89 in #33
- Projektstand aktualisieren by @TimeLance89 in #34
- Projektstand aktualisieren by @TimeLance89 in #35
- Projektstand aktualisieren by @TimeLance89 in #36
- Projektstand aktualisieren by @TimeLance89 in #37
- Projektstand aktualisieren by @TimeLance89 in #38
- Projektstand aktualisieren by @TimeLance89 in #39
- Projektstand aktualisieren by @TimeLance89 in #40
- Projektstand aktualisieren by @TimeLance89 in #41
- Projektstand aktualisieren by @TimeLance89 in #42
- Projektstand aktualisieren by @TimeLance89 in #43
- Projektstand aktualisieren by @TimeLance89 in #44
- Projektstand aktualisieren by @TimeLance89 in #45
- Projektstand aktualisieren by @TimeLance89 in #46
- Projektstand aktualisieren by @TimeLance89 in #47
- Promote overnight to main by @TimeLance89 in #48
- Projektstand aktualisieren by @TimeLance89 in #49
- Projektstand aktualisieren by @TimeLance89 in #50
- Projektstand aktualisieren by @TimeLance89 in #51
- Projektstand aktualisieren by @TimeLance89 in #52
- Sync main into Overnight before rc.3 promotion by @TimeLance89 in #54
- Promote Overnight to Stable for v1.0.0-rc.3 by @TimeLance89 in #53
- Release v1.0.0-rc.3 by @TimeLance89 in #55
Full Changelog: v1.0.0-rc.2...v1.0.0-rc.3