Commit Graph

95 Commits

Author SHA1 Message Date
6bb1914906 fix(live): preserve channels after empty projection rebuild (#18)
Treat successful but empty live projections with existing live input as stale, reject them on the frontend, and keep the previous visible channel state during rebuild failures.

Add DOM coverage for the Settings analysis flow and backend serialization coverage for empty projection state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-05 22:30:37 +02:00
9f97020996 feat: precompute stream grouping during source sync (#13)
Move variant grouping work out of Live TV rendering into the
catalog pipeline: a liveProjectionService builds the logical channel
projection (schema in liveProjectionSchema) whenever a source is
added, synced or modified (name change, new address), and the
projection is served through a /live route. ChannelList now consumes
the precomputed projection via a liveChannelProjection client
service, recalculating only when the catalog changes. Cover
projection building, incremental recompute and client consumption
with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 15:35:02 +02:00
4d662369c9 fix: clear persistent Laya warning and apply language selection immediately (#12)
Two fixes: the ChannelList local-AI warning kept showing after the
runtime became available because status changes were not re-evaluated
on refresh; and selecting a language in the player did not switch the
stream variant immediately. Refresh warning visibility from the
latest laya status and apply the chosen variant/language on
selection, with tests for both behaviors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 15:15:06 +02:00
4f65588893 fix: correct Settings actions in Laya ready state and clear stale AI warning (#12)
Offer the right actions in Settings when Laya is ready/available
instead of leaving irrelevant ones, and stop showing the ChannelList
local-AI warning once the runtime is actually available. Derive both
from layaStatusPresentation and cover the ready/available action set
with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 14:34:30 +02:00
d253642dec fix: make Laya status consistent between Settings and ChannelList (#12)
The model was reported as ready while the AI runtime was actually
unreachable, and the Download action stayed visible afterwards.
Distinguish model-downloaded from runtime-available in
layaStatusPresentation, derive the Download action from the real
combined state, and align Settings and ChannelList rendering on that
single source of truth. Cover the combined status cases with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 13:31:35 +02:00
ce11ecc757 feat: add optional Laya engine mode for grouping and language detection (#12)
Add a languageDetectionMode setting (algo | laya | laya+algo) exposed
in Settings with three engine choices. When Laya is enabled, a laya
service (Dockerfile.laya, optional compose profile, models stored
outside the repo under ./data/models/laya) can be started, with model
download and deletion from the UI via /laya routes to manage disk
space. Add a channelLanguageFusion service combining Laya results
with the existing algorithm, and wire detection mode through
grouping, channel list and player. Cover engine selection, fusion
and laya service behavior with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 11:13:34 +02:00
e06f4ec2c3 feat: add settings option to hide Live TV categories (#11)
Add a liveChannelListMode setting (default 'grouped') with a Settings
toggle to display the Live TV channel list flat, without category
group sections. When enabled, logical channels are listed directly
with their stream variants still grouped as in #9/#10. Cover the
setting default and flat-list behavior with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 09:57:20 +02:00
b95a408071 feat: detect variant language with confidence scoring and player language selector (#10)
Add a channelLanguageDetection service that scores language evidence
per IPTV variant (country/language prefixes in name and group, source
metadata, original title words) and picks the highest-scored language.
Integrate detected languages into channel variant grouping and add a
language selector to the live player to switch to a variant of the
logical channel in the desired language, keeping raw streams
non-destructive.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 09:33:28 +02:00
a7a83a6faa feat: group variants of the same IPTV channel into a logical channel (#9)
Add a channelVariantGrouping service that normalizes channel names
(strips region prefixes and quality tokens) to fingerprint duplicate
stream entries and cluster them under a single logical channel with
quality/source variants. Wire it into the Live TV channel list and
player variant selection, reducing duplicates without destructively
merging streams.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 08:25:42 +02:00
4488914b2d feat: add quality/transcoding options to live player (#6)
Manual quality profiles (source/1080p/720p/480p) in the player overflow
menu plus an honest/preparatory Auto contract: adaptive when the HLS
manifest exposes multiple levels, single-rendition automatic selection
otherwise.

- server: transcodeQualityProfiles service and qualityMode session option
- player: quality menu, persisted preference, live switch with rollback
- tests: npm test script and unit tests for quality profiles
2026-09-30 12:01:08 +02:00
d018ac078c feat: add Plex-style adaptive transcoding with bitrate limits and hardware fallback 2026-09-29 23:31:05 +02:00
80d2c4bfb3 fix: copy stream url bug (#69) 2026-01-31 11:09:39 -08:00
7006513aaf fix: remove deduplication logic from channel list 2026-01-31 10:59:28 -08:00
e83b173755 fix: safari specific fixes for video player and watch page 2026-01-22 13:35:19 -08:00
89dbb96c92 fix: race condition in playNextEpisode() 2026-01-22 00:14:42 -08:00
ea4a0a4577 fix: implemented safari webkit support for fullscreen and PiP 2026-01-21 20:36:34 -08:00
056555c7b4 fix: hardware transcoding 10-bit error and EPG navigation bug (Issues #61, #63) 2026-01-19 14:36:53 -08:00
237d11cf00 feat: implement hardware and software upscaling 2026-01-19 01:34:45 -08:00
100a26fe4e chore: update screenshots in readme and sso icon 2026-01-18 19:49:22 -08:00
53c577a932 Added 60 second refresh interval for epg now indicator 2026-01-18 19:00:33 -08:00
4a8be395ca fix: mobile epg programme alignment 2026-01-18 18:48:58 -08:00
f9fefa3947 fix: filter homepage recent sections by hidden status 2026-01-18 17:06:26 -08:00
d6eda66360 fix: favorites arrow navigation stays in same group, add cross-player stop on new playback 2026-01-18 00:58:57 -08:00
fb2a50543a fix: update videoplayer to check for tvgid ensuring overlay displays program details correctly 2026-01-17 20:59:45 -08:00
c1f8077438 feat: add smart audio copy and audio mix presets for configurable 5.1 downmixing 2026-01-17 13:31:13 -08:00
2c34359b2c feat: Implement hardware-accelerated HLS transcoding with granular controls, smart stereo downmixing, and robust support for MKV and 10-bit HEVC playback. 2026-01-17 03:07:16 -08:00
b467471590 feat: add copy stream URL menu and desktop sidebar collapse (closes #43, closes #45) 2026-01-16 18:04:24 -08:00
196b9520b7 feat: add large M3U playlist warning (50K+ channels) 2026-01-16 17:00:57 -08:00
616ec37a93 fix: align EPG program blocks with time header (#47) 2026-01-13 13:00:47 -08:00
c589b00e57 refactor: use Xtream API endpoints for M3U in Manage Content 2026-01-12 00:07:46 -08:00
04fcabda84 refactor: use Xtream API endpoints for M3U channel loading 2026-01-12 00:02:16 -08:00
5f24d7e264 perf: collapse groups by default and defer channel rendering in channel list 2026-01-11 16:08:20 -08:00
d96bb7c776 fix: replace spread operators with concat to handle massive M3U playlists 2026-01-11 12:48:03 -08:00
aeee45869b Fixed EPG description not displaying due to property name mismatch 2026-01-10 14:10:07 -08:00
8d36a2c07e feat: add subtitle extraction and display for MKV/container streams 2026-01-10 12:35:39 -08:00
346a0519e9 feat: added smart auto-transcoding with probe-based routing and MKV/remux support 2026-01-10 00:35:42 -08:00
53a54c760c Added picture-in-picture button to video player and search filter for manage content page 2026-01-09 15:38:37 -08:00
28f16980e8 Updated subtitle detection logic, added closed caption button 2026-01-06 20:58:57 -08:00
955d68e899 Update live tv player styling to match VOD player 2026-01-06 20:43:03 -08:00
813cd0cbe6 Removed getRefreshInterval() reference 2026-01-04 00:50:07 -08:00
a00082b0ef Implemented virutal scrolling for epg, optimized database batching, moved sync timer to server 2026-01-04 00:46:51 -08:00
374a87b2fd Implemented cascading update save logic 2026-01-03 21:46:07 -08:00
8805ddbc13 Refactored code to use sqlite for channel, epg and vod data 2026-01-03 21:07:18 -08:00
c48f2e070e Refactored EPG refresh logic 2026-01-02 15:00:11 -08:00
02ff6f3f80 Update epg guide to correctly to use server-side epg refresh interval 2026-01-01 16:37:56 -08:00
d5ebd270dc Added EPG refresh timer updateVisibleEpgInfo method to ChannelList 2026-01-01 14:20:45 -08:00
096420596b Merge branch 'main' into dev 2026-01-01 13:07:34 -08:00
e1a197f2be implement authentication and authorization 2026-01-01 15:36:38 -05:00
fc2f20d921 Fixed issue with safari/edge native HLS path mistakenly switching to proxy mode in some cases 2026-01-01 12:18:03 -08:00
46c68813ec add video controls 2026-01-01 11:07:07 -05:00