No description
  • TypeScript 46.2%
  • Python 38.6%
  • CSS 8.3%
  • HTML 6.4%
  • Shell 0.3%
Find a file
MotWakorb ea704d7588
Merge pull request #34 from scottrobertson/fix/probe-batch-size-skip-filter
Apply probe_batch_size after skip-recently-probed filter
2026-02-21 11:54:08 -06:00
.beads v0.12.2: Logo Manager fixes — upload, search, pagination, layout 2026-02-08 16:38:33 +00:00
.claude v0.8.4-0009: Fix normalization engine to apply custom tags before quality suffixes 2026-01-20 08:42:12 -06:00
.github Add global log injection sanitizer (CWE-117) 2026-02-18 19:12:37 +00:00
.zap Fix IaC and DAST security scan failures 2025-12-31 13:49:48 -06:00
backend Apply probe_batch_size after skip-recently-probed filter 2026-02-21 15:29:02 +00:00
docs v0.8.5-0065: Add CSS smoke test and extraction workflow docs 2026-01-25 01:54:33 +00:00
e2e v0.14.0-0009: Add URL hash routing for tab navigation 2026-02-20 18:56:37 +00:00
frontend v0.13.1: Fix 22 CodeQL code scanning alerts 2026-02-20 19:22:04 +00:00
scripts v0.8.5-0065: Add CSS smoke test and extraction workflow docs 2026-01-25 01:54:33 +00:00
.env.example Add Enhanced Channel Manager with full CRUD and searchable dropdowns 2025-12-28 23:04:11 -06:00
.gitattributes Add Enhanced Channel Manager with full CRUD and searchable dropdowns 2025-12-28 23:04:11 -06:00
.gitignore Remove user guide screenshots containing PII 2026-02-13 20:18:21 +00:00
AGENTS.md Add Enhanced Channel Manager with full CRUD and searchable dropdowns 2025-12-28 23:04:11 -06:00
CHANGELOG.md v0.3.1: Multi-group bulk channel creation and bugfixes 2026-01-02 21:35:23 -06:00
check-container-commands.txt v0.7.3-0114: Fix FastAPI optional request parameter type hint 2026-01-16 11:02:38 -06:00
check-container.sh v0.7.3-0114: Fix FastAPI optional request parameter type hint 2026-01-16 11:02:38 -06:00
CLAUDE.md v0.13.0-0002: Add Renumber All Groups feature 2026-02-18 23:54:02 +00:00
docker-compose.yml v0.2.1: Fix port and config persistence 2025-12-31 21:57:49 -06:00
Dockerfile v0.12.2: Logo Manager fixes — upload, search, pagination, layout 2026-02-08 16:38:33 +00:00
Dockerfile.dev v0.8.7-0026: Migrate build pipeline from pip to uv 2026-01-29 23:12:03 +00:00
LICENSE Initial commit 2025-12-28 20:33:28 -06:00
package-lock.json v0.8.3-0001: Add testing infrastructure 2026-01-19 23:19:32 +00:00
package.json v0.8.5-0065: Add CSS smoke test and extraction workflow docs 2026-01-25 01:54:33 +00:00
playwright.config.ts v0.8.5-0034: Add E2E modal visual regression testing framework 2026-01-23 16:42:34 +00:00
README.md v0.13.1: Bump version for release 2026-02-20 19:03:39 +00:00
rebuild-instructions.md v0.7.3-0110: Fix delete orphaned groups Pydantic validation 2026-01-16 10:05:35 -06:00
swagger.json v0.7.10048: Add printable channel guide feature 2026-01-13 19:36:31 -06:00
USER_GUIDE.md v0.13.0-0005: Add Debug Logging reference section to User Guide 2026-02-19 01:57:49 +00:00

Enhanced Channel Manager

A professional-grade web interface for managing IPTV configurations with Dispatcharr. Features a tab-based interface for channel management, EPG data, logos, and more. Built with React + TypeScript frontend and Python FastAPI backend.

Application Tabs

  • M3U Manager - Full M3U account management with linked accounts and group synchronization
  • M3U Changes - Track and review all changes detected in M3U playlists (groups added/removed, streams added/removed)
  • EPG Manager - Manage EPG sources with drag-and-drop priority ordering
  • Channel Manager - Full-featured channel and stream management with split-pane layout
  • Guide - TV Guide with EPG grid view showing program schedules
  • Logo Manager - Logo management with search, upload, and URL import
  • Auto-Creation - Rules-based automation pipeline for automatic channel creation, stream merging, and orphan management
  • FFMPEG Builder - Visual FFmpeg command builder with Simple (IPTV wizard) and Advanced modes, IPTV presets, saved profiles, and Dispatcharr integration
  • Journal - Activity log tracking all changes to channels, EPG, and M3U accounts
  • Stats - Live streaming statistics, M3U connection counts, bandwidth tracking, and charts
  • Settings - Configure Dispatcharr connection, channel defaults, stream probing, scheduled tasks, alert methods, authentication, and appearance

Features

Authentication (v0.11.5)

ECM includes a comprehensive authentication system to secure access to your channel management:

  • First-Run Setup - On first launch, create an administrator account through a setup wizard
  • Local Authentication - Username/password authentication with secure bcrypt password hashing
  • Dispatcharr SSO - Single sign-on using your existing Dispatcharr credentials
  • Account Linking - Link multiple authentication methods to a single user account (e.g., local + Dispatcharr)
  • Password Reset - Email-based password reset with secure time-limited tokens (requires SMTP configuration)
  • CLI Password Reset - Reset passwords from the command line when locked out (see Utility Scripts)
  • User Management - Admin panel for managing user accounts, roles, and access
  • Session Management - JWT-based sessions with automatic token refresh

Authentication Providers

  • Local - Create and manage local user accounts with password authentication
  • Dispatcharr - Authenticate using your Dispatcharr server credentials (SSO)

User Management (Admin)

Administrators can manage users through Settings → Users:

  • View all user accounts with their roles and status
  • Edit user email, display name, admin status, and active status
  • Activate/deactivate user accounts
  • Delete user accounts (soft delete - deactivates the account)

Password Reset

When SMTP is configured in Settings → Email Settings:

  • Users see "Forgot password?" link on the login page
  • Password reset emails contain a secure link valid for 1 hour
  • Professional HTML email template with fallback plain text
  • Security: Always returns success to prevent email enumeration

CLI Password Reset

When locked out or SMTP is not configured, reset passwords from the command line:

# Interactive mode (lists users, prompts for password)
docker exec -it enhancedchannelmanager python /app/reset_password.py

# Non-interactive (for scripting)
docker exec enhancedchannelmanager python /app/reset_password.py -u admin -p 'NewPass123'

# Skip password strength validation
docker exec enhancedchannelmanager python /app/reset_password.py -u admin -p 'simple' --force

Auto-Creation Pipeline (v0.12.0)

A rules-based automation engine for automatic channel creation, stream merging, and lifecycle management:

Rule Builder

  • Create Rules - Define automation rules with conditions, actions, and priority ordering
  • Rule Priority - Drag-and-drop reordering to control execution order
  • Enable/Disable - Toggle individual rules without deleting
  • Duplicate Rules - Clone rules as a starting point for new rules
  • Run on M3U Refresh - Optionally auto-execute rules when M3U accounts refresh
  • Stop on First Match - Stop evaluating further rules when a stream matches
  • Normalize Names - Apply name normalization during processing
  • YAML Import/Export - Share and version control rule definitions

Conditions

Build complex matching logic with AND/OR connectors:

  • Stream Name - Contains, matches (regex), starts/ends with
  • Stream Group - Contains, matches (regex)
  • TVG ID - Exists/not exists, matches pattern
  • Logo - Exists/not exists
  • M3U Account - Filter by specific M3U account
  • Quality - Minimum/maximum resolution (2160p, 1080p, 720p, 480p, 360p)
  • Codec - Filter by video codec (H.264, HEVC, etc.)
  • Channel Exists - Check if channel already exists (by name, regex, or group)
  • Normalized Match in Group - Check if a stream's normalized name matches any channel in a specified channel group (strips country prefixes and applies normalization engine)
  • Normalized Name (Global) - Check if a stream's normalized name matches any channel across all groups
  • Normalized Name (Not In) - Check if a stream's normalized name does NOT match any channel in a specified group
  • Date Expansion in Regex - Regex conditions can include date patterns that auto-expand to match current dates (contributed by @lpukatch)

Actions

Define what happens when conditions match:

  • Create Channel - Template-based naming with variables ({stream_name}, {stream_group}, {quality}, {provider}, etc.)
  • Create Group - Automatically create channel groups with template naming
  • Merge Streams - Combine multiple streams into a single channel with quality preference ordering, optional per-provider stream limit, and multi-stage auto-lookup (exact name → core-name fallback → call sign fallback → deparen/word-prefix matching)
  • Remove From Channel - Remove a stream from its current channel during auto-creation
  • Set Stream Priority - Set stream priority/weight within a channel
  • Assign Logo/EPG/Profile - Automatically assign channel metadata
  • Set Channel Number - Auto-assign or specify channel numbering (including ranges)
  • Set Variable - Define reusable variables with regex extraction for use in templates
  • Name Transform - Apply regex find/replace to channel names
  • If Exists Behavior - Skip, merge (create if new), merge only (existing only), update, or use existing when channels already exist

Execution

  • Dry Run Mode - Preview all changes before applying
  • Execute Mode - Apply changes with full audit trail
  • Run Single Rule - Execute or dry-run a specific rule in isolation
  • Rollback - Undo a completed execution to restore previous state
  • Execution History - View past runs with duration, match counts, and created/updated/merged/skipped counts
  • Running Indicator - Live "Running" status in execution history while a pipeline is executing
  • Execution Log - Per-stream granular log showing condition evaluation, matched rules, action results, normalization context, and merge guidance with filter chips for quick navigation

Smart Stream Handling

  • Quality-Based Sorting - Sort streams within channels by resolution (highest first)
  • Probe on Sort - Optionally probe unprobed streams for resolution data before sorting
  • Multi-Criteria Sort - Sort by stream name, natural name, group, quality, or stream name (regex)
  • Stream Name (Regex) Sort - Sort matched streams by a regex capture group extracted from the stream name (e.g., sort by date pattern (\d{4}-\d{2}-\d{2}))
  • Auto-Find Channels - Merge streams action with target: auto automatically finds existing channels using a multi-stage lookup: normalized name → core-name fallback (stripping tags) → call sign fallback → deparen and word-prefix matching. For example, "US: Discovery" finds channel "113 | Discovery", and "ESPN (East)" finds "ESPN"
  • User Settings Integration - Honors channel numbering, default profile, timezone preference, and auto-rename settings

Orphan Reconciliation

Automatically manage channels that no longer match any rule:

  • Delete - Remove orphaned channels entirely
  • Move to Uncategorized - Preserve channels by moving them out of managed groups
  • Delete and Cleanup Groups - Delete channels and remove now-empty groups
  • None - Skip reconciliation (preserve all channels)

FFMPEG Builder (v0.12.5)

A visual, form-based interface for constructing FFmpeg transcoding and streaming commands without manual command-line syntax. Designed for IPTV streaming workflows with support for any FFmpeg use case.

Two Operating Modes

  • Simple Mode (Default) - Three-step IPTV wizard: Source → Processing → Output with pre-configured options
  • Advanced Mode - Full section-by-section control over all FFmpeg parameters

Input Source Configuration

  • Input Types - URL (network streams) or Pipe (process input)
  • URL Placeholder - {streamUrl} for Dispatcharr runtime substitution
  • Format Override - Auto-detect or force format (MPEGTS, HLS, MP4, Matroska, FLV)
  • Hardware Acceleration - CUDA (NVIDIA), QSV (Intel), VAAPI (AMD/Intel Linux), or CPU-only
  • Device Selection - GPU device path selection for VAAPI

Video Codec Settings

  • Software Codecs - libx264, libx265, libvpx-vp9, libaom-av1, libsvtav1, copy (passthrough)
  • Hardware Codecs - h264_nvenc, hevc_nvenc (NVIDIA), h264_qsv, hevc_qsv (Intel), h264_vaapi, hevc_vaapi
  • Rate Control - CRF, CBR, VBR, CQ (NVIDIA), QP, Global Quality (QSV)
  • Encoding Parameters - Preset, bitrate, CRF value, profile, level, pixel format, tune
  • Keyframe Control - GOP size, minimum interval, scene change threshold, B-frames

Audio Codec Settings

  • Codecs - Copy (passthrough), AAC, AC3 (Dolby Digital), EAC3 (Dolby Digital Plus)
  • Parameters - Bitrate, sample rate, channels (mono/stereo/5.1/7.1), channel layout, AAC profile

Video & Audio Filters

  • Video Filters - Scale, FPS, deinterlace, format conversion, hardware upload, custom expressions
  • Audio Filters - Volume, loudness normalization (LUFS), resample, custom expressions
  • Filter Chain - Ordered list with per-filter enable/disable toggles

Stream Mapping

  • Select specific video, audio, or subtitle tracks from multi-stream inputs
  • Map by type (video:0, audio:0, subtitle:0) or include all streams

Output Configuration

  • Output Paths - File, pipe:1 (stdout for Dispatcharr piping), or device
  • Container Formats - MPEG-TS (IPTV standard), HLS (segmented), DASH (adaptive)
  • Container Options - Format-specific settings (mpegts_flags, hls_time, etc.)

Command Preview

  • Plain View - Full command text with copy-to-clipboard
  • Annotated View - Human-readable explanation of every flag with interactive tooltips
  • Warning Indicators - Alerts for codec/filter incompatibilities
  • Push to Dispatcharr - Create a Dispatcharr stream profile directly from the builder

IPTV Presets

8 built-in optimized templates:

  • Pass-through, IPTV Standard (H.264), IPTV HD (NVIDIA), IPTV HD (Intel QSV)
  • Low-Latency AC3, HLS Output, 1080p/AAC, 4K/AC3

Saved Profiles

  • Save builder configurations for reuse
  • Load profiles with one click
  • Convert profiles to Dispatcharr stream profiles

ECM Integration

  • Save configurations as channel profiles applied to channels
  • Scope profiles to all channels, specific groups, or individual channels
  • Enable/disable profiles without deletion

Stream Probing

  • Probe input sources to detect codec, resolution, framerate, bitrate per stream
  • View container format, duration, and file size
  • Use probe results to inform codec and filter decisions

M3U Manager

  • Full CRUD Operations - Create, edit, and delete M3U accounts
  • Account Types - Support for Standard M3U, XtreamCodes, and HD Homerun
  • XC Non-Credential Editing - Edit XtreamCodes account settings (name, max streams, etc.) without re-entering the password
  • HD Homerun Simplified Setup - Just enter the IP address; the lineup URL is auto-constructed
  • Linked M3U Accounts - Link multiple accounts (e.g., same provider with different regions) so group enable/disable changes cascade automatically
  • Sync Groups - One-click sync of enabled groups across all linked accounts using Union (OR) logic
  • Manage Groups Modal - Enable/disable groups per account, configure auto-sync settings
  • M3U Priority - Set priority order for each M3U account (used by smart sort to order streams)
  • Natural Sorting - Accounts sorted with Standard M3U first, XtreamCodes second, then natural sort by name
  • Hide Disabled Filter - Optionally hide disabled groups in the manage groups modal
  • Auto-Refresh - New accounts automatically refresh after creation (no "Pending Setup" state)
  • Server Group Filtering - Filter M3U accounts by server group

M3U Change Tracking

  • Automatic Change Detection - Detects changes every time an M3U account is refreshed
  • Group Changes - Track when groups are added or removed from M3U playlists
  • Stream Changes - Monitor streams added or removed within existing groups
  • Change History - Full searchable history of all detected changes
  • Filtering - Filter changes by M3U account, change type (group/stream add/remove), and enabled status
  • Sorting - Sort by time, account, type, group name, count, or enabled status
  • Summary Statistics - Dashboard cards showing total groups/streams added and removed
  • Time Range Filter - View changes from last 24 hours, 3 days, 7 days, 30 days, or 90 days
  • Expandable Details - Click any change row to see full details including stream names
  • Enabled/Disabled Tracking - See whether affected groups were enabled or disabled in the M3U
  • M3U Change Monitor Task - Background task polls for external changes made in Dispatcharr
  • M3U Digest Emails - Configure email notifications for M3U changes (immediate, hourly, daily, weekly)

Channel Profiles

  • Profile Management - View and manage stream transcoding profiles
  • Default Profile - Set a default channel profile in Settings
  • Profile Selection - Choose profiles when creating channels (single or bulk)
  • Profile Assignment - Assign profiles to existing channels

Channel Management

  • Create, Edit, Delete Channels - Full CRUD operations for channel management
  • Channel Numbering - Assign channel numbers (including decimal numbers like 4.1)
  • Auto-Rename - Optionally update channel names when numbers change (e.g., "101 | Sports Channel" becomes "102 | Sports Channel")
  • Channel Groups - Organize channels into groups for better organization
  • Group Channel Range - Each group header displays the channel number range (e.g., #100150)
  • Delete Groups - Delete channel groups with option to also delete contained channels
  • Delete Orphaned Groups - Automatically detect and remove channel groups that have no streams, no channels, and no M3U association (groups left behind after M3U account deletions)
  • Bulk Delete - Select multiple channels and delete them at once
  • Search & Filter - Search channels by name, filter by one or more groups
  • Inline Stream Display - View assigned streams directly in the channel list
  • Copy Channel URL - Click copy button on any channel to copy its Dispatcharr proxy stream URL

Stream Management

  • View Available Streams - Browse all streams from your M3U providers
  • Assign Streams to Channels - Drag-and-drop or click to add streams
  • Stream Priority - Reorder streams within a channel (order determines playback priority)
  • Multi-Select - Select multiple streams and bulk-add to channels
  • Filter by M3U Account - Filter streams by M3U account
  • Filter by Group - Filter streams by their source group
  • Copy Stream URL - Click copy button on any stream to copy its direct URL
  • Stream Preview - Preview streams directly in the browser before assigning to channels
    • MPEG-TS playback using mpegts.js library
    • Three preview modes: Passthrough (direct), Transcode (AAC audio), Video Only (no audio)
    • Mode indicator shows current preview mode in the modal
    • Alternative options: Open in VLC, Download M3U, Copy URL

Channel Preview

  • Channel Output Preview - Preview channels as they would appear to clients through Dispatcharr
    • Tests the actual Dispatcharr proxy stream output
    • Verifies channel configuration is working correctly
    • Same preview modes as stream preview (Passthrough, Transcode, Video Only)
    • JWT authentication handled automatically

EPG Management

  • Add EPG Sources - Configure XMLTV URLs or Schedules Direct accounts
  • Dummy EPG Sources - Create custom EPG entries for channels without guide data
    • Configure title patterns, descriptions, and colors
    • Set custom time slots and durations
    • Preview how dummy EPG will appear before saving
  • Drag-and-Drop Priority - Reorder EPG sources to set matching priority (higher priority sources take precedence)
  • Source Status - View status of each source (success, error, fetching, parsing)
  • Refresh Sources - Manually refresh individual sources or all at once
  • Enable/Disable - Toggle sources active/inactive without deleting
  • Channel Count - See how many EPG channels each source provides
  • Last Updated - Track when each source was last refreshed

TV Guide

  • EPG Grid View - Full program guide showing all channels with their schedules
  • Now-Playing Highlight - Currently airing programs are highlighted with accent color
  • Current Time Indicator - Red vertical line shows the current time position
  • Channel Profile Filter - Filter the guide by channel profile to see only specific channels
  • Date Navigation - Browse programs from past days through upcoming week
  • Time Navigation - Jump to any hour of the day
  • Click-to-Edit - Click any channel in the guide to edit its metadata (logo, EPG, name, etc.)
  • Auto-Scroll - Guide automatically centers on current time when viewing today
  • Program Details - Hover over programs to see full title, subtitle, and time range

Bulk Channel Creation

  • Channel Profile Selection - Choose which stream profile to apply to all created channels
  • Create from Stream Group - Create multiple channels from an entire M3U stream group at once
  • Multi-Group Creation - Select and drag multiple stream groups at once to create channels from all of them
    • Separate Groups Mode - Create a separate channel group for each stream group with independent naming and numbering
    • Combined Mode - Merge all streams from selected groups into a single channel group
    • Per-Group Settings - Customize channel group name and starting channel number for each group
    • Group Preview - See channel previews organized by group with calculated channel numbers
    • Drag Multiple Groups - Select multiple groups in the streams pane and drag them together onto the channels pane
  • Auto-Assign Streams - Each created channel automatically gets its source stream assigned
  • Auto-Assign Logos - Channels inherit logos from their source streams automatically
  • Merge Duplicate Names - Streams with identical names from different M3U providers are merged into a single channel with all streams assigned (provides multi-provider redundancy)
  • Quality Variant Normalization - Streams with quality suffixes (FHD, UHD, HD, SD, 4K, 1080P, etc.) are automatically merged into one channel
  • Smart Stream Ordering - Streams are automatically ordered by quality (UHD/4K → FHD/1080p → HD/720p → SD) and interleaved by provider for failover redundancy (e.g., Provider1-FHD, Provider2-FHD, Provider1-HD, Provider2-HD)
  • Tag-Based Normalization - Integrated Quick Tag Manager lets you customize which tags to strip:
    • Toggle built-in tags across 5 groups (Country, League, Network, Quality, Timezone)
    • Add custom tags with prefix/suffix/both mode on the fly
    • Settings default to your configured preferences, adjustable per-operation
  • Network Prefix Stripping - Strip network prefixes (e.g., "CHAMP | Queens Park Rangers" → "Queens Park Rangers") to merge streams from different networks
  • Network Suffix Stripping - Strip network suffixes (e.g., "ESPN (ENGLISH)" → "ESPN", "HBO BACKUP" → "HBO") to clean up channel names
  • East/West Timezone Preference - When streams have regional variants (e.g., "Movies Channel" and "Movies Channel West"), choose to create East feeds only, West feeds only, or keep both as separate channels
  • Country Prefix Options - Choose to remove country prefixes (e.g., "US: Sports Channel" → "Sports Channel") or keep them with normalized formatting (e.g., "US: Sports Channel" → "US | Sports Channel") with configurable separator
  • Channel Number Prefix - Option to prepend channel numbers to names with configurable separator (-, :, or |), e.g., "100 | Sports Channel"
  • Prefix Order Choice - When both country and channel number are enabled, choose the order: "Number first" (100 | US | Sports Channel) or "Country first" (US | 100 | Sports Channel)
  • Custom Starting Number - Choose the starting channel number for sequential assignment
  • Flexible Group Options - Create in same-named group, select existing group, or create new group
  • Staged Group Creation - New channel groups are staged with channels and only created on commit (prevents orphaned groups)
  • Preview Before Creating - See a preview of channels that will be created with merged stream counts
  • Edit Mode Integration - Requires edit mode, button visible on stream group headers on hover

Edit Mode (Staged Editing)

A unique workflow that lets you stage changes locally before committing to the server:

  • Enter Edit Mode - Start a new editing session
  • Stage Changes - All edits are queued locally (including deletes)
  • Preview Changes - See pending operations count
  • Local Undo/Redo - Undo/redo within your edit session (Ctrl+Z / Ctrl+Shift+Z)
  • Undoable Deletes - Channel and group deletions can be undone before committing
  • Bulk Delete with Groups - When deleting all channels in a group, option to delete the empty group too
  • Batch Operations - Group related changes together
  • Commit or Discard - Apply all changes at once or discard everything
  • Exit Dialog - Review a detailed summary of all changes before committing (channel number changes, name changes, streams added/removed, new channels, deleted channels, new groups, deleted groups)
  • Modified Indicators - Visual highlighting of channels with pending changes

Drag and Drop

  • Add Streams - Drag streams onto channels to add them
  • Bulk Add - Drag multiple selected streams at once
  • Create from Stream - Drag a stream onto a group header (not a channel) to create a new channel with the stream name pre-populated
  • Reorder Channels - Drag channels to reorder within a group (edit mode)
  • Move Between Groups - Drag channels to different groups with confirmation modal
  • Ungroup Channels - Drag channels to the "Uncategorized" group at the top to remove them from their group
  • Reorder Streams - Drag to reorder streams within a channel
  • Visual Feedback - Drop indicators and highlighting

Context Menu (Right-Click)

  • Move channels to... - Right-click selected channels to show a submenu of groups to move them to
  • Create new group and move - Right-click selected channels to create a new group and move them there
  • Works in edit mode when one or more channels are selected

Multi-Select Channels

  • Ctrl/Cmd + Click - Toggle individual channel selection
  • Shift + Click - Select range of channels
  • Visual Indicators - Selection checkboxes and highlighting
  • Bulk Operations - Move or modify multiple channels at once
  • Normalize Names - Standardize selected channel names with title case and league prefix formatting (e.g., "NFL ARIZONA CARDINALS" → "NFL: Arizona Cardinals")

Sort & Renumber

  • Alphabetical Sorting - Sort channels within a group A-Z
  • Sequential Renumbering - Assign sequential numbers starting from any value
  • Renumber All Groups - Bulk renumber channels across all groups at once from the group management dropdown
  • Smart Name Sorting - Option to ignore channel numbers in names when sorting (e.g., "101 | Sports Channel" sorts as "Sports Channel")
  • Preview - See the result before applying
  • Batch Undo - Entire sort/renumber operation undoes as one action

Logo Management

  • View Logos - Browse available logos with previews
  • Assign Logos - Assign logos to channels
  • Search Logos - Search logos by name with client-side filtering
  • Add from URL - Create logos from external URLs
  • Upload Files - Upload logo files directly to Dispatcharr
  • Usage Tracking - See how many channels use each logo
  • Pagination - Configurable page sizes (25, 50, 100, 250) with page navigation
  • Full Logo Loading - Automatically paginates through Dispatcharr's API to load all logos

EPG Integration

  • Multiple EPG Sources - Support for multiple EPG data sources
  • Search EPG Data - Search for programs by name
  • Assign EPG - Map EPG data to channels
  • Bulk EPG Assignment - Assign EPG to multiple selected channels at once with intelligent matching:
    • Country-Aware Matching - Detects country from stream names (e.g., "US: Sports Channel") and matches to appropriate EPG entries (e.g., SportsChannel.us not SportsChannel.mx)
    • Smart Call Sign Matching - Prefers EPG entries where the call sign matches the channel name (e.g., NOSEY over VIZNOSE for "Nosey" channel)
    • Call Sign Scoring - Rates call sign matches: exact match > starts with channel name > common prefix > no match
    • Balanced HD Preference - Prefers HD EPG entries but not when a non-HD variant has a significantly better call sign match
    • Regional Variant Handling - Intelligent matching for regional variants including East, West, Pacific, Central, Mountain, and compound variants like WestCoastFeed
    • Special Character Support - Properly handles channels with special characters like "E!" or "MGM+"
    • Auto-Match - Channels with a single matching EPG entry are automatically assigned
    • Conflict Resolution - When multiple EPG entries match, review and select the correct one with card-based navigation
    • Search Filter - Filter EPG options within conflict resolution
    • Unmatched List - See which channels couldn't be matched for manual assignment later
    • Batch Undo - All assignments from a bulk operation undo as a single action
  • TVG ID Support - Set TVG IDs for Kodi/XMLTV compatibility
  • TVC Guide Station ID - Support for TVC guide integration

Stream Profiles

  • View Profiles - See available stream transcoding profiles
  • Assign to Channels - Select which profile each channel uses
  • Profile Metadata - View profile name, command, and parameters

Stats (Live Dashboard)

Real-time monitoring of your streaming infrastructure:

  • Active Channels - See all currently streaming channels with live data
  • M3U Connection Counts - Monitor connections per M3U account (current/max)
  • Connected Clients - Track total connected client count
  • Per-Channel Metrics - FFmpeg speed, FPS, bitrate, duration, and total bytes
  • Speed Indicators - Color-coded speed display (green ≥0.98x, yellow ≥0.90x, red <0.90x)
  • Historical Charts - Expandable per-channel charts showing speed and bandwidth over time
  • Bandwidth Summary - Daily bandwidth tracking with 7-day history chart
  • Top Watched Channels - Leaderboard of most-watched channels by watch time or view count
  • System Events - Live event feed (channel starts/stops, client connections)
  • Auto-Refresh - Configurable refresh interval (10s, 30s, 1m, 5m) or manual refresh
  • Visibility-Aware - Polling pauses when tab is hidden to save resources

Enhanced Stats (v0.11.0)

Advanced analytics and channel popularity tracking:

  • Unique Viewer Tracking - Count unique connecting IPs per channel over configurable time periods
  • Per-Channel Bandwidth - Track bandwidth consumption by channel with breakdown by connections and watch time
  • Popularity Scoring - Weighted algorithm calculates channel popularity based on:
    • Watch count (default 30% weight)
    • Watch time (default 30% weight)
    • Unique viewers (default 25% weight)
    • Bandwidth usage (default 15% weight)
  • Popularity Rankings - View channels ranked by popularity score with pagination
  • Trend Analysis - Track popularity changes over time:
    • Trending Up - Channels gaining popularity (>10% increase)
    • Trending Down - Channels losing popularity (>10% decrease)
    • Stable - Channels with consistent viewership
  • Trend Indicators - Visual arrows and percentage changes on channel rankings
  • Period Selector - View stats for 7, 14, or 30 day periods
  • On-Demand Calculation - Trigger popularity score recalculation manually
  • Watch History Log - Detailed log of all channel viewing sessions with IP addresses and durations

Journal (Activity Log)

Track all system activity with filtering and search:

  • Activity Categories - Filter by Channel, EPG, M3U, or Watch events
  • Action Types - Create, Update, Delete, Refresh, Start, Stop actions
  • Time Range Filter - Filter entries by time period (1h, 6h, 24h, 7d, 30d, all)
  • Search - Full-text search across all journal entries
  • Entry Details - View detailed metadata for each entry
  • Statistics - Summary counts by category and action type
  • Pagination - Efficient loading of large activity logs
  • Color-Coded Actions - Visual distinction between creates, updates, and deletes

Global History (Undo/Redo)

Separate from edit mode, provides session-wide history:

  • Undo/Redo - Revert or reapply changes (Ctrl+Z / Ctrl+Shift+Z)
  • Save Points - Create named checkpoints to revert to later
  • Change Tracking - See descriptions of recent changes

Settings

The Settings tab features sidebar navigation with multiple sections:

General Settings

  • Dispatcharr Connection - Configure server URL, username, and password
  • Test Connection - Verify connectivity before saving

Stream Name Normalization (Tag-Based)

Powerful tag-based system for cleaning and normalizing stream names during bulk channel creation:

  • 5 Built-in Tag Groups - Country (US, UK, CA, etc.), League (NFL, NBA, NHL, etc.), Network (CHAMP, PPV, etc.), Quality (FHD, UHD, HD, SD, etc.), Timezone (EST, PST, EAST, WEST, etc.)
  • Toggle Individual Tags - Enable or disable specific built-in tags within each group
  • Custom Tags - Add your own tags with mode selection:
    • Prefix only - Strip when tag appears at start of name
    • Suffix only - Strip when tag appears at end of name
    • Any position - Strip tag wherever it appears
  • Expandable Groups - Click to expand each tag group and see/manage individual tags
  • Summary Stats - See counts of active, disabled, and custom tags at a glance
  • Reset to Defaults - One-click restore of default tag configuration
  • Quick Tag Manager - Compact tag editor also available in bulk create modal for per-operation customization

Normalization Engine (Rule-Based)

Advanced rule-based normalization system for granular control over stream name transformations:

  • Custom Rules - Create rules with flexible conditions and actions
  • Compound Conditions - Build complex logic with AND/OR/NOT operators
  • Condition Types - Contains, starts with, ends with, equals, regex match
  • Action Types - Remove prefix/suffix, replace text, regex replace, set value
  • Rule Ordering - Drag-and-drop to set execution priority
  • Enable/Disable Rules - Toggle individual rules without deleting
  • Testing Panel - Test rules against sample names with real-time preview
  • Normalize on Create - Automatically apply normalization when creating channels

Stream Probing

Automated stream health checking:

  • Enable/Disable - Toggle automatic stream probing
  • Schedule Time - Set the daily probe start time (e.g., 03:00 for off-peak)
  • Interval - Hours between probe cycles (default 24h)
  • Batch Size - Number of concurrent probes (default 10)
  • Timeout - Seconds to wait for each stream response (default 30s)
  • Channel Group Filter - Select which channel groups to include in probing
  • Manual Probe - Trigger an immediate probe of all streams
  • Probe Progress - Real-time progress bar with success/failed/skipped counts
  • Probe History - View past probe results with timestamps and statistics
  • Auto-Reorder After Probe - Automatically reorder streams by quality and status after scheduled probes complete
  • Parallel Probing - Streams from different M3U accounts probe concurrently
  • Max Concurrent Probes - Configure simultaneous probe limit (1-16) with guidance based on provider limits
  • Profile-Aware Probing - Distributes probe connections across M3U profiles within an account, respecting per-profile connection limits and rewriting stream URLs for each profile
  • Profile Distribution Strategy - Choose how probes are spread across profiles (only shown when an account has multiple profiles):
    • Fill First - Use default profile to capacity before spilling over to others
    • Round Robin - Rotate evenly across profiles for balanced usage
    • Least Loaded - Pick the profile with the most remaining headroom for maximum throughput
  • Per-Account Ramp-Up - Gradually increases probe load per M3U account, starting conservatively and ramping up to avoid triggering provider rate limits
  • Configurable Retry Settings - Configure retry count and behavior for probe failures
  • Expanded Retry Coverage - Automatically retries on transient HTTP 200 failures, I/O errors, and "Invalid data found" errors
  • Rate Limit Detection - Automatic backoff when providers return 429 errors, with UI notification
  • M3U Connection Awareness - Respects M3U max connection limits during probing
  • Stale Group Alerts - Notifications when channel groups have outdated probe data
  • Probe Logging - Detailed probe execution logs for troubleshooting
  • Persistent History - Probe results saved to /config/probe_history.json and persist across container restarts
  • Failed Stream Indicators - Visual error icons on channels and groups that contain failed/timeout streams

Stream Strikeout System

Track and manage streams with repeated probe failures:

  • Consecutive Failure Tracking - Tracks consecutive probe failures per stream with a configurable strike threshold
  • Strike Badges - Visual strike count badges on streams in the Channel Manager
  • Maintenance UI - Review all struck-out streams in Settings → Maintenance with stream details and failure counts
  • Bulk Remove - One-click removal of struck-out streams from all channels they're assigned to

Stream Sort Priority

Configure how streams are automatically sorted within channels:

  • Drag-and-Drop Reordering - Arrange sort criteria in priority order
  • Enable/Disable Criteria - Toggle individual sort criteria on/off
  • Available Criteria:
    • Resolution - Supports any resolution (2160p → 1440p → 1080p → 720p → 576p → 540p → 480p → etc.)
    • Bitrate (higher bitrate first)
    • Framerate (higher FPS first)
    • M3U Priority - Sort by M3U account priority (configurable per-account in M3U Manager)
    • Audio Channels - Sort by audio channel count (7.1 → 5.1 → stereo → mono)
  • Arbitrary Resolution Support - Any resolution ending in 'p' or 'i' is automatically parsed and sorted (e.g., 476p, 544p, 1440p)
  • Deprioritize Failed Streams - Option to automatically sort failed/dead streams to the bottom
  • Visual Rank Badges - See sort priority numbers at a glance

Stream Preview

Configure how streams and channels are previewed in the browser:

  • Preview Mode - Choose how streams are processed for browser playback:
    • Passthrough - Direct proxy, fastest but may fail on AC-3/E-AC-3/DTS audio codecs
    • Transcode - FFmpeg transcodes audio to AAC for browser compatibility (recommended)
    • Video Only - Strip audio entirely for silent quick preview
  • Mode Switching - Change mode anytime; takes effect on next preview
  • Requires FFmpeg - Transcode and Video Only modes require FFmpeg installed in the container (included in official Docker image)

Channel Defaults

Default options applied when using bulk channel creation:

  • Default Channel Profile - Set the default stream profile for new channels
  • Auto-Rename on Number Change - Update channel names when numbers change
  • Include Channel Number in Name - Add number prefix to channel names (e.g., "101 - Sports Channel")
  • Number Separator - Choose hyphen (-), colon (:), or pipe (|) for number prefix
  • Remove Country Prefix - Strip country codes (US, UK, CA, etc.) from names (the bulk create modal also offers a "Keep" option with normalized formatting)
  • Timezone Preference - Default handling for East/West regional variants

These defaults are pre-loaded when opening the bulk create modal, with a "(from settings)" indicator shown.

Authentication

Configure how users authenticate to ECM:

  • Require Authentication - Enable or disable authentication requirement
  • Primary Auth Mode - Choose between Local or Dispatcharr as the primary authentication method
  • Local Authentication - Enable/disable local username/password authentication
  • Dispatcharr Authentication - Enable/disable Dispatcharr SSO authentication

User Management

Admin panel for managing user accounts (requires admin privileges):

  • User List - View all users with username, email, provider, status, and role
  • Edit Users - Modify user email, display name, admin status, and active status
  • Toggle Active Status - Quickly activate or deactivate user accounts
  • Delete Users - Remove user accounts (soft delete)

Appearance

  • Theme - Choose from three themes:
    • Dark (default) - Dark theme for low-light environments
    • Light - Bright theme for well-lit environments
    • High Contrast - Maximum contrast for accessibility
  • Show Stream URLs - Toggle visibility of stream URLs in the UI (useful for screenshots or hiding sensitive information)
  • Hide Auto-Sync Groups - Automatically hide channel groups managed by M3U auto-sync on app load (channels persist in ECM even when auto-sync is later disabled in Dispatcharr)
  • Hide EPG URLs - Hide EPG source URLs in the EPG Manager tab to prevent accidental exposure in screenshots or screen shares
  • Hide M3U URLs - Hide M3U server URLs in the M3U Manager tab to prevent accidental exposure in screenshots or screen shares
  • Gracenote ID Conflict Handling - Control behavior when assigning Gracenote IDs to channels that already have different IDs:
    • Ask (default) - Show conflict dialog to review and choose which channels to overwrite
    • Skip - Automatically skip channels with existing IDs
    • Overwrite - Automatically replace all existing IDs with new ones
  • Frontend Log Level - Set console logging verbosity (Error, Warn, Info, Debug) for troubleshooting

VLC Integration

Open streams directly in VLC media player from your browser:

  • Open in VLC Behavior - Choose how "Open in VLC" buttons work:
    • Try VLC Protocol - Attempt vlc:// protocol, show helper if it fails
    • Fallback to M3U - Try vlc:// first, then download M3U file if it fails
    • Always M3U - Always download M3U file (most compatible)
  • Protocol Handler Scripts - Downloadable scripts to register the vlc:// protocol handler:
    • Windows - PowerShell script with auto-elevation and registry setup
    • Linux - Shell script creating .desktop file for xdg-open
    • macOS - Shell script creating AppleScript handler app
  • Helper Modal - When vlc:// fails, shows OS-specific setup instructions with download buttons
  • M3U Fallback - Download M3U playlist files that open directly in VLC

Scheduled Tasks

Automated background tasks with flexible scheduling:

  • Task Types - EPG Refresh, M3U Refresh, Stream Probe, Database Cleanup
  • Multiple Schedules - Each task can have multiple independent schedules
  • Schedule Types - Interval, Daily, Weekly, Bi-weekly, or Monthly (no cron expressions needed)
  • Per-Schedule Parameters - Each schedule can have its own configuration (batch size, timeout, channel groups, etc.)
  • Smart Defaults - Stream Probe schedules default to values from Settings > Maintenance
  • Timezone-Aware - All schedules respect your configured timezone
  • Real-Time Progress - Live progress bars with success/failed/skipped counts during execution
  • Task History - View execution history with detailed results
  • Manual Run - Trigger any task immediately with one click
  • Enable/Disable - Toggle individual schedules or entire tasks

Alert Methods

Send notifications via external services when tasks complete or errors occur:

  • Discord Webhooks - Send alerts to Discord channels via webhook URL
  • Telegram Bots - Send alerts via Telegram bot API
  • Email (SMTP) - Send email alerts with configurable SMTP settings
  • Multiple Methods - Configure multiple alert methods simultaneously
  • Source Filtering - Control which notification types trigger each alert method
  • Digest/Batching - Batch multiple notifications to reduce alert noise
  • Test Alerts - Send test notifications to verify configuration
  • Failed Stream Details - Task completion alerts include names of failed streams

Notification Center

In-app notification system accessible from the header:

  • Notification Bell - Shows unread count badge
  • Notification History - View past notifications with timestamps
  • Active Task Pinning - Running tasks and stream probes stay pinned to the top of the notification list until they complete
  • Mark as Read - Mark individual or all notifications as read
  • Delete Notifications - Clear individual or all notifications
  • Notification Types - Info, Success, Warning, Error with color coding

Channel List Filters

Fine-tune which groups and channels appear in the channel list:

  • Show/Hide Empty Groups - Toggle visibility of groups with no channels
  • Show/Hide Newly Created Groups - Toggle visibility of groups created this session
  • Show/Hide Provider Groups - Toggle visibility of auto-populated provider groups
  • Show/Hide Manual Groups - Toggle visibility of manually created groups
  • Show/Hide Auto-Sync Groups - Toggle visibility of auto-channel sync groups
  • Missing Data Filters - Filter channels by missing metadata:
    • Missing Logo - Show channels without a logo assigned
    • Missing TVG-ID - Show channels without a TVG ID
    • Missing EPG Data - Show channels without EPG data
    • Missing Gracenote - Show channels without a Gracenote ID
    • Active filter indicator on the filter button
  • Persistent Settings - Filter preferences saved to localStorage

M3U Account Management

  • View Accounts - See all configured M3U accounts with status and stream counts
  • Account Groups - View and manage stream groups from each M3U account
  • Linked Accounts - Link accounts together to sync group settings across providers
  • Auto-Channel Sync - Configure automatic channel synchronization per group (channels persist in ECM even when auto-sync is later disabled in Dispatcharr)
  • Group Settings - Per-group account configuration with start channel numbers
  • GitHub & User Guide Links - Quick-access links in the application header

Roadmap

Here's what's coming to Enhanced Channel Manager:

v0.8.0 - Scheduled Tasks Implemented

Automated background tasks with flexible multi-schedule support:

  • Multiple Schedules Per Task - Each task can have multiple independent schedules
  • User-Friendly Schedule Types - No cron expressions; choose from Interval, Daily, Weekly, Bi-weekly, or Monthly
  • Timezone-Aware - All schedules respect your configured timezone
  • Task Types - EPG refresh, M3U refresh, Stream probing, Database cleanup
  • Task History - View execution history with success/failure details
  • Manual Run - Trigger any task immediately with one click
  • Enable/Disable - Toggle individual schedules or entire tasks on/off

v0.8.2 - Notifications Implemented

In-app notifications and external alerts:

  • Toast Notifications - Real-time feedback for actions and errors
  • Notification Center - In-app notification history with mark read/delete
  • Email Alerts (SMTP) - Configurable SMTP email notifications
  • Discord Webhooks - Send alerts to Discord channels
  • Telegram Bots - Send alerts via Telegram
  • Source Filtering - Control which events trigger each alert method
  • Digest/Batching - Reduce notification noise with batching
  • Failed Stream Details - Task alerts include names of failed streams
  • Failed Stream Indicators - Visual markers on channels/groups with probe failures

v0.8.4 - Tag-Based Normalization Engine Implemented

Powerful tag-based system for stream name normalization:

  • 5 Built-in Tag Groups - Country, League, Network, Quality, Timezone with 100+ tags
  • Toggle Individual Tags - Enable/disable specific tags within each group
  • Custom Tags - Add your own with prefix/suffix/both mode selection
  • Expandable UI - Collapsible tag groups with counts and bulk enable/disable
  • Quick Tag Manager - Compact tag editor in bulk create modal for per-operation customization
  • Settings Integration - Configure default normalization in Settings tab
  • Backward Compatible - Migrates old custom prefix/suffix settings automatically

v0.8.6 - Stream Sorting & Probe Schedules Implemented

Enhanced stream sorting options and granular probe scheduling:

  • M3U Account Priority Sort - Sort streams by M3U account priority (configurable in M3U Manager)
  • Audio Channels Sort - Sort streams by audio channel count (stereo, 5.1, 7.1, etc.)
  • Per-Schedule Parameters - Each probe schedule can have its own batch_size, timeout, max_concurrent, and channel group settings
  • Multiple Probe Schedules - Create multiple independent probe schedules with different configurations
  • Smart Defaults - Schedule editor for Stream Probe defaults to values from Settings > Maintenance
  • Auto-Reorder After Probe - Automatically reorder streams by quality and status after scheduled probes complete

v0.8.7 - Granular Normalization Engine Implemented

Advanced rule-based stream name normalization:

  • Rule Creation UI - Create custom normalization rules with conditions and actions
  • Rule Prioritization - Drag-and-drop rule ordering to control execution priority
  • Compound Conditions - Build complex conditions with AND/OR/NOT logic
  • Regex Support - Full regex pattern matching and replacement capabilities
  • Condition Types - Contains, starts with, ends with, regex match, equals
  • Action Types - Remove prefix/suffix, replace, regex replace, set value
  • Rule Testing Panel - Test rules against sample stream names with real-time preview
  • Normalization on Channel Create - Option to automatically normalize names when creating channels
  • EPG/M3U Manual Refresh - Set refresh interval to 0 for manual-only refresh (no auto-refresh)

v0.9.0 - M3U Change Tracking Implemented

Track and report changes to M3U sources:

  • Automatic Change Detection - Detects changes every time an M3U account is refreshed
  • Snapshot System - Store M3U state snapshots for comparison
  • Group Change Detection - Track when groups are added or deleted
  • Stream Change Detection - Track when streams are added, deleted, or modified
  • M3U Changes Tab - New tab to view all detected changes with filtering
  • Email Digest Reports - Configurable email digests when changes occur (immediate, hourly, daily, weekly)
  • Exclude Filters - Regex-based patterns to exclude noisy groups/streams from digest notifications
  • Change History - Full searchable history of all M3U changes over time
  • Summary Statistics - Dashboard cards showing total groups/streams added and removed

v0.10.0 - Stream Preview Implemented

Embedded video player for stream and channel preview:

  • MPEG-TS Playback - Native .ts stream playback using mpegts.js library for browser compatibility
  • Preview Modal - Click any stream or channel to open a preview player
  • Three Preview Modes - Configurable in Settings:
    • Passthrough - Direct stream proxy (fastest, may fail on AC-3/E-AC-3 audio)
    • Transcode - FFmpeg transcodes audio to AAC for browser compatibility
    • Video Only - Strip audio for quick silent preview
  • Mode Indicator - Shows current preview mode in the modal with icon and tooltip
  • Channel Preview - Preview channel output through Dispatcharr's TS proxy with JWT authentication
  • Alternative Options - Open in VLC, Download M3U, Copy URL (for streams with direct URLs)
  • Stream Metadata Display - Shows stream name, TVG-ID, channel group, and M3U provider
  • VLC Protocol Handler Scripts - One-click "Open in VLC" with scripts for Windows, Linux, and macOS
  • VLC Protocol Helper Modal - Download scripts and view setup instructions in Settings → Advanced

v0.11.0 - Enhanced Stats Implemented

Advanced analytics and channel popularity tracking:

  • Channel Watch Tracking - Track watch time and view counts per channel
  • Unique Viewer Tracking - Count unique connecting IPs per channel
  • Per-Channel Bandwidth - Monitor bandwidth consumption per channel
  • Popularity Scoring - Weighted algorithm based on watch count, watch time, unique viewers, and bandwidth
  • Popularity Rankings - View channels ranked by popularity with pagination
  • Trend Analysis - Track popularity changes (trending up, down, or stable)
  • Period Selection - View stats for 7, 14, or 30 day periods
  • On-Demand Calculation - Manually trigger popularity score recalculation
  • Watch History Log - Detailed log of viewing sessions with IP addresses

v0.11.5 - Authentication System Implemented

Comprehensive authentication and user management:

  • First-Run Setup Wizard - Create initial admin account on first launch
  • Local Authentication - Username/password auth with bcrypt password hashing
  • Dispatcharr SSO - Single sign-on using Dispatcharr credentials
  • Password Reset - Email-based password reset with secure time-limited tokens
  • User Management - Admin panel for managing users, roles, and access
  • Session Management - JWT-based sessions with automatic token refresh
  • SMTP Integration - Password reset requires SMTP configuration; link hidden when not configured

v0.12.0 - Auto-Creation Pipeline Implemented

Rules engine for automatic channel management:

  • Rule-Based Automation - Create rules with conditions and actions to automatically create channels, merge streams, and assign metadata
  • Condition Builder - Match streams by name, group, provider, quality, codec, TVG ID, logo, normalized match in group, and more with AND/OR logic
  • Action Executor - Create channels/groups, merge streams, assign logos/EPG/profiles, set channel numbers, define variables
  • Template Variables - Dynamic naming with {stream_name}, {stream_group}, {quality}, {provider}, and custom variables
  • YAML Import/Export - Share and version control your automation rules
  • Dry Run Mode - Preview what changes a pipeline would make before executing
  • Execution Rollback - Undo completed executions to restore previous state
  • Orphan Reconciliation - Automatically manage channels that no longer match (delete, move, or preserve)
  • Quality-Based Sorting - Sort streams within channels by resolution with optional probe-on-sort
  • User Settings Integration - Honors channel numbering, default profile, timezone, and auto-rename preferences
  • Execution Log - Per-stream granular log showing condition evaluation, rule matching, and action results
  • CLI Password Reset - reset_password.py utility for command-line password recovery
  • Missing Data Filters - Filter channels by missing logo, TVG-ID, EPG, or Gracenote ID
  • Account Linking - Link multiple authentication methods to a single user account
  • Design Tokens & Theme Compliance - CSS variable system for consistent theming across all components
  • Logo Manager Improvements - File upload to Dispatcharr, pagination, full logo loading

v0.12.5 - FFMPEG Builder & Performance Implemented

Visual FFmpeg command builder and frontend performance improvements:

  • FFMPEG Builder Tab - Full visual interface for constructing FFmpeg commands with Simple (IPTV wizard) and Advanced modes
  • IPTV Presets - 8 built-in optimized templates (pass-through, H.264, NVIDIA NVENC, Intel QSV, low-latency AC3, HLS, 1080p/AAC, 4K/AC3)
  • Saved Profiles - Save and load builder configurations for reuse
  • Command Preview - Real-time annotated command generation with interactive tooltips
  • Hardware Acceleration - CUDA, QSV, VAAPI support with auto-detection
  • Stream Probing - Probe input sources for codec, resolution, framerate detection
  • Push to Dispatcharr - Create stream profiles directly from the builder
  • ECM Integration - Apply builder profiles to channels, groups, or all channels
  • Lazy Stream Loading - Eliminated eager fetching of all streams on page load (fixes 100% CPU with 27k+ streams)
  • Channel Badges - Visual indicators on channel cards for stream count, status, and metadata
  • Stream Status Filters - Filter streams by online/offline/unknown probe status
  • Auto Token Refresh - Automatic JWT token refresh for uninterrupted sessions
  • CSS Design Token Refinements - Consistent theming across all tab CSS files

v0.12.6 - Auto-Creation, Probing & Stream Health Implemented

Major auto-creation enhancements, stream health management, and probing reliability:

  • Global Exclusion Filters - Auto-creation settings with M3U group dropdown for filtering streams before rule evaluation
  • New Condition Types - Global normalized name, not-in normalized name, and date expansion in regex conditions
  • Merge Streams Fallbacks - Multi-stage auto-lookup: exact → core-name → call sign → deparen/word-prefix matching
  • Max Streams Per Provider - Limit how many streams from a single M3U account merge into a channel
  • Execution Log Enrichment - Filter chips, normalization context, and merge guidance in execution logs
  • Stream Strikeout System - Track consecutive probe failures with configurable thresholds, strike badges, maintenance UI, and bulk remove
  • Per-Account Ramp-Up Probing - Gradually increases probe load to avoid triggering provider rate limits
  • Configurable Probe Retries - Retry settings with expanded coverage for HTTP 200, I/O, and Invalid data errors
  • Stale Group Alerts - Notifications for channel groups with outdated probe data
  • Regex Exclude Filters - Suppress noisy groups/streams from M3U digest notifications
  • XC Non-Credential Editing - Edit XtreamCodes account settings without re-entering the password
  • GitHub & User Guide Links - Quick-access links in the application header
  • Auto-Sync Channel Persistence - Channels remain visible in ECM when auto-channel-sync is disabled in Dispatcharr
  • "Provider" Renamed to "M3U Account" - Consistent terminology throughout the UI

v0.13.0 - Backend Refactor & Auto-Creation Enhancements Implemented

Backend modular architecture, new auto-creation actions, and reliability fixes:

  • Modular Router Architecture - Split monolithic main.py into 20 domain-focused API routers under backend/routers/
  • Security Hardening - Global log injection sanitizer (CWE-117), CodeQL fixes for stack-trace-exposure, polynomial-redos, dead code
  • Remove From Channel Action - Remove a stream from its current channel during auto-creation
  • Set Stream Priority Action - Set stream priority/weight within a channel
  • Stream Name (Regex) Sort - Sort matched streams by a regex capture group (e.g., date patterns)
  • Renumber All Groups - Bulk renumber channels across all groups at once
  • Active Notification Pinning - Running tasks and probes stay pinned to top of notification list
  • Probe Alert Filtering - Stream probe alerts now respect notification type filter settings
  • Channel Number Deduplication - Fixed merged streams consuming extra channel number slots during renumber

v0.13.1 - Security, Stability & UX Implemented

Security hardening, bug fixes, and navigation improvements:

  • URL Hash Routing - Active tab and settings sub-page persist in the URL for bookmarks, refresh, and browser back/forward
  • Renumber All Groups Enhancement - Per-group starting number overrides in the modal
  • CodeQL Security Fixes - ~65 code scanning alerts resolved across frontend and backend
  • Info Exposure Fixes - Internal error details no longer leaked in HTTP responses (channels CSV import, TLS routes)
  • SSRF Prevention - Cloudflare API endpoint validation
  • Certificate Permission Tightening - TLS cert files restricted to 0o640
  • Logo URL Sanitization - Preview URLs restricted to safe schemes only
  • Auto-Creation Bug Fixes - Fixed set_channel_number action validation, rule save errors now show toast instead of crashing
  • Sort Field Reset Fix - sort_field and sort_regex can now be cleared back to defaults

v0.14.0 - Enhanced Dummy EPG

Enhanced template engine for dummy EPG generation:

  • Text Transforms - Apply transforms to template variables (uppercase, title case, etc.)
  • Conditionals - Conditional blocks in templates based on channel metadata
  • Lookup Tables - Database-backed lookup tables for mapping channel names to custom EPG data
  • Per-Source Inline Lookups - Configure lookups directly in the dummy EPG source modal
  • Enhanced Preview - Live preview of template output with sample data

v0.15.0 - Move Logic Server-Side

Move heavy client-side computation to the backend:

  • EPG Matching Algorithm - Move 1,052-line matching engine to backend API
  • Stream Name Normalization - Move 524-line normalization to backend
  • Print Guide Generation - Move 383-line guide rendering to backend
  • Edit Mode Consolidation - Simplify 218-line edit mode logic

v0.16.0 - M3U/EPG Export & Cloud Distribution

Generate M3U playlists and XMLTV EPG from managed channels with cloud distribution:

  • Playlist Profiles - Curated channel selections for export
  • XMLTV Generation - Generate EPG files from managed channel data
  • Cloud Adapters - S3, Google Drive, OneDrive, Dropbox support
  • Publish Pipeline - Scheduled generation and distribution
  • Full Frontend UI - Export management interface

Technical Stack

Frontend

  • React 18 with TypeScript
  • Vite for bundling
  • @dnd-kit for drag-and-drop
  • CSS with custom styling (dark theme)

Backend

  • Python with FastAPI
  • 20 modular API routers under backend/routers/
  • Proxy to Dispatcharr API
  • Health check endpoint
  • CORS support

Deployment

  • Docker containerized
  • Single container with frontend served as static files
  • Configurable via environment variables

Getting Started

Docker Compose

services:
  ecm:
    image: ghcr.io/motwakorb/enhancedchannelmanager:latest
    ports:
      - "6100:6100"   # HTTP (always available)
      - "6143:6143"   # HTTPS (when TLS is enabled)
    volumes:
      - ./config:/config

The Dispatcharr URL can be configured through the Settings modal in the UI, which persists to the config volume.

Port Configuration:

  • Port 6100 - HTTP interface (always available as fallback)
  • Port 6143 - HTTPS interface (when TLS is configured in Settings → TLS Certificates)

Development

# Frontend
cd frontend
npm install
npm run dev

# Backend
cd backend
pip install -r requirements.txt
uvicorn main:app --reload

API Endpoints

Interactive API documentation is available at /api/docs (Swagger UI) and /api/redoc (ReDoc).

Channels

Endpoint Description
GET /api/channels List channels (paginated, searchable, filterable)
POST /api/channels Create channel
GET /api/channels/{id} Get channel details
GET /api/channels/{id}/streams Get streams for a channel
PATCH /api/channels/{id} Update channel
DELETE /api/channels/{id} Delete channel
POST /api/channels/{id}/add-stream Add stream to channel
POST /api/channels/{id}/remove-stream Remove stream from channel
POST /api/channels/{id}/reorder-streams Reorder channel streams
POST /api/channels/assign-numbers Bulk assign channel numbers
POST /api/channels/bulk-commit Batch multiple channel operations in one request
POST /api/channels/clear-auto-created Clear auto-created flag from channels
GET /api/channels/csv-template Download CSV template for channel import
GET /api/channels/export-csv Export all channels to CSV
POST /api/channels/import-csv Import channels from CSV file
POST /api/channels/preview-csv Preview and validate CSV before import

Channel Groups

Endpoint Description
GET /api/channel-groups List all groups
POST /api/channel-groups Create group
PATCH /api/channel-groups/{id} Update group
DELETE /api/channel-groups/{id} Delete group
GET /api/channel-groups/orphaned List orphaned groups (no streams, channels, or M3U association)
DELETE /api/channel-groups/orphaned Delete orphaned groups (optionally specify group IDs)
GET /api/channel-groups/hidden List hidden channel groups
POST /api/channel-groups/{id}/restore Restore a hidden channel group
GET /api/channel-groups/auto-created List groups with auto-created channels
GET /api/channel-groups/with-streams List groups that have channels with streams

Logos

Endpoint Description
GET /api/channels/logos List logos (paginated, searchable)
GET /api/channels/logos/{id} Get a single logo
POST /api/channels/logos Create logo from URL
POST /api/channels/logos/upload Upload logo image file
PATCH /api/channels/logos/{id} Update logo
DELETE /api/channels/logos/{id} Delete logo

Streams

Endpoint Description
GET /api/streams List streams (paginated, searchable, filterable)
GET /api/stream-groups List stream groups with stream counts

M3U

Endpoint Description
GET /api/m3u/accounts/{id} Get M3U account details
GET /api/m3u/accounts/{id}/stream-metadata Get stream metadata (tvg-id mappings)
POST /api/m3u/accounts Create M3U account
PUT /api/m3u/accounts/{id} Update M3U account (full)
PATCH /api/m3u/accounts/{id} Partially update M3U account
DELETE /api/m3u/accounts/{id} Delete M3U account
POST /api/m3u/upload Upload M3U file
POST /api/m3u/refresh Refresh all active M3U accounts
POST /api/m3u/refresh/{id} Refresh a single M3U account
POST /api/m3u/accounts/{id}/refresh-vod Refresh VOD content (XtreamCodes)
GET /api/m3u/accounts/{id}/filters List filters for an account
POST /api/m3u/accounts/{id}/filters Create filter for an account
PUT /api/m3u/accounts/{id}/filters/{fid} Update a filter
DELETE /api/m3u/accounts/{id}/filters/{fid} Delete a filter
GET /api/m3u/accounts/{id}/profiles/ List profiles for an account
POST /api/m3u/accounts/{id}/profiles/ Create profile for an account
GET /api/m3u/accounts/{id}/profiles/{pid}/ Get a specific profile
PATCH /api/m3u/accounts/{id}/profiles/{pid}/ Update a profile
DELETE /api/m3u/accounts/{id}/profiles/{pid}/ Delete a profile
PATCH /api/m3u/accounts/{id}/group-settings Update group settings for an account
GET /api/m3u/accounts/{id}/changes Get change history for an account
GET /api/m3u/snapshots List M3U snapshots
GET /api/m3u/server-groups List server groups
POST /api/m3u/server-groups Create server group
PATCH /api/m3u/server-groups/{id} Update server group
DELETE /api/m3u/server-groups/{id} Delete server group

M3U Digest

Endpoint Description
GET /api/m3u/changes Get M3U change history (paginated, filterable)
GET /api/m3u/changes/summary Get change summary for a time period
GET /api/m3u/digest/settings Get digest email settings
PUT /api/m3u/digest/settings Update digest email settings
POST /api/m3u/digest/test Send a test digest email

EPG

Endpoint Description
GET /api/epg/sources List EPG sources
GET /api/epg/sources/{id} Get EPG source details
POST /api/epg/sources Create EPG source (including dummy sources)
PATCH /api/epg/sources/{id} Update EPG source
DELETE /api/epg/sources/{id} Delete EPG source
POST /api/epg/sources/{id}/refresh Refresh EPG source
POST /api/epg/import Trigger EPG import
GET /api/epg/data Search EPG data (paginated)
GET /api/epg/data/{id} Get individual EPG data entry
GET /api/epg/grid Get EPG program grid for guide view
GET /api/epg/lcn Get LCN (Logical Channel Number) for a TVG-ID
POST /api/epg/lcn/batch Batch LCN lookup for multiple TVG-IDs

Channel Profiles

Endpoint Description
GET /api/channel-profiles List all channel profiles
POST /api/channel-profiles Create channel profile
GET /api/channel-profiles/{id} Get channel profile
PATCH /api/channel-profiles/{id} Update channel profile
DELETE /api/channel-profiles/{id} Delete channel profile
PATCH /api/channel-profiles/{id}/channels/bulk-update Bulk enable/disable channels for a profile
PATCH /api/channel-profiles/{id}/channels/{cid} Enable/disable a single channel for a profile

Stream Profiles

Endpoint Description
GET /api/stream-profiles List available stream profiles

Providers

Endpoint Description
GET /api/providers List M3U accounts (legacy)
GET /api/providers/group-settings Get provider group settings

Settings

Endpoint Description
GET /api/settings Get current settings
POST /api/settings Update settings
POST /api/settings/test Test Dispatcharr connection
POST /api/settings/test-smtp Test SMTP connection
POST /api/settings/test-discord Test Discord webhook
POST /api/settings/test-telegram Test Telegram bot
POST /api/settings/restart-services Restart background services
POST /api/settings/reset-stats Reset all statistics

Stream Stats

Endpoint Description
GET /api/stream-stats Get all stream probe statistics
GET /api/stream-stats/summary Get probe statistics summary
GET /api/stream-stats/{id} Get probe stats for a specific stream
POST /api/stream-stats/by-ids Get probe stats for multiple streams
POST /api/stream-stats/probe/{id} Probe a single stream
POST /api/stream-stats/probe/bulk Probe multiple streams
POST /api/stream-stats/probe/all Probe all streams (background task)
GET /api/stream-stats/probe/progress Get probe progress
GET /api/stream-stats/probe/results Get results of last probe-all operation
GET /api/stream-stats/probe/history Get probe run history
POST /api/stream-stats/probe/cancel Cancel running probe
POST /api/stream-stats/probe/reset Force reset stuck probe state
POST /api/stream-stats/dismiss Dismiss probe failures for streams
GET /api/stream-stats/dismissed Get list of dismissed stream IDs
POST /api/stream-stats/clear Clear probe stats for specific streams
POST /api/stream-stats/clear-all Clear all probe stats
GET /api/stream-stats/struck-out List struck-out streams (exceeding failure threshold)
POST /api/stream-stats/struck-out/remove Bulk remove struck-out streams from all channels

Enhanced Stats

Endpoint Description
GET /api/stats/bandwidth Get bandwidth summary with in/out breakdown
GET /api/stats/channels Get status of all active channels
GET /api/stats/channels/{id} Get detailed stats for a channel
GET /api/stats/activity Get system activity events
POST /api/stats/channels/{id}/stop Stop a channel
POST /api/stats/channels/{id}/stop-client Stop a specific client connection
GET /api/stats/top-watched Get top watched channels
GET /api/stats/unique-viewers Get unique viewer summary for period
GET /api/stats/channel-bandwidth Get per-channel bandwidth stats
GET /api/stats/unique-viewers-by-channel Get unique viewers per channel
GET /api/stats/watch-history Get watch history log (paginated)

Popularity

Endpoint Description
GET /api/stats/popularity/rankings Get channel popularity rankings (paginated)
GET /api/stats/popularity/channel/{id} Get popularity score for specific channel
GET /api/stats/popularity/trending Get trending channels (up or down)
POST /api/stats/popularity/calculate Trigger popularity score calculation

Normalization

Endpoint Description
GET /api/normalization/rules Get all rules organized by group
GET /api/normalization/rules/{id} Get a specific rule
POST /api/normalization/rules Create rule
PATCH /api/normalization/rules/{id} Update rule
DELETE /api/normalization/rules/{id} Delete rule
GET /api/normalization/groups List rule groups
POST /api/normalization/groups Create rule group
GET /api/normalization/groups/{id} Get rule group
PATCH /api/normalization/groups/{id} Update rule group
DELETE /api/normalization/groups/{id} Delete rule group and all its rules
POST /api/normalization/groups/reorder Reorder rule groups
POST /api/normalization/groups/{id}/rules/reorder Reorder rules within a group
POST /api/normalization/test Test a rule against sample text
POST /api/normalization/test-batch Test all enabled rules against multiple texts
POST /api/normalization/normalize Normalize text using all enabled rules
GET /api/normalization/rule-stats Get stream match statistics per rule
GET /api/normalization/migration/status Get migration status
POST /api/normalization/migration/run Run demo rules migration

Tags

Endpoint Description
GET /api/tags/groups List all tag groups with counts
POST /api/tags/groups Create tag group
GET /api/tags/groups/{id} Get tag group with all tags
PATCH /api/tags/groups/{id} Update tag group
DELETE /api/tags/groups/{id} Delete tag group and all tags
POST /api/tags/groups/{id}/tags Add tags to a group
PATCH /api/tags/groups/{gid}/tags/{tid} Update a tag
DELETE /api/tags/groups/{gid}/tags/{tid} Delete a tag
POST /api/tags/test Test text against a tag group

Stream Preview

Endpoint Description
GET /api/stream-preview/{id} Preview a stream (proxy with optional transcoding)
GET /api/channel-preview/{id} Preview a channel (proxy with optional transcoding)

Journal

Endpoint Description
GET /api/journal Get journal entries (paginated, filterable)
GET /api/journal/stats Get journal statistics
DELETE /api/journal/purge Purge old journal entries

Notifications

Endpoint Description
GET /api/notifications Get notifications (paginated, filterable by read status)
POST /api/notifications Create a notification
PATCH /api/notifications/{id} Update notification (mark as read)
DELETE /api/notifications/{id} Delete notification
PATCH /api/notifications/mark-all-read Mark all notifications as read
DELETE /api/notifications Clear notifications (read only or all)
DELETE /api/notifications/by-source Delete notifications by source

Alert Methods

Endpoint Description
GET /api/alert-methods List all alert methods
GET /api/alert-methods/types Get available alert method types
POST /api/alert-methods Create alert method
GET /api/alert-methods/{id} Get alert method details
PATCH /api/alert-methods/{id} Update alert method
DELETE /api/alert-methods/{id} Delete alert method
POST /api/alert-methods/{id}/test Send test notification

Scheduled Tasks

Endpoint Description
GET /api/tasks List all tasks with status
GET /api/tasks/{id} Get task details with schedules
PATCH /api/tasks/{id} Update task configuration
POST /api/tasks/{id}/run Run task immediately
POST /api/tasks/{id}/cancel Cancel running task
GET /api/tasks/{id}/history Get task execution history
GET /api/tasks/engine/status Get task engine status
GET /api/tasks/history/all Get execution history for all tasks
GET /api/tasks/{id}/parameter-schema Get parameter schema for a task type
GET /api/tasks/parameter-schemas Get all task parameter schemas
GET /api/tasks/{id}/schedules Get task schedules
POST /api/tasks/{id}/schedules Add schedule to task
PATCH /api/tasks/{id}/schedules/{sid} Update schedule
DELETE /api/tasks/{id}/schedules/{sid} Delete schedule

Auto-Creation

Endpoint Description
GET /api/auto-creation/rules List all rules sorted by priority
GET /api/auto-creation/rules/{id} Get rule details
POST /api/auto-creation/rules Create rule
PUT /api/auto-creation/rules/{id} Update rule
DELETE /api/auto-creation/rules/{id} Delete rule
POST /api/auto-creation/rules/reorder Reorder rules by priority
POST /api/auto-creation/rules/{id}/toggle Toggle rule enabled state
POST /api/auto-creation/rules/{id}/duplicate Duplicate a rule
POST /api/auto-creation/rules/{id}/run Run a single rule (supports dry_run)
POST /api/auto-creation/run Run the full pipeline (execute or dry_run)
GET /api/auto-creation/executions Get execution history (paginated)
GET /api/auto-creation/executions/{id} Get execution details (optional log/entities)
POST /api/auto-creation/executions/{id}/rollback Rollback an execution
POST /api/auto-creation/validate Validate a rule definition
GET /api/auto-creation/export/yaml Export all rules as YAML
POST /api/auto-creation/import/yaml Import rules from YAML
GET /api/auto-creation/schema/conditions Get available condition types
GET /api/auto-creation/schema/actions Get available action types
GET /api/auto-creation/schema/template-variables Get available template variables

FFMPEG Builder

Endpoint Description
GET /api/ffmpeg/capabilities Detect system FFmpeg capabilities (codecs, formats, filters, hardware)
POST /api/ffmpeg/probe Probe a media source for stream info (codec, resolution, bitrate)
GET /api/ffmpeg/configs List all saved configurations
POST /api/ffmpeg/configs Create new configuration
GET /api/ffmpeg/configs/{id} Get specific configuration
PUT /api/ffmpeg/configs/{id} Update configuration
DELETE /api/ffmpeg/configs/{id} Delete configuration
POST /api/ffmpeg/validate Validate builder state, return errors/warnings
POST /api/ffmpeg/generate-command Generate annotated FFmpeg command from builder state
GET /api/ffmpeg/jobs List all transcoding jobs
POST /api/ffmpeg/jobs Create and queue new transcoding job
GET /api/ffmpeg/jobs/{id} Get job status and progress
POST /api/ffmpeg/jobs/{id}/cancel Cancel running job
DELETE /api/ffmpeg/jobs/{id} Delete job record
GET /api/ffmpeg/queue-config Get job queue configuration
PUT /api/ffmpeg/queue-config Update queue settings (max concurrent, retries)
GET /api/ffmpeg/profiles List saved user profiles
POST /api/ffmpeg/profiles Save builder state as a profile
DELETE /api/ffmpeg/profiles/{id} Delete saved profile

Cache

Endpoint Description
POST /api/cache/invalidate Invalidate cached data (optional prefix filter)
GET /api/cache/stats Get cache statistics

TLS

Endpoint Description
GET /api/tls/status Get TLS configuration status
GET /api/tls/settings Get TLS settings
POST /api/tls/configure Configure TLS settings
POST /api/tls/request-cert Request Let's Encrypt certificate (DNS-01 challenge)
POST /api/tls/complete-challenge Complete pending DNS challenge
POST /api/tls/upload-cert Upload custom certificate and key
POST /api/tls/renew Manually trigger certificate renewal
DELETE /api/tls/certificate Delete certificate and disable TLS
POST /api/tls/test-dns-provider Test DNS provider credentials
POST /api/tls/https/start Start HTTPS server
POST /api/tls/https/stop Stop HTTPS server
POST /api/tls/https/restart Restart HTTPS server
GET /api/tls/https/status Get HTTPS server status

Authentication

Endpoint Description
GET /api/auth/status Get authentication status and configuration
GET /api/auth/setup-required Check if first-run setup is needed
POST /api/auth/setup Complete first-run setup (create admin account)
POST /api/auth/login Login with username/password
POST /api/auth/logout Logout and clear session
POST /api/auth/refresh Refresh access token
GET /api/auth/me Get current user info
PUT /api/auth/me Update current user profile
POST /api/auth/change-password Change current user's password
POST /api/auth/forgot-password Request password reset email
POST /api/auth/reset-password Reset password with token
GET /api/auth/providers List available auth providers
POST /api/auth/dispatcharr/login Login via Dispatcharr credentials

User Management (Admin)

Endpoint Description
GET /api/admin/users List all users (paginated, searchable)
POST /api/admin/users Create new user
GET /api/admin/users/{id} Get user details
PATCH /api/admin/users/{id} Update user
DELETE /api/admin/users/{id} Delete (deactivate) user

Health

Endpoint Description
GET /api/health Health check
GET /api/debug/request-rates Request rate statistics (diagnostics)

Utility Scripts

Password Reset Script

The reset_password.py utility allows you to reset user passwords from the command line when locked out or when SMTP is not configured:

# Interactive mode — lists users, prompts for everything
docker exec -it enhancedchannelmanager python /app/reset_password.py

# Non-interactive — specify username and password
docker exec enhancedchannelmanager python /app/reset_password.py -u admin -p 'NewPass123'

# Semi-interactive — specify username, prompt for password securely
docker exec -it enhancedchannelmanager python /app/reset_password.py -u admin

# Skip password strength validation
docker exec enhancedchannelmanager python /app/reset_password.py -u admin -p 'simple' --force

Features:

  • Interactive mode shows a table of all users with username, email, admin status, active status, and auth provider
  • Password strength validation (8+ chars, upper/lower/digit) with --force to bypass
  • Secure password prompts (not echoed to terminal)
  • Warns when resetting password for non-local auth users
  • Uses bcrypt with 12 rounds, matching the web UI authentication system

Search Stream Script

The scripts/search-stream.sh utility allows you to search for streams in Dispatcharr via the command line:

# Make executable
chmod +x scripts/search-stream.sh

# Search for a stream
./scripts/search-stream.sh http://dispatcharr:9191 admin password "HBO Max HD"

# Search with special characters
./scripts/search-stream.sh http://dispatcharr:9191 admin password "[PPV EVENT 38]"

# Search partial name
./scripts/search-stream.sh http://dispatcharr:9191 admin password "ESPN"

Features:

  • Handles authentication automatically
  • URL-encodes special characters and spaces
  • Returns pretty-printed JSON results
  • Supports searching across all M3U accounts

Extract specific fields:

# Get just name and ID
./scripts/search-stream.sh http://dispatcharr:9191 admin pass "HBO" | jq '.results[] | {id, name}'

# Get count of results
./scripts/search-stream.sh http://dispatcharr:9191 admin pass "ESPN" | jq '.count'

Keyboard Shortcuts

Shortcut Action
Ctrl/Cmd + Z Undo (edit mode or global)
Ctrl/Cmd + Shift + Z Redo (edit mode or global)
Enter Save when editing inline
Escape Cancel when editing inline
Ctrl/Cmd + Click Toggle channel selection
Shift + Click Select range of channels

License

MIT