-
v0.3.0 Stable
released this
2026-09-05 19:50:58 +00:00 | 6 commits to main since this releaseA feature release. The twelve entries of
docs/planned-features.md, built in
one pass, and the eighteen fixes from the full read of the app after 0.2.1
that produced that list.Downloads
- A download that fails in passing — the connection dropped, the server or a proxy in front of it answered 502 — is retried on its own: after ten seconds, then doubling to a ceiling of five minutes, up to six times before it is given up on. The row reads "Retrying in 40s" with the reason on hover, and can still be paused, cancelled or retried at once. A Mac that slept through the wait tries as soon as it wakes. Originals pick up where they got to; re-encodes start over, as they would by hand.
- The queue can be reordered. Drag a waiting row by its grip, or send it to the top with "Start next"; the order shown is the order the engine runs, and it survives a restart.
- A download speed limit, under Settings → Downloads & streaming, caps everything the queue pulls from the server put together, and applies to downloads already running.
- The Mac stays awake while anything is downloading or encoding. The display still sleeps as usual; a Settings switch turns this off.
- A system notification says when a download finishes or fails, the Dock icon carries the queue's overall progress, and the sidebar badge shows the percentage beside the count.
- Text subtitles travel with a download. The tracks the landed file cannot carry — every one of them for a server transcode, external files for a local encode — are fetched as WebVTT and kept beside the file, and the offline player offers them in the same menu as the file's own. Entries downloaded before this get theirs the next time they are opened with the server in reach.
- A local encode can burn a subtitle into the picture, including the bitmap kinds (PGS, VOBSUB) that an MP4 has nowhere else to put. Offered in the download panel for a single title encoded on this Mac.
- Smart downloads. A series page can ask to keep the next few unwatched episodes downloaded; the app queues what is missing at launch and after every finished episode and, when asked, deletes the watched ones behind you. The rules are listed under Settings.
- Signing out parks the queue instead of failing every download. Running jobs are paused before the token is revoked, queued ones wait, and the queue toolbar gains "Pause all" and "Resume all" so everything is one click from moving again after the next sign-in. Settings asks first when downloads are in progress, and the button reads "Signing out…" while the queue parks.
- Closing the window or quitting with a download running asks first, and says what is lost: an original resumes next time, while a re-encoded download or a local encode starts over.
- The "Added N downloads" toast tells the truth. A title already queued is reported as skipped rather than counted as added.
- Changing the download folder moves the waiting queue with it. Jobs that have not started writing point at the new folder, and a resumable original's partial file goes along; a job already writing finishes where it is.
Playback
- Playback speed from 0.75× to 2× in both players.
<and>step through it, and the pick lasts for the session. - Chapters are marked on the seek bar and named in the scrub tooltip;
[and]jump between them. Offline, the chapters come from the snapshot stored with the download. - When an episode ends the next one plays after a ten-second countdown — streaming, and offline when the next episode is on disk — with "Play now", "Cancel" and a way to turn autoplay off. The setting lives under Downloads & streaming.
- Subtitles carried into a downloaded MP4 by a local encode or a compatibility conversion can be turned on in the offline player, which now has an audio-and-subtitles menu like the streaming one. The remembered subtitle language applies to downloads as it does to streams.
- What was watched offline reaches the server once it is reachable again. A progress report that could not be delivered is kept and sent at the next launch or sign-in, so a film finished on a plane is marked watched everywhere.
- Switching stream quality mid-film no longer rewrites the default. The pick lasts for the session; the launch default is a setting of its own under Settings → Downloads & streaming.
- Player hotkeys leave modified keys alone, so Cmd+M minimises without also muting and Cmd+F no longer toggles fullscreen.
Offline library
- Episodes are grouped under their series and season, with the series' poster and a size total; films stay as cards. A filter box finds a title or series, and the header and the download-folder row in Settings say what the library takes up on disk.
- "Select" turns on bulk selection with "Delete selected"; "Delete watched" clears everything watched to the end, on the server or here. A new setting deletes a download after it has been watched in the offline player — at the next launch, never straight away.
- Home has a "Recently downloaded" row, one click from the offline player.
- A library entry whose file has gone from disk says so, with a "File missing" mark on its card and a "Remove from library" offer in the player, instead of "This file can't be played in the app."
Browsing
- Launching with the server unreachable no longer leaves the home page and the sidebar on their loading skeletons for good. Both say the server can't be reached, offer a retry, and try again on their own every twenty seconds and whenever the window comes back to the front.
- A library grid or a search is where you left it when you come back from a title: same sort, filters, pages and scroll position, per library, for the rest of the session.
- Collection, person and studio pages list the titles they lead to instead of ending at a name and a blurb. Collection libraries appear in the sidebar. Search no longer offers music albums, which the app cannot play.
- "Download season" leaves out episodes already in your downloads, says how many it skipped, and offers to include them. A single title that is already downloaded says the download will replace the saved file.
- Episode search hits show in a wide frame, so an episode still is no longer cropped into a poster.
Signed out
- The offline library stays reachable without a session. Signing out, or a token the server revoked, leaves Downloads and Settings in the sidebar with a "Sign in" link beside them, and the sign-in screen offers your downloads when there are any.
Sign-in
- The login screen remembers recent servers as chips. Picking one fills in the address and the user and puts the cursor in the password field; a × forgets it.
- The server's device list names this machine — "Oliver's MacBook Pro" — instead of "Desktop".
- On macOS the session token is kept in the Keychain rather than in the app's config folder; an existing token moves across at the first launch. The app is not signed with an Apple identity, so macOS may ask once per new build before allowing the read.
- A bare server address is tried over https before http, which is what a server behind a reverse proxy needs.
- An address that answers with something other than Jellyfin (a proxy's web page, a captive portal) is reported as the wrong address rather than as a JSON parse error.
Window
- The window opens where it was left, at the size it was left.
Releasing
- The in-app update prompt shows the release's changelog entry.
scripts/release.shreads the section for the version from this file when no notes are passed.
Downloads