-
released this
2026-05-31 01:18:51 +10:00 | 2 commits to main since this release✨ What's New
🔗 Upstream Cookie Support
- Added an "Upstream Cookie" field to the source editor for streams requiring cookie-based CDN authentication (e.g. CloudFront signed cookies for
SPWN) - Full-proxy mode forwards the configured cookie on every manifest and segment request; direct and manifest-only modes display a warning when a
cookie is set, since those modes cannot forward cookies to the CDN - Stream liveness probe forwards the cookie so admin-panel detection works correctly for cookie-protected sources
📣 Telegram Notifications
- Per-link start notifications: each source going live now fires its own notification instead of only triggering on the first detected link
- 30-second merge window: sources that come online within the window are merged into a single message with link names joined by
&(configurable
viaTG_START_MERGE_SECS) - Reconnect grace period: brief RTMP disconnects within 60 seconds no longer generate spurious stop/start notification pairs (configurable via
TG_RECONNECT_GRACE_SECS)
⚡ HLS Proxy Performance
- Upstream HTTP connections are now pooled per host (up to 4 connections), eliminating per-request TCP+TLS handshake overhead for external stream
proxying - Manifest fetch timeout is now separate from the stream probe timeout; new
HLS_PROXY_TIMEOUTenv var (default 15 s) prevents live-edge manifest
delays from triggering premature 502 errors
⚙️ Configuration
Variable Default Description TG_RECONNECT_GRACE_SECS60Seconds before sending a stop notification; absorbs brief RTMP reconnects TG_START_MERGE_SECS30Window in seconds for merging simultaneous link-online events into one message HLS_PROXY_TIMEOUT15Timeout in seconds for upstream HLS manifest and segment proxy requests 🔄 What's Changed
Full Changelog: v1.2.3...v1.2.4
Downloads
- Added an "Upstream Cookie" field to the source editor for streams requiring cookie-based CDN authentication (e.g. CloudFront signed cookies for
-
released this
2026-05-25 18:27:29 +10:00 | 3 commits to main since this release🔒 Security
- HLS proxy routes now reject private, loopback, link-local, multicast, and reserved network targets
✨ What's New
- Added per-source HLS proxy modes: Auto, Direct, Full proxy, and Manifest only
- Added manifest-only HLS proxying to reduce StreamHall bandwidth usage while still hiding the initial playlist
URL - Source editor now has clearer per-field labels and a proxy mode selector for each playback source
- Mobile source editing is improved with compact ordering controls for long view-angle forms
🐛 Bug Fixes
- Improved mobile drag handling for stream rows and source rows
- Fixed source editor layout alignment issues around ClearKey and delete controls
- Removed the old source format hint after replacing it with field-level labels
🔄 What's Changed
Full Changelog: v1.2.2...v1.2.3
Downloads
-
released this
2026-05-25 02:28:07 +10:00 | 4 commits to main since this release🔒 Security
- DRM manifest auto-discovery now rejects private, loopback, link-local, multicast, reserved, and redirected private targets
✨ What's New
🎬 DRM Playback
- Added native FairPlay HLS playback for iOS/Safari
- Added same-origin FairPlay and Widevine license proxy support
- Added DRM-specific playback URLs, allowing one source to use MPD for Widevine and HLS for FairPlay
- Added admin DRM auto-discovery for DASH Widevine and HLS FairPlay manifests
- Added per-DRM playback URL/type fields in the stream source editor
🐛 Bug Fixes
- Fixed Widevine license CORS failures by routing license requests through StreamHall
- Fixed FairPlay playback on iOS/Safari with native WebKit handling
- Fixed DRM license requests targeting the wrong source after source reordering
- Fixed duplicate Shaka quality entries caused by audio variants
- Fixed DRM-specific stream probing so it checks the active DRM playback URL
- Fixed Android Telegram WebView Widevine handling by probing browser DRM capability before blocking playback
- Fixed hidden DRM form fields being saved after switching DRM method
- Fixed DRM auto-discovery silently swallowing per-row failures
🔄 What's Changed
Full Changelog: v1.2.1...v1.2.2
Downloads
-
released this
2026-05-24 01:49:20 +10:00 | 5 commits to main since this release🔒 Security
- HLS proxy now signs the full target URL instead of hostname only; a token cannot be reused across different paths on the same host
viewer_startnow requires a short-lived HMAC token issued at player load, preventing unauthenticated session injection and password-gated stream bypass- Warning is printed at startup when
SECRET_KEYis a known weak placeholder (REPLACE_MEetc.) - API key authentication now only accepts the
Authorization: Bearerheader; the?api_key=query string fallback has been removed to prevent token leakage into logs and browser history
✨ What's New
📊 Analytics
- CSV export now filters by time range - choose
today,7d,30d(default), orallfrom an integrated dropdown button; previously the export was unbounded
🐛 Bug Fixes
- Fixed HLS DRM detection missing on streams served via a master playlist - the probe now fetches the first variant URL before checking for DRM markers
- Fixed DASH streams not being detected as DRM-protected - added Widevine UUID check on the manifest response
- Fixed Android WebView detection casting too wide a net; detection is now restricted to the Telegram UA string only, avoiding false positives on regular Android browsers
- Removed a misleading comment on the IP hash function that implied raw IPs were not stored (they are)
⚙️ Configuration
docker-compose.ymlplaceholder defaults changed toREPLACE_ME/REPLACE_DB_PASSWORDto make unset secrets more obvious
🔄 What's Changed
Full Changelog: v1.2.0...v1.2.1
Downloads
-
released this
2026-05-24 00:27:22 +10:00 | 6 commits to main since this release✨ What's New
📱 Mobile Responsive Layout
- Admin sidebar collapses to a
≡toggle on narrow screens (≤900px) - Push directory sidebar collapses on mobile with a dedicated toggle
- File browser rows wrap on narrow screens (≤600px): filename on top, buttons below
- Fixed file browser cards overflowing the viewport on mobile
🔐 DRM Playback
- Integrated Shaka Player with Widevine (desktop / Android) and FairPlay (Safari / iOS) support
- Each playback source supports multiple DRM configs simultaneously (e.g. Widevine + FairPlay on the same URL)
- Per-entry license request headers configurable in the admin DRM editor
- Android Telegram in-app WebView now shows a friendly "open in system browser" prompt
- Stream probing detects DRM markers in HLS manifests and warns on missing DRM config
🐛 Bug Fixes
- Fixed "load more" button animation not syncing with card list on tab switch
🔄 What's Changed
Full Changelog: v1.1.1...v1.2.0
Downloads
- Admin sidebar collapses to a
-
released this
2026-05-22 23:07:54 +10:00 | 9 commits to main since this release🐛 Bug Fixes
- Fixed push jobs being deleted from the database during a full stack restart (
docker compose down && up) - jobs now survive unexpected ffmpeg exits (SRS going down, connection dropped) and are automatically resumed on next container start; a job record is only removed when the user explicitly stops it or the file finishes playing normally
🔄 What's Changed
Full Changelog: v1.1.0...v1.1.1
Downloads
- Fixed push jobs being deleted from the database during a full stack restart (
-
released this
2026-05-22 22:07:55 +10:00 | 10 commits to main since this release✨ What's New
📁 Local Push & File Browser
- Introduced a file browser in the admin panel for managing and pushing local video files
- Per-file RTMP push modal with random stream key generator and responsive sizing
- Folder multi-file push: assign independent stream keys per file, batch start/stop, inline live status with
real-time duration counter - Push status is now shown inline on each file row; replaced the top push-jobs area with a dedicated job detail
modal (copy address, stop, add to stream) - Publish-archive button on file and folder rows — opens the stream editor prefilled with signed playback URLs
- File browser supports breadcrumb navigation, search, directory memory across view switches,
..parent row, and
automatic filtering of hidden/system folders - "Add to existing stream" dropdown available at file rows, folder push modal, and job detail modal
🎬 VOD / Video Serving
- New
/video/endpoint with HMAC-signed URLs and HTTP Range support (seek-capable playback without login) - Folder publish-archive recursively includes all subfolders via directory walk
🎨 Admin UX
- Replaced all native
alert()calls with themed Toast notifications (success / error / info / warn,
auto-dismiss, dark mode aware) - Replaced all native
confirm()calls with a custom modal dialog - Custom overlay scrollbar for admin and index pages: no layout shift, theme-colored, auto-hides after 1.5s,
draggable - Fixed background diagonal stripe drifting between pages with
background-attachment: fixed - Added drag handle for viewport config rows in the stream editor
- Added pagination and real-time search to the hidden push address mapping table
- Added pagination to the stream analytics detail table; SSE live refresh no longer resets the current page
- View URL hash renamed:
#push→#local,#obs→#remote
🌐 Public Index Page
- Stream list now loads in viewport-sized batches; initial count is calculated from actual layout dimensions
- "Load more" button in ghost outline style consistent with existing tab buttons
- New cards animate in with a staggered fade + slide on each load-more click
⚙️ Infrastructure
- Dockerfile: added ffmpeg, optimized layer caching by separating
requirements.txtcopy docker-compose.yml: addedRTMP_HOST,VIDEOS_DIRSenv vars and videos volume mount- CI: build and push now runs against the internal registry to avoid Cloudflare upload size limits
🐛 Bug Fixes
- Fixed 500 error on stream creation caused by psycopg3
dict_rownot supporting integer subscripts - Fixed language toggle button
title/aria-labelnot updating on language switch - Fixed API Keys list not re-rendering after language switch
- Fixed admin stream count per tab showing the combined LIVE + ARCHIVE total instead of per-tab count
- Replaced em dash in token hint text with a hyphen
🔄 What's Changed
Full Changelog: v1.0.0...v1.1.0
Downloads
-
released this
2026-05-20 15:26:05 +10:00 | 13 commits to main since this releaseInitial release
Downloads