source.yml defines upstream inputs, provider aliases, and the targets Tuliprox publishes to clients.
Top-level entries
Entry Description templatesReusable regex fragments referenced by !name! syntax inputsUpstream provider connection definitions sourcesGroups that bind inputs to targets
For new setups, prefer the global template_path in config.yml. Inline templates in source.yml are still supported.
templates
Templates reduce repeated regular expressions. Reference another template by wrapping its name in ! characters.
templates :
- name : delimiter
value : '[\s_-]*'
- name : quality
value : '(?i)(?P<quality>HD|LQ|4K|UHD)?'
Usage in a filter:
^.*TF1!delimiter!Series?!delimiter!Films?(!delimiter!!quality!)\s*$
Each input defines one upstream provider connection.
Field Description nameUnique identifier for this input typeInput type: m3u, xtream, library, m3u_batch, xtream_batch enabledEnable or disable this input without removing it persistPersist the fetched playlist to disk urlProvider URL — supports multiple URL schemes epgXMLTV EPG sources with priority and smart matching headersCustom HTTP headers sent with requests methodHTTP method (GET or POST) usernameProvider username (required for xtream) passwordProvider password (required for xtream) panel_apiPanel API configuration for account provisioning cache_durationHow long to cache the fetched playlist exp_dateAccount expiry date optionsProvider-specific behavior options aliasesAdditional credentials for the same provider stagedAlternate source for playlist data during updates
URL schemes
Scheme Description http:// / https://Standard HTTP provider URL file://Load a playlist from a local file provider://<name>/...Reference a named provider definition batch://...Load aliases from a CSV file
If an m3u or xtream input uses a batch:// URL, Tuliprox automatically treats it as m3u_batch or xtream_batch.
Type Description m3uStandard M3U/M3U+ playlist xtreamXtream Codes API libraryLocal media library m3u_batchMultiple M3U sources from a CSV file xtream_batchMultiple Xtream sources from a CSV file
options fields
Field Description xtream_skip_liveSkip live channels from Xtream xtream_skip_vodSkip VOD content from Xtream xtream_skip_seriesSkip series content from Xtream xtream_live_stream_without_extensionRequest live streams without file extension xtream_live_stream_use_prefixUse a URL prefix for live streams disable_hls_streamingDisable HLS streaming mode
Metadata and probe options
inputs :
- name : my_provider
type : xtream
url : http://provider.example:8080
username : user
password : secret
options :
resolve_tmdb : true
probe_stream : true
resolve_series : true
resolve_vod : true
EPG configuration
Inputs can define multiple XMLTV sources with priorities and smart matching.
Field Description sources[].urlEPG URL or auto to use the provider’s own EPG sources[].priorityLower values take priority sources[].logo_overrideUse this EPG source for channel logos smart_match.enabledEnable smart channel name matching smart_match.fuzzy_matchingAllow fuzzy string matching smart_match.match_thresholdMinimum score to accept a match (0–100) smart_match.best_match_thresholdScore above which the best match is immediately used
epg :
sources :
- url : auto
priority : -2
logo_override : true
- url : http://localhost:3001/xmltv.php?epg_id=1
priority : -1
smart_match :
enabled : true
fuzzy_matching : true
match_threshold : 80
best_match_threshold : 99
Aliases
Aliases let one logical provider input expose multiple credentials — useful when you have several accounts on the same provider.
inputs :
- type : xtream
name : my_provider
url : http://provider.net
username : primary
password : secret1
aliases :
- name : my_provider_2
url : http://provider.net
username : secondary
password : secret2
max_connections : 2
Batch inputs load multiple provider aliases from a CSV file.
xtream_batch CSV columns:
Column Description nameAlias name usernameXtream username passwordXtream password urlProvider URL max_connectionsConnection limit priorityUser priority exp_dateExpiry date
m3u_batch CSV columns:
Column Description urlM3U playlist URL max_connectionsConnection limit priorityUser priority
panel_api
Tuliprox can provision or renew provider accounts through a panel API.
Supported operations: account_info, client_info, client_new, client_renew, client_adult_content
Field Description urlPanel API endpoint URL api_keyAPI authentication key alias_pool.size.minMinimum pool size alias_pool.size.maxMaximum pool size alias_pool.remove_expiredRemove expired aliases from the pool provisioning.timeout_secTimeout for provisioning requests provisioning.methodHTTP method for provisioning provisioning.probe_interval_secHow often to probe provisioned accounts provisioning.cooldown_secCooldown between provisioning attempts provisioning.offsetTime offset before expiry to trigger renewal
panel_api :
url : https://panel.example/api.php
api_key : "1234567890"
provisioning :
timeout_sec : 65
method : GET
probe_interval_sec : 10
cooldown_sec : 120
offset : 12h
staged lets Tuliprox read playlist data from an alternate source during updates while still using the main input for streaming and API details.
Field Description enabledEnable staged input mode typeType of the staged source urlURL of the staged source headersCustom headers for the staged source methodHTTP method for the staged source usernameUsername for the staged source passwordPassword for the staged source live_sourceOverride source for live streams vod_sourceOverride source for VOD series_sourceOverride source for series
sources
Each source entry groups one or more inputs and binds them to one or more targets.
sources :
- inputs :
- my_provider
targets :
- name : all_channels
output :
- type : xtream
- type : m3u
The inputs list references input names defined in the top-level inputs section.
targets
Each target controls how content is processed, filtered, and exposed to clients.
Target fields
Field Description enabledEnable or disable this target nameUnique target identifier (referenced in api-proxy.yml) sortSorting rules for groups and channels outputList of output format definitions processing_orderOrder of Filter, Rename, and Map operations optionsTarget-level behavior options filterFilter expression to include/exclude content renameRename rules for groups or channels mappingMapping IDs from mapping.yml to apply favouritesExplicit favourite group definitions watchGroup names to watch for changes use_memory_cacheCache the processed target in memory
output types
xtream
m3u
strm
hdhomerun
Field Description typextreamskip_live_direct_sourceDo not expose live direct source URLs skip_video_direct_sourceDo not expose video direct source URLs skip_series_direct_sourceDo not expose series direct source URLs update_strategyHow to handle existing content on update traktTrakt.tv integration settings filterOutput-level filter expression
Field Description typem3ufilenameOutput filename for the playlist include_type_in_urlAppend content type to stream URLs mask_redirect_urlMask redirect URLs in the output filterOutput-level filter expression
Field Description typestrmdirectoryOutput directory for .strm files usernameUsername to embed in stream URLs underscore_whitespaceReplace spaces with underscores in filenames cleanupRemove stale .strm files on update styleDirectory style for output flatWrite all files to a flat directory (no subdirs) strm_propsAdditional properties in .strm files add_quality_to_filenameAppend quality indicator to filenames filterOutput-level filter expression
Field Description typehdhomerundeviceHDHomeRun virtual device identifier usernameUsername to use in lineup URLs use_outputWhich output definition to use for URLs
Target options
Field Description ignore_logoDo not include logo URLs in the output share_live_streamsShare one upstream connection across multiple clients remove_duplicatesRemove duplicate channel entries force_redirectForce redirect mode for all streams in this target
When share_live_streams is enabled, each shared live channel holds buffer memory even when multiple clients share the same upstream stream.
sort
Sorting consists of an ordered list of rules.
Field Description targetSort target: group or channel fieldField to sort by filterFilter expression to scope this rule orderasc or descsequenceOrdered list of regex patterns for explicit sequencing
sort :
rules :
- target : group
order : asc
filter : Group ~ ".*"
field : group
sequence :
- '^Freetv'
- '^Shopping'
- '^Entertainment'
processing_order
Controls the execution order of F ilter, R ename, and M ap operations.
Value Order frmFilter → Rename → Map fmrFilter → Map → Rename rfmRename → Filter → Map rmfRename → Map → Filter mfrMap → Filter → Rename mrfMap → Rename → Filter
filter expressions
Filter expressions support boolean logic, regex matching, and type comparisons.
Field Description GroupChannel group name TitleChannel title NameChannel name CaptionChannel caption UrlStream URL GenreContent genre InputSource input name TypeContent type: live, vod, series
Operators: ~ (regex match), NOT, AND, OR
((Group ~ "^DE.*") AND (NOT Title ~ ".*Shopping.*")) OR (Group ~ "^AU.*")
rename
Rename rules apply regex substitution to a field.
Field Description fieldField to rename: group, title, name patternRegex pattern to match new_nameReplacement string (supports capture groups)
rename :
- field : group
pattern : '^DE(.*)'
new_name : '1. DE$1'
favourites
Defines explicit favourite groups that are assembled after mapping and resolution.
favourites :
- cluster : series
group : "My Favourites"
filter : 'Name ~ "Cinema"'
match_as_ascii : true
watch
Watches final group names and emits notifications via the messaging system when those groups change.
watch :
- 'FR - Movies \(202[34]\)'
- 'FR - Series'
Complete example
templates :
- name : ALL_CHAN
value : 'Group ~ ".*"'
inputs :
- type : xtream
name : my_provider
url : http://provider.example:8080
username : user
password : secret
sources :
- inputs :
- my_provider
targets :
- name : all_channels
output :
- type : xtream
- type : m3u
options :
ignore_logo : false
share_live_streams : true
filter : "!ALL_CHAN!"