Skip to content

Releases: euzu/tuliprox

v3.2.0

14 Nov 14:36

Choose a tag to compare

3.2.0 (2025-11-14)

  • Added name attribute 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 format for simple in-text replacement like format("Hello {}! Hello {}!", "Bob", "World")
  • Added reverse_proxy.stream.shared_burst_buffer_mb to control shared-stream burst buffer size (default 12 MB).
  • Added movie as alias for vod for type filter. You can now use Type = movie as an alternative to Type = vod.
  • Fixed file locks to avoid race conditions on file operations

Release v3.1.8

06 Nov 14:34

Choose a tag to compare

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

10 Oct 18:22

Choose a tag to compare

3.1.7 (2025-10-10)

  • Added Dark/Bright theme switch
  • Resource proxy retries failed requests up to three times and respects the Retry-After header (falls back to 100 ms wait)
    to reduce transient HTTP errors (400, 408, 425, 429, 5xx)
  • Added accept_insecure_ssl_certificates option in config.yml (for serving images over HTTPS without a valid SSL certificate)
  • VOD streams now use tmdbid from get_vod_streams if available, removing the need for resolve_vod in 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, now line, 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

01 Sep 16:59

Choose a tag to compare

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

14 Aug 08:13

Choose a tag to compare

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 replace built-in function for mapper scripts
  • Added token_ttl_mins to 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

17 Jun 15:45

Choose a tag to compare

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_mins to config.yml
  • added mapper script builtin function template to 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: 80

Release v3.1.3

06 Jun 05:26

Choose a tag to compare

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 a if then else block
  # 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 function first returns the first match.

v3.1.2

02 Jun 09:27

Choose a tag to compare

3.1.2 (2025-06-02)

  • fixed input filter
  • fixed epg fuzzy match match_threshold default value
  • fixed auto epg source

v3.1.1

27 May 11:12

Choose a tag to compare

3.1.1 (2025-05-27)

  • fixed m3u api hls handling
  • during grace period no data is sent to client.
  • splitted config file handling for accurate error messages

Release v3.1.0

26 May 16:23

Choose a tag to compare

3.1.0 (2025-05-26)

  • !BREAKING_CHANGE! mapper refactored, mapping can be written as a script with a custom DSL.

  • !BREAKING_CHANGE! tags definition removed from new mapper.

  • !BREAKING_CHANGE! removed suffix and prefix from 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 is optional
    • auto_epg is now removed, use url: auto instead.
    • Added logo_override to 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.ymland api_proxy.yml
    To enable set config_hot_reload: true in config.yml

  • Added config.d-style mapping support.
    You can now place multiple mapping files inside a directory like mapping.d and specify it using the -m option, for example:
    -m /home/tuliprox/config/mapping.d
    The files are loaded in alphanumeric order.
    Note: This is a lexicographic sort — so m_10.yml comes before m_2.yml unless you name files carefully (e.g., m_01.yml, m_02.yml, ..., m_10.yml).

  • Added mapping_path to config.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_header to reverse_proxy config
    This option, when set to true, 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 is false.
reverse_proxy:
  disable_referer_header: false