chore(release): prepare v0.24.0 (#1659)
* chore(release): prepare v0.24.0 * docs(release): select sculptural v0.24 cover * docs(release): preserve announcement cover prompt
No files matched your search
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: collections
|
||||
---
|
||||
|
||||
A live channel you watch from Favorites or Recently viewed now says which playlist it belongs to: a chip with the playlist name sits in the programme panel next to the channel, and clicking it (or "Open in <playlist>" in the channel's right-click menu) jumps to that channel inside its own playlist. Works for Xtream and M3U sources; Stalker follows in a later release.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: collections
|
||||
---
|
||||
|
||||
"Open in <playlist>" for live channels in Favorites and Recently viewed now works for Stalker portals too: the chip in the programme panel and the channel's right-click menu jump to that channel inside its portal's Live TV, with its category selected and the channel playing. Radio stations keep the existing behaviour.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: collections
|
||||
---
|
||||
|
||||
Switching Favorites or Recently Viewed between "This playlist" and "All
|
||||
playlists" now shows a thin progress bar under the header and dims the list
|
||||
while the new items load, instead of leaving the old list on screen with no
|
||||
sign that anything happened. The toggle reflects your choice at once, a
|
||||
playing channel keeps playing, and quick switches show no indicator at all.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: dashboard
|
||||
---
|
||||
|
||||
The dashboard no longer labels every title with "Xtream · Series" or "Stalker · Movie": the hero shows only the source name, and Continue Watching cards show the episode you are on plus the minutes left. Stalker shows filed under Movies now get that S·E badge, the progress bar, and a working "Resume episode" that opens the show at the saved episode.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: internal
|
||||
area: dashboard
|
||||
---
|
||||
|
||||
The dashboard's live "now playing" time range and progress bar now read
|
||||
pre-computed EPG timestamps as unix seconds, matching the rest of the EPG
|
||||
code. Today's dashboard lookups never carry those fields, so nothing changes
|
||||
on screen; this closes the gap before a future data path supplies them.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: dashboard
|
||||
---
|
||||
|
||||
The dashboard's "Now on air on favorite channels" and "Recently watched Live
|
||||
TV" rails now show the current programme for channels whose guide lives in an
|
||||
XMLTV another playlist imported, not only in the global EPG sources from
|
||||
Settings — the same lookup the "See all" pages already used.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: dashboard
|
||||
---
|
||||
|
||||
On the desktop app, favourite and recently watched Xtream and Stalker channels
|
||||
on the dashboard now show what is on air, with the programme's time and
|
||||
progress. Each card asks its portal only once it scrolls into view and fills in
|
||||
on its own, so a slow portal never holds up the page or the other cards.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: perf
|
||||
area: database
|
||||
issues: [1292]
|
||||
---
|
||||
|
||||
Refreshing or removing a large Xtream playlist is several times faster: the
|
||||
"Removing cached content" stage and the re-import now commit around 5,000
|
||||
rows at a time instead of 100, and progress updates arrive at most ten times a
|
||||
second instead of once per batch.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: database
|
||||
issues: [1580]
|
||||
---
|
||||
|
||||
Updating directly from older versions no longer blocks playlist loading with a missing database column error. Existing sources, favorites, and playback history are preserved.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: internal
|
||||
area: deps
|
||||
---
|
||||
|
||||
The application uses Angular 22 and Nx 23 with updated build and test tooling.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: internal
|
||||
area: deps
|
||||
---
|
||||
|
||||
The Embedded MPV native addon build now declares its `node-gyp` dependency
|
||||
explicitly, so `node apps/electron-backend/build-embedded-mpv.js` and the
|
||||
Homebrew development scripts work on a clean checkout instead of failing with
|
||||
"Unable to resolve node-gyp". Packaged builds are unchanged.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: internal
|
||||
area: deps
|
||||
---
|
||||
|
||||
Closes the eight open Dependabot alerts of September 2026: astro 7.2.4 → 7.2.10
|
||||
(website build), and pinned pnpm overrides moving js-yaml to 4.3.2 (the one
|
||||
runtime path, via electron-updater), smol-toml to 1.7.1, svgo to 4.1.0 and hono
|
||||
to 4.13.5. No application behavior changes.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: internal
|
||||
area: deps
|
||||
---
|
||||
|
||||
Closes the four open Dependabot alerts on transitive npm dependencies via
|
||||
pinned pnpm overrides: browserslist (crash on untrusted stats), @xmldom/xmldom
|
||||
(XML fragment injection — its existing override target had itself fallen into
|
||||
the advisory range), @humanfs/node (recursive copy follows symlinks out of the
|
||||
tree) and postcss-selector-parser (AST recursion DoS).
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: downloads
|
||||
---
|
||||
|
||||
Download completed Xtream catch-up programmes as TS files from Live TV programme details. Find them in Downloads with the channel and broadcast date and play them offline. Interrupted archive downloads restart from the beginning.
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: embedded-mpv
|
||||
highlight: Embedded MPV reconnects dropped streams
|
||||
---
|
||||
|
||||
The embedded MPV player now reloads a live stream that drops mid-playback on
|
||||
its own, with increasing delays and an "attempt N of 6" line instead of a
|
||||
dead error screen; a new Settings > Playback toggle turns this off. The same
|
||||
section gains an advanced field for extra libmpv options (one key=value per
|
||||
line) that applies on every engine, with a short network timeout on by default.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: embedded-mpv
|
||||
---
|
||||
|
||||
When a stream refuses the connection, the embedded MPV player (frame-copy
|
||||
engine) no longer hands the URL to yt-dlp before giving up: the failure
|
||||
shows up right away and its error no longer reads "youtube-dl failed:
|
||||
unexpected error occurred", matching the native-view engines and the
|
||||
external MPV player.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: epg
|
||||
---
|
||||
|
||||
Copy a catch-up programme’s URL from its EPG details in Xtream and supported M3U sources, including Favorites and Recent, without interrupting playback. The link can be used in an external player or download tool.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: epg
|
||||
issues: [50]
|
||||
---
|
||||
|
||||
EPG settings now include a display-only time offset, making it easy to correct provider feeds with missing or incorrect timezone information without re-importing the guide.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: epg
|
||||
issues: [1586]
|
||||
---
|
||||
|
||||
EPG guides now load when a server adds gzip compression to an already compressed XMLTV file. Sources using a single gzip layer continue to work.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: epg
|
||||
---
|
||||
|
||||
The EPG import panel no longer shows a horizontal scrollbar while sources download. Source names now read as host/file instead of running the two together, channel and programme counts use your locale's digit grouping, and the minimize button and summary are translated.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: epg
|
||||
highlight: Local XMLTV files as EPG sources
|
||||
---
|
||||
|
||||
EPG sources no longer have to be URLs: point Settings → EPG or a playlist's EPG list at an XMLTV file on your computer, by absolute path, `file://` link, or the new folder button. Plain `.xml` and gzip `.xml.gz` both work. A typed path is confirmed once in a native dialog before it is read; the settings page spells out the accepted formats with examples.
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: epg
|
||||
issues: [171]
|
||||
highlight: Programme guide, rebuilt
|
||||
---
|
||||
|
||||
The programme guide now shows your playlist's own channels in their order,
|
||||
with the current group or favorites one click away. Click a channel to
|
||||
switch playback while the player stays on screen above the grid;
|
||||
double-click switches and closes. Open it from the new Guide button, the
|
||||
header, the command palette, or the G key. Hide channels without EPG and
|
||||
pick comfortable or compact rows.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: epg
|
||||
---
|
||||
|
||||
Removing and saving an EPG source now clears its cached programmes, including data left by previously removed sources on restart. Other configured sources and playlist guides are preserved, and Live TV stops showing programmes from the removed source.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: epg
|
||||
---
|
||||
|
||||
The EPG timeline toolbar is more compact: "Now" is an icon button, and the zoom slider is replaced by a single button that cycles day overview → by hour → detailed. Ctrl/⌘ + scroll (or a trackpad pinch) over the timeline zooms smoothly around the cursor. The channel and programme title now use all the space the controls free up.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: host-health
|
||||
issues: [1439]
|
||||
---
|
||||
|
||||
Portal recovery now waits for an active probe to finish before sending another request, even when redirects or a slow response take longer than 45 seconds. Completed and cancelled requests release the probe slot reliably.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: live-tv
|
||||
issues: [1458]
|
||||
---
|
||||
|
||||
A hidden channel list no longer looks like a playlist that lost its channels: the player now says the list is hidden and offers a "Show channels list" button, a toggle in the workspace header stays in place in both states, and hiding the list in one place (M3U player, portal Live TV, favorites/recent) no longer hides it everywhere else.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: m3u
|
||||
---
|
||||
|
||||
ClearKey channels with ordinary Base64 keys now play when imported or refreshed, including JSON playlist exports that use + and / characters. Refresh an existing playlist once to apply the fix.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: m3u
|
||||
issues: [1590]
|
||||
---
|
||||
|
||||
DASH channels, including ClearKey-protected streams, now play from Recently Viewed and Favorites using the compatible built-in player. Existing imports keep their DRM keys without needing to re-import the playlist.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: m3u
|
||||
issues: [465, 1120]
|
||||
---
|
||||
|
||||
M3U URL imports now accept a custom User-Agent for providers that require it before downloading the playlist. The value is saved and reused for playlist refreshes in the desktop app and self-hosted web app.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: m3u
|
||||
---
|
||||
|
||||
Movies and episodes recognized as video files in M3U playlists now offer playback time and seeking in built-in players, even when TMDB or movie details are disabled. Seeking remains dependent on the source's support.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: migration
|
||||
issues: [1504]
|
||||
---
|
||||
|
||||
Upgrades from older desktop versions retain all sources from the legacy profile. Already-upgraded users can choose to recover missing sources without replacing current sources or settings. Migration keeps the original data and retries safely after a failed write.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: migration
|
||||
---
|
||||
|
||||
Startup now shows a theme-aware preparation screen while loading sources and checking a large programme guide. Temporary source-read failures retry automatically; if loading still fails, you can retry without restarting the app. Recovery also completes any previously failed programme-guide cleanup before opening the library.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: packaging
|
||||
---
|
||||
|
||||
AppImage builds now include an update source for AppManager, allowing it to discover new GitHub releases and download full application updates without manually configuring the repository.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
The built-in player controls now hide on their own after you click a button
|
||||
in the bar with the mouse, such as fullscreen or mute. Previously the clicked
|
||||
button kept the bar pinned on screen until you clicked the video, which also
|
||||
paused it. Applies to the shared controls in the web players and the
|
||||
Embedded MPV frame-copy engine.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: playback
|
||||
---
|
||||
|
||||
Playback errors now explain confirmed access and DRM license failures, with stream codecs, DRM systems and failure stages in the details. Copy diagnostics creates a support report without stream URLs or credentials. No extra requests are made to your provider.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
Arrow keys and the ±10 s buttons in the Embedded MPV player now move by their
|
||||
full step every time. Pressing an arrow repeatedly, or holding it, used to
|
||||
advance only about a second per press because each step was computed from a
|
||||
stale position; steps are now relative seeks executed by mpv itself, so rapid
|
||||
presses add up.
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: playback
|
||||
issues: [48]
|
||||
highlight: Channel list in fullscreen
|
||||
---
|
||||
|
||||
Rest the mouse on the left edge (tap it on touch) or press C while a live
|
||||
channel plays fullscreen: the channel list (M3U all/groups/favorites/recent,
|
||||
Xtream, Stalker, global favorites) slides over the video with search, so you
|
||||
can zap without leaving fullscreen. Nothing covers the video while it is
|
||||
closed. M3U playlists also zap with PageUp/PageDown.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: playback
|
||||
highlight: Episode list in fullscreen
|
||||
---
|
||||
|
||||
Series playback now has the slide-in list in fullscreen too: rest the mouse on the left edge, click it, or press C to see the season tabs and episodes with stills, runtimes, descriptions and watch progress, and jump to another episode without leaving fullscreen. Works for Xtream and Stalker series with any built-in player.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
The fullscreen channel list is easier to find and calmer to use: moving the mouse shows a small tab on the left edge, a click on that edge opens the list at once, hover still opens it after a short rest, and the list now stays open for a full second after the mouse leaves. Opened with `C`, it no longer closes while the mouse only wanders over the video.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
The fullscreen channel panel stays open under the pointer when its opening animation is delayed, instead of closing before the list appears.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
With the default shared player controls, the built-in player now stays in
|
||||
fullscreen when you switch to another episode, when the next episode starts
|
||||
automatically, and when a live channel or an alternative movie source is
|
||||
switched — previously every switch dropped back to the page. The legacy
|
||||
vendor-controls opt-out keeps its previous behavior.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
Switching channels or leaving playback now closes the old picture-in-picture window in HTML5, Video.js, and ArtPlayer even when shared player controls are disabled, preventing frozen or outdated video from remaining on top. This includes Safari’s legacy picture-in-picture mode.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
issues: [1530]
|
||||
---
|
||||
|
||||
Embedded MPV controls and programme-guide panels now follow the visual theme and stay readable in light and dark mode. Video overlays retain their contrasting dark backgrounds.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
The built-in HTML5 player now plays `.mkv`, `.webm`, `.avi`, `.mov` and other
|
||||
non-HLS video files directly instead of handing them to the HLS engine, which
|
||||
failed with a "network or provider loading error" on many Xtream episodes and
|
||||
movies. ArtPlayer and the HTML5 player now choose their engine by the same rule.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
Keyboard shortcuts work again right after you click a button in the built-in
|
||||
player controls. Previously the clicked button kept the keyboard: after
|
||||
clicking fullscreen, Space left fullscreen instead of pausing, and the seek,
|
||||
volume and mute keys did nothing until you clicked the video. Applies to the
|
||||
shared controls in the web players and the Embedded MPV frame-copy engine.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
---
|
||||
|
||||
With IPTVnator's shared controls turned off, the Video.js player's keyboard
|
||||
shortcuts now work again right after you click a button in its control bar.
|
||||
Previously the clicked button kept the keyboard: after clicking fullscreen,
|
||||
Space left fullscreen instead of pausing, and the seek, volume and mute keys
|
||||
did nothing until you clicked the video.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playback
|
||||
issues: [871]
|
||||
---
|
||||
|
||||
VLC now opens without an extra console window on Windows when playback progress tracking or Reuse VLC instance is enabled.
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: playback
|
||||
highlight: See what a stream really is while it plays
|
||||
---
|
||||
|
||||
The player overlay now shows stream information: resolution, playback and source
|
||||
frame rates, stream and codec bitrates, audio details, buffer and dropped frames.
|
||||
Available in built-in web players and experimental frame-copy Embedded MPV.
|
||||
Unknown or unavailable values stay hidden; measured frame rates reflect dropped frames and
|
||||
stalls.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: playlist
|
||||
---
|
||||
|
||||
Desktop users can review inactive sources and delete selected ones together. The dialog checks the whole library, preselects confirmed expired or disabled accounts, and lets you keep individual sources. Busy sources are skipped, and deletion results are reported individually.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: playlist
|
||||
---
|
||||
|
||||
Desktop playlist lists now show availability for Stalker portals and M3U links alongside Xtream accounts. Checks share cached results, run in the background, and explain when a source could not be verified.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: playlists
|
||||
---
|
||||
|
||||
Opening an M3U playlist immediately after refreshing now waits for its pending save, so the channel list does not revert to the previous catalog.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: portal
|
||||
---
|
||||
|
||||
Movies can now be marked as watched (or unwatched) by hand from their
|
||||
detail page on Xtream and Stalker sources, including the Favorites and
|
||||
Recently Viewed views — the same way seasons and episodes already could. The
|
||||
catalog shows the green check right away, and a watched movie offers Play
|
||||
instead of a Resume near the end.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: portal
|
||||
---
|
||||
|
||||
Series with more than six seasons now show a small season poster in the season
|
||||
dropdown — on each row that has one and on the closed selector — so a long
|
||||
list of "Season N" entries is easier to scan. The fullscreen episode panel's
|
||||
season strip also gets its own "N episodes" translation instead of borrowing
|
||||
the download manager's.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: portal
|
||||
highlight: Season posters
|
||||
---
|
||||
|
||||
Series pages now show each season's own poster next to the season tabs, and
|
||||
the fullscreen episode list shows it above its tabs too. The picture comes
|
||||
from TMDB when metadata enrichment is on, otherwise from your provider's
|
||||
season art; one-season shows keep the page as it was.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: portals
|
||||
issues: [1438]
|
||||
---
|
||||
|
||||
Xtream and Stalker portals no longer enter a connection cooldown merely because several parallel requests fail in the same millisecond. This fixes false unavailability in both the desktop app and the self-hosted web version.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: portals
|
||||
---
|
||||
|
||||
Desktop settings now let you disable the temporary pause after repeated Xtream or Stalker connection failures, without restarting. Account info explains when requests are paused and offers an immediate retry.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: portals
|
||||
issues: [1520]
|
||||
---
|
||||
|
||||
Xtream and Stalker keep remote channel order while you browse other categories or search. Use Show playing channel to return to the current channel without restarting playback. Stalker radio supports the same behavior.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: portals
|
||||
---
|
||||
|
||||
Live TV panels now fold in steps: hide only the categories rail and keep the
|
||||
channel list, or hide both for a player-only view. With categories hidden, the
|
||||
list header becomes a category dropdown, so switching categories stays one
|
||||
click away, and hiding both panels then bringing them back returns to the
|
||||
level you had before.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: portals
|
||||
highlight: Posters-only cover wall
|
||||
---
|
||||
|
||||
Movie and series grids can now drop the title row: turn off "Show titles under covers" in Settings > General and the catalog, favorites and recent grids become a wall of covers that shows more rows per screen. The title slides in on the cover when you point at it or focus it with the keyboard, and stays on for items whose cover is missing. Live channels and search results keep their labels.
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: portals
|
||||
---
|
||||
|
||||
A slow Xtream or Stalker panel is no longer mistaken for a dead one: a request
|
||||
that reached the panel and then timed out no longer trips the 30-second
|
||||
"portal is not responding" pause, which only fires when the panel never
|
||||
accepts the connection. The desktop app also gives IPv4 fallback the same
|
||||
2.5-second budget as the self-hosted backend, so dual-stack panels behind
|
||||
VPNs stop failing in bursts.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: search
|
||||
issues: [609]
|
||||
---
|
||||
|
||||
Search now returns the same results whether you type upper or lower case Turkish characters. Titles with the dotted capital I (for example "İnşaat") are found by typing a plain lower case i, so "inş" and "İnş" match the same channels and movies — in global search, in each portal's search, in the command palette, and in the channel, category, favorites and download list filters.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: settings
|
||||
---
|
||||
|
||||
The update status in Settings → About now names the channel it describes, and after picking another channel the check button becomes "Save and check": one click saves the choice and reports what that channel offers. Previously "Check again" silently re-checked the still-saved channel, so a fresh nightly could look like "no update".
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: shell
|
||||
---
|
||||
|
||||
Reloading the desktop app while on any page no longer breaks it: View › Reload
|
||||
on macOS used to leave a blank, dead window until restart, and the reload
|
||||
offered by the settings unsaved-changes dialog did nothing. Both now reload the
|
||||
app back onto the page you were on.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: shell
|
||||
issues: [1455]
|
||||
---
|
||||
|
||||
Settings → General has a new "Window on startup" option: open the desktop app
|
||||
at its last size, maximized, or fullscreen — handy on a TV or HTPC. Starting
|
||||
with `--fullscreen` forces a single fullscreen launch without changing the
|
||||
setting, and F11 now toggles fullscreen anywhere in the app.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: shell
|
||||
issues: [1109]
|
||||
---
|
||||
|
||||
The app now remembers your zoom level (Cmd/Ctrl and +/-): it holds when you
|
||||
switch between sections or resize the window, and comes back after a
|
||||
restart, so a larger font size no longer resets to the default.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: shell
|
||||
issues: [1109]
|
||||
---
|
||||
|
||||
Zoom the app from the keyboard on every platform: Ctrl (Cmd on macOS) with
|
||||
+/- steps the size in about 10 % increments, including on the numpad, and
|
||||
Ctrl/Cmd+0 returns to the default. Windows and Linux gain these shortcuts,
|
||||
which previously existed only in the macOS menu.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: stalker
|
||||
---
|
||||
|
||||
Stalker items whose portal sends an empty `id` next to a valid one are no longer lost: such a channel or movie can be favorited, played, resumed and found again, instead of being stored without an identity and quietly refusing to open.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: stalker
|
||||
issues: [1543]
|
||||
---
|
||||
|
||||
Stalker Live TV search stays within the selected category in the sidebar and fullscreen panel, including channels beyond the first page. All Items searches the whole catalog, and the two search fields work independently.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: stalker
|
||||
---
|
||||
|
||||
In Stalker portals, switching the Live TV or radio category in the sidebar no
|
||||
longer stops the channel that is playing. The category only changes which
|
||||
channels are listed, matching how Xtream portals and M3U playlists already
|
||||
behave.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: stalker
|
||||
---
|
||||
|
||||
Stalker series with season markers such as “s02” or “2 сезон” now show the correct season in tabs and episode labels while preserving watch progress. TMDB updates no longer reset loaded episodes, and delayed portal responses cannot mix episodes from different series.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: stalker
|
||||
---
|
||||
|
||||
Seeking in Stalker movies and series now reaches the selected position instead of jumping forward or skipping to the next episode after resuming playback.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: tmdb
|
||||
---
|
||||
|
||||
Russian titles containing "й" or "ё" and Arabic titles with hamza letters now
|
||||
match on TMDB. The search used to send a folded spelling — dropping the breve
|
||||
from "й", for instance — that TMDB never recognised, and cached the miss for a
|
||||
week; those cached misses are cleared on the next start.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: tmdb
|
||||
---
|
||||
|
||||
A new series no longer picks up the poster, cast and plot of an older show
|
||||
that happens to share its title. Metadata is looked up in your own language,
|
||||
so an unrelated foreign series can be listed under the very same name — and
|
||||
the better-known one used to win. The release year the provider states now
|
||||
decides first.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: ui
|
||||
issues: [1506]
|
||||
---
|
||||
|
||||
Live TV now supports keyboard movement between categories and channels, and channel lists keep scrolling after mouse selection. Channel scrollbars and resize handles are independently accessible. Movie and series details support immediate keyboard scrolling and no longer hide their scrollbars.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: ui
|
||||
---
|
||||
|
||||
Detail buttons, episode cards and episode rows now keep visible backgrounds and borders in the light theme. The grid/list switch also clearly highlights the selected view in both themes.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: ui
|
||||
---
|
||||
|
||||
Movie and series detail pages now show one Back arrow instead of two. The floating arrow always returns to the list, while watching too, and the "Close player" button beside the player is the only control that returns to the description. Escape still closes the player first and then goes back.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: ui
|
||||
issues: [1570]
|
||||
---
|
||||
|
||||
Movie and series detail pages keep their Back button visible while scrolling. Escape closes the inline player to the description, then returns to the previous view. Open menus, dialogs and fullscreen retain priority.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: feature
|
||||
area: updater
|
||||
highlight: Nightly update channel
|
||||
---
|
||||
|
||||
Settings → About now has an Update channel switch. Nightly follows every merge into master: the desktop updater offers each new build automatically, and About shows the build's commit for bug reports. Stable stays the default; a nightly build remains installed until the next stable release is newer.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: updater
|
||||
---
|
||||
|
||||
"What's new" no longer fails with a raw error for a build published after the app started: the release list is re-read from GitHub when the requested version is missing, so a freshly offered nightly shows its notes. When a version really has no release, the dialog now says so in plain words and links to the channel's releases page.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: web-backend
|
||||
issues: [1436]
|
||||
---
|
||||
|
||||
The self-hosted backend now checks every provider redirect and pins connections to validated addresses, preventing redirects or DNS changes from bypassing private-network restrictions. Trusted LAN access remains available through the existing opt-in.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: xtream
|
||||
issues: [1513]
|
||||
---
|
||||
|
||||
Xtream Live TV in Auto can try advertised TS once when HLS initially fails with an HTTP error in a web player. The selected player and stream headers are kept. Settings explain the manual TS workaround for external players, Embedded MPV, and HLS retries that never report a terminal failure.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: xtream
|
||||
issues: [1562]
|
||||
---
|
||||
|
||||
Catch-up (timeshift) from the Favorites and Recent tabs now asks the panel for the programme you clicked: the start time is rendered in the panel's own timezone instead of your computer's. The panel's timezone is remembered per source, survives restarts, and panels that report an unusual timezone name are handled through their clock.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: epg
|
||||
issues: [767]
|
||||
---
|
||||
|
||||
The current program shown under each channel in the Xtream Live TV list now moves on by itself once that program ends, and its progress bar keeps advancing. Previously both stayed frozen on the old program until you left the category and came back in.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: xtream
|
||||
issues: [812, 816]
|
||||
---
|
||||
|
||||
Xtream category management now selects or deselects only matching categories while searching, preserving the visibility of all other categories. Button labels and availability reflect the search results, and the counter clearly shows the total selected.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: xtream
|
||||
---
|
||||
|
||||
The explicit HTTPS and HTTP connection test now detects Xtream portals that accept HTTP when HTTPS is unavailable and fills in the working address before you save. The saved address is used for catalog updates, provider EPG and playback. Connection failures now show a more specific explanation.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: xtream
|
||||
---
|
||||
|
||||
Opening a live channel in another Xtream playlist (from global search, the dashboard or the new "open in playlist" chip) no longer lands on an empty Live TV page: the jump used to get lost while the app was still opening that playlist, and now waits for its catalog before selecting and playing the channel.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
type: fix
|
||||
area: xtream
|
||||
---
|
||||
|
||||
The Xtream sync panel now keeps its status text, labels and Stop sync button clearly readable in both light and dark themes.
|
||||
@@ -7,6 +7,8 @@ description: Use when preparing, cutting, tagging, publishing, or verifying an I
|
||||
|
||||
Full contract, asset table and rationale: `docs/architecture/release-pipeline.md`.
|
||||
|
||||
For imagegen announcement covers, reuse [the approved artwork prompt](../../../docs/development/release-cover-artwork.md).
|
||||
|
||||
The tag workflow authors the public GitHub body with
|
||||
`node tools/release/extract-changelog-section.mjs --public "${VERSION}"`.
|
||||
Keep the full changelog, including internal notes, committed before tagging.
|
||||
|
||||
@@ -7,6 +7,8 @@ description: Use when preparing, cutting, tagging, publishing, or verifying an I
|
||||
|
||||
Full contract, asset table and rationale: `docs/architecture/release-pipeline.md`.
|
||||
|
||||
For imagegen announcement covers, reuse [the approved artwork prompt](../../../docs/development/release-cover-artwork.md).
|
||||
|
||||
The tag workflow authors the public GitHub body with
|
||||
`node tools/release/extract-changelog-section.mjs --public "${VERSION}"`.
|
||||
Keep the full changelog, including internal notes, committed before tagging.
|
||||
|
||||
@@ -11,6 +11,147 @@ this marker — see `.changes/README.md`.
|
||||
|
||||
<!-- next-release -->
|
||||
|
||||
# [0.24.0](https://github.com/4gray/iptvnator/compare/v0.23.0...v0.24.0) (2026-09-21)
|
||||
|
||||
|
||||

|
||||
|
||||
## Highlights
|
||||
|
||||
### Programme guide, rebuilt
|
||||
|
||||
The M3U programme guide now follows your playlist's own channels and order, with groups and favorites one click away. Keep the player above the grid while you browse, click a channel to switch, or double-click to switch and close. Open the guide with **G**, hide channels without EPG and choose compact or comfortable rows. ([#1560](https://github.com/4gray/iptvnator/pull/1560), closes [#171](https://github.com/4gray/iptvnator/issues/171))
|
||||
|
||||
### Browse channels and episodes without leaving fullscreen
|
||||
|
||||
Press **C** or use the left edge of the video to open a searchable channel list. Series get season tabs and an episode list with artwork and watch progress too. With the default shared controls, switching channels, episodes or alternative movie sources keeps the player fullscreen. ([#1519](https://github.com/4gray/iptvnator/pull/1519), [#1620](https://github.com/4gray/iptvnator/pull/1620), [#1509](https://github.com/4gray/iptvnator/pull/1509), closes [#48](https://github.com/4gray/iptvnator/issues/48))
|
||||
|
||||
### See what is playing while it plays
|
||||
|
||||
The stream-info overlay shows resolution, frame rates, bitrates, audio details, buffer and dropped frames when the player can report them. Available in the built-in web players and experimental frame-copy Embedded MPV; unavailable values stay hidden. ([#1578](https://github.com/4gray/iptvnator/pull/1578))
|
||||
|
||||
---
|
||||
|
||||
**27 features · 54 fixes · 1 performance improvement** — including local XMLTV files, Xtream catch-up downloads, automatic reconnects for embedded MPV, season artwork and recovery for sources missing after an older upgrade.
|
||||
|
||||
Read the 📝 [release story on the blog](https://4gray.github.io/iptvnator/blog/v0-24-release-notes/), the [full CHANGELOG](https://github.com/4gray/iptvnator/blob/v0.24.0/CHANGELOG.md), or the [changes since v0.23.0](https://github.com/4gray/iptvnator/compare/v0.23.0...v0.24.0).
|
||||
|
||||
Before updating, back up your playlists and important data. Desktop startup applies database updates and clears outdated metadata matches; allow the preparation screen to finish and avoid downgrading an upgraded profile.
|
||||
|
||||
## Thanks
|
||||
|
||||
Thank you to [@Bpl5966](https://github.com/Bpl5966) for MPV reconnects and extra options ([#1515](https://github.com/4gray/iptvnator/pull/1515)), [@mark-jardine](https://github.com/mark-jardine) for the EPG time offset ([#1489](https://github.com/4gray/iptvnator/pull/1489)), and [@larsemig](https://github.com/larsemig) for stream information ([#1578](https://github.com/4gray/iptvnator/pull/1578)). A warm thank-you to everyone who reported issues, tested builds, helped in the [Telegram community](https://t.me/iptvnator), or supported development. 💙
|
||||
|
||||
If IPTVnator is useful to you, you can help keep it moving through [GitHub Sponsors](https://github.com/sponsors/4gray) or [Ko-fi](https://ko-fi.com/4gray).
|
||||
|
||||
<details>
|
||||
<summary><b>All features, fixes and performance improvements</b></summary>
|
||||
|
||||
### Features
|
||||
|
||||
- **collections** — A live channel you watch from Favorites or Recently viewed now says which playlist it belongs to: a chip with the playlist name sits in the programme panel next to the channel, and clicking it (or "Open in <playlist>" in the channel's right-click menu) jumps to that channel inside its own playlist. Works for Xtream and M3U sources. ([#1634](https://github.com/4gray/iptvnator/pull/1634))
|
||||
- **collections** — "Open in <playlist>" for live channels in Favorites and Recently viewed now works for Stalker portals too: the chip in the programme panel and the channel's right-click menu jump to that channel inside its portal's Live TV, with its category selected and the channel playing. Radio stations keep the existing behaviour. ([#1639](https://github.com/4gray/iptvnator/pull/1639))
|
||||
- **dashboard** — The dashboard no longer labels every title with "Xtream · Series" or "Stalker · Movie": the hero shows only the source name, and Continue Watching cards show the episode you are on plus the minutes left. Stalker shows filed under Movies now get that S·E badge, the progress bar, and a working "Resume episode" that opens the show at the saved episode. ([#1646](https://github.com/4gray/iptvnator/pull/1646))
|
||||
- **dashboard** — On the desktop app, favourite and recently watched Xtream and Stalker channels on the dashboard now show what is on air, with the programme's time and progress. Each card asks its portal only once it scrolls into view and fills in on its own, so a slow portal never holds up the page or the other cards. ([#1638](https://github.com/4gray/iptvnator/pull/1638))
|
||||
- **downloads** — Download completed Xtream catch-up programmes as TS files from Live TV programme details. Find them in Downloads with the channel and broadcast date and play them offline. Interrupted archive downloads restart from the beginning. ([#1572](https://github.com/4gray/iptvnator/pull/1572))
|
||||
- **embedded-mpv** — The embedded MPV player now reloads a live stream that drops mid-playback on its own, with increasing delays and an "attempt N of 6" line instead of a dead error screen; a new Settings > Playback toggle turns this off. The same section gains an advanced field for extra libmpv options (one key=value per line) that applies on every engine, with a short network timeout on by default. ([#1515](https://github.com/4gray/iptvnator/pull/1515))
|
||||
- **epg** — Copy a catch-up programme’s URL from its EPG details in Xtream and supported M3U sources, including Favorites and Recent, without interrupting playback. The link can be used in an external player or download tool. ([#1569](https://github.com/4gray/iptvnator/pull/1569))
|
||||
- **epg** — EPG settings now include a display-only time offset, making it easy to correct provider feeds with missing or incorrect timezone information without re-importing the guide. ([#1489](https://github.com/4gray/iptvnator/pull/1489), closes [#50](https://github.com/4gray/iptvnator/issues/50))
|
||||
- **epg** — EPG sources no longer have to be URLs: point Settings → EPG or a playlist's EPG list at an XMLTV file on your computer, by absolute path, `file://` link, or the new folder button. Plain `.xml` and gzip `.xml.gz` both work. A typed path is confirmed once in a native dialog before it is read; the settings page spells out the accepted formats with examples. ([#1600](https://github.com/4gray/iptvnator/pull/1600))
|
||||
- **epg** — The programme guide now shows your playlist's own channels in their order, with the current group or favorites one click away. Click a channel to switch playback while the player stays on screen above the grid; double-click switches and closes. Open it from the new Guide button, the header, the command palette, or the G key. Hide channels without EPG and pick comfortable or compact rows. ([#1560](https://github.com/4gray/iptvnator/pull/1560), closes [#171](https://github.com/4gray/iptvnator/issues/171))
|
||||
- **epg** — The EPG timeline toolbar is more compact: "Now" is an icon button, and the zoom slider is replaced by a single button that cycles day overview → by hour → detailed. Ctrl/⌘ + scroll (or a trackpad pinch) over the timeline zooms smoothly around the cursor. The channel and programme title now use all the space the controls free up. ([#1557](https://github.com/4gray/iptvnator/pull/1557))
|
||||
- **packaging** — AppImage builds now include an update source for AppManager, allowing it to discover new GitHub releases and download full application updates without manually configuring the repository. ([#1559](https://github.com/4gray/iptvnator/pull/1559))
|
||||
- **playback** — Playback errors now explain confirmed access and DRM license failures, with stream codecs, DRM systems and failure stages in the details. Copy diagnostics creates a support report without stream URLs or credentials. No extra requests are made to your provider. ([#1574](https://github.com/4gray/iptvnator/pull/1574))
|
||||
- **playback** — Rest the mouse on the left edge (tap it on touch) or press C while a live channel plays fullscreen: the channel list (M3U all/groups/favorites/recent, Xtream, Stalker, global favorites) slides over the video with search, so you can zap without leaving fullscreen. Nothing covers the video while it is closed. M3U playlists also zap with PageUp/PageDown. ([#1519](https://github.com/4gray/iptvnator/pull/1519), closes [#48](https://github.com/4gray/iptvnator/issues/48))
|
||||
- **playback** — Series playback now has the slide-in list in fullscreen too: rest the mouse on the left edge, click it, or press C to see the season tabs and episodes with stills, runtimes, descriptions and watch progress, and jump to another episode without leaving fullscreen. Works for Xtream and Stalker series with any built-in player. ([#1620](https://github.com/4gray/iptvnator/pull/1620))
|
||||
- **playback** — The player overlay now shows stream information: resolution, playback and source frame rates, stream and codec bitrates, audio details, buffer and dropped frames. Available in built-in web players and experimental frame-copy Embedded MPV. Unknown or unavailable values stay hidden; measured frame rates reflect dropped frames and stalls. ([#1578](https://github.com/4gray/iptvnator/pull/1578))
|
||||
- **playlist** — Desktop users can review inactive sources and delete selected ones together. The dialog checks the whole library, preselects confirmed expired or disabled accounts, and lets you keep individual sources. Busy sources are skipped, and deletion results are reported individually. ([#1596](https://github.com/4gray/iptvnator/pull/1596))
|
||||
- **playlist** — Desktop playlist lists now show availability for Stalker portals and M3U links alongside Xtream accounts. Checks share cached results, run in the background, and explain when a source could not be verified. ([#1592](https://github.com/4gray/iptvnator/pull/1592))
|
||||
- **portal** — Movies can now be marked as watched (or unwatched) by hand from their detail page on Xtream and Stalker sources, including the Favorites and Recently Viewed views — the same way seasons and episodes already could. The catalog shows the green check right away, and a watched movie offers Play instead of a Resume near the end. ([#1605](https://github.com/4gray/iptvnator/pull/1605))
|
||||
- **portal** — Series with more than six seasons now show a small season poster in the season dropdown — on each row that has one and on the closed selector — so a long list of "Season N" entries is easier to scan. The fullscreen episode panel's season strip also gets its own "N episodes" translation instead of borrowing the download manager's. ([#1633](https://github.com/4gray/iptvnator/pull/1633))
|
||||
- **portal** — Series pages now show each season's own poster next to the season tabs, and the fullscreen episode list shows it above its tabs too. The picture comes from TMDB when metadata enrichment is on, otherwise from your provider's season art; one-season shows keep the page as it was. ([#1628](https://github.com/4gray/iptvnator/pull/1628))
|
||||
- **portals** — Desktop settings now let you disable the temporary pause after repeated Xtream or Stalker connection failures, without restarting. Account info explains when requests are paused and offers an immediate retry. ([#1536](https://github.com/4gray/iptvnator/pull/1536))
|
||||
- **portals** — Live TV panels now fold in steps: hide only the categories rail and keep the channel list, or hide both for a player-only view. With categories hidden, the list header becomes a category dropdown, so switching categories stays one click away, and hiding both panels then bringing them back returns to the level you had before. ([#1556](https://github.com/4gray/iptvnator/pull/1556))
|
||||
- **portals** — Movie and series grids can now drop the title row: turn off "Show titles under covers" in Settings > General and the catalog, favorites and recent grids become a wall of covers that shows more rows per screen. The title slides in on the cover when you point at it or focus it with the keyboard, and stays on for items whose cover is missing. Live channels and search results keep their labels. ([#1604](https://github.com/4gray/iptvnator/pull/1604))
|
||||
- **shell** — Settings → General has a new "Window on startup" option: open the desktop app at its last size, maximized, or fullscreen — handy on a TV or HTPC. Starting with `--fullscreen` forces a single fullscreen launch without changing the setting, and F11 now toggles fullscreen anywhere in the app. ([#1514](https://github.com/4gray/iptvnator/pull/1514), closes [#1455](https://github.com/4gray/iptvnator/issues/1455))
|
||||
- **shell** — Zoom the app from the keyboard on every platform: Ctrl (Cmd on macOS) with +/- steps the size in about 10 % increments, including on the numpad, and Ctrl/Cmd+0 returns to the default. Windows and Linux gain these shortcuts, which previously existed only in the macOS menu. ([#1623](https://github.com/4gray/iptvnator/pull/1623), closes [#1109](https://github.com/4gray/iptvnator/issues/1109))
|
||||
- **updater** — Settings → About now has an Update channel switch. Nightly follows every merge into master: the desktop updater offers each new build automatically, and About shows the build's commit for bug reports. Stable stays the default; a nightly build remains installed until the next stable release is newer. ([#1608](https://github.com/4gray/iptvnator/pull/1608))
|
||||
|
||||
### Fixes
|
||||
|
||||
- **collections** — Switching Favorites or Recently Viewed between "This playlist" and "All playlists" now shows a thin progress bar under the header and dims the list while the new items load, instead of leaving the old list on screen with no sign that anything happened. The toggle reflects your choice at once, a playing channel keeps playing, and quick switches show no indicator at all. ([#1636](https://github.com/4gray/iptvnator/pull/1636))
|
||||
- **dashboard** — The dashboard's "Now on air on favorite channels" and "Recently watched Live TV" rails now show the current programme for channels whose guide lives in an XMLTV another playlist imported, not only in the global EPG sources from Settings — the same lookup the "See all" pages already used. ([#1637](https://github.com/4gray/iptvnator/pull/1637))
|
||||
- **database** — Updating directly from older versions no longer blocks playlist loading with a missing database column error. Existing sources, favorites, and playback history are preserved. ([#1582](https://github.com/4gray/iptvnator/pull/1582), closes [#1580](https://github.com/4gray/iptvnator/issues/1580))
|
||||
- **embedded-mpv** — When a stream refuses the connection, the embedded MPV player (frame-copy engine) no longer hands the URL to yt-dlp before giving up: the failure shows up right away and its error no longer reads "youtube-dl failed: unexpected error occurred", matching the native-view engines and the external MPV player. ([#1526](https://github.com/4gray/iptvnator/pull/1526))
|
||||
- **epg** — EPG guides now load when a server adds gzip compression to an already compressed XMLTV file. Sources using a single gzip layer continue to work. ([#1589](https://github.com/4gray/iptvnator/pull/1589), closes [#1586](https://github.com/4gray/iptvnator/issues/1586))
|
||||
- **epg** — The EPG import panel no longer shows a horizontal scrollbar while sources download. Source names now read as host/file instead of running the two together, channel and programme counts use your locale's digit grouping, and the minimize button and summary are translated. ([#1599](https://github.com/4gray/iptvnator/pull/1599))
|
||||
- **epg** — Removing and saving an EPG source now clears its cached programmes, including data left by previously removed sources on restart. Other configured sources and playlist guides are preserved, and Live TV stops showing programmes from the removed source. ([#1548](https://github.com/4gray/iptvnator/pull/1548))
|
||||
- **host-health** — Portal recovery now waits for an active probe to finish before sending another request, even when redirects or a slow response take longer than 45 seconds. Completed and cancelled requests release the probe slot reliably. ([#1547](https://github.com/4gray/iptvnator/pull/1547), closes [#1439](https://github.com/4gray/iptvnator/issues/1439))
|
||||
- **live-tv** — A hidden channel list no longer looks like a playlist that lost its channels: the player now says the list is hidden and offers a "Show channels list" button, a toggle in the workspace header stays in place in both states, and hiding the list in one place (M3U player, portal Live TV, favorites/recent) no longer hides it everywhere else. ([#1555](https://github.com/4gray/iptvnator/pull/1555), closes [#1458](https://github.com/4gray/iptvnator/issues/1458))
|
||||
- **m3u** — ClearKey channels with ordinary Base64 keys now play when imported or refreshed, including JSON playlist exports that use + and / characters. Refresh an existing playlist once to apply the fix. ([#1575](https://github.com/4gray/iptvnator/pull/1575))
|
||||
- **m3u** — DASH channels, including ClearKey-protected streams, now play from Recently Viewed and Favorites using the compatible built-in player. Existing imports keep their DRM keys without needing to re-import the playlist. ([#1597](https://github.com/4gray/iptvnator/pull/1597), closes [#1590](https://github.com/4gray/iptvnator/issues/1590))
|
||||
- **m3u** — M3U URL imports now accept a custom User-Agent for providers that require it before downloading the playlist. The value is saved and reused for playlist refreshes in the desktop app and self-hosted web app. ([#1535](https://github.com/4gray/iptvnator/pull/1535), closes [#465](https://github.com/4gray/iptvnator/issues/465), closes [#1120](https://github.com/4gray/iptvnator/issues/1120))
|
||||
- **m3u** — Movies and episodes recognized as video files in M3U playlists now offer playback time and seeking in built-in players, even when TMDB or movie details are disabled. Seeking remains dependent on the source's support. ([#1594](https://github.com/4gray/iptvnator/pull/1594))
|
||||
- **migration** — Upgrades from older desktop versions retain all sources from the legacy profile. Already-upgraded users can choose to recover missing sources without replacing current sources or settings. Migration keeps the original data and retries safely after a failed write. ([#1550](https://github.com/4gray/iptvnator/pull/1550), closes [#1504](https://github.com/4gray/iptvnator/issues/1504))
|
||||
- **migration** — Startup now shows a theme-aware preparation screen while loading sources and checking a large programme guide. Temporary source-read failures retry automatically; if loading still fails, you can retry without restarting the app. Recovery also completes any previously failed programme-guide cleanup before opening the library. ([#1568](https://github.com/4gray/iptvnator/pull/1568))
|
||||
- **playback** — The built-in player controls now hide on their own after you click a button in the bar with the mouse, such as fullscreen or mute. Previously the clicked button kept the bar pinned on screen until you clicked the video, which also paused it. Applies to the shared controls in the web players and the Embedded MPV frame-copy engine. ([#1512](https://github.com/4gray/iptvnator/pull/1512))
|
||||
- **playback** — Arrow keys and the ±10 s buttons in the Embedded MPV player now move by their full step every time. Pressing an arrow repeatedly, or holding it, used to advance only about a second per press because each step was computed from a stale position; steps are now relative seeks executed by mpv itself, so rapid presses add up. ([#1518](https://github.com/4gray/iptvnator/pull/1518))
|
||||
- **playback** — The fullscreen channel list is easier to find and calmer to use: moving the mouse shows a small tab on the left edge, a click on that edge opens the list at once, hover still opens it after a short rest, and the list now stays open for a full second after the mouse leaves. Opened with `C`, it no longer closes while the mouse only wanders over the video. ([#1619](https://github.com/4gray/iptvnator/pull/1619))
|
||||
- **playback** — The fullscreen channel panel stays open under the pointer when its opening animation is delayed, instead of closing before the list appears. ([#1591](https://github.com/4gray/iptvnator/pull/1591))
|
||||
- **playback** — With the default shared player controls, the built-in player now stays in fullscreen when you switch to another episode, when the next episode starts automatically, and when a live channel or an alternative movie source is switched — previously every switch dropped back to the page. The legacy vendor-controls opt-out keeps its previous behavior. ([#1509](https://github.com/4gray/iptvnator/pull/1509))
|
||||
- **playback** — Switching channels or leaving playback now closes the old picture-in-picture window in HTML5, Video.js, and ArtPlayer even when shared player controls are disabled, preventing frozen or outdated video from remaining on top. This includes Safari’s legacy picture-in-picture mode. ([#1538](https://github.com/4gray/iptvnator/pull/1538))
|
||||
- **playback** — Embedded MPV controls and programme-guide panels now follow the visual theme and stay readable in light and dark mode. Video overlays retain their contrasting dark backgrounds. ([#1541](https://github.com/4gray/iptvnator/pull/1541), closes [#1530](https://github.com/4gray/iptvnator/issues/1530))
|
||||
- **playback** — The built-in HTML5 player now plays `.mkv`, `.webm`, `.avi`, `.mov` and other non-HLS video files directly instead of handing them to the HLS engine, which failed with a "network or provider loading error" on many Xtream episodes and movies. ArtPlayer and the HTML5 player now choose their engine by the same rule. ([#1510](https://github.com/4gray/iptvnator/pull/1510))
|
||||
- **playback** — Keyboard shortcuts work again right after you click a button in the built-in player controls. Previously the clicked button kept the keyboard: after clicking fullscreen, Space left fullscreen instead of pausing, and the seek, volume and mute keys did nothing until you clicked the video. Applies to the shared controls in the web players and the Embedded MPV frame-copy engine. ([#1516](https://github.com/4gray/iptvnator/pull/1516))
|
||||
- **playback** — With IPTVnator's shared controls turned off, the Video.js player's keyboard shortcuts now work again right after you click a button in its control bar. Previously the clicked button kept the keyboard: after clicking fullscreen, Space left fullscreen instead of pausing, and the seek, volume and mute keys did nothing until you clicked the video. ([#1523](https://github.com/4gray/iptvnator/pull/1523))
|
||||
- **playback** — VLC now opens without an extra console window on Windows when playback progress tracking or Reuse VLC instance is enabled. ([#1533](https://github.com/4gray/iptvnator/pull/1533), closes [#871](https://github.com/4gray/iptvnator/issues/871))
|
||||
- **playlists** — Opening an M3U playlist immediately after refreshing now waits for its pending save, so the channel list does not revert to the previous catalog. ([#1591](https://github.com/4gray/iptvnator/pull/1591))
|
||||
- **portals** — Xtream and Stalker portals no longer enter a connection cooldown merely because several parallel requests fail in the same millisecond. This fixes false unavailability in both the desktop app and the self-hosted web version. ([#1537](https://github.com/4gray/iptvnator/pull/1537), closes [#1438](https://github.com/4gray/iptvnator/issues/1438))
|
||||
- **portals** — Xtream and Stalker keep remote channel order while you browse other categories or search. Use Show playing channel to return to the current channel without restarting playback. Stalker radio supports the same behavior. ([#1554](https://github.com/4gray/iptvnator/pull/1554), closes [#1520](https://github.com/4gray/iptvnator/issues/1520))
|
||||
- **portals** — A slow Xtream or Stalker panel is no longer mistaken for a dead one: a request that reached the panel and then timed out no longer trips the 30-second "portal is not responding" pause, which only fires when the panel never accepts the connection. The desktop app also gives IPv4 fallback the same 2.5-second budget as the self-hosted backend, so dual-stack panels behind VPNs stop failing in bursts. ([#1621](https://github.com/4gray/iptvnator/pull/1621))
|
||||
- **search** — Search now returns the same results whether you type upper or lower case Turkish characters. Titles with the dotted capital I (for example "İnşaat") are found by typing a plain lower case i, so "inş" and "İnş" match the same channels and movies — in global search, in each portal's search, in the command palette, and in the channel, category, favorites and download list filters. ([#1640](https://github.com/4gray/iptvnator/pull/1640), closes [#609](https://github.com/4gray/iptvnator/issues/609))
|
||||
- **settings** — The update status in Settings → About now names the channel it describes, and after picking another channel the check button becomes "Save and check": one click saves the choice and reports what that channel offers. Previously "Check again" silently re-checked the still-saved channel, so a fresh nightly could look like "no update". ([#1631](https://github.com/4gray/iptvnator/pull/1631))
|
||||
- **shell** — Reloading the desktop app while on any page no longer breaks it: View › Reload on macOS used to leave a blank, dead window until restart, and the reload offered by the settings unsaved-changes dialog did nothing. Both now reload the app back onto the page you were on. ([#1622](https://github.com/4gray/iptvnator/pull/1622))
|
||||
- **shell** — The app now remembers your zoom level (Cmd/Ctrl and +/-): it holds when you switch between sections or resize the window, and comes back after a restart, so a larger font size no longer resets to the default. ([#1617](https://github.com/4gray/iptvnator/pull/1617), closes [#1109](https://github.com/4gray/iptvnator/issues/1109))
|
||||
- **stalker** — Stalker items whose portal sends an empty `id` next to a valid one are no longer lost: such a channel or movie can be favorited, played, resumed and found again, instead of being stored without an identity and quietly refusing to open. ([#1639](https://github.com/4gray/iptvnator/pull/1639))
|
||||
- **stalker** — Stalker Live TV search stays within the selected category in the sidebar and fullscreen panel, including channels beyond the first page. All Items searches the whole catalog, and the two search fields work independently. ([#1552](https://github.com/4gray/iptvnator/pull/1552), closes [#1543](https://github.com/4gray/iptvnator/issues/1543))
|
||||
- **stalker** — In Stalker portals, switching the Live TV or radio category in the sidebar no longer stops the channel that is playing. The category only changes which channels are listed, matching how Xtream portals and M3U playlists already behave. ([#1517](https://github.com/4gray/iptvnator/pull/1517))
|
||||
- **stalker** — Stalker series with season markers such as “s02” or “2 сезон” now show the correct season in tabs and episode labels while preserving watch progress. TMDB updates no longer reset loaded episodes, and delayed portal responses cannot mix episodes from different series. ([#1545](https://github.com/4gray/iptvnator/pull/1545))
|
||||
- **stalker** — Seeking in Stalker movies and series now reaches the selected position instead of jumping forward or skipping to the next episode after resuming playback. ([#1544](https://github.com/4gray/iptvnator/pull/1544))
|
||||
- **tmdb** — Russian titles containing "й" or "ё" and Arabic titles with hamza letters now match on TMDB. The search used to send a folded spelling — dropping the breve from "й", for instance — that TMDB never recognised, and cached the miss for a week; those cached misses are cleared on the next start. ([#1626](https://github.com/4gray/iptvnator/pull/1626))
|
||||
- **tmdb** — A new series no longer picks up the poster, cast and plot of an older show that happens to share its title. Metadata is looked up in your own language, so an unrelated foreign series can be listed under the very same name — and the better-known one used to win. The release year the provider states now decides first. ([#1648](https://github.com/4gray/iptvnator/pull/1648))
|
||||
- **ui** — Live TV now supports keyboard movement between categories and channels, and channel lists keep scrolling after mouse selection. Channel scrollbars and resize handles are independently accessible. Movie and series details support immediate keyboard scrolling and no longer hide their scrollbars. ([#1542](https://github.com/4gray/iptvnator/pull/1542), closes [#1506](https://github.com/4gray/iptvnator/issues/1506))
|
||||
- **ui** — Detail buttons, episode cards and episode rows now keep visible backgrounds and borders in the light theme. The grid/list switch also clearly highlights the selected view in both themes. ([#1549](https://github.com/4gray/iptvnator/pull/1549))
|
||||
- **ui** — Movie and series detail pages now show one Back arrow instead of two. The floating arrow always returns to the list, while watching too, and the "Close player" button beside the player is the only control that returns to the description. Escape still closes the player first and then goes back. ([#1627](https://github.com/4gray/iptvnator/pull/1627))
|
||||
- **ui** — Movie and series detail pages keep their Back button visible while scrolling. Escape closes the inline player to the description, then returns to the previous view. Open menus, dialogs and fullscreen retain priority. ([#1576](https://github.com/4gray/iptvnator/pull/1576), closes [#1570](https://github.com/4gray/iptvnator/issues/1570))
|
||||
- **updater** — "What's new" no longer fails with a raw error for a build published after the app started: the release list is re-read from GitHub when the requested version is missing, so a freshly offered nightly shows its notes. When a version really has no release, the dialog now says so in plain words and links to the channel's releases page. ([#1631](https://github.com/4gray/iptvnator/pull/1631))
|
||||
- **web-backend** — The self-hosted backend now checks every provider redirect and pins connections to validated addresses, preventing redirects or DNS changes from bypassing private-network restrictions. Trusted LAN access remains available through the existing opt-in. ([#1553](https://github.com/4gray/iptvnator/pull/1553), closes [#1436](https://github.com/4gray/iptvnator/issues/1436))
|
||||
- **xtream** — Xtream Live TV in Auto can try advertised TS once when HLS initially fails with an HTTP error in a web player. The selected player and stream headers are kept. Settings explain the manual TS workaround for external players, Embedded MPV, and HLS retries that never report a terminal failure. ([#1558](https://github.com/4gray/iptvnator/pull/1558), closes [#1513](https://github.com/4gray/iptvnator/issues/1513))
|
||||
- **xtream** — Catch-up (timeshift) from the Favorites and Recent tabs now asks the panel for the programme you clicked: the start time is rendered in the panel's own timezone instead of your computer's. The panel's timezone is remembered per source, survives restarts, and panels that report an unusual timezone name are handled through their clock. ([#1563](https://github.com/4gray/iptvnator/pull/1563), closes [#1562](https://github.com/4gray/iptvnator/issues/1562))
|
||||
- **epg** — The current program shown under each channel in the Xtream Live TV list now moves on by itself once that program ends, and its progress bar keeps advancing. Previously both stayed frozen on the old program until you left the category and came back in. ([#1647](https://github.com/4gray/iptvnator/pull/1647), closes [#767](https://github.com/4gray/iptvnator/issues/767))
|
||||
- **xtream** — Xtream category management now selects or deselects only matching categories while searching, preserving the visibility of all other categories. Button labels and availability reflect the search results, and the counter clearly shows the total selected. ([#1534](https://github.com/4gray/iptvnator/pull/1534), closes [#812](https://github.com/4gray/iptvnator/issues/812), closes [#816](https://github.com/4gray/iptvnator/issues/816))
|
||||
- **xtream** — The explicit HTTPS and HTTP connection test now detects Xtream portals that accept HTTP when HTTPS is unavailable and fills in the working address before you save. The saved address is used for catalog updates, provider EPG and playback. Connection failures now show a more specific explanation. ([#1588](https://github.com/4gray/iptvnator/pull/1588))
|
||||
- **xtream** — Opening a live channel in another Xtream playlist (from global search, the dashboard or the new "open in playlist" chip) no longer lands on an empty Live TV page: the jump used to get lost while the app was still opening that playlist, and now waits for its catalog before selecting and playing the channel. ([#1634](https://github.com/4gray/iptvnator/pull/1634))
|
||||
- **xtream** — The Xtream sync panel now keeps its status text, labels and Stop sync button clearly readable in both light and dark themes. ([#1546](https://github.com/4gray/iptvnator/pull/1546))
|
||||
|
||||
### Performance
|
||||
|
||||
- **database** — Refreshing or removing a large Xtream playlist is several times faster: the "Removing cached content" stage and the re-import now commit around 5,000 rows at a time instead of 100, and progress updates arrive at most ten times a second instead of once per batch. ([#1511](https://github.com/4gray/iptvnator/pull/1511), closes [#1292](https://github.com/4gray/iptvnator/issues/1292))
|
||||
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Internal changes</summary>
|
||||
|
||||
- **dashboard** — The dashboard's live "now playing" time range and progress bar now read pre-computed EPG timestamps as unix seconds, matching the rest of the EPG code. Today's dashboard lookups never carry those fields, so nothing changes on screen; this closes the gap before a future data path supplies them. ([#1532](https://github.com/4gray/iptvnator/pull/1532))
|
||||
- **deps** — The application uses Angular 22 and Nx 23 with updated build and test tooling. ([#1603](https://github.com/4gray/iptvnator/pull/1603))
|
||||
- **deps** — The Embedded MPV native addon build now declares its `node-gyp` dependency explicitly, so `node apps/electron-backend/build-embedded-mpv.js` and the Homebrew development scripts work on a clean checkout instead of failing with "Unable to resolve node-gyp". Packaged builds are unchanged. ([#1625](https://github.com/4gray/iptvnator/pull/1625))
|
||||
- **deps** — Closes the eight open Dependabot alerts of September 2026: astro 7.2.4 → 7.2.10 (website build), and pinned pnpm overrides moving js-yaml to 4.3.2 (the one runtime path, via electron-updater), smol-toml to 1.7.1, svgo to 4.1.0 and hono to 4.13.5. No application behavior changes. ([#1635](https://github.com/4gray/iptvnator/pull/1635))
|
||||
- **deps** — Closes the four open Dependabot alerts on transitive npm dependencies via pinned pnpm overrides: browserslist (crash on untrusted stats), @xmldom/xmldom (XML fragment injection — its existing override target had itself fallen into the advisory range), @humanfs/node (recursive copy follows symlinks out of the tree) and postcss-selector-parser (AST recursion DoS). ([#1527](https://github.com/4gray/iptvnator/pull/1527))
|
||||
|
||||
</details>
|
||||
|
||||
# [0.23.0](https://github.com/4gray/iptvnator/compare/v0.22.0...v0.23.0) (2026-08-30)
|
||||
|
||||
### Features
|
||||
|
||||
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 970 KiB |
|
After Width: | Height: | Size: 994 KiB |