Supported EPG Types
XMLTV
Standard XMLTV format from URL
Schedules Direct
Official TV listings API
Custom Dummy EPG
Generated placeholder schedules
Adding an EPG Source
Configuration Fields
Basic Settings
Unique identifier for this EPG source
EPG source type:
xmltv- XMLTV URLschedules_direct- Schedules Direct APIdummy- Custom Dummy EPG
Enable or disable this EPG source
Source-Specific Configuration
XMLTV Configuration
XMLTV Configuration
Direct URL to XMLTV file. Supports:
- Plain XML:
http://provider.com/epg.xml - Gzip compressed:
http://provider.com/epg.xml.gz - Zip archives:
http://provider.com/epg.zip
Dispatcharr automatically detects file compression (gzip/zip) and extracts the XML content.
MEDIA_ROOT/cached_epg/ and tracks both:file_path- Original downloaded fileextracted_file_path- Decompressed XML file
Schedules Direct Configuration
Schedules Direct Configuration
Your Schedules Direct API key
Schedules Direct requires a paid subscription. Visit schedulesdirect.org to sign up.
Custom Dummy EPG Configuration
Custom Dummy EPG Configuration
Use
custom_properties JSON field to configure dummy EPG generation:Array of pattern matching rules for channel names
Timezone for generated schedules
Default program duration in minutes
Number of days to generate ahead
Refresh Configuration
Automatic refresh interval in seconds (0 = manual only)Recommended intervals:
- XMLTV:
43200(12 hours) or86400(24 hours) - Schedules Direct:
21600(6 hours) - Dummy EPG:
86400(24 hours)
Auto-managed periodic task for scheduled refreshes (managed by django-celery-beat)
Priority and Matching
EPG source priority for matching (higher = higher priority)When multiple EPG sources have matching entries for a channel, the highest priority source is used.
EPG Matching Configuration
Dispatcharr matches EPG data to channels usingtvg-id attributes. Configure global matching behavior in Settings > EPG Settings.
Match Modes
Channel matching strategy:
default- Match by tvg-id exactly- Custom modes can be implemented via settings
Match Filtering
Remove common prefixes/suffixes that interfere with matching:Array of prefixes to strip before matching:
Array of suffixes to strip before matching:
Custom regex patterns to remove before matching:
These settings are configured in
CoreSettings under the epg_settings key, not per EPG source.EPG Data Structure
EPGData Model
Each channel in the EPG source creates an EPGData record:Original tvg-id from the XMLTV file
Channel display name from EPG
Channel logo URL (if provided in EPG)
Reference to parent EPG source
Each
(tvg_id, epg_source) combination is unique in the database.ProgramData Model
Schedule entries for each EPG channel:Reference to EPGData parent record
Program start time (timezone-aware)
Program end time (timezone-aware)
Program title
Episode title or subtitle
Full program description
Channel identifier (duplicated for query optimization)
Additional metadata from XMLTV:
- Category/genre
- Episode numbers
- Credits (actors, directors)
- Ratings
- Language
Source Status Tracking
Current EPG source status:
| Status | Description |
|---|---|
idle | Waiting for next refresh |
fetching | Downloading EPG file |
parsing | Processing XML and updating database |
success | Last refresh successful |
error | Last refresh failed |
disabled | Source inactive |
Status message including:
- Success: Number of channels/programs imported
- Error: Detailed error information
Timestamp of last successful refresh
Source creation timestamp
Example Configurations
Best Practices
Multiple EPG Sources
Multiple EPG Sources
Use priority to control fallback behavior:
- High priority (10-20): Premium sources (Schedules Direct)
- Medium priority (5-9): XMLTV from providers
- Low priority (0-4): Dummy EPG as fallback
Refresh Intervals
Refresh Intervals
- Don’t refresh more often than source updates
- XMLTV files typically update every 12-24 hours
- Avoid excessive API calls to Schedules Direct
- Monitor
statusandlast_messagefor issues
Matching Optimization
Matching Optimization
- Configure ignore patterns to handle provider naming inconsistencies
- Use consistent tvg-id values across M3U and EPG sources
- Check EPG match settings if channels aren’t linking properly