3.0.0 (2025-05-12)
- !BREAKING_CHANGE! user has now the attribute
ui_enabledto disable/enable web_ui for user.
You need to migrate the user db if you have useduse_user_db:true.
Set it tofalserun old tuliprox version, then update tuliprox and setuse_user_db:trueand start. - !BREAKING_CHANGE! all docker images have now tuliprox under
/app - !BREAKING CHANGE! bandwidth
throttle_kbpsattribute forreverse_proxy.streaminconfig.yml
is nowthrottleand supports units. Allowed units areKB/s,MB/s,KiB/s,MiB/s,kbps,mbps,Mibps.
Default unit iskbps. - !BREAKING_CHANGE!
logconfigactive_clientsrenamed tolog_active_user - !BREAKING_CHANGE!
web_ui configrestructured and addeduser_ui_enabledattribute
web_ui:
enabled: true
user_ui_enabled: true
path:
auth:
enabled: true
issuer: tuliprox
secret: ef9ab256a8c0abe5de92c2e05ca92baa810472ab702ff1674e9248308ceeec92
userfile: user.txtgrace_period_millisdefault set to 300 milliseconds.grace_period_timeout_secsdefault set to 2 seconds.- Fixed user grace period
- Added
default_grace_period_timeout_secstoreverse_proxy.streamconfig. When grace_period granted,
until thedefault_grace_period_timeout_secselapses no grace_period is granted again. - Added
methodattribute to input config. It can be set toGETorPOST. - Added optional
auto_epgfield toinput epg configfor auto-generating provider epg link. - Added rate limiting per IP. The burst_size defines the initial number of available connections,
while period_millis specifies the interval at which one connection is replenished.
If behind a proxyx-forwarded-for,x-real-iporforwardedshould be set as header.
The configuration below allows up to 10 connections initially and then replenishes 1 connection every 500 milliseconds.
reverse_proxy:
rate_limit:
enabled: true
period_millis: 500
burst_size: 10- Multi epg processing/optimization, auto guessing/assigning epg id's
- Fixed hls redirect url issue
- Added
force_redirectto target config options. valid options arelive,vod,series
options: {ignore_logo: false, share_live_streams: false, force_redirect: [vod, series]}epg:
url: ['http://localhost:3001/xmltv.php?epg_id=1', 'http://localhost:3001/xmltv.php?epg_id=2']
smart_match:
enabled: true
fuzzy_matching: true
match_threshold: 80
best_match_threshold: 99
name_prefix: !suffix "."
name_prefix_separator: [':', '|', '-']
strip : ["3840p", "uhd", "fhd", "hd", "sd", "4k", "plus", "raw"]
normalize_regex: '[^a-zA-Z0-9\-]'match_thresholdis optional and if not set 80.
best_match_threshold is optional and if not set 99.
name_prefix can be ignore, suffix, prefix. For suffix and prefix you need to define a concat string.
strip : ["3840p", "uhd", "fhd", "hd", "sd", "4k", "plus", "raw"] this is the defualt
normalize_regex: [^a-zA-Z0-9\-] is the default
# single epg
url: 'https://localhost.com/epg.xml'# multi local file epg
url: ['file:///${env:TULIPROX_HOME}/epg.xml', 'file:///${env:TULIPROX_HOME}/epg2.xml']# multi url epg
url: ['http://localhost:3001/xmltv.php?epg_id=1', 'http://localhost:3001/xmltv.php?epg_id=2']- Added
stripto input for auto epg matching, if not given["3840p", "uhd", "fhd", "hd", "sd", "4k", "plus", "raw"]is default
When no matching epg_id is found, the display name is used to match a channel name. The given strings are stripped to get a better match. - Fixed chno assignment issue
- Redirect Proxy provider cycle implemented (m3u playlist only cycles when output param
mask_redirect_urlis set). - Reverse Proxy mode for user can now be a subset
reverse-> all reversereverse[live]-> only live reverse, vod and series redirectreverse[live,vod]-> series redirect, others reverse
/statusapi endpoint moved to/api/v1/statusfor auth protection- fixed multi provider VOD seek problem (provider cycle on seek request prevented playback)
- hdhomerun supports now basic auth like http://user:password@ip:port/lineup.json
you need to enable auth in config
hdhomerun:
enabled: true
auth: true
devices:
- name: hdhr1- A new filter field
captionhas been added. This field is used to bypass thetitle/nameissue.
Ifcaptionis provided, its value is read fromtitleif available, otherwise fromname.
When settingcaption, bothtitleandnameare updated.” - Counter has now an attribute
padding. Which fills the number like 001. - Added proxy configuration for all outgoing requests in
config.yml. supported http, https, socks5 proxies.
proxy:
url: socks5://192.168.1.6:8123
username: uname # <- optional basic auth
password: secret # <- optional basic auth- Added support for regular expression-based sequence sorting.
You can now sort both groups and channels using custom regex sequences.
sort:
groups:
order: asc
sequence:
- '^Freetv'
- '^Shopping'
- '^Entertainment'
- '^Sunrise'
channels:
- field: caption
group_pattern: '^Freetv'
order: asc
sequence:
- '(?P<c1>.*?)\bUHD\b'
- '(?P<c1>.*?)\bFHD\b'
- '(?P<c1>.*?)\bHD\b'
- '(?P<c1>.*?)\bSD\b'In the example above, groups are sorted based on the specified sequence.
Channels within the Freetv group are first sorted by quality (as matched by the regex sequence), and then by the captured prefix.
To sort by specific parts of the content, use named capture groups such as c1, c2, c3, etc.
The numeric suffix indicates the priority: c1 is evaluated first, followed by c2, and so on.
- Added ip check config
- url # URL that may return both IPv4 and IPv6 in one response
- url_ipv4 # Dedicated URL to fetch only IPv4
- url_ipv6 # Dedicated URL to fetch only IPv6
- pattern_ipv4 # Optional regex pattern to extract IPv4
- pattern_ipv6 # Optional regex pattern to extract IPv6
ipcheck:
url_ipv4: https://ipinfo.io/ip