Prerequisites
Before installing xOTT Panel, ensure your server meets these requirements:
Hardware Requirements
- 4 CPU Cores (recommended)
- 4GB RAM (minimum)
- 20GB SSD Storage
- 1Gbps Network Connection
Operating System
- Ubuntu 22.04 LTS (recommended)
- Ubuntu 20.04 LTS
- Root or sudo access required
- Ports 5847, 80, 443 open
Installation Steps
Follow these steps to install xOTT Panel on your server:
Run the Installer
Download the latest xOTT Panel installer:
wget https://xottpanel.com/downloads/xott-installer.sh
Make the installer executable and run it:
chmod +x xott-installer.sh
sudo ./xott-installer.sh
Wait for Installation
The automated installer will set up:
- Node.js runtime environment
- PostgreSQL database
- FFmpeg and media tools
- Python dependencies
- Systemd service
http://your-server-ip:5847
Post-Installation
After installation, complete these steps:
Access the Panel
Open your browser and navigate to:
http://YOUR_SERVER_IP:5847
Login with Default Credentials
Use the default admin credentials:
- Username: admin
- Password: admin
Verify License Status
Go to Settings → License and verify your license is active
Updates & Backups
xOTT is designed to update existing installations without wiping service accounts, streams, viewers, outputs, or database records.
Create or Verify a Backup
Before major updates, open Management → Database and create a backup. The Database page also supports restoring from server-side backups or an uploaded backup file.
Run the Installer
Download the latest installer and run it on the existing server:
wget https://xottpanel.com/downloads/xott-installer.sh
chmod +x xott-installer.sh
sudo ./xott-installer.sh
Verify After Update
After the service restarts, verify login, services, active streams, outputs, viewers, XUI mappings, and database health from the Management pages.
Uninstallation
If you need to completely remove xOTT Panel from your server, follow these steps:
Stop and Disable Services
Stop the running services to ensure files can be safely removed:
sudo systemctl stop xott
sudo systemctl disable xott
Remove Application Files
Delete the application directory and service configurations:
sudo rm -rf /opt/xott
sudo rm /etc/systemd/system/xott.service
sudo systemctl daemon-reload
Remove Database
Drop the PostgreSQL database and user (optional):
cd /tmp && sudo -u postgres psql -c "DROP DATABASE xott_db;"
cd /tmp && sudo -u postgres psql -c "DROP USER xott_user;"
Troubleshooting
Common issues and solutions:
Service Not Starting
Check the service status:
sudo systemctl status xott
View Logs
Check real-time application logs using journalctl:
sudo journalctl -u xott -f
Need Help?
If you encounter any issues:
- Check the FAQ section for common solutions
- Join our Telegram channel for community support
- Contact us at support@xottpanel.com
Changelog
Release history for xOTT Panel.
v1.4.94 — Saved Library Source Recovery June 2026
- Fix — Saved service streams now fall back to their persisted Library manifest and DRM keys when provider authentication or service scripts fail.
- Improvement — Library fallback starts preserve the original stream identity and settings while bypassing the unavailable provider account.
v1.4.93 — Spectrum TV Full Playback Support June 2026
- New — Spectrum TV now supports automatic email/password authentication without manual browser bootstrap.
- New — Spectrum TV live channels, DASH manifests, Widevine licensing, and proxy-aware playback are fully supported.
- Fix — Spectrum authentication now migrates legacy device verification into PiNxt and automatically recovers through refresh token, device verifier, or credential relogin.
v1.4.92 — Proxy, Manual Stream & Library Reliability June 2026
- Fix — Account and stream proxy assignments now persist correctly across both proxy-management entry points.
- Fix — Failed stream starts no longer corrupt channel names, and transient account streams are cleaned up without deleting saved Library entries.
- Improvement — Password, cookie, credential-update, and device-pairing flows now support an optional request-scoped authentication proxy.
- Improvement — Manual streams can use the full stream-settings workflow and can be saved to the Library without starting.
- Improvement — Saved service streams expose editable manifests and DRM keys, survive account removal, and automatically reattach and sync when the account is restored.
v1.4.91 — License Renewal Warning June 2026
- Improvement — The app now warns customers when their license is within 3 days of expiration so they can renew before service interruption.
v1.4.90 — Monitoring and Stream Placement Update June 2026
- Fix — Server page bandwidth now uses the same live input/output measurements as Monitoring, removing upload/download inconsistencies between pages.
- Improvement — Monitoring active connections now shows a total counter and paginates large connection lists.
- Improvement — Streams, library, and active events tables can optionally show the server or worker node currently running each stream.
- Fix — Movistar playback now forwards authenticated CDN headers to the engine and reports explicit CDN proxy rejections instead of failing later on invalid manifest HTML.
v1.4.89 — Live Event Duration Fix June 2026
- Fix — HLS playlists now reject implausible probed TS durations and keep
EXTINFaligned to the source segment duration, preventing live event players from buffering on false long segments.
v1.4.88 — Live Event Pacing Fix June 2026
- Fix — Live DASH event streams now pace HLS output at media duration instead of publishing catch-up batches as fast as CPU allows, reducing player buffer churn.
- Fix — Live DASH audio-only edge windows no longer force stream re-selection, preventing repeated discontinuities during DAZN-style event manifests.
v1.4.87 — Service Worker Engine Fix June 2026
- Fix — Service stream manifest refresh callbacks now work through worker IPC, allowing DirecTV/DGO/Vix-style service engines to actually run outside the main API process.
- Performance — Multi-stream HLS generation is isolated from the main HLS/API server for eligible service streams, reducing parent-process CPU pressure and playback stalls.
v1.4.86 — Worker Engine Default June 2026
- Performance — Eligible streaming engines now run in worker processes by default, keeping the main API/HLS server responsive under multi-stream load.
- Fix — Monitoring connection updates now respect the configured log level instead of writing raw stdout logs during normal playback.
v1.4.85 — Live HLS Catch-Up Fix June 2026
- Fix — Live HLS catch-up batches now drain immediately instead of being paced in real time, preventing missed upstream playlist windows and 40-50 second PTS gaps.
- Performance — Opaque HLS output URLs now cache output-id resolution to avoid database lookups on every playlist and segment request.
v1.4.84 — Live HLS Segment Drop Fix June 2026
- Fix — Live HLS streams no longer drop part of the current media-playlist window as stale backlog, preventing PTS jumps and frozen gaps on DirecTV-style sources.
- Fix — Live HLS batch output is paced across the full inspected live-edge window instead of writing only the newest subset in bursts.
v1.4.83 — Live HLS Stability Fix June 2026
- Fix — Live HLS streams that publish multi-segment batches are now paced at media duration so output advances steadily instead of bursting then starving players.
- Fix — Background track metadata capture now reads active engine metadata directly and avoids public self-calls that could fail auth and add startup load.
v1.4.82 — HLS Delivery Database Pressure Fix June 2026
- Fix — Local HLS playback now skips per-segment worker assignment misses when no streams are assigned to load-balancer nodes.
- Fix — Worker assignment lookups now use longer negative caching and coalesce concurrent misses to reduce database pressure during playback.
- Fix — On-demand HLS checks now cache repeated non-on-demand misses instead of querying the database on every playlist request.
- Fix — Public HLS on-demand resolution now uses a short cache to reduce repeated database lookups under multi-client playback.
v1.4.81 — Live HLS Playback Stability June 2026
- Fix — HLS asset requests now cache worker assignment lookups to prevent per-segment database pressure during playback.
- Fix — Live HLS segments are written atomically so players cannot read zero-byte or partially-written segment files.
- Fix — Live master-playlist refresh now preserves the previous video selection when a transient provider response returns an empty media playlist.
- Fix — Segment range races now return clean client responses instead of generic 500 errors that amplify VLC/FFmpeg retries.
v1.4.80 — Load Balancer Worker Orchestration June 2026
- Feature — Added worker-node load balancing orchestration for running stream workloads across eligible servers.
- Feature — Added global, service-level, and stream-level placement policies with node/group targeting and fallback controls.
- Feature — Added worker capacity controls including max streams, CPU/memory thresholds, weights, groups, tags, and drain mode.
- Security — Worker commands use signed controller-to-node authentication while the main server remains the public HLS output endpoint.
v1.4.79 — DirecTV Live Stability June 2026
- Fix — HLS stale-output recovery is now monitor-confirmed and no longer restarts streams from playlist/API read requests.
- Fix — Live media playlist fetches use longer timeouts and DirecTV startup can continue video-first if an audio variant is temporarily slow.
- Fix — Stream startup failure cleanup now preserves existing HLS output during restart attempts.
- Fix — DRM stream key replacement is serialized per stream to prevent stale or duplicated DirecTV keys from concurrent saves.
v1.4.78 — Live HLS Restart Race Fixes June 2026
- Fix — Restart fallback paths now pass HLS output preservation through the streaming-engine adapter, including worker-mode cleanup.
- Fix — HLS playlist writes now use unique atomic temp files so old engine cleanup cannot delete a replacement engine's in-flight playlist.
- Fix — Live manifest refresh now preserves the last valid video selection if a transient refresh returns an invalid empty selection.
- Stability — DirecTV and other live HLS streams are protected against restart collisions that caused playlist rename failures and restart loops.
v1.4.77 — Live HLS Restart Stability June 2026
- Fix — Custom engine restarts now preserve HLS output files and wait for the processing loop before cleanup, preventing playlist rename races.
- Fix — Worker-mode engine stops now receive the same restart-preservation options as inline engines.
- Fix — HLS master playlists now lock live status only after the selected media playlist is loaded, preventing false live-to-VOD flips.
- Stability — DirecTV and other live HLS streams are less likely to enter stale playlist restart loops during manifest refreshes.
v1.4.76 — Private HLS Output Links June 2026
- Feature — Stream HLS output links now use stable opaque output IDs instead of exposing service account or stream key details.
- Compatibility — Existing legacy HLS links remain supported while new stream, viewer, service-output, global-output, and XUI URLs use the private output format.
- Security — Output identity resolution is centralized and persisted in stream metadata so customer-facing links no longer reveal internal stream identifiers.
- Fix — Event M3U exports now stop guessing old public stream paths when a managed output URL is unavailable.
v1.4.75 — Load Balancer Nodes June 2026
- Feature — Added worker load balancer node orchestration so streams can run on external nodes while the main server remains the centralized controller.
- Feature — Added load balancer server installation flow with signed controller-to-node command authentication.
- Security — Worker nodes inherit protected runtime delivery with encrypted service scripts, license enforcement, and restricted node-only API access.
- Fix — Vix live streams now refresh session manifests and DRM authorization more reliably during runtime restarts.
v1.4.74 — DirecTV Activation Token Recovery June 2026
- Fix — DirecTV CDM now detects expired activation tokens, forces account re-login, refreshes playback authorization, and retries key retrieval once.
- Fix — DirecTV device identity cookies are now cached per account instead of sharing one identity across all accounts.
- Diagnostics — DirecTV activation and license failures now include sanitized response snippets to make account-token issues visible.
- Stability — DirecTV accounts can recover CDM keys after activation-token expiry even when channel listing still works.
v1.4.73 — DirecTV Restart Recovery June 2026
- Fix — DirecTV manifest probing now uses the configured service HTTP client and proxy path when choosing primary or fallback manifests.
- Stability — Active transient service streams are retained after failed restart refreshes so recovery can retry instead of dropping the stream from active state.
- Fix — Stream status database updates no longer hit the enum/text parameter conflict that could leave active state stale.
- Compatibility — DirecTV now marks refreshed manifests with the generic
SessionManifestservice contract so restart refresh stays engine-neutral.
v1.4.72 — DASH Query Token Preservation June 2026
- Fix — DASH segment URLs now preserve provider manifest authentication query parameters even when segments already include their own query string.
- Stability — Tokenized DASH streams avoid CDN
403loops caused by dropping signed MPD query parameters during segment URL resolution. - Compatibility — Query propagation remains generic and still excludes manifest-only query parameters such as
manifest-params.
v1.4.71 — Streams Route Refresh Fix June 2026
- Fix — Browser refresh on
/streamsand/streams/librarynow serves the React app instead of being treated as a protected HLS request. - Fix — HLS token validation on
/streamsis now scoped to real/hls/asset paths only. - Stability — Stream output URLs remain protected while dashboard UI routes no longer show
Invalid or missing HLS token.
v1.4.70 — DirectTV DAI Fallback & Stream Name Guard June 2026
- DirectTV — Stream authorization now prefers non-DAI manifests and automatically falls back to DAI only when required.
- DirectTV — Added optional
dai_enabled=true/falseservice-script parameter for controlled manual testing. - Fix — Generic stream-name recovery now blocks numeric-only fallback IDs such as NowTV
206/209from replacing real display names. - Stability — DirectTV suspended-account token responses now fail clearly instead of being stored as usable login sessions.
v1.4.69 — DirectTV Stream Table Recovery June 2026
- Fix — DirectTV streams that stop after running no longer fall back to UUID/resource-id names in the streams table.
- Fix — Stream restart now validates stale active-stream names and recovers the display name from database or service manifest output.
- Fix — Stream status updates now cast the database enum explicitly and keep nested
streamDatastatus and active fields synchronized. - Stability — Unsaved stopped streams keep DB-backed metadata while existing HLS output directories are still visible.
v1.4.68 — DAZN Orphan Event Cleanup June 2026
- Fix — Transient DAZN event streams that disappear from the provider schedule no longer remain stuck in active-stream restart loops.
- Fix — RaiPlay live manifests now advertise and auto-refresh expiring session URLs so Rai 1 does not restart on stale
tendtokens. - Fix — DAZN
curl_cffiimpersonation now uses a target compatible with older and newer Ubuntu installs, avoiding unsupportedfirefox133login failures. - Fix — Stream database status now keeps nested
streamDatastatus and active fields synchronized so active tables and dashboard counts do not read stale JSON state. - Cleanup — Unsaved inactive orphan streams are removed from runtime restart state instead of retrying expired manifests indefinitely.
v1.4.67 — DAZN Header Token Cleanup June 2026
- Fix — DAZN streams now replace stale dazn-token request headers instead of accumulating expired tokens across restarts and saved settings.
- Stability — Expiring service manifest URLs still refresh before CDN expiry, and refreshed service headers are pushed into the running stream session.
- Diagnostics — Service manifest refresh scheduling now logs skip reasons so token-refresh failures are visible instead of silent.
v1.4.66 — Service Manifest Token Refresh June 2026
- Fix — DAZN and other service-script streams with expiring manifest tokens now refresh the manifest URL before CDN expiry instead of restarting every few minutes.
- Stability — Refreshed service manifest URLs are pushed into the running custom engine through the manifest update path, forcing an immediate reparse without waiting for stream failure.
- Cleanup — Service manifest refresh timers are tied to stream lifecycle and are cleared on stop, restart, and failed-stream cleanup.
v1.4.65 — Kick Worker Refresh Fix June 2026
- Fix — Kick live streams now push refreshed HLS URLs into worker-mode engines through IPC instead of only updating the parent stream record.
- Stability — Social-live refresh now forces an immediate manifest reparse and track reselection so expired nested Kick media playlists are replaced before 403 errors.
- Proxy — Kick/Youtube social-live refreshes now reuse the stream's assigned proxy when re-resolving the original source URL.
v1.4.64 — Kick Live Restart Stability June 2026
- Fix — Kick live streams now re-resolve the original Kick channel URL before automatic restarts instead of looping on expired HLS manifests.
- Stability — Kick live streams now refresh their resolved manifest every two minutes and push the fresh URL into the running engine instance.
- Fix — Manual stream restart now reloads sourceProvider/sourceUrl metadata and re-resolves social-live sources before starting.
- Compatibility — Python 3.8 installs now pin curl-cffi to the yt-dlp-compatible 0.7.1 range while newer Python installs use the modern curl-cffi stack.
v1.4.63 — Kick Live Stream Support June 2026
- Feature — Manual live streams now support Kick live channel URLs through the same yt-dlp resolver flow used for YouTube live.
- Fix — Saved and restarted manual live streams now preserve original sourceProvider/sourceUrl metadata for reliable re-resolution instead of reusing stale manifests.
- Stability — Kick resolution now uses browser impersonation with curl-cffi support installed through the app Python requirements.
- Compatibility — Existing YouTube live URL handling and backward-compatible youtubeUrl metadata remain supported.
v1.4.62 — DAZN Playback GEO_BLOCKED Recovery June 2026
- Fix — DAZN linear playback no longer treats channel asset ids as event ids during manifest startup.
- Fix — DAZN playback requests now use the same Firefox-style browser/TLS flow as the recovered login path.
- Diagnostics — DAZN playback 403 responses now log the upstream response body excerpt before failing.
- Verification — DAZN 1 linear manifest, live event manifest, and Widevine CDM key retrieval were validated through the configured Italian proxy.
v1.4.61 — DAZN Login and Linear Channels Recovery June 2026
- Fix — DAZN login now uses the current browser SignIn payload shape with a fresh web device id and profiling session id.
- Fix — DAZN authentication requests now use the Firefox-style TLS/browser flow required by the current DAZN auth edge.
- Stability — DAZN token refresh now sends the current browser brand headers and short device id extracted from the active token.
- Fix — DAZN linear channels now appear again by accepting current Linear:* / Live TV rail tiles instead of filtering them as event feeds.
- Verification — DAZN login, token refresh, events retrieval, and 17 linear channels were validated through the configured Italian proxy.
v1.4.59 — Live HLS Refresh Cadence May 2026
- Fix — Live HLS refresh cadence now polls at half the source target duration, capped at 3 seconds, instead of waiting a full target duration plus jitter.
- Fix — DirectV-style 6-second split HLS outputs avoid 10-12 second playlist holds and multi-segment burst writes that strict downstream inputs can treat as disconnects.
- Stability — Live HLS no-new-segment retries now wait 1 second so playlists advance closer to the upstream cadence.
- Safety — The companion audio/subtitle refresh resilience from v1.4.58 remains active while video refreshes stay strict.
v1.4.58 — Live HLS Companion Refresh Stability May 2026
- Fix — Live HLS master-playlist refreshes no longer fail the whole cycle when a selected audio or subtitle media playlist stalls.
- Fix — DirectV-style split video/audio HLS outputs cap live media-playlist waits so one slow proxy response cannot freeze Flussonic input.
- Stability — Live video remains strict, while optional companion audio/subtitle tracks are preserved or skipped during transient refresh failures.
- Safety — The previous live throttle correction remains active and non-live backlog throttling remains unchanged.
v1.4.57 — Live HLS Throttle Correction May 2026
- Fix — Live HLS outputs no longer throttle themselves based on retained playlist history, preventing delayed updates after the first few minutes.
- Fix — DirectV-style live HLS outputs now avoid artificial half-segment sleeps that caused Flussonic inputs to go down while xOTT still showed running.
- Stability — Live playlist updates stay paced by the source cadence instead of holding for several polls and then jumping multiple segments.
- Safety — Non-live backlog throttling remains available; the change is scoped to live streams only.
v1.4.56 — Live HLS Cadence Stability May 2026
- Fix — Live HLS refresh timing now accounts for processing time so outputs do not batch updates behind the source cadence.
- Fix — Muxed HLS and fMP4 passthrough segment counters now update consistently for stream health and monitoring.
- Stability — DirectV-style HLS outputs stay closer to the upstream live cadence for external restreamers such as Flussonic.
- Safety — Existing stale HLS recovery remains active for genuinely frozen playlists.
v1.4.55 — Live HLS Health Recovery May 2026
- Fix — Live HLS outputs now detect stale playlists and stop serving frozen media as healthy live streams.
- Fix — Stale live playlists now trigger stream recovery automatically instead of leaving downstream encoders on old segments.
- Fix — Active stream status now reflects HLS output health so the dashboard does not show dead outputs as running.
- Safety — fMP4 master playlists are checked through their child media playlist to avoid false stale detection.
v1.4.54 — Service Session Auto-Recovery May 2026
- Fix — Service token refresh now supports encrypted customer scripts and generic token formats instead of scanning only plaintext Python scripts.
- Fix — Expired authenticated service sessions can re-login once using encrypted account credentials before retrying manifest, CDM, or refresh actions.
- Fix — NowTV login now persists the fresh user token expiry immediately so proactive refresh can run before playback tokens expire.
- Fix — App restart recovery now refreshes per-session service manifests and keys before starting streams that require fresh manifests on restart.
v1.4.53 — HLS fMP4 Passthrough Safety May 2026
- Fix — fMP4 passthrough now correctly allows muxed HLS Widevine media playlists such as compatible DirecTV outputs instead of treating them as DASH.
- Safety — fMP4 passthrough falls back to FFmpeg remux for split audio/video DRM sources and multiple audio renditions that are not broadly HLS-player compatible.
- Fix — fMP4 passthrough audio rendition filenames now use unique stable track keys to prevent same-language audio tracks from colliding.
- Safety — fMP4 passthrough clears old media segments when init data changes so playlists never mix fragments with the wrong init segment.
v1.4.52 — Event Slot Assignment Window May 2026
- Feature — Event Slots now support a configurable assignment window so services can map only today's events or the next N days.
- Fix — Event Slot assignment now respects the configured app timezone and stops filling stable slots with far-future events.
- Feature — Streams settings now expose guarded fMP4 passthrough for compatible DASH/fMP4 streams.
- Safety — Event Slot URLs, rules, and stable stream keys remain unchanged while assignments rotate inside the selected window.
v1.4.51 — Event Cleanup and Peacock Login Diagnostics May 2026
- Fix — Peacock login failures now surface the actual upstream auth code instead of a misleading missing-cookie message.
- Fix — Dashboard active-stream counts now exclude event workers so live channels and events stay separated.
- Fix — Event refresh now reconciles stale active event workers after provider schedules change.
- Fix — DAZN temporary event feeds are filtered out of the linear channel list.
v1.4.50 — DAZN Event Stability Fix May 2026
- Fix — DAZN live events now keep a safer live-edge buffer to reduce periodic event-only freezes.
- Fix — DASH audio/video pairing now normalizes audio timelines too, preventing event mux gaps when segment numbers drift.
- Fix — DASH live orphan audio is retained until matching video arrives instead of being discarded too early.
- Fix — Custom audio selections now match stored
Bandwidthmetadata as well as legacyBitratemetadata.
v1.4.49 — Active Track Metadata Fix May 2026
- Fix — Active stream and event metadata modals now load track metadata again instead of failing with
INVALID_STREAM_KEY_FORMAT. - Fix — Active stream settings track selectors now keep exact running stream keys and read worker metadata correctly.
- Fix — DASH manifest refresh now retries transient empty/non-XML CDN responses, reducing DAZN event stalls caused by proxy/CDN manifest glitches.
v1.4.48 — Zattoo RAI Manifest Fix May 2026
- Fix — Zattoo manifest requests now resolve older short channel ids such as
rai1to the current live channel id before callingwatch/live. - Fix — Existing saved Zattoo RAI streams can recover without deleting and re-adding the channel.
- Tested — RAI 1 short-id and full-id manifest actions both return DASH Widevine manifests with license URLs and PSSH data.
v1.4.47 — Static Team Event Slots May 2026
- New — Event slots can keep static output names in M3U, viewer M3U, and XUI exports while the current match remains visible inside xOTT.
- New — Rule-based event slots can optionally allow the same match to fill multiple team outputs, so both configured teams keep their own stable key.
- Improvement — Event slot settings now expose static output naming and duplicate rule matching as opt-in controls without changing existing dynamic behavior.
v1.4.46 — DirecTV CDM Identity Recovery May 2026
- Fix — DirecTV CDM now detects stale cached device identities when the license endpoint returns
401/403. - Fix — DirecTV automatically reactivates the device identity and retries the license request once, restoring streams after server-side identity expiry.
- Fix — DirecTV keeps the existing token, play token, feed id, and PSSH flow unchanged while refreshing only the rejected identity cookie.
v1.4.45 — Proxy Assignment Modal Fix May 2026
- Fix — Restored the proxy assignment modal service list by using the same encrypted-script service discovery as the rest of the app.
- Fix — Proxy assignment accounts now load from real database and token-backed accounts instead of stale
.tokens-only discovery. - Fix — Proxy assignment streams now load saved/in-memory streams without executing every service channels action, and assignment saves encode service, account, and stream keys safely.
v1.4.44 — Mediaset Infinity TV Pairing May 2026
- New — Added Mediaset Infinity TV device-pair login using the official action/create and action/pair flow.
- New — Paired Mediaset Infinity accounts now save usable
sid/beTokencredentials for manifest and CDM playback. - Fix — Mediaset Infinity keeps anonymous live playback intact while allowing paired accounts to unlock account-scoped channel access.
v1.4.43 — Mediaset Infinity Live/CDM Support May 2026
- New — Added Mediaset Infinity live channel support using the current station, playback-check, and thePlatform manifest flow.
- New — Mediaset Infinity now uses the standard xOTT manifest-to-CDM workflow with PSSH and license handoff.
- Fix — Mediaset Infinity script metadata, channel entries, manifest output, and DRM action now align with the live-channel service script contract.
v1.4.42 — Zattoo Multi-Key Decrypt Fix May 2026
- Fix — Zattoo DASH decryption now passes every available DRM key to mp4decrypt so mixed video/audio KID manifests decrypt correctly.
- Fix — Rai/Zattoo HLS output now generates valid 48 kHz AAC audio instead of silent/corrupt AAC when provider metadata points audio at the video default_KID.
- Fix — Strengthened multi-key DASH handling for providers that expose different Widevine PSSH KIDs per track.
v1.4.41 — Zattoo Segment KID Audio Fix May 2026
- Fix — Zattoo DASH audio decryption now passes the audio segment PSSH KID into mp4decrypt instead of the stream-level video KID.
- Fix — Rai/Zattoo HLS output no longer generates corrupt AAC tracks when audio and video use different DRM KIDs.
- Fix — Strengthened multi-track DASH decryption so each audio track keeps its own segment-level KID through the final decrypt step.
v1.4.40 — Zattoo PSSH Audio KID Fix May 2026
- Fix — Zattoo DASH audio decryption now prefers the Widevine PSSH KID over incorrect manifest default_KID values.
- Fix — Rai/Zattoo audio tracks no longer decrypt with the video key when providers expose mismatched audio DRM metadata.
- Fix — Added decryptor-level protection for DASH streams whose parser exposes both default_KID and PSSH KID values.
v1.4.39 — Zattoo Multi-Key Audio Fix May 2026
- Fix — Zattoo DASH DRM now requests every Widevine PSSH from the manifest so video and audio keys are both available.
- Fix — DASH parser now detects the real KID embedded in Widevine PSSH when provider manifests expose an incorrect default_KID.
- Fix — Zattoo Rai channels with separate audio/video keys now decrypt audio with the correct key instead of producing silent or corrupted AAC.
v1.4.38 — Zattoo Restart & Audio Fix May 2026
- Fix — Zattoo stream restart now uses the exact active/database channel identity, so channels with underscore IDs restart correctly.
- Fix — Encrypted DASH/fMP4 audio no longer receives duplicate init segments before DRM decryption, fixing silent or corrupted Zattoo audio.
- Fix — Restart API now defensively resolves stream identity from active streams or the database instead of trusting split stream keys.
v1.4.37 — Live HLS Stability Fix May 2026
- Fix — Live HLS burst smoothing is now conservative and no longer drops normal small live backlogs that caused freezes on DirecTV and similar streams.
- Fix — HLS audio and subtitle grouping now tolerates providers with independent audio/video sequence numbering while keeping exact sequence matching as the first choice.
- Fix — Event M3U exports now prefer stable service slot names and slot URLs when slots are configured.
v1.4.36 — Zattoo Stop Fix May 2026
- Fix — Zattoo streams with channel IDs containing underscores now stop correctly from Streams, Library, and Events views.
- Fix — Stream stop API now accepts the exact active stream key to avoid reconstructing incorrect channel IDs.
v1.4.35 — Zattoo Login & DRM Fix May 2026
- Fix — Zattoo now supports optional logged-in accounts correctly while keeping anonymous access available.
- Fix — Services page now displays real Zattoo accounts below anonymous access instead of hiding them.
- Fix — Service login now rejects failed script responses instead of showing a false success message.
- Fix — Zattoo DRM channels now return standard PSSH/license data and CDM keys for encrypted DASH playback.
v1.4.33 — Event Slot Reassignment Fix May 2026
- Fix — Event slots now rebuild from the current provider schedule on refresh instead of preserving stale same-day auto-slot mappings.
- Fix — DAZN Italy event slots now assign early visible events consistently from the first available auto slots while keeping team-rule slots reserved.
v1.4.32 — Event Slot Rules Fix May 2026
- Fix — Dynamic event slot rules now clear stale assignments when a team, competition, category, or keyword rule is changed.
- Fix — Auto event slots now preserve provider event order and avoid duplicate event assignment across rule and auto slots.
- Improvement — DAZN event metadata now exposes team fields when available, improving team-based stable slot matching.
v1.4.31 — Event Slot Assignment Fix May 2026
- Fix — Service event slots now apply to all non-ended live/upcoming events returned by the provider schedule, not only same-day events.
- Fix — Events page bypasses stale browser event cache when stable service slots are enabled, ensuring slot numbers and stable slot URLs appear immediately.
v1.4.27 — DAZN Event Hotfix May 2026
- Fix — DAZN event filtering now preserves valid regions where live/upcoming event tiles are AssetId-based and do not include Sport or Competition metadata.
- Fix — DAZN Events still excludes explicit linear, catch-up, replay, highlight, and VOD tiles without hiding valid live/upcoming events.
v1.4.26 — DAZN Event Cleanup May 2026
- Fix — DAZN Events now filters out linear channel tiles that DAZN returns inside mixed discovery rails.
- Fix — DAZN catch-up, replay, highlight, and VOD tiles no longer appear in the Events page as live events.
- Improvement — DAZN event extraction now falls back to alternate event sources when the primary rail contains only non-event content.
v1.4.25 — DRM Runtime Install Fix May 2026
- Fix — Fresh installs now include the bundled
mp4decryptDRM runtime directly in the release package. - Fix — Installer now validates the DRM runtime after deployment so protected streams do not fail later with a missing binary.
- Improvement — DRM setup no longer depends on a best-effort external Bento4 download during customer installation.
v1.4.24 — Dynamic Event Outputs May 2026
- New — Service event outputs now support universal dynamic slots for teams, competitions, categories, keywords, and regex rules.
- Improvement — Fixed event slots can now keep stable URLs like DAZN Roma, Serie A, UFC, or Premier League while automatically mapping matching live events.
- Improvement — Existing automatic daily event-slot assignment remains available for slots left in Auto mode.
v1.4.23 — Live HLS Burst Smoothing May 2026
- Fix — Live HLS streams now use stable media-sequence tracking so source URL/session changes do not cause duplicate segment bursts.
- Improvement — Live stream processing now skips stale backlog near the live edge instead of publishing many old segments at once.
- Improvement — Samsung TV Plus and other live HLS channels should deliver smoother playback when upstream playlists briefly re-window or refresh sessions.
v1.4.22 — Multi-Proxy Pools May 2026
- New — Proxy assignments now support multiple proxies per service, account, and stream for pool-based stream startup.
- Improvement — Streams now choose proxies using health-aware least-connection selection, with fallback to healthier proxies after proxy-related failures.
- Fix — Script execution, token refresh, VOD, metadata probes, and stream recovery now use the same centralized proxy resolution logic.
v1.4.21 — XUI Event Slot Integration May 2026
- Improvement — XUI event exports now use stable service event slot URLs when available, keeping XUI sources stable across event rotation.
- Fix — XUI event export now sends real event metadata and protected HLS URLs instead of placeholder event data.
- Fix — XUI sync, scheduler, connection testing, and activity logs are now aligned with the database schema and multi-connection usage.
v1.4.20 — Viewer Expiration Controls May 2026
- New — Viewer accounts now support optional expiration dates for protected M3U and HLS access.
- Improvement — Expired viewers can be extended or cleared from the Users page without recreating accounts or rotating tokens.
- Improvement — Navigation now uses Content and Management groups, with Monitoring moved under Management.
v1.4.19 — Admin Session Login Fix May 2026
- Fix — Admin login no longer fails when generated JWT sessions exceed the old database session-token length.
- Fix — Database session storage now writes token hashes consistently for active-session lookup and cleanup.
- Improvement — Older installs migrate user session columns safely during startup.
v1.4.18 — Viewer Controls and Runtime Library Cleanup May 2026
- Fix — Starting streams or events no longer automatically saves them into the Library; explicit Library saves remain persistent.
- New — Viewer accounts now support an allowed-connections limit for protected playback links.
- Improvement — Users page redesigned with clearer viewer output controls and assignment explanations.
- Improvement — Application navigation is grouped into cleaner Content, Operations, and Admin menus.
v1.4.17 — Multi-User Management May 2026
- New — Added multi-user management with Admin, Operator, and Viewer roles.
- New — Admins can assign users to specific services, accounts, streams, and proxies from the Users page.
- Improvement — Stream, event, VOD, library, and dashboard views now respect each user's assigned resources.
- Improvement — System-level sections are reserved for admins while operators keep access to day-to-day stream workflows.
v1.4.16 — Streamstable Provider API Load Reduction May 2026
- Improvement — Streamstable now reuses the loaded channel catalog across page navigation instead of refreshing provider APIs on each visit.
- Fix — Manual Refresh remains the only Streamstable action that clears channel caches and forces a full provider channel reload.
- Improvement — Runtime stream status and metrics continue updating through lightweight local polling without stressing service channel APIs.
v1.4.15 — Database Management & Paramount Linear Fixes May 2026
- Fix — Paramount linear channels now refresh playback sessions correctly after stop/start cycles.
- Improvement — Database Management now supports safer backup upload and restore with pre-restore safety backups.
- Improvement — Added xOTT-specific database integrity checks and repair actions for streams, outputs, sessions, and proxy assignments.
- Fix — Database health checks now use real PostgreSQL max connection limits and safer cleanup validation.
v1.4.14 — On-Demand Idle & Recovery Fixes May 2026
- Fix — Stream on Demand now properly tracks active playback across all public HLS URL formats.
- Fix — Idle on-demand streams are now stopped automatically even if they were already running before viewer tracking began.
- Fix — Stream recovery now excludes on-demand streams so they do not auto-start after an app restart.
v1.4.13 — Service Defaults & Library Menu May 2026
- Improvement — Service Outputs now includes service-level auto-restart defaults, refresh-on-restart, and Stream on Demand defaults.
- Improvement — Library table rows now support right-click action menus consistent with Streamstable.
- Fix — Service-level stream defaults now propagate auto-restart and on-demand settings through the normal stream start path.
v1.4.12 — On-Demand Public Playback Fix May 2026
- Fix — Stream On Demand public HLS URLs now resolve playlist and segment requests reliably after viewer-triggered startup.
- Fix — Public stream keys are matched case-insensitively to prevent channel ID casing from breaking playback.
- Improvement — PublicKeyResolver misses during on-demand fallback are logged at debug level to avoid noisy warning spam.
v1.4.11 — On-Demand Auth Fix May 2026
- Fix — Stream On Demand now authenticates its internal startup request, allowing viewer-triggered streams to pass through the normal manifest route.
- Fix — Events Outputs now shows event M3U links only, keeping linear output management on Services and Library.
- Improvement — Library rows show the Stream On Demand indicator for saved on-demand streams.
v1.4.10 — On-Demand Startup Fix May 2026
- Fix — Stream On Demand now starts through the normal service manifest route, preventing null manifest startup failures.
- Fix — Events Outputs is available on the All Services view and lists output links for all services.
- Improvement — Library rows now show the Stream On Demand indicator for saved on-demand streams.
v1.4.9 — On-Demand & Event Outputs May 2026
- Fix — Library stream settings now honor Stream On Demand mode without starting the stream immediately.
- Fix — Stable public HLS URLs can now wake inactive saved on-demand streams by resolving them from the database.
- Improvement — Events now include an Outputs button for the selected service with stable event and same-service linear M3U links.
v1.4.8 — Proxy Assignments & Stable Outputs May 2026
- Fix — Proxy assignment dialogs now correctly pre-select existing service, account, and stream assignments regardless of service-name casing.
- Fix — Proxy account assignment saving now preserves account names that contain underscores.
- Fix — Stream On Demand settings now persist and reload correctly from stream settings.
- Improvement — Library Outputs now expose protected stable global and per-service linear M3U links for saved streams.
- Change — Streamstable legacy snapshot export was removed so M3U output management stays centralized in Library and Services outputs.
v1.4.7 — Paramount Event Playback Fix May 2026
- Fix — Paramount+ event streams now pass the required playback authorization headers to token-gated HLS key and segment requests.
- Fix — Paramount+ HLS event manifests no longer attempt DASH PSSH extraction, avoiding misleading startup errors.
v1.4.6 — Proxy Management & Paramount Events May 2026
- Fix — Proxy assignment dialogs now correctly pre-select services, accounts, and streams already assigned to the selected proxy.
- Fix — Proxy testing now verifies outbound HTTPS through the configured proxy URL, so bad credentials or expired proxies report failure instead of false success.
- Improvement — Paramount+ now supports live/upcoming events and shows device pairing as the supported authentication method.
v1.4.5 — Events Auto-Start Refresh Fix May 2026
- Fix — Events auto-refresh and auto-start now bypass stale event cache so upcoming events become live and start automatically without manual refresh.
v1.4.4 — Service Defaults & Active Track Metadata May 2026
- Improvement — Service Outputs now include global per-service stream defaults for video quality, audio tracks, and subtitle tracks.
- Improvement — Per-service stream defaults now apply to both linear streams and event streams unless overridden per stream.
- Fix — Active streams and events now show selected tracks and available track metadata correctly while running in worker engine mode.
v1.4.3 — Stream Recovery & Peacock Fixes May 2026
- Fix — App update mode now protects the active stream recovery snapshot before stopping the running service, preventing older installs from clearing streams during an update.
- Fix — Stream recovery can now fall back to the protected pre-update snapshot when the primary recovery file is empty.
- Fix — Recovered event streams now keep their event type during restart instead of being requested as linear channel manifests.
- Fix — Peacock token refresh now retries only after an auth failure and avoids crashing event/channel requests when the refresh endpoint rejects a stale token.
v1.4.2 — Streamstable Visibility & Recovery Fixes May 2026
- Fix — Streamstable no longer misclassifies saved linear channels with long provider IDs as event streams.
- Fix — Saved stream metadata now preserves explicit channel/event type when loading stopped or offline streams.
- Fix — App update and graceful restart now preserve the stream recovery snapshot instead of overwriting it while active streams are being stopped.
- Improvement — Stopped saved linear streams remain visible in Streamstable through the saved/orphan stream path after service refresh.
v1.4.1 — Stream Recovery & HLS Decryption Fixes May 2026
- Fix — HLS segment decryption now respects per-segment clear/encrypted state, preventing clear live segments from being incorrectly sent through DRM decryption.
- Fix — AES-128 HLS decryption now derives IVs from the segment sequence when the manifest omits an explicit IV.
- Fix — Stream recovery and restart paths now preserve saved channel names instead of replacing them with raw provider IDs.
- Fix — Failed recovery attempts no longer silently discard recovery state; failed streams remain available for later retry.
- Fix — Service Outputs stream defaults now match the main stream settings modal for FFmpeg timestamp and corruption-handling defaults.
- Improvement — Service output defaults now load missing FFmpeg options from safe defaults instead of turning them off implicitly.
v1.4.0 — Streaming Performance & Service Output Architecture May 2026
- Major — Streaming engine performance architecture upgraded with worker-process isolation and TS passthrough defaults. Multi-stream workloads now run outside the main API process while preserving DRM, HLS, and stream recovery behaviour.
- Feature — Added per-service output configuration on the Services page, including stable event slots, event M3U output, linear M3U output, slot prefix/count, and service-level stream default options.
- Feature — Protected per-service event and linear output URLs with service-specific access tokens, including tokenized event-slot playlist links and URL regeneration from the Services page.
- Improvement — Reworked the Service Outputs modal so service stream defaults use normal form controls for HLS, request, engine, retry, live-edge, headers, and FFmpeg options instead of raw JSON inputs.
- Feature — Added stable event slot assignment and daily slot reuse. Live/upcoming events can now map to fixed slot URLs and stable per-service event playlists.
- Feature — Added separate per-service linear playlist output at
/outputs/{service}/linear.m3u, keeping linear channels separate from event slots. - Fix — Events page service selection now preserves the selected service context instead of requiring the same service to be selected again inside a dropdown.
- Fix — Event streams are filtered out of linear stream tables and M3U exports, and ended event streams no longer pollute linear playlists.
- Fix — Event exports now prefer stable
SlotUrl,SlotName, andSlotNumbervalues when service event slots are enabled. - Fix — Streamstable and Library M3U exports now skip event streams and export xOTT playlist URLs only, avoiding direct provider manifest URLs in customer playlists.
- Fix — Event stream starts and restarts now carry
itemType=eventand service defaults correctly for services that require event type context. - Fix — Event lifecycle handling no longer loops indefinitely when live events end. Transient CDN live/offline flips are tolerated, but legitimate event-end transitions now stop cleanly.
- Fix — Events Settings modal probing and Apply & Restart now persist custom track choices for inactive and active event streams.
- Fix — Batch stop now normalizes stream keys and treats already-stopped streams as successful, eliminating phantom stop failures.
- Improvement — Installer update mode now runs idempotent migrations for service event config and slot tables while preserving existing credentials and configuration.
v1.3.66 — Event Lifecycle & Streaming Engine Fixes May 2026
- Fix — Streaming engine no longer loops indefinitely after a live event ends. The
isLive=trueoverride that protects against transient CDN flips was unbounded; events that legitimately ended kept playing the last segments forever. Now capped at 3 consecutiveisLive=falseresponses, after which the manifest is trusted and the stream exits cleanly. - Fix — Track probing for inactive event streams now works in the Events page Settings modal. The probe endpoint was hardcoding
itemType='channel'for streams not in the database, causing manifest fetch to fail with "No tracks found in manifest". Modal now passesitemTypein the probe request and the server honors it. - Fix — Custom video / audio track selections now persist for active event streams after Apply & Restart. The handler was skipping the database save step before restart, so the restart endpoint loaded stale defaults. Now mirrors the Streams Table flow (save → restart).
- Fix — Event stream restart now passes
type=eventin manifest args. Without this, services like Peacock that require bothidandtyperejected restart requests with "Item ID and type required". - Fix — Batch stop on the Streams table no longer reports phantom failures. The endpoint was using a raw
service_user_channelconcat that didn't match the lowercased / sanitized active-streams map keys. Now usesnormalizeKey()and treats already-stopped streams as success. - Fix — Events page Auto Refresh switch now persists across page reloads via localStorage.
- Fix — Events page Auto Start now correctly fires for upcoming events that flip to live. Previously required Auto Refresh to also be on; polling now activates whenever Auto Refresh OR Auto Start is enabled.
v1.3.65 — Events Table Fixes & UI Polish May 2026
- Fix — Stopping an active event stream now correctly removes it from the Active tab. Stopped streams were lingering with frozen metrics because the correlation query included streams with
isActive=false. - Fix — Stop and Batch Stop were sending the raw service event ID instead of the sanitized database channel ID. For services with special characters in event IDs the stop request targeted the wrong stream and silently failed.
- Fix — Stream proxy can now be configured for event streams via the Settings modal. Previously the proxy field was disabled.
- Fix — Server-side channel cache is now invalidated on manual Refresh in the Events page, matching Streams Table behaviour.
- Fix — SportEurope geo-blocked and auth-failed errors now surface the correct error message instead of a generic
INTERNAL_ERROR. - Improvement — Active Events table now has search, pagination, unified column names, action button styles, and status chip consistent with Streams Table.
v1.3.64 — DRM Binary, DB Migration & Proxy Fix May 2026
- Fix —
mp4decrypt(Bento4) now deployed directly from the release tarball on every update. Previously only installed on fresh installs via external download — servers where the download failed had no DRM binary, causingSTREAM_START_FAILEDon all DRM-protected services (Peacock, etc.). - Fix — Update installer now runs schema migrations in update mode. Missing columns (
on_demand_timeoutand others) were causing constant query errors on updated servers. - Fix — Proxy lookup queries now use proper indexes (
service_id,account_id,stream_id,LOWER(name)). Previously caused 5-second full table scans on every stream start and login, resulting in proxies not being injected.
v1.3.62 — Peacock Territory Fix May 2026
- Fix — Peacock: geo-detection call to
init.sky.comremoved entirely; territory hardcoded toUS. Peacock is a US-only service — dynamic detection was unreliable through datacenter proxies and caused login failures on non-US servers.
v1.3.61 — Peacock Login Hotfix May 2026
- Fix — Peacock: country code detection was running before the proxy was configured, causing non-US servers to get the wrong territory and fail login with 400 Bad Request on
auth/tokens. Country code is now resolved after proxy setup.
v1.3.60 — New Services, On-Demand Streams & Bug Fixes May 2026
- New — Stream On-Demand: streams can now be configured to start automatically when a viewer first requests the playlist and stop after a configurable inactivity timeout. Fully opt-in per stream, zero impact on existing streams.
- New — BBC iPlayer script: 9 live channels plus full VOD support (categories, series, episodes, manifests) via BBC mediaselector API.
- New — Joyn script: 10 German live channels (ARD, ZDF, SAT.1, ProSieben, etc.) with DASH/Widevine DRM.
- New — Zattoo script: 307 live channels with email/password auth and automatic token refresh.
- New — CoupangPlay script: Korean streaming service with cookie-based auth, 24/7 live channels, dedicated sports events page, and auto token refresh — users only need to export cookies once every ~6 months.
- Fix — Batch settings:
outputFormatandrefreshManifestOnRestartnow saved correctly; quality settings properly nested so batch saves no longer silently drop video/audio/subtitle quality preferences. - Fix — SamsungTVPlus: region parameter now wires end-to-end; all supported regions (
at/ca/ch/de/es/fr/gb/in/it/kr/us) now work correctly. - Fix — Peacock:
Retry()now triesallowed_methodswith fallback to legacymethod_whitelist, eliminatingTypeErrorcrash on startup for customers with newer urllib3. - Fix — Peacock: event manifest 400 Bad Request caused by PCKSLE content IDs being incorrectly re-colonised during parsing. Sports event playback now works correctly.
- Fix — Peacock: capabilities payload used wrong keys (
v/a) for codecs; API requiresvcodec/acodec. Channel manifests now resolve correctly. - Fix — All service scripts were writing to a spurious
netflix_debug.logfile in the data directory. Hardcoded debug path removed from the shared logging library.
v1.3.59 — Account Deletion Hotfix May 2026
- Fix — Account deletion no longer removes token files belonging to a different account that shares the same email in a different case (e.g. deleting
user@example.comno longer deleted the token file forUSER@EXAMPLE.COM). Token file cleanup now uses the exact database-stored username. - Fix — Account lookup for deletion is now exact-case so deleting one account cannot accidentally target another account with the same email in different capitalisation.
v1.3.58 — NowTV Restart Fix & Account Deletion May 2026
- Fix — NowTV streams failed to restart after first play with SCRIPT_ERROR: the server was passing the username in lowercase to scripts, but token files are keyed by the original account case (e.g.
BANGLORE2021@HOTMAIL.COM). The server now resolves the exact account username from the database before spawning scripts. - Fix — Deleting an account from the Services page now stops all active streams for that account and removes them from the database via cascade. Previously only token files were deleted, leaving orphaned HLS processes and stream records.
- Fix — Script auth failures (Not logged in, session expired) now surface as
AUTH_ERRORinstead of the misleadingSCRIPT_ERROR. - Fix — When a script exits silently (code 1, empty stderr), the stdout JSON error is now logged and surfaced to the client instead of being discarded.
v1.3.57 — NowTV Stability & Code Quality May 2026
- Fix — NowTV SCRIPT_ERROR on stream restart: token file race condition when starting multiple channels simultaneously caused JSON corruption. Token writes are now atomic (write-to-tmp then rename), and load errors are handled gracefully.
- Fix — NowTV license signature was malformed when the license URL had no query string (
/path?instead of/path). This could cause intermittent DRM failures. - Fix — NowTV token refresh action now persists the refreshed token to disk (was refreshing in memory but not saving).
- Fix — Manifest script output parser now tolerates debug lines before the final JSON object, consistent with the CDM executor path.
- Fix — Service scripts now execute with correct working directory set to the scripts folder.
v1.3.56 — NowTV Token Auto-Refresh May 2026
- Fix — NowTV streams can now be started multiple times without re-login. User tokens (short TTL ~1 hour) are cached on disk and silently refreshed using the long-lived sky cookie. If a token expires mid-session, the manifest step retries once automatically. Users only need to re-login if the sky cookie itself expires.
v1.3.55 — DASH DRM Decryption Fix May 2026
- Fix — CMAF/DASH streams (e.g. NowTV) were playing garbled video because the parallel segment download path checked
segment.encryptedinstead ofsegment.streamInfo.encrypted. Individual DASH segment objects inherit encryption state from their parent stream, not directly. Segments are now correctly decrypted via mp4decrypt before muxing.
v1.3.54 — NowTV CDM Key Format Fix April 2026
- Fix — NowTV CDM action now outputs decryption keys in the correct
kid:keyper-line format that the streaming engine expects. Previously the script output JSON which the server could not parse, resulting in "no valid keys" error when starting streams.
v1.3.53 — NowTV Signing Path Fix April 2026
- Fix — NowTV internal signing API now correctly loads the signing module from the real filesystem path (
/opt/xott/scripts/lib/nowtv_sign.js) instead of the pkg virtual snapshot path. Previously the endpoint returned "Signer not available" inside the compiled binary.
v1.3.52 — NowTV Signing Fix April 2026
- Fix — NowTV streams now work on servers without a standalone
nodebinary. The xott server exposes an internal HMAC signing API that the NowTV script calls using the server's own embedded Node.js runtime, eliminating the external dependency entirely.
v1.3.51 — NowTV Stream Fix April 2026
- Fix — NowTV streams: probe and stream start now work. Manifest output was using non-standard field names; corrected to
ManifestUrl,LicenseAcquisitionUrl,Pssh,requires_cdm. Channel logos and display names also corrected.
v1.3.50 — NowTV Channels Fix April 2026
- Fix — NowTV channels: fixed 502 error where channels failed to load after login. Territory prefix in token filename was causing username mismatch. Token files now use the standard naming format; territory is stored inside the token and restored automatically.
v1.3.49 — NowTV Multi-Region Support April 2026
- NowTV — Added support for NOW Italy (nowtv.it) and WOW TV Germany (wowtv.de). Territory is auto-detected from the proxy IP, or can be overridden with
territory=IT/territory=DE. All three regions share the same signing module and backend stack. - Fix — NowTV login button now appears correctly on the Services page.
v1.3.48 — NowTV Widevine CDM Support April 2026
- NowTV — Added Widevine CDM decryption support: PSSH extraction from DASH MPD manifests, HMAC-signed license requests via WASM signing helper, and full key retrieval pipeline for live channel playback.
v1.3.47 — Playback Time Display Fix April 2026
- Fix — Playback Time: Fixed timer showing wrong values (e.g. 3+ hours immediately after server restart). For MPEG-TS streams, FFmpeg preserves native broadcast timestamps which can be hours into the broadcast day. The display now uses accumulated segment durations relative to session start — timer always starts at 00:00 and increments correctly.
v1.3.46 — Playback Time Fix April 2026
- Fix — Playback Time: Fixed playback timer freezing on stitched streams (Pluto TV, etc.). The PTS-span method froze
lastPtsafter a PTS reset at a clip boundary. Switched to accumulated ffmpeg segment durations which increment correctly through discontinuities.
v1.3.45 — FPS Calculation Fix April 2026
- Fix — FPS Display: Replaced cumulative PTS-based FPS with per-segment EWMA. The previous method froze
lastFramePtsafter a PTS reset at a discontinuity while the frame count kept growing, causing FPS to inflate to 100+ over time on stitched streams (Pluto TV, etc.).
v1.3.44 — Stitched HLS Stability Fixes April 2026
- Fix — Stitched HLS: Fixed stale encryption flag causing "No decryption key found" crash when a stitched stream (Pluto TV, etc.) transitions from an encrypted clip to an unencrypted one — primary cause of recurring restarts.
- Fix — Stitched HLS: Fixed fMP4 init segment being cleared when the playlist sliding window scrolls past the
#EXT-X-MAPtag, causing "moov atom not found" crashes at clip transitions. - Fix — FPS Display: Fixed inflated FPS values (showing thousands) caused by PTS resets at discontinuity points in stitched streams.
v1.3.43 — fMP4 Format Detection Fix April 2026
- Fix — fMP4 Format Detection: Fixed a bug where fMP4 segments starting with
moov/moofboxes were misidentified as MPEG-TS, causing FFmpeg to crash with "Invalid data found when processing input". Resolves stream restarts on Pluto TV and other stitched HLS linear channels. - Fix — AES-128 HLS: Fixed incorrect zero IV for segments without explicit IV tag (per HLS spec, IV must be the media sequence number).
- Fix — HLS Streams: Resolved fMP4 init segment loss on manifest refresh causing stream restarts.
- Fix — Script Runner: Resolved SSL certificate verification failure on VPS installs.
v1.3.42 — AES-128 HLS Decryption Fix April 2026
- Fix — AES-128 HLS: Fixed incorrect zero IV for segments without explicit IV tag. Per HLS spec the IV must be the media sequence number — resolves stream crashes on Pluto TV and any AES-128 channel with implicit IVs.
- Fix — HLS Streams: Resolved fMP4 init segment loss on manifest refresh causing stream restarts.
- Fix — Script Runner: Resolved SSL certificate verification failure on VPS installs.
v1.3.39 — Stability & Delivery Improvements April 2026
- New — Improved service script delivery system.
- Fix — Resolved API connectivity issue on fresh installations.
- Fix — In-App Updater: Fixed update process leaving the UI broken after refresh.
v1.3.38 — In-App Updater Fix April 2026
- Fix — In-App Updater: Fixed a critical bug where triggering an update from the header would wipe the frontend (client/build) and leave the UI returning a JSON error on refresh. The updater script now correctly changes into the extracted tarball directory before running the installer.
v1.3.37 — Services Page Improvements April 2026
- Fix — Services Auth Buttons: The Pair Device button is now only shown for services that actually support device pairing, removing the redundant button from password/cookie-only services.
- New — Bulk Script Import: The Services page now accepts .zip and .tar.gz archives to mass-import multiple service scripts at once, with a results dialog showing imported/failed counts.
- New — Instant DB Sync on Import: Scripts imported via the UI are immediately registered in the database — no server restart required.
- New — Services Page Notices: Two dismissible info banners added — one about script compatibility and one reminding users to configure a proxy for geo-locked services before authenticating.
v1.3.36 — DirecTV Stream Stability Fixes April 2026
- Fix — DirecTV SSAI: Disabled DAI (dynamic ad insertion) in manifest requests, eliminating backward PTS jumps on local affiliate channels (e.g. ABC) caused by the sponsored CDN stitcher.
- Fix — DRM Key Rotation: Preserved original DRM error codes so the fail-fast handler fires correctly on daily key rotation, reducing stream outage from ~40s to near-zero.
- Fix — PTS Discontinuity Threshold: Backward PTS jumps under 90s are now tolerated as ad-insertion artifacts, halving unnecessary EXT-X-DISCONTINUITY insertions per ad break.
v1.3.35 — YouTube Cookies Support April 2026
- New — YouTube Cookies: Added a dedicated YouTube tab in Settings to paste and manage your cookies.txt file, enabling yt-dlp to access age-restricted and members-only YouTube streams.
v1.3.34 — In-App Updater & YouTube Proxy Fixes April 2026
- Fix — In-App Updater: Completely rearchitected the update mechanism. The updater now works correctly — a root-owned systemd unit handles the actual installation instead of attempting to run it inside the sandboxed app process.
- Fix — YouTube Proxy Assignment: Resolved an issue where assigning a proxy to a YouTube manual stream via the stream settings modal failed silently, causing the stream to start without the proxy.
- Fix — YouTube Stream Start with Proxy: The server now correctly looks up the assigned proxy when resolving a YouTube live stream URL at startup, so bot detection is bypassed properly when a proxy is configured.
- Fix — Stream Proxy Display: The currently assigned proxy URL now loads correctly in the stream settings modal instead of always appearing blank.
v1.3.33 — DGO Fixes & Stream Stability April 2026
- Fix — DGO Token Refresh: Corrected a request header issue that caused 404 errors when refreshing DGO streaming tokens from the service card.
- Fix — DGO Long-Running Streams: DGO streams now automatically re-fetch a fresh manifest on each restart, preventing stream failures after 24–48 hours caused by expired CDN tokens.
- Fix — Stream Monitoring: Resolved an issue where the monitoring loop could become blocked during stream restarts, causing all monitoring ticks to be skipped.
- Improvement — Stream Restart Backoff: Stream restarts now use exponential backoff (up to 30 minutes) with a hard cap on consecutive failures to prevent runaway crash loops on permanently broken streams.
v1.3.32 — Bug Fixes & YouTube Compatibility April 2026
- Fix — Startup Stability: Streams stuck at
runningin the database after an unclean shutdown are now reset tostoppedon service start, preventing crash-loop chains. - Performance — Non-Blocking Init: Service account status checks now run in the background so the panel is immediately responsive after restart.
- Fix — YouTube Compatibility: The
--js-runtimesyt-dlp flag is now version-aware and is only used when the installed yt-dlp version supports it (Python 3.8 / Ubuntu 20 servers no longer fail with "no such option"). - Fix — YouTube Logs: YouTube resolution activity is now written to the structured log files.
v1.3.31 — Performance & Stability Patch April 2026
- Optimization — Database Stability: Fixed major CPU-heavy race conditions and hangs in the proxy management system.
- Stability — Intelligent Initialization: Implemented non-blocking, promise-based locking for background database tasks to prevent server crashes during peak load.
- Fix — Service Monitoring: Corrected inefficient monitoring loops and system calls to reduce global CPU usage by 90% on high-load servers.
- Performance — Enforced Lookups: Guaranteed 3-second timeout on all database-backed proxy resolutions to maintain UI responsiveness.
v1.3.30 — YouTube Live Streams April 2026
- YouTube Live Streams — Paste any YouTube channel
/liveURL (e.g.https://youtube.com/@CNN/live) into the Add Stream dialog and it auto-resolves to an HLS manifest via yt-dlp. Stream name, channel, and thumbnail metadata are auto-filled. No DRM keys needed. - Auto token refresh — YouTube HLS tokens expire every ~6 hours. A background timer re-resolves the manifest URL every 4 hours to keep streams alive indefinitely without manual intervention.
- yt-dlp dependency —
yt-dlpis now included inrequirements.txtand installed automatically during setup/update. - YouTube resolve API — New
POST /api/youtube/resolveendpoint validates YouTube URLs and returns HLS manifest + metadata via yt-dlp.
v1.3.29 — Installer Fixes April 2026
- Fix — PostgreSQL extensions (uuid-ossp, pg_trgm) now created as superuser before schema is applied — previously caused missing tables and Server Error on login on fresh installs
- Fix — Installer now creates the
data/configdirectory so settings can be written on first boot - Fix — JWT_SECRET and SESSION_SECRET now generated with 256-bit entropy on fresh install instead of being left blank
v1.3.28 — Critical Hotfix April 2026
- Hotfix — Reverted H264 SPS/PPS BSF filter introduced in v1.3.27 that caused constant ffmpeg restarts on DirecTV and other services with non-standard H264 extradata
- Fix — Stream restart no longer deletes the HLS output directory, preventing downstream consumers (xAccel, headends) from getting 404s during CDN token reconnects
- Fix — Installer now detects Python version mismatch after OS upgrades (e.g. Ubuntu 20→22) and rebuilds the venv automatically
v1.3.27 — HLS Output Stability Fixes April 2026
- Fix — HLS output now injects H264 SPS/PPS context before every keyframe, eliminating "Packet corrupt (dts=NOPTS)" drops in downstream encoders (xAccel, headend systems) that connect mid-stream
- Fix — HLS playlist minimum buffer increased from 10 to 20 segments (~120s), reducing stream interruptions to downstream consumers during upstream CDN token refreshes
- Fix — License validation result is now cached in-memory for 60 seconds, eliminating per-request writes to the database that caused background write pressure and excessive log noise
v1.3.26 — Performance Optimizations April 2026
- Performance — Proxy lookups are now cached (30s TTL), eliminating repeated slow database queries on every stream start and recovery — dramatically reduces DB load when starting many streams simultaneously
- Performance — Monitoring loop now batches all stream PID checks into a single system call instead of spawning one process per stream
v1.3.24 — Stream Library Fixes & Live Sync April 2026
- Bulk delete fix — The confirmation dialog in the Stream Library no longer shows "undefined streams" when deleting multiple streams at once.
- Channel name protection — Channel names stored in the library are now protected from being overwritten by generic placeholder names (e.g. "Channel ...") during refresh or re-import.
- Live API sync — The Refresh button on the Streams page now syncs your library against the live service APIs: changed channel names are updated automatically and dead channels that no longer exist are removed.
- Hotfix — Resolved a startup crash introduced in v1.3.20.
v1.3.19 — DGO Multi-Stream Auth Fix April 2026
- DGO concurrent stream fix — Channels like WIN Fútbol+ and DSPORT+ would fail with AUTH_ERROR when another DGO channel was already streaming. The DGO script now correctly falls back to the assetToken authentication path using the SM DGO token when the authorizer session limit is reached, allowing multiple DGO channels to run simultaneously.
v1.3.18 — Primary Audio Fix for Inactive Streams April 2026
- Primary audio for inactive streams — A "Primary Audio" dropdown now appears below the audio track selector when 2 or more tracks are chosen on an inactive stream, allowing you to set the default language before the stream starts. Previously this option was only available while a stream was actively running.
v1.3.17 — Primary Audio Track Selection April 2026
- Primary audio track — When multiple audio tracks are manually selected in stream settings, click ★ next to any track to mark it as primary. The primary track is placed first in the muxed output and flagged as default so downstream players always start on the correct language (e.g. Spanish over English).
v1.3.16 — Batch Start Throttling April 2026
- Batch concurrency throttled — Stream batch start concurrency reduced from 8 to 4 simultaneous starts, with a 500ms pause between groups. Prevents DB connection pool exhaustion and event loop saturation during recovery of large installations (80+ streams).
v1.3.15 — Crash Fix & Stream Start Optimisation April 2026
- Critical crash fix — A database connection pool timeout in the proxy lookup path was an unhandled promise rejection that killed the Node.js process. The lookup now fails gracefully (stream continues without proxy), and a global unhandled rejection handler ensures no future transient DB error can crash the server.
- Service & account ID caching — Service and account IDs were re-fetched from the database on every single stream start. These are now cached in memory after the first lookup, eliminating 2 redundant DB queries per stream restart on large installations.
v1.3.14 — Batch Start Performance Fix April 2026
- Batch stream start optimisation — When starting multiple streams at once, settings were fetched from the database individually for each stream. All stream settings are now pre-loaded in a single bulk query before the batch begins, eliminating connection pool exhaustion and DB timeout errors on large installations (80+ streams).
- Installer safe-mode default — The installer now auto-detects an existing installation and defaults to Update mode, preventing accidental data loss when the installer is run non-interactively or the prompt times out.
v1.3.13 — Critical DB Load Fix (High Stream Count) April 2026
- Settings read caching — Application settings were re-fetched from the database on every authenticated request, every stream restart, and every license check. Settings are now cached in memory for 10 seconds, eliminating thousands of redundant DB round-trips per minute on busy servers (80+ streams).
- Streams table poll interval — The dashboard streams table was polling the database every 2 seconds with a heavy 109-row JOIN query. Default interval raised to 10 seconds, reducing that query load by 5×.
v1.3.12 — Performance & Stability Fix April 2026
- Server CPU spike fix — Unconditional database query logging was firing on every single query, saturating the Node.js event loop under heavy stream load (80+ streams). In production, only slow queries (>500ms) are now logged.
- JWT caching fix — The JWT secret was being re-fetched from the database on every authenticated request. It is now cached in memory for 5 minutes, significantly reducing database load on busy servers.
v1.3.11 — In-App Auto-Update April 2026
- In-app update notifications — When a new version is available, a notification badge appears in the header. Click it to see the changelog and update with one click — the server downloads the installer, applies it, and the page reloads automatically when the server is back up.
- DGO — track probe now works — Probing tracks from the stream settings modal was failing with a geo-block error. Fixed.
v1.3.10 — DGO Probe Fix April 2026
- DGO — track probe now works correctly — Probing tracks from the stream settings modal was failing with a geo-block error because the manifest fetch used no proxy. The probe endpoint now always resolves the service/account proxy for the manifest fetch regardless of stream proxy settings.
v1.3.9 — DGO Streaming & UI Fixes April 2026
- DGO — channels now load after adding account — Multiple token acceptance fixes: the login handler now recognizes all DGO token formats including bare payloads, cookie arrays, JSON objects, and any token with standard DGO fields. A final fallback ensures no valid token is rejected.
- DGO — streams now start correctly — The DRM license request now uses the configured proxy (required for geo-restricted Latin American content). Additionally, the DASH manifest fetch now always uses the account/service proxy regardless of the "Stream Proxy Fallback" toggle — segments still respect that toggle.
- Service login instructions now visible — Step-by-step login instructions defined in service scripts (e.g. DGO's 3-option cookie/token guide) now appear in the Add Account and Update Credentials dialogs.
v1.3.8 — DGO Update Credentials Fix April 2026
- DGO — "Update Credentials" now works correctly — Updating an existing DGO account's token via the Update Credentials button was silently failing because the token JSON normalizer fix was only applied to the Add Account flow. The Update Credentials endpoint now also passes token objects (id_token, refresh_token, etc.) through unchanged without corrupting them into cookie strings.
v1.3.7 — DGO Login & Channel Fix April 2026
- DGO — channels now load after cookie login — After adding a DGO account via token/cookie, the channel list was always empty. The script now correctly reads the channel list from the SM DGO token stored during cookie login instead of only looking at the Toolbox OIDC token (which is only available after device pairing).
- DGO — all token paste formats now accepted — The login now correctly handles: raw JWT, JSON object with id_token + refresh_token, browser localStorage display format (
sessionToken:"eyJ..."), cookie arrays, and bare base64 payload tokens. Previously several of these formats were silently rejected. - DGO — token JSON no longer corrupted before reaching the script — A server-side cookie normalizer was converting JSON token objects (e.g.
{"id_token":"...","refresh_token":"..."}) into a cookie string before passing to the script, destroying the structure. It now passes token objects through unchanged.
v1.3.6 — Bulk Stop Fix April 2026
- Bulk stop now works correctly — Stopping 50+ channels via the batch operation now actually stops the streams. Previously the stop was reported as successful immediately without waiting for streams to actually terminate, causing channels to appear stopped in the UI while still running. The fix properly awaits each stop and processes them in parallel batches of 8.
v1.3.5 — Performance Fix: Server CPU & Zombie Process Elimination April 2026
- Eliminated zombie processes during stream monitoring — The system metrics check previously spawned a
top -bn1shell command for every active stream on every monitoring cycle. With 50+ streams, this created dozens of simultaneous subprocesses causing high CPU usage and zombie process accumulation. Metrics are now read directly from/proc/statand/proc/meminfo(instant file reads, no subprocess) and cached for 5 seconds with promise coalescing — all concurrent calls share a single read. - Database dead tuple cleanup — Performed VACUUM ANALYZE on all core tables to remove dead tuple bloat that was slowing down queries. The
system_configtable had 46 dead tuples versus 4 live rows, causing significantly slower reads at startup and during license verification.
v1.3.4 — Dashboard Fixes April 2026
- Dashboard — fast first load — The dashboard no longer takes up to a minute to load on first visit or after a server restart. Channel counts are now fetched in parallel batches of 6 instead of one-by-one, and the backend summary endpoint runs library, proxy, and VOD counts concurrently instead of sequentially.
- Dashboard — auto-refresh removed — The dashboard no longer visually reloads every time the user switches tabs or after 30 seconds. Tab-switch now only updates the active stream count silently. A full silent refresh of all counters happens in the background every ~2 minutes without any visible flash or spinner.
- Dashboard — events counter now populates automatically — The Events and Active Events counters no longer stay at 0 after a server restart. The dashboard now warms the events cache in the background on first load and updates the counters automatically without requiring a manual refresh.
v1.3.3 — Performance & UX Improvements April 2026
- Bulk channel start — major speed improvement — Starting 50+ channels is now significantly faster. Database queries per stream were reduced from ~7 to ~1 by adding a 30-second in-memory cache for proxy lookups (service, account, and stream-level). Duplicate settings loads are also eliminated by passing pre-loaded settings directly to the stream engine.
- Bulk start concurrency raised from 3 to 8 — Streams are now started 8 at a time (up from 3), cutting wall-clock time for large batches by more than half. Applies to both batch start and batch restart.
- Streams table — service filter fixed — The "Service" dropdown in the Streams table now correctly lists all services when the channel cache is warm. Previously the filter showed only "All Services" and "My Streams" on page load because service names were not extracted from the cache.
- DGO & Netflix — guided cookie setup — The Add Account and Update Credentials dialogs for cookie-based services (DGO, Netflix) now display a clear step-by-step instruction panel explaining exactly where to find the token or cookies in the browser. DGO shows three options: raw JWT, JSON with auto-refresh, or cookie export. Netflix shows the EditThisCookie flow. Field labels and placeholders are service-specific.
- Server page — network interface error fixed — The Server page no longer shows "Failed to fetch server information" on hardened systems. The systemd service unit now grants
AF_NETLINKaccess, which libuv requires internally when enumerating network interfaces.
v1.3.2 — DGO & Streams Fixes April 2026
- DGO — All channels now listed — Fixed a 50-channel hard limit that silently cut off the remaining channels when an account had more than 50 (e.g. 123 total). Channels are now fetched in batches so the full list is always returned.
- DGO — Auto token refresh — The SM DGO session token is now automatically refreshed before it expires (30-minute threshold). Provide a
{"id_token":"eyJ...","refresh_token":"eyJ..."}JSON object at login to enable unattended renewal for up to 90 days. - Streams — Deleted account channels removed — Channels belonging to a deleted account are now immediately removed from the Streams table instead of persisting until the 2-hour cache expired.
v1.3.1 — Max Service & Events Fixes April 2026
- Max — Device pairing fixed — Pairing no longer gets stuck at "Step 3: Wait for automatic activation". The pair context is now saved to a separate file that the server's cleanup routine cannot delete, eliminating the race condition that caused workers to find no pairing context.
- Max — VOD playback fixed — Resolved a
400 Bad Requestfrom the Max playback API caused by unsupportedcapabilities.videoandcapabilities.audiofields. The payload now only includesmanifestsandcontentProtectionas required by the API schema. - Max — Live events implemented — The Events page now lists live and upcoming sports events from the Max sports/live CMS routes, including correct Sport and League labels.
- Max — Event live/upcoming status corrected — Events with
videoType=LIVEthat have not yet started are now correctly marked as Upcoming rather than Live, based on their broadcast start time. - Max — Improved playback error messages — The script now parses Max API error codes from the response body, distinguishing geo-block errors from subscription/entitlement errors instead of showing a generic GEO_BLOCKED message.
- Max — Live event manifest resolution — Fixed incorrect edit ID resolution for live events; the script now falls back to the direct video endpoint when the show endpoint returns no result, ensuring live content IDs are correctly resolved before the playback request.
v1.3.0 — DGO Service & Proxy Engine Improvements April 2026
- DGO (DirecTV GO) — Full Widevine DRM support — Streams now play end-to-end using the SM DGO authorizer flow, which returns pre-tokenized Akamai CDN manifest URLs and an IP-locked DRM authorization JWT. Widevine keys are extracted automatically via the CDM action.
- DGO — Cookie/token login — DGO now uses a cookie-based login (like Netflix). Paste the SM DGO JWT from your browser's Network tab or an EditThisCookie export directly into the login dialog — no pairing code required for streaming accounts.
- DGO — Device code pairing fixed — The device code and token polling endpoints now correctly use Basic auth, resolving the
INVALID_APIKEYerror that broke pairing. - DGO — Token auto-refresh — If a SM DGO
refresh_tokenis stored, the script automatically renews the session token before it expires without user intervention. - Proxy engine — Account proxy now passed to all scripts —
spawnPythonScript(used for CDM, manifest, channels, and all other script actions) now resolves the account-level proxy in addition to the service-level proxy. Previously, CDM license requests did not receive the account proxy, causing DRM failures when "Use proxy for streams" was disabled.
v1.2.0 — Bug Fixes & DRM Support April 2026
- DRM streams — Bento4 (
mp4decrypt) is now automatically installed; services like DirecTV with encrypted streams now work out of the box. - Python environment — Scripts now correctly use the virtual environment Python so all required packages (
curl_cffi,pycurl, etc.) are available. - Stream access — Fixed a false-positive in the integrity check that incorrectly blocked all stream operations after license activation.
- Installer — Fixed admin password not being applied at install time; the password shown at the end now matches what you log in with.
- Installer — Resolved dependency installation failure on Ubuntu 22 caused by
libcurlpackage conflicts;nodejs/npmno longer required. - Installer — Fixed WebAssembly crash on startup caused by the 2 GB virtual memory limit in the systemd service.
- Email delivery — License keys are now automatically emailed to customers after successful payment.
- Stream naming — Fixed a bug where streams that fail to start would get renamed to "Unknown Channel" in the database and UI; the original channel name is now preserved across retries and restarts.
v1.1.68 — Performance & Stability Update April 2026
- Streams page — Channels now load from a local cache (2-hour TTL) so navigating back to the Streams page is instant; cache is refreshed on manual refresh.
- Batch operations — Stop/Restart now run in the background; the panel responds immediately and operations continue safely even if you refresh or close the page.
- Events auto-start — Fixed duplicate stream launches; auto-start now only triggers for events that newly become live, not on every status poll.
- Parallel batch processing — Batch stop/restart use concurrent processing (up to 3 streams at a time) instead of sequential queuing, reducing completion time significantly for large batches.
- Events page — Fixed missing UI imports that caused rendering issues in the events skeleton loader.
- Installer — Rewritten to be clean and silent; now displays the panel URL and admin credentials at the end of installation.
v1.1.0 — xUI Integration & VOD February 2026
- xUI panel integration — import streams and accounts directly from xUI.
- VOD page with on-demand stream management.
- HLS player built into the panel for live preview.
- Database management page for direct SQL inspection.
- Horizontal navigation layout option.
- Dark/light theme toggle with system preference detection.
v1.0.0 — Initial Release January 2026
- Multi-service IPTV stream management (ESPN, Hulu, Fubo, Sling, Peacock, Pluto, and more).
- HLS re-streaming with FFmpeg and proxy support.
- Live events tracking with schedule-based stream control.
- Proxy management dashboard.
- Stream monitoring and health checks.
- Structured logging with real-time log viewer.