Skip to main content
source.yml defines upstream inputs, provider aliases, and the targets Tuliprox publishes to clients.

Top-level entries

EntryDescription
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*$

inputs

Each input defines one upstream provider connection.

Input fields

FieldDescription
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

SchemeDescription
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.

Input types

TypeDescription
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

FieldDescription
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
FieldDescription
resolve_tmdbEnable TMDB metadata resolution for this input
probe_streamEnable stream probing for this input
resolve_backgroundResolve metadata in the background
resolve_seriesResolve metadata for series
resolve_vodResolve metadata for VOD
probe_seriesProbe series streams
probe_vodProbe VOD streams
probe_liveProbe live streams
probe_live_interval_hoursHow often to re-probe live streams (hours)
resolve_delayDelay before starting metadata resolution
probe_delayDelay before starting stream probing
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.
FieldDescription
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

Batch inputs load multiple provider aliases from a CSV file. xtream_batch CSV columns:
ColumnDescription
nameAlias name
usernameXtream username
passwordXtream password
urlProvider URL
max_connectionsConnection limit
priorityUser priority
exp_dateExpiry date
m3u_batch CSV columns:
ColumnDescription
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
FieldDescription
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 inputs

staged lets Tuliprox read playlist data from an alternate source during updates while still using the main input for streaming and API details.
FieldDescription
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

FieldDescription
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

FieldDescription
typextream
skip_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

Target options

FieldDescription
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.
FieldDescription
targetSort target: group or channel
fieldField to sort by
filterFilter expression to scope this rule
orderasc or desc
sequenceOrdered 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 Filter, Rename, and Map operations.
ValueOrder
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.
FieldDescription
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.
FieldDescription
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!"

Build docs developers (and LLMs) love