Repository navigation
Releases: braedonsaunders/ether
Release list
v0.2.58
What's Changed
- Client Rules & Android Mobile 4K Support (#187): Added an optional Maximum resolution override per Client Rule (
Releases → Client rules) and updatedApplyClientRulesso user-defined Client Rules override the default1080pceiling for the official Plex Android mobile app (up to2160pwith HDR10 when the selected profile allows HDR), while preserving1080pas the default when no rule overrides it. - Separate Movie & TV Episode Size Limits + Prefer Largest File (#186): Added optional TV episodes size-per-minute bounds (
episodeMinSizeMbPerMin/episodeMaxSizeMbPerMin, falling back to the movie limits when0) and a Prefer largest file toggle (preferLargest) to quality profiles (Releases → Quality), and raised the default4Kprofile ceiling from600to1000MB/min so full 80+ GB 4K UHD Remuxes are not rejected for runtime size. - 4K Profile Remote Bitrate Cap Fix (#179, #186): Fixed the default
8000 kbpsremote bitrate ceiling (transcode.remoteMaxBitrateKbps) overriding4K(2160p/ unlimited) quality profiles when the client did not send an explicit bitrate limit, which previously caused 1080p releases or tiny ~3 GB 2160p encodes under 8 Mbps to rank ahead of normal 4K releases and remuxes. - Support Capture Retention Slot Eviction (#184): Fixed
Recorder.Startininternal/diagnosticsso finished support captures retained for download are evicted oldest-first when starting a new capture instead of returningtoo many support captures are already open.
Ether 0.2.57
This release adds Profilarr (Dictionarry) quality profile and custom format import (#128), adds opt-in per-viewer Plex account watch-state and rating sync (#143), and fixes Plex alphabet jumpbar (firstCharacter) offsets (#185).
Profilarr (Dictionarry) Quality Profile Import
- Profilarr / Dictionarry quality profile import: Releases → Quality now includes Profilarr (Dictionarry) alongside TRaSH Guides and JSON file / paste as an import source, compiling Dictionarry's
v2database operations into Radarr and Sonarr quality profiles (2160p Remux,2160p Quality,2160p Balanced,1080p Remux,1080p Quality,1080p Quality HDR,1080p Balanced,1080p Efficient,1080p Transparent,720p Quality, andSD Quality) with custom formats, scores, regex rules, and language conditions (#128).
Plex Account Watch-State Sync
- Per-viewer opt-in Plex watch-state and rating sync: each viewer can connect their own Plex account under Viewers → Access and enable future sync to publish watched/unwatched marks and 1–5 star ratings to
scrobbles.plex.tv, with manual Import and Export controls for existing history (#143). - Local playback remains authoritative: sync delivery is asynchronous, bounded, and fenced per viewer so neither a Plex outage nor an unmapped GUID delays or blocks local playback, and guest accounts cannot bind the server owner's Plex token (#143).
Library Browse & Alphabet Jumpbar Fixes
- Accurate
firstCharacteralphabet jumpbar counts and offsets:/library/sections/{id}/firstCharacternow applies library visibility exclusions identically toBrowseand separates leading#(sort_title < 'a') from trailing non-ASCII sort titles (sort_title >= '{'), so jumping toA–Zlands on the exact starting letter instead of drifting forward (#185).
Ether 0.2.56
This release fixes missing owner collection shelves and disappearing genre shelves on Plex Home, restores subtitle and audio stream listings on initial playback queue creation, expands LAN GDM multicast discovery across active network interfaces for Fire TV clients, holds unlabelled .XviD / MPEG-2 scene encodes to profile minimum resolution floors, refills Play Versions candidates when resuming a remembered release, and reduces settings snapshot allocations during availability discovery.
Plex Home, Playback, and Discovery
- Keep owner collection shelves and genre rows stable on Plex Home: owner-authored collection shelves (
RowSourceOwner) are no longer hidden by the 12-item algorithmic shelf floor, cold-start viewer models inherit the active generic presentation's shelf-count floor so shelves such asAcclaimed <Genre>do not vanish when/hubs/itemsexpandscountto 50,/hubs/itemsresolves items against the requesting viewer's layout, and saving or deleting a collection immediately invalidates cached owner shelves (#180). - Warm detail metadata before rendering
/playQueues:POST /playQueuesnow warms detail metadata for the selected item when not already warm, and paused or stopped playback sessions no longer block detail-page warming, ensuring embedded and external subtitle tracks appear immediately in the Plex Web and Android player OSD (#145). - Join GDM multicast across all active LAN interfaces:
listenGDMnow binds0.0.0.0(IPv4zero) and joins239.0.0.250across every active non-loopback, non-virtual multicast interface so Plex on Fire TV and Android TV discovers Ether reliably on multi-NIC hosts (#181). - Refill Play Versions candidates on resumed detail warm-up: when an admitted detail warm-up reuses a remembered release after a restart or search-cache expiry, Ether now triggers a bounded background search-cache refill so alternative versions remain available in Plex's Play Version menu (#182).
Release Selection, Collections, and Availability
- Hold unlabelled
.XviDandMPEG-2releases to minimum resolution floors:floorHeightnow treats unlabelledSourceUnknownreleases withxvidormpeg2codecs as 480p so SD.XviD-AFGreleases cannot bypass a 720p or 1080p profile minimum resolution gate (#179). - Include TV content ratings in Movie and Mixed collection rule pickers: the
contentRatingfacet picker in the collection rule builder now always includes standard MPAA and US TV ratings (TV-Y,TV-G,TV-Y7,TV-PG,TV-14,TV-MA) even before those ratings are cached in the local TMDB movie facet table. - Accept Torznab/Newznab URLs pasted with query parameters:
apiURLnow parses and normalizes indexer URLs that already contain query parameters (such as copied Jackett feed links with?apikey=...) before appending/api. - Reuse settings snapshots during availability discovery: availability filtering, prioritization, and newly available shelves now capture a single isolated settings and source snapshot per discovery operation instead of cloning full settings per check (#183).
Ether 0.2.55
This release completes Plex migration watch-state folding for history-only
titles, removes the 100-item preview truncation in the admin console, and skips
empty Plex collections during import.
Plex Migration and Watch State
- Fold history-only plays into watched state and preview items: historical
viewings resolved from/status/sessions/history/allfor movies and episodes
that were later removed or replaced in the source Plex library are now folded
into the migration plan's watch records (plan.items) and upserted into
state_watch(view_count,counted, andlast_viewed_at) during import so
every historical watch marks the title watched across Plex clients and
recommendations (#152). - Show all matched watch records in the import preview: removed the
100-item display slice (plan.items.slice(0, 100)) in the Settings →
Backups & import review list so the scrollable preview shows all matched
watch records (#152). - Skip and clean up empty Plex collections: collections and playlists in
Plex with zero resolved titles (such as empty collection shells left behind
after library files were removed) are no longer imported as emptytitles
specs that loginvalid collection: sources[0].keys: pick at least one title
on refresh, and any previously imported zero-title collection specs are
automatically pruned by the collection scheduler (#152).
Ether 0.2.54
This release adds configurable same-quality alternative releases to Plex's
Play Version menu and eliminates cold account-list waiting during speculative
background checks on TorBox and Debrid-Link.
Plex Play Versions
- Offer same-quality alternative releases after Auto: detail pages now list
other ranked releases sharing the automatic pick's cut, resolution, and HDR
type right after Auto in Plex's Play Version menu, labelled by quality,
audio, size, and release group (for example
1080p WEB-DL · DD+ 5.1 · 2.3 GB · FLUX) so viewers can switch releases if
one fails (#176). - Configurable alternative count (
0to3, default1): owners can set
Same-quality versions to offer (resolver.sameQualityAlternatives) under
Releases → Release selection in the admin console, raising the shared
Play Version picker cap (core.MaxVariants) from4to7while preserving
distinct quality tiers and cuts (#176).
Debrid and Resolver
- Non-blocking cold account lists in background checks: speculative
background checks on TorBox and Debrid-Link now consult known torrent IDs or
a fresh one-minute account snapshot and start a single shared read-only
refresh in the background without blocking, allowing foreground playback to
proceed immediately while sharing the in-flight snapshot for duplicate
recovery (#177).
Ether 0.2.53
This release fixes Plex Media Server watch-history migration for stripped and
stale history entries, fixes CSV import/export round-tripping and CSRF upload
checks in the admin console, and ensures foreground playback retries debrid
candidates that background speculative checks cannot evaluate without adding the
torrent.
Migration and Backups
- Resolve stripped and stale Plex
/status/sessions/history/allrows:
Plex Media Server omitsratingKey,grandparentRatingKey,year, and
<Guid>elements on historical play rows once an episode or movie has been
upgraded, replaced, or removed from the library. Migration previews now index
library shows and movies by title during the library scan, extract release
years fromoriginallyAvailableAt(YYYY-MM-DD) whenyearis omitted, and
resolve stripped or stale (404) episode and movie history rows via library
show/movie metadata and catalog search (including country suffixes such as
(US)/(UK), trailing(YYYY)years, and normalized punctuation) (#152). - Prefer
tmdb://GUIDs and type-scoped external ID lookups: migration now
checkstmdb://<Guid>tags beforeimdb://andtvdb://tags, supports
legacy Plex agent episode GUIDs (com.plexapp.agents.thetvdb://...and
com.plexapp.agents.themoviedb://...), and scopes external ID lookups and
migration searches by media type soGateMoviesByHomeRelease, library
exclusions, or overlapping TVDB movie/show IDs never hide watched titles
(#152). - Allow
text/csvuploads on/api/adoption/migration/csv/preview: the
admin CSRF gate (csrfOK) now permits same-originPOSTuploads with
Content-Type: text/csv(withX-Ether-Request: 1) on the CSV preview
endpoint instead of rejecting browser CSV imports withHTTP 403(#173). - Round-trip episode watch history in Trakt CSV exports and imports: Trakt
CSV exports now write the series title, premiere year, and show TMDB/IMDb IDs
alongsideseason,episode, andepisode_titlecolumns for episode entries,
andPreviewCSVresolvestype=episoderows via show TMDB/IMDb/TVDB IDs or
show title + season/episode numbers (#174).
Debrid and Resolver
- Foreground retry when a background debrid check cannot decide: when a
speculative background check on Real-Debrid or TorBox cannot verify an unadded
torrent without adding it to the account (core.ErrForegroundOnly), foreground
playback now tries the higher-ranked release instead of skipping it in favor
of a lower-ranked release already in the account (#175).
Ether 0.2.52
This release fixes pre-play audio and subtitle track selectors across cold
detail-page opens, stopped playback, and TV show/season views on Plex clients
(including NVIDIA Shield / Android TV), fixes embedded text subtitle playback
during remux/transcode sessions, and adds default TRaSH release group custom
formats to quality profile imports.
Plex Playback and Pre-Play Track Selectors
- Synchronous detail-page warm-up probe (
WaitWarmProbe): opening a movie
or episode detail page now waits up to a bounded budget (4s) for the
background warm probe (probeGeneration) to complete before rendering
<Media><Part><Stream>metadata, so the very first detail-page visit lists
real embedded audio and subtitle tracks instead of a single estimated track
(#145). - Retain probed tracks on
Autoacross fallback candidates and playback:
whenAutoplayback selects a candidate other thanVariants[0](because
the top cached search result was skipped during health or debrid cache
checks), stopping playback and returning to the detail page now attaches the
probed tracks to theAutoentry (Media[0]) instead of dropping all
<Stream>tags (#145). - Retain warm-probed tracks across
Prepareand extended browsing:
consuming a warm resolution for playback now preserves its probedMediaInfo
in the warm cache (60mTTL,128entries,30/mindetail warm-up budget,
and automatic replacement of stale in-flight detail warm-ups when navigating
to a new title), andResumedTracksmatches across LAN/WAN remote-cap
boundaries in Docker bridge setups (#145). - TV show
OnDeckand season episode track warming: opening a TV show page
(includeOnDeck=1),/ondeck, or a season episode list (/children) now
warms the next playable episode (OnDeckor first unwatched/in-progress
episode) and includes its probed<Stream>tags in the response (#145). - Embedded text subtitles during remux and transcode sessions: selected
non-burned embedded text subtitles in remux/transcode decisions now report
location="sidecar"withkey="/library/streams/<id>"and serve extracted
WebVTT/SRT cues from/library/streams/<id>and
/video/:/transcode/universal/subtitles, instead of reporting
location="segments-subtitle"when FFmpeg runs with-sn(#145).
Quality Profiles and Import
- TRaSH default release group custom formats: quality profile imports now
include built-in TRaSH release group custom formats (WEB Tier 01/02/03,
HD Bluray Tier 01/02/03,UHD Bluray Tier 01/02/03,Remux Tier 01/02,
LQ,LQ (Release Title),Bad Dual Groups,No-RlsGroup,Obfuscated,
Retags,Scene) with pre-populated regex rules so imported profiles score
release groups out of the box (#86, #172 — thanks @evulhotdog!).
Ether 0.2.51
This release fixes Intel VAAPI hardware transcoding on Linux and in Docker,
preserves warm-probed embedded audio and subtitle tracks on Plex detail pages
when quality variants are active, and improves Plex Media Server migration
preview matching.
Transcoding and Docker
- Full Intel VAAPI shader drivers in Docker (
amd64): the Docker image now
installsintel-media-va-driver-non-freeandi965-va-driver-shaders
instead of Debian's strippedintel-media-va-driver/i965-va-driver
packages. On Intel Gen8–Gen12 GPUs (including HD Graphics 620 / Kaby Lake),
this restores the EU kernel shaders needed forVAEntrypointEncSlice
(QVBR/VBR/CBRrate control) andVAEntrypointVideoProc
(scale_vaapi/tonemap_vaapiGPU video processing) (#13). - VAAPI rate-control mode probing and fallback: at startup Ether now probes
which rate-control modes (QVBR,VBR,CBR,CQP) each VAAPI encoder
(h264_vaapi,hevc_vaapi) supports on the active device. Bare-metal hosts
using Low-Power-only (VAEntrypointEncSliceLP) orCQP-only VAAPI drivers
automatically fall back toVBR,CBR, or bitrate-scaledCQPinstead of
failing encoder init withDriver does not support QVBR RC mode(#13). - VAAPI HDR tone-mapping probe: startup also probes
tonemap_vaapi
alongsidescale_vaapi; if the driver supports GPU scaling but rejects
hardware HDR tone-mapping, Ether tone-maps in software and still encodes on
the GPU (#13).
Plex Playback and Metadata
- Pre-play audio and subtitle track selectors with variants enabled:
/library/metadata/<key>now forwards warm-probedMediaInfostreams into
theAutovariant entry when no resume row is recorded yet, instead of
overwriting the warm-probed tracks with the variant resolver's single-stream
estimate (#145).
Migration and Import
- Plex Media Server preview matching and unwatched filtering: full PMS
previews no longer resolve or emitUnmatched:warnings for unwatched,
unrated library items that carry no personal watch state, and items with
opaqueplex://GUIDs now fall back to exact title + year catalog matching
when external<Guid>tags are absent (#152).
Ether 0.2.50
This release fixes watched episode counts in library, search, and hub listings,
custom collection background artwork and UltraBlur colours, the Release
History search link, catalog health polling during background syncs,
lower-bitrate fallback selection during direct-play down-failover, and debrid
streaming against slow or rate-limiting CDN edges.
Playback and library
- Watched counts in library, search, and hub lists: shows and seasons that
have watched episodes now includeviewedLeafCount(andviewCountwhen all
regular episodes are watched) in/library/sections/{id}/all,/hubs, and
/hubs/searchresponses, so marking a show or season watched stays visible
when Plex clients refresh from list endpoints (#163). - Custom collection artwork on
/artand UltraBlur: collections configured
with a custom artwork URL now use that artwork for/art//backgroundand
deriveUltraBlurColorsfrom the custom image instead of falling back to the
first member's TMDB backdrop (#164). - Release History title search link: "Search releases for this title" in
Releases → History now links to/releases/pinned?key=…&title=…(where
the release search lives), and legacy/releases/search?…deep links redirect
to/releases/pinnedwith query parameters preserved (#166). - Catalog health and sync batching: catalog status polling now caches and
coalesces mirror count queries across unchanged write generations, batches
discover-page upserts into one transaction per page, and serves the last
known counts with live sync progress if a status poll times out under disk
load (#167). - Lower-bitrate remux fallback on direct-play down-failover: when a
direct-play session down-fails over and the first healthy size-mismatched
candidate is higher bitrate than the starving release, Ether now supersedes
it with a later lower-bitrate mismatch instead of dropping the lower-bitrate
candidate (#168). - Debrid CDN handshake tolerance, deferred hedging, and backoff: raised the
debrid media dial timeout to 10s and TLS handshake timeout to 15s, deferred
the urgent-read hedge timer until after the primary connection finishes
DNS/TCP/TLS setup, added per-host exponential backoff (500msto30s) on
connect/TLS/transport failures, and halved the per-host connection cap (down
to2) for 3 minutes afterECONNRESET/WSAECONNRESETor HTTP429(#162).
Ether 0.2.49
This release lets owners rank releases with rules they type, record one
device's problem as a redacted support archive, and corrects health, new
seasons, Home rows, and several playback and library gates.
New and improved
- Release preferences: on Releases → Quality profiles, edit a profile
and type terms to require, prefer, or avoid. A term can be a language, a
tag, a release group, a codec, or any other text. Order is priority.
Preview the draft against pasted filenames, or search a title to include
the rest of the quality rules. Import and export the list. The rules are
part of the profile, so editing them forgets the release Ether had
remembered for that profile. The title's original language is used only
while ranking that title. Changing it forgets a remembered release that
was chosen with an original-language rule (#156). - Integrations as brand cards: the Integrations page shows each service
as a brand card. Turning a card on walks through setup, and the service
stays off until that setup is saved. The new copy is translated in the
owner-console catalogues (feat/integrations-public). - Record a problem: from Logs, or from command search, record one device
and download a single redacted support ZIP (ether.support.v1). An
unknown device is not selected for you. A capture that only saw polls
says no playback request was observed. Titles, usernames, and addresses
are separate opt-ins, and the finish preview names the identity that
will be in the archive. Review the ZIP before sharing (#151). - New seasons of returning shows: a returning series, including its
season list, is refreshed within an hour instead of waiting out the
24-hour catalogue refresh. Reported on Reddit for Dexter: Resurrection
season 2 (#148).
Playback and library
- Unlabelled WEB releases and a 4K floor: a WEB-DL or WEBRip with no
resolution in the name counts as SD (480) against the profile minimum.
That stops an SD WEB release winning when the 4K copy cannot play for
the client. Reported on Reddit for Coyote vs. Acme. Unlabelled HDTV
and DVD rips stay exempt. An explicit version pick or a pin still
bypasses the floor (#149). - Home rows: empty Continue Watching, in-progress, and
viewer-restricted hubs are left out, so Plex for Android no longer
receives blank rows at the top of Ether's Home. Personalised order stays
put for one viewer, library surface, and device class until browsing is
idle for five minutes or the day changes. A repeated hub is listed once.
Personalised ranking itself is unchanged. A phone build and a Shield
sitting have not been checked yet (#155, #150). - Android audio and subtitle choices: Plex for Android, Android TV and
Fire TV decisions list every real audio and subtitle track, so the
in-player menu can switch between them. On a first open Ether uses the
file probe the detail page already started, rather than a one-audio
estimate. If that probe has not finished yet, that one open still shows
the estimate. Embedded text subtitles picked during playback are now
served from the session. Other clients keep the exact Plex Media Server
decision shape. Contributed by @alfablac, verified on a Galaxy S24
(#160, #145). - Plezy gets 4K: Plezy on Linux, Windows and macOS receives the same
2160p, HEVC and HDR10 capabilities as other desktop players instead of the
generic 1080p H.264 profile. Plezy on Apple devices and Android TV keeps
its platform's capabilities; Android phones stay at 1080p, like the
official Plex app. Contributed by @ggiannotti (#161, part of #86). - Director disclaimers: a movie release named like
Title 2026 NOT The <Director> FILMis rejected when that director is
the catalogue director of the title being resolved. The complete name is
required. Episodes are unchanged (#154). - VAAPI when GPU scaling is unavailable: if
scale_vaapifails a
one-frame probe, VAAPI sessions decode and scale in software and upload
frames to the hardware encoder, instead of failing the hardware path and
transcoding every ladder rung on the CPU. This has automated coverage
only. No live GPU result is claimed, and the #13 reporter has been asked
forvainfooutput (#153, #13). - Content ratings: a content-rating rule set to "is none of" also hides
titles with no rating, so a missing certification cannot slip past an
allowlist. Unknown country, genre, year, and language still do not match
an exclusion. A known local rating still wins over an incomplete remote
summary (e7fb04e2). - Health behind a reverse proxy: an installed, unexpired certificate
that Ether has not trust-checked stays "Not verified", and that row no
longer holds the whole server at "Status incomplete." A configured
direct route and a published custom route are labeled separately.
Neither label means Ether has proved the server is reachable from
outside. Missing validity dates, real expiry, renewal, sign-in, and
publishing failures still count (#146, #144). - Large Live TV guides: playlist and XMLTV uploads go to the server
as the raw file, gzip included, and are streamed. Ether keeps only the
guide channels the playlist uses, from one day back to 14 days ahead, so
a full provider EPG no longer hits "exceeds the import size limit." The
limits are now 2 GB decompressed for a guide and 64 MB for a playlist,
and URL refreshes use the same filter (#158). - Subtitles download only when you pick one: Ether no longer downloads
OpenSubtitles files in the background (detail pages, playback warm-up,
preferred languages, or timing alignment), which could use up a free
account's daily quota and make every later selection fail. Search and
already-downloaded subtitles still work. A download happens only when a
viewer chooses a subtitle. - Plex import preview: a large preview used to run inside one request
and show nothing until the scan finished, so the screen stayed on
"Working…" until the browser or a proxy dropped it (#152). The preview
now returns immediately and scans in the background. The import screen
shows how many titles have been scanned, a cancel button, and the
failure text in an alert. Mapping runs eight titles at a time. Progress
and failures are logged ascomponent=migrate, without the Plex token
(#157).
After upgrading
- Reload an already-open owner console to use Release preferences, the
Integrations cards, and Record a problem. - If a library uses a content-rating "is none of" rule, unrated titles in
that library are now hidden. Confirm that is what you want. - #144 can be checked on the reverse-proxy server that reported a permanent
"Status incomplete." The certificate row remains "Not verified."
Please retest
These reports are not claimed fixed. After upgrading, please say whether
they still happen:
- @aZuiZui, #86: 2160p releases missing from the ranking list.
- @darkjezza, #94: an error when changing quality.
- @darkjezza, #21: playback still unavailable with the cache turned off.
- @c-anth, #42: the tray and Plex still using the previous port after Ether
is moved off 32400. - @FizzWhirl, #152: a large Plex import preview that sits on "Working…"
and then stops. The new job was checked offline, not against that
library.
Known limits
No live GPU confirmation for the VAAPI scale probe. The shape of
unselected Android tracks follows library metadata; it has not been
compared with a real Plex Media Server capture from the Android app. Prism, Jellyfin client
support, and watch-state sync are not in this release. The Integrations
cards are the owner console only.
Full changes: v0.2.48 → v0.2.49.