Repository navigation
Ether 0.3.5
Ether v0.3.5
Highlights:
- On Air: virtual channels are rebuilt as continuous TV channels, with styles, break reels, personal channels and a Style Studio for on-air graphics.
- Xtream everywhere: an Xtream provider can now supply movies and shows as well as Live TV, and a new IPTV apps (Xtream) app lets viewers watch Ether in IPTV players such as TiviMate and Televizo.
- Server roles on Kubernetes: a new Helm chart can split Ether across machines, with source and transcode nodes that can be lost mid-playback without stopping the stream.
- Movie and TV show quality profiles with Radarr/Sonarr-style imports that can stay in sync.
- Closer to a real Plex Media Server for playlists, play queues, downloads, track details and live updates, plus fixes for many reported Plex, Jellyfin and Android issues.
- AI for catalogue search and guide matching, and per-viewer catalogue rules.
Apple TV browsing performance
- Section rows render only the visible cards while preserving the full paging window.
- Watch-history timestamps and Continue Watching episode preparation use batched database reads, preserving viewer episode order and Specials preferences.
- Continue Watching chooses next episodes from keys, numbering and watch state, then loads full metadata only for the selected episodes. Watched-count badges use the same small reads for unrestricted viewers. Restricted-viewer policy checks retain the full-data path.
- On Deck batches remembered audio/subtitle choices and episode-order preferences across the returned page, preserving Plex stream metadata without per-episode database reads.
- Apple TV show and season pages share a short speculative playback-preparation allowance. Explicit Play still waits for the admitted source and its track information.
- AI recommendation features remain available. Related-title pages serve cached model results immediately while generation runs in the background; they never fall back to a synchronous LLM request. Home themes continue to be prepared by background model builds.
- Upgrades repair inaccurate SQLite catalogue statistics that could make a per-show lookup scan a large part of the catalogue. New indexes receive complete statistics.
Release-candidate fixes
-
Health no longer treats plex.tv’s failed direct connectivity probe as proof that a published reverse proxy is broken. Confirmed remote clients show Reachable; an unverified custom connection shows Published without a repair warning.
-
Docker version and
latesttags are promoted only after release CI and publication approval; build jobs publish commit-specific candidate tags. -
On Air startup warming skips unused styles instead of rendering the bundled preview library on servers with no virtual channels (#359). Explicit Studio previews remain available.
-
Anime season-pack selection carries the known absolute episode number into debrid file matching, supports numbered files inside an explicit season folder, and rejects a different numbered episode even when it is the only file (#360).
On Air: virtual channels
Virtual channels now play like real TV channels.
- One continuous stream per channel. Each channel plays as a single stream on HLS, DASH and plain HTTP. Programme changes no longer interrupt playback, and viewers watching the same channel share one encode.
- Faster tune-in. Joining a channel mid-programme starts sooner, and the two channels you watched most recently stay ready. A channel nobody is watching shows its ident while the programme loads. Channels nobody is watching release their provider connection immediately, so switching channels under a stream limit no longer lands on the can't-play screen.
- New programming editor. The channel drawer has Programming, Schedule, Style, Viewers and Details tabs. Programming supports dayparts and programme blocks, pinned slots and specials, strips that continue a show episode by episode each day, weighted mixes and plugin segments. Preview as shows the schedule a chosen viewer would see.
- Breaks. Break placement can be Off, Between programmes only, Evenly spaced, or Natural break points (experimental). Natural break points are off by default; until Ether finds a programme's act breaks, its breaks fall between programmes. Commercials from Assets plays a break reel.
- Break reels. Add › Break reel takes your own MP4, MOV, MKV or WebM clips (up to 3 minutes and 500 MB each), with shuffle, a repeat window and loudness matching.
- Personal channels. Add › Personal channel builds a different rundown for each viewer. Pause when they leave (on by default) holds the channel while that viewer is away. Each viewer's Live TV settings have a Personal channel switch and name.
- Styles and Style Studio. Live TV › Styles holds your on-air looks. Start from a template (Clean, Kids, Late night, Cinema, Personal, and the 80s/90s/00s/10s Decades styles), start from blank, or import and export a style pack. A style has Create, Remix, Design and Screens tabs. Design is a full canvas editor with layers, a timeline, animation presets and sound. A channel picks its style on its Style tab. Ask Ether in the Studio needs a language model under Integrations.
- Corner logo. Style › Screens › Corner logo sets the station bug's position, size, opacity and monochrome look, and can fade it during breaks and credits. A channel can override it with Customize corner logo.
- Off-air and can't-play screens. Choose what viewers see when a channel is off air or can't play: Modern card, warm Analogue static, Colour bars, We'll be right back or Test card. These screens play inside the same stream instead of switching to a different one. IPTV channels use them only when Transcode for compatibility is on for the channel or viewer.
- Style-matched fallback screens. Modern card and Be right back use the selected style’s off-air and break scenes, matching the editor preview. Explicit generic error screens remain available.
- Library. Live TV › Library holds bumpers, stings, logos and fonts for your styles. Uploaded fonts ask for their licence.
- Plugin segments. Plugins can supply On Air segments, and Programming › On the clock places them at fixed times. A Weather example plugin (a five-day forecast in the channel's style) is included as source code under
examples/onair-weather; it is not installed automatically. - The Live TV tabs are now Channels, Guide, Styles and Library. The Add button groups everything you can create: your channels, channels you bring in (IPTV source, Stremio plugin) and guide sources.
Limits: virtual channels are always transcoded to H.264 video with AAC audio, including for apps that could play HEVC. The first picture from a channel nobody is watching took about 4.5 seconds in testing.
Live TV and IPTV
-
Apple TV guide logos. Channel thumbnails use authenticated absolute image URLs so Plex for Apple TV can load both provider logos and generated channel tiles.
-
Xtream sources in one place. IPTV providers now live under Sources › IPTV (Live TV no longer has its own Sources tab). Add a source with Connect with › Xtream Codes login or a playlist URL or file.
-
Xtream movies and shows. An Xtream source has two switches: Use for Live TV (on by default) and Use for movies & shows (off by default). With movies and shows on, the provider becomes another playback source for titles already in your catalogue; it does not add new titles. Matching uses the TMDB ID, or a title and verified year; uncertain matches are left out. Movies & shows index shows how many titles were matched. When the provider has no free connection, the title shows the provider as busy instead of failing. A failed refresh keeps the last good list.
-
IPTV apps (Xtream). Turn on IPTV apps (Xtream) under Apps to serve Live TV, movies and series to IPTV player apps on the main port at
/xtream. It is off by default. Create a login for each device under the app's settings (Viewer › Create connection), or let viewers create their own from Connect apps. Each login allows one connection and can be revoked. Viewers see only what their normal restrictions allow; the programme guide is included. -
Transcode for compatibility per viewer. Viewers › (viewer) › Live TV › Transcode for compatibility transcodes IPTV channels for that viewer's devices, in addition to the existing per-channel setting. It applies the next time they tune in.
-
AI guide matching. Live TV › Guide › Channel mapping adds Match with AI beside Auto-match. You review each suggestion (accept, reject or change, or accept in bulk), and Undo guide changes is available for 24 hours. This needs a language model under Integrations.
-
Channel artwork. Channel logos sit on a light or dark tile chosen for contrast in the channel list, guide, Home, Now Playing and guide mapping. An edited logo replaces the cached copy. Thanks to @evulhotdog for #344 and #352.
-
Plex Live TV is hidden for a viewer who has no enabled channel they can watch. Thanks to @evulhotdog for #356.
-
Plex search returns live channels the viewer is allowed to see, by name and number. Guide text is not searched.
-
IPTV playback: HEVC channels are passed through unchanged to apps that can play them, per-channel headers are kept all the way to the provider, and reconnect attempts are restored after successful playback.
-
Fixes: live DASH no longer stops after the player drops to a lower quality. Plex for Android gets channel artwork in the format it asks for (#353). Switching to a movie after an idle live stream expired no longer fails.
Limits: IPTV apps do not offer timeshift or catch-up. They were tested with Televizo (live, movies and episodes), TiviMate (guide and live only) and IPTV Smarters Pro for Mac (sign-in only); that is not a certification of those apps. Xtream connection limits are counted per Ether server, not across a cluster. Xtream connection details travel in URLs, so use a private network or HTTPS for remote access. The Fire TV Cube blank-icon report in #353 still needs confirming on the device.
Server roles on Kubernetes
Ether 0.3.5 adds a Helm chart (packaging/helm/ether) for running Ether on Kubernetes with an external PostgreSQL database. See the Kubernetes guide.
-
Full or specialist nodes. By default every node is a full server that does everything. On Kubernetes, a pool of nodes can instead run exactly one specialist role:
- server: the apps' browse, sign-in and playback control;
- source: fetching releases from your providers;
- transcode: FFmpeg work, on CPU or on NVIDIA GPUs (see
packaging/kubernetes/nvidia.values.yaml); - delivery: sending video segments to players.
Background work (catalogue sync, release checks and other scheduled jobs) runs on full nodes. Adding specialists does not change your Plex server identity, rows, personalization or policies.
-
Playback survives a lost node. If a source or transcode pod or node is lost mid-playback, playback moves to another node. Video picks up from the next segment the player has not received, so playback continues without a stall. Controller and delivery loss are handled the same way. This is measured by the Kubernetes loss-test matrix: every source, transcode, delivery and controller loss case passed with zero stalls over HLS playback through the Plex, Jellyfin and Emby protocol paths, and the old encoder was cleaned up within 5 seconds.
-
Automatic recovery covers HLS transcodes to H.264 with AAC audio, whether the audio is copied or converted from AC3. Other combinations may need the player to restart playback.
-
Cluster page. Server › Cluster now has Overview, Nodes, Recovery history and Join tokens tabs, and shows each node's configured role, health, capacity and clock. Roles are changed through your Kubernetes deployment, not from the console.
Limits:
- Kubernetes only. The normal installers and Docker Compose always run one full server (which can still join a cluster of full nodes as before).
- One specialist role per node. PostgreSQL is required.
- Separate server and delivery pools are still a lab setup in this release: the chart refuses them unless you set
ingress.canonicalHLSLabOnly=true. For general use, run full nodes plus source and transcode pools. - Mixed-version clusters are not supported during upgrades.
- Loss of a native GPU worker and physical host power loss were not tested. Replicas on one physical machine do not protect against that machine failing.
- Kubernetes does not provide Plex LAN discovery or UPnP; configure advertised connections and port forwarding yourself.
Plex apps
- Closer to a real Plex Media Server. Playlists and play queues (including shuffle, Up Next, smart-playlist paging and playlist search), downloads, audio and subtitle track details, the Get Info media tree, subtitle search and deletion, and live notifications now behave much more like Plex Media Server. Deleting a playlist or a download reports success correctly, extras are served, and On Deck resumes the episode you watched most recently. Devices are now remembered permanently.
- Rows with duplicate or floating covers when scrolling past about 50 items are fixed: each library row keeps one stable list across pages, restarts and cluster nodes, including in digital-release mode (#285).
- Failed playback now shows an error instead of retrying silently, with the reason in the app's response. A Real-Debrid "infringing file" rejection now skips only that release (#315).
- LG TVs keep the same version list from the detail page through playback, which addresses the endless loading circle (#339).
- Plex for Android phones get the same subtitle fixes as Android TV, artwork loads when the app uses another connection address, and JPEG requests get JPEG (#341). Android TV detail pages list embedded subtitles on the first visit (#191).
- Plex for Kodi can open titles whose related-titles list was cut short: related titles now report their total and support paging (#354).
- Season pages pick up newly released episodes instead of showing a stale list (#351).
- Plex Web's first play after a slow decision joins the search already running instead of failing with 503.
- Continue Watching: a playback that fails no longer saves a resume point or marks the title watched, so shows no longer drop out of the row (#331). Continue Watching paging, hidden entries and watched filters have further fixes.
- Older databases whose playlists were missing items are repaired on upgrade.
Jellyfin and Emby apps
- Findroid, Jellyfin for Android TV and Jellyfin Web no longer hit 404 errors on suggestions and the other optional browse and detail screens (#347).
- Opening a title's playback details no longer starts fetching a release, and stopping playback only affects the device that asked.
Limit: the official Jellyfin Android phone app still cannot load its home screen, because Ether does not serve the Jellyfin web bundle that app uses. Device naming, offline user data, client log upload, DVR timers and item deletion are not implemented.
Playback and transcoding
- Seeking during direct play no longer cancels reads in flight, and cached parts of the file are kept, which fixes failures when skipping ahead (#326).
- Intel QSV: Ether checks which rate-control modes the GPU supports and tries a simpler QSV mode before falling back to the CPU, fixing
-look_ahead 1failures (#342). - Dolby Vision on Shield: profile 8.4 (HLG) and unknown variants are converted, a stream with Dolby Vision removed is labelled as plain HEVC, and profile 5 is refused if the bundled FFmpeg cannot convert it correctly.
- Interlaced video is deinterlaced when transcoding, Plex apps that report they cannot play Dolby Vision get a compatible stream, and AAC audio is converted correctly for Matroska output.
- The fast-start opening of an HLS transcode keeps frames in the right order with correct timestamps.
- Viewers get transcode slots ahead of background work, which is cancelled to make room.
Catalogue, Home and posters
- AI search in Library › Catalog. With a language model under Integrations, the search box accepts plain-language descriptions ("Search titles or describe what you want…"). Use the sparkle button, or let an empty normal search switch to AI automatically. Progress shows with a Stop button, and results appear in the normal catalogue view. Filters are + Filter chips with Match all / Match any.
- Per-viewer catalogue rules. Viewers › (viewer) › Limits › Catalogue rules can use the global rules, use the viewer's own rule set, or exempt the viewer from selected rules. Parental controls always apply.
- Bulk-edit Home rows. Home › Rows has an Always / Eligible / Off control on each row, bulk changes for selected rows or whole groups (including Reset to Everyone), status filters and foldable groups. Thanks to @XenoUniv3rse for #324.
- Poster rating badges follow the rating sources you chose, in order, including a single badge. None turns a slot off, and When a rating is missing decides whether TMDB fills the gap (#349).
- Ratings settings: swapping the primary and backup provider keeps both API keys, and saving settings clears old retry delays. Thanks to @jmiller0 for #343 and #348.
- Sharper artwork: original posters from providers are cached, and large background artwork is served at the width the app asks for.
- Catalogue sync skips unchanged writes and resumes discovery after a failure, which greatly reduces database load on large libraries.
Quality and releases
- Movie and TV show quality profiles (thanks @evulhotdog, #334, #358). Quality profiles are now scoped to a media type, the way Radarr and Sonarr work: every profile is for movies or for shows, and each has its own At home and Away default. Quality › Profiles has a Movies | Shows picker; the table, its default badges, new profiles and imported presets follow the selected media, and settings shared by both (sync, remote bitrate, source order, version menu) sit below it. Rules can still apply to movies, shows or both; a rule for both uses the same-named profile of each media. On upgrade, each existing profile is split automatically into a movie copy and a show copy with the same name, so every rule, default and resume point behaves exactly as before. New installs start with separate movie and show profiles.
- Radarr- and Sonarr-style imports. Import a quality profile takes Movies (Radarr) or Shows (Sonarr) profiles from TRaSH Guides, Profilarr (Dictionarry) or pasted JSON. The new Keep imported profiles in sync card updates imported profiles on a schedule, with Sync now; it is off until you turn it on. Quality › Rules can apply each device rule to movies, shows or both. Thanks to @evulhotdog for #334.
- Burned-in subtitles. Quality › Blocklist › Burned-in subtitles can prefer clean releases (the default), exclude known hardsubbed releases, or allow them. Ether recognises a hardsub once the video plays, and later picks use that. A release you block from Quality › Searching now stays blocked for that title across restarts.
- More release names recognised: short language tags such as ES, PT-BR, ES-MX and FR-CA, Spanish
[Cap.205]episode numbering, and Russian season/episode naming (#335). Packs without the requested episode are rejected. Thanks to @javi11 for #345. - Indexers with the same name can no longer use each other's downloads or cached NZBs. Older search results that can't be traced to one indexer trigger a fresh search.
Owner console
-
Accurate Plex connection status. Local checks run automatically, recent authenticated remote client traffic proves external reachability, and older failed checks cannot override that evidence. Claimed servers no longer show the sign-in prompt.
-
Database check. Maintenance › Backups & import › Backups › Database check shows the last integrity result, with Check again and recovery guidance when a problem is found.
-
Plex watch sync is one card under Integrations with an on/off switch, and server management moved into one drawer.
-
Viewers' sign-in methods sit on one row, and new passwords ask for confirmation.
-
Remote console access is honoured while Ether is starting or updating (#340).
-
The upgrade screen names each step and shows its progress and elapsed time.
-
The new On Air, Style Studio and plugin segment screens are translated into all 20 console languages.
Diagnostics
- Support bundles record the Plex media requests each app made and the limits that applied (such as maximum resolution), without credentials.
- Support bundles report how much space each SQLite table and index uses, without their contents.
Upgrading
- Back up first: the data directory,
config.jsonand.credentials-key, plus your PostgreSQL database if you use one. On SQLite, Ether also makes its own safety copy before updating the database. - The first start runs 58 database updates. Several build new indexes on the catalogue and watch history or copy the watch history, so on a large library the first start can take several minutes. The startup page shows each step's progress; leave Ether running until it finishes.
- Clusters: mixed versions are not supported. Stop every node, upgrade them all, then start them again; do not run 0.3.4 and 0.3.5 nodes against the same database at the same time.
- Kubernetes: pods are replaced one at a time. Use
packaging/kubernetes/rollout.shto drain each pod before it is replaced, and make sure spare capacity is available first. Helm rollback does not undo database updates.
Known limits
- Several of the fixes above (#191, #315, #339, #341, #353) were checked against the protocol and recorded app traffic but not yet on the physical devices from the reports. Production Apple TV checks cover browsing, Live TV logos, virtual-channel playback and commercial transitions; they do not certify every reported issue or other device. If something still fails, report the app and version, whether it was direct play or transcode, and attach a fresh support bundle.
- The reported growth of one SQLite database from about 600 MB to 5.5 GB was not reproduced in a 48-hour accelerated test. Ether does not compact the database automatically. The new support-bundle size report will help find the cause.