Releases: euzu/tuliprox
v3.2.0
3.2.0 (2025-11-14)
- Added
nameattribute to Staged Input. - Real-time active provider connection monitoring (dashboard + websocket)
- Source editor: block selection, batch-mode UI and automatic layout
- Fixed SSL certificate field binding in configuration view
- More robust connection-state and provider-handle management
- Streamlined event notifications and provider-count reporting
- Added configurable
reverse_proxy.resource_retry(UI + server) to tune max attempts, base delay, and exponential backoff multiplier for proxied resources. - Multi Strm outputs with same type is now allowed.
- Added new mapper function
pad(text | number, number, char, optional position: "<" | ">" | "^") - Added new mapper function
formatfor simple in-text replacement likeformat("Hello {}! Hello {}!", "Bob", "World") - Added
reverse_proxy.stream.shared_burst_buffer_mbto control shared-stream burst buffer size (default 12 MB). - Added
movieas alias forvodfor type filter. You can now useType = movieas an alternative toType = vod. - Fixed file locks to avoid race conditions on file operations
Release v3.1.8
3.1.8 (2025-11-18)
⚡ !BREAKING_CHANGE! disble_referer_header is now part of reverse_proxy.disabled_header configuration
🍭 added reverse_proxy.disabled_header configuration
Allows removing selected headers before forwarding requests when acting as a reverse proxy. Configure removal of the referer header, all X-* headers, and additional custom headers.
🐞 Fixed HLS streaming issues caused by session eviction and incorrect headers.
🐞 Catchup stream fix cycling through multiple providers on play.
🐞 Custom streams fix and update webui stream info
🍭 Added TimeZone to epg_timeshift: [-+]hh:mm or TimeZone, example Europe/Paris, America/New_York, -2:30(-2h30m), +0:15 (15m), 2 (2h), :30 (30m), :3 (3m)
If you use TimeZone the timeshift will change on Summer/Winter time if its applied in the TZ.
🐞 Fixed: Mappings now automatically reload and reapply after configuration changes, preventing stale settings.
🍭 Search in Playlist Explorer now returns groups instead of matching flat channel list.
🍭 Added use_memory_cache attribute to target definition to hold playlist in memory to reduce disc access.
Placing playlist into memory causes more RAM usage but reduces disk access.
🍭 Added optional filter attribute to Output (except HDHomerun-Output).
Output filters are applied after all transformations have been performed, therefore, all filter contents must refer to the final state of the playlist.
🍭 Added burst buffer to shared stream
🍭 Telegram message thread support. thread id can now be appended to chat-id like chat-id:thread-id.
🍭 Telegram supports markdown generation for structured json messages. simply set markdown: true in telegram config.
🍭 Added User-Stream-Connections Table to WebUI
🍭 Enhanced STRM output filenames to include detailed media quality info (e.g., 4K, HDR, x265, 5.1) for easy version distinction.
🍭 Added standardized SSDP (Simple Service Discovery Protocol) and the Proprietary HDHomeRun UDP Discovery Protocol (Port 65001)
🐞 Fixed some session handling issue
🍭 UserTable: Copy credentials to clipboard from user table
🍭 UserTable: Kick user action from streams table
🍭 UserTable: Auto-generated username/password for new proxy users
Release v3.1.7
3.1.7 (2025-10-10)
- Added Dark/Bright theme switch
- Resource proxy retries failed requests up to three times and respects the
Retry-Afterheader (falls back to 100 ms wait)
to reduce transient HTTP errors (400, 408, 425, 429, 5xx) - Added
accept_insecure_ssl_certificatesoption inconfig.yml(for serving images over HTTPS without a valid SSL certificate) - VOD streams now use tmdbid from
get_vod_streamsif available, removing the need forresolve_vodin STRM generation - Fixed file length issue in STRM generation
- Fixed empty parentheses issue in series names
- Removed default sorting
- WebSocket now reconnects on disconnect; added WebSocket connection status icon in Web UI
- Added Playlist EPG view with timeline, channels,
nowline, and program details - EPG data can now be fetched from selected targets and custom URLs
- Faster, more reliable EPG loading via streaming and asynchronous processing, with reduced memory usage and better support for large or compressed guides.
- Invalid EPG text data fix
- Added new sidebar entry and icon for quick EPG access
- Added CBOR (binary JSON) support for large API data
Release v3.1.6
Release v3.1.6
- EPG Config View added
- Fixed loading users for WebUI from user DB
- Fixed auto EPG for batch inputs
- Fixed EPG URL prepare
- Content Security Policies configurable via config, default OFF
- WebUI Config View editor for config.yml added
Release v3.1.5
3.1.5 (2025-08-14)
- Hot reload for config
- New WebUI (currently only readonly)
- Fixed shared stream provider connection count
- Added hanging client connection release
- Added
replacebuilt-in function for mapper scripts - Added
token_ttl_minsto web_auth config to define auth token expiration duration. - Staged sources. Side loading playlist. Load from staged, serve from provider.
- Fixed proxy config
- Added Content Security Policy to WebUI
Release v3.1.4
Release v3.1.4
- share live stream refactored
- fixed active user count
- fixed hls streaming
- more logs sanitized
- added session key for session management
- added sleep timer
sleep_timer_minsto config.yml - added mapper script builtin function
templateto access template definitions.
station_prefix = template(concat("US_", station, "_PREFIX")),
If we assume the variable station contains the value WINK,
this script receives the template with the concatenated name US_WINK_PREFIX which should be defined in templates section,
and assigns it to the variable station_prefix.
- Extended STRM export functionality with:
- Support for various media tools (Kodi, Plex, Emby, Jellyfin), with consideration for recommended naming conventions and file organization.
- Optional flat directory structure via 'flat' parameter (nested folder structures are not supported by some media scanners).
- Added Trakt support for XC targets
- name: iptv-trakt-example
output:
- type: xtream
skip_live_direct_source: true
skip_video_direct_source: true
skip_series_direct_source: true
resolve_series: false
resolve_vod: false
trakt:
api:
key: <my private trakt api key>
version: 2
lists:
- user: "linaspurinis"
list_slug: "top-watched-movies-of-the-week"
category_name: "📈 Top Weekly Movies"
content_type: "vod"
fuzzy_match_threshold: 80
- user: "garycrawfordgc"
list_slug: "latest-tv-shows"
category_name: "📺 Latest TV Shows"
content_type: "series"
fuzzy_match_threshold: 80Release v3.1.3
v3.1.3
- Fixed xtream codes series info duplicate fields problem.
- Fixed series info container_extension problem.
- Mapper script can have blocks now.
For example, you want to write aif then elseblock
# Maybe there is no station
station = @Caption ~ "(ABC)"
match {
station => {
# if block
# station exists
}
# optional any match as else block
_ => {
# else block
# station does not exists
}
}
- New BuiltIn Mapper function
first. When you use Regular expressions it could be that your match contains multiple results.
The builtin functionfirstreturns the first match.
v3.1.2
v3.1.1
Release v3.1.0
3.1.0 (2025-05-26)
-
!BREAKING_CHANGE! mapper refactored, mapping can be written as a script with a custom DSL.
-
!BREAKING_CHANGE!
tagsdefinition removed from new mapper. -
!BREAKING_CHANGE! removed
suffixandprefixfrom input config. Use mapper with an input filter instead. -
!BREAKING_CHANGE! custom_stream_response is now
custom_stream_response_path. The filename identifies the file inside the path- user_account_expired.ts
- provider_connections_exhausted.ts
- user_connections_exhausted.ts
- channel_unavailable.ts
user_account_expired.ts: Tuliprox will return a 403 Forbidden response for any playlist request if the user is expired.
So this screen will only ever appear if someone tries to directly access a stream URL after their account has expired.
-
!BREAKING_CHANGE! epg refactored
- url config is now renamed to sources
- Added
priority, priority isoptional auto_epgis now removed, useurl: autoinstead.- Added
logo_overrideto overwrite logo from epg.
Note: The priority value determines the importance or order of processing. Lower numbers mean higher priority. That is:
A priority of 0 is higher than 1. Negative numbers are allowed and represent even higher priority
epg:
sources:
- url: "auto"
priority: -2
logo_override: true
- url: "http://localhost:3001/xmltv.php?epg_id=1"
priority: -1
- url: "http://localhost:3001/xmltv.php?epg_id=2"
priority: 3
- url: "http://localhost:3001/xmltv.php?epg_id=3"
priority: 0
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\-]'-
Fixed mapper transform capitalize.
-
Auto hot reload for
mapping.ymlandapi_proxy.yml
To enable setconfig_hot_reload: trueinconfig.yml -
Added config.d-style mapping support.
You can now place multiple mapping files inside a directory likemapping.dand specify it using the-moption, for example:
-m /home/tuliprox/config/mapping.d
The files are loaded in alphanumeric order.
Note: This is a lexicographic sort — som_10.ymlcomes beforem_2.ymlunless you name files carefully (e.g.,m_01.yml,m_02.yml, ...,m_10.yml). -
Added
mapping_pathtoconfig.yml. -
Added list template for sequences. List templates can only be used for sequences.
templates:
- name: CHAN_SEQ
value:
- '(?i)\bUHD\b'
- '(?i)\bFHD\b'The template can now be used for sequence
sort:
groups:
order: asc
channels:
- field: caption
group_pattern: "!US_TNT_ENTERTAIN!"
order: asc
sequence:
- "!CHAN_SEQ!"
- '(?i)\bHD\b'
- '(?i)\bSD\b'- added
disable_referer_headertoreverse_proxyconfig
This option, when set totrue, prevents tuliprox from sending the Referer header in requests made when acting as a reverse proxy. This can be particularly useful when dealing with certain Xtream Codes providers that might restrict or behave differently based on the Referer header. Default isfalse.
reverse_proxy:
disable_referer_header: false