README 未给出确切的镜像名与端口,上面的 docker 命令需按官方 Docker Compose 模板核对;需要自备已获授权的上游源与凭据,软件不提供内容;Web UI 与 REST API 的访问配置需在配置文件中自行设置。
tuliprox
euzuMIT活跃维护用 Rust 写的自托管媒体网关和播放列表处理器,把 M3U、Xtream Codes、HDHomeRun 等来源的直播源做过滤、合并、定时更新后统一分发给 Plex、Emby、Jellyfin 和 Kodi。
tuliprox: Self-Hosted Media Gateway & Playlist Processor in Rust 🦀 - supports M3U, Xtream Codes, HDHomeRun, Plex, Emby & Jellyfin. Filtering, merging, scheduling & web delivery.
docker run -d -p 8901:8901 -v $(pwd)/config:/app/config euzu/tuliproxREADME 未说明具体显存或 GPU 要求;可在 Raspberry Pi、NAS、小型 VPS 及 x86/ARM 上运行,视负载最低约 256 MB 内存。
自托管媒体网关,把 IPTV 与媒体库统一成一份可控目录再分发
用 Rust 写的自托管媒体网关和播放列表处理器,把 M3U、Xtream Codes、HDHomeRun 等来源的直播源做过滤、合并、定时更新后统一分发给 Plex、Emby、Jellyfin 和 Kodi。
核心能力
- 合并 Xtream、M3U、Stalker、Plex、Emby、Jellyfin 等多源目录
- 同一目录同时输出 M3U、Xtream Codes API、HDHomeRun、STRM
- 用布尔表达式过滤和 Mapper DSL 重命名、排序、去重
- 反向代理与共享 MPEG-TS/HLS 会话,保护上游连接数
- 内置嵌入式 B+Tree 存储,无需外部数据库
容易踩的坑
- v3.3.0最新正式版2026-04-02 · 2026-04-02 12:58 UTC
Static Binary Checksums
The checksums below were validated in CI via
sha256sum -cbefore upload.File SHA256 tuliprox-v3.3.0-aarch64-unknown-linux-musl24aa33f0fe9185a1e694b5bcab261677700c1a89ce0f5681274cddc0b357c638tuliprox-v3.3.0-x86_64-unknown-linux-musl71b05fe1369b66ced7164ad2c5ec59446ed0dc0ab4b77fb39e0f47f66a6144e2Verification command after download:
sha256sum -c *.sha256What's Changed
- Master by @euzu in https://github.com/euzu/tuliprox/pull/426
- Feature/cache warmup and file lock normalize by @euzu in https://github.com/euzu/tuliprox/pull/431
- Feature/async playlist persistence by @euzu in https://github.com/euzu/tuliprox/pull/432
- Feature/async persist cache pipe and m3u write and shared buffer zero copy by @euzu in https://github.com/euzu/tuliprox/pull/436
- Feature/shared stream diagnostic and stream lock release and handle conn update failure by @euzu in https://github.com/euzu/tuliprox/pull/440
- Feature/connection logging and non order and session connection token and sync files by @euzu in https://github.com/euzu/tuliprox/pull/446
- Add diagnostics when a single user accumulates many connections so ru… by @DarkBreakpoint in https://github.com/euzu/tuliprox/pull/442
- async cleanup by @DarkBreakpoint in https://github.com/euzu/tuliprox/pull/443
- Add order: none handling to playlist sorting by @DarkBreakpoint in https://github.com/euzu/tuliprox/pull/444
- Improve session tracking by @DarkBreakpoint in https://github.com/euzu/tuliprox/pull/445
- Feature/shared connection count fix by @euzu in https://github.com/euzu/tuliprox/pull/447
- SyncIOBridge caused tokio panic by @euzu in https://github.com/euzu/tuliprox/pull/448
- Epg resource rewrite by @euzu in https://github.com/euzu/tuliprox/pull/450
- Resource rewrite secret key to ensure rewritten url validity by @euzu in https://github.com/euzu/tuliprox/pull/451
- Xtream Codes Batch provider accounts are now checked for expiration. by @euzu in https://github.com/euzu/tuliprox/pull/452
- Feature/refactor provider connection handling by @euzu in https://github.com/euzu/tuliprox/pull/455
- Feature/cpu usage and disable cf headers by @euzu in https://github.com/euzu/tuliprox/pull/459
- Fixed race conditions on user access by @euzu in https://github.com/euzu/tuliprox/pull/461
- create_alias mapping flag for favourite groups by @knylbyte in https://github.com/euzu/tuliprox/pull/462
- Feature/shared stream custom response by @euzu in https://github.com/euzu/tuliprox/pull/463
- Bugfix | set correct virtual_id for series episodes for xtream endpoints by @knylbyte in https://github.com/euzu/tuliprox/pull/465
- Bugfix/active user manager by @knylbyte in https://github.com/euzu/tuliprox/pull/466
- Made cache storage more robust by @euzu in https://github.com/euzu/tuliprox/pull/468
- Feature/memory fix by @euzu in https://github.com/euzu/tuliprox/pull/469
- Feature/kick x time by @euzu in https://github.com/euzu/tuliprox/pull/477
- Feature/resolve memory fix by @euzu in https://github.com/euzu/tuliprox/pull/478
- Feature/local media by @euzu in https://github.com/euzu/tuliprox/pull/479
- Feature/panel api by @euzu in https://github.com/euzu/tuliprox/pull/482
- If clipboard not supported open dialog with content by @euzu in https://github.com/euzu/tuliprox/pull/484
- Feature/refactoring stream properties by @euzu in https://github.com/euzu/tuliprox/pull/485
- Feature/db optimization by @euzu in https://github.com/euzu/tuliprox/pull/486
- Feature/fix category ids by @euzu in https://github.com/euzu/tuliprox/pull/488
- Fix for release_date parsing, input alias url and empty database query by @euzu in https://github.com/euzu/tuliprox/pull/489
- Some fixes by @euzu in https://github.com/euzu/tuliprox/pull/490
- Added better error handling for db by @euzu in https://github.com/euzu/tuliprox/pull/491
- Feature/sources input refactor by @euzu in https://github.com/e
- v3.2.02025-11-14 · 2025-11-14 14:36 UTC
查看更新说明
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
- Added
- v3.1.8Release v3.1.82025-11-06 · 2025-11-06 14:34 UTC
查看更新说明
3.1.8 (2025-11-18)
:zap: !BREAKING_CHANGE!
disble_referer_headeris now part ofreverse_proxy.disabled_headerconfiguration :lollipop: addedreverse_proxy.disabled_headerconfiguration Allows removing selected headers before forwarding requests when acting as a reverse proxy. Configure removal of the referer header, allX-*headers, and additional custom headers. :lady_beetle: Fixed HLS streaming issues caused by session eviction and incorrect headers. :lady_beetle: Catchup stream fix cycling through multiple providers on play. :lady_beetle: Custom streams fix and update webui stream info :lollipop: Added TimeZone toepg_timeshift: [-+]hh:mm or TimeZone, exampleEurope/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. :lady_beetle: Fixed: Mappings now automatically reload and reapply after configuration changes, preventing stale settings. :lollipop: Search in Playlist Explorer now returns groups instead of matching flat channel list. :lollipop: Addeduse_memory_cacheattribute to target definition to hold playlist in memory to reduce disc access. Placing playlist into memory causes more RAM usage but reduces disk access. :lollipop: Added optionalfilterattribute 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. :lollipop: Added burst buffer to shared stream :lollipop: Telegram message thread support. thread id can now be appended to chat-id likechat-id:thread-id. :lollipop: Telegram supports markdown generation for structured json messages. simply setmarkdown: truein telegram config. :lollipop: Added User-Stream-Connections Table to WebUI :lollipop: Enhanced STRM output filenames to include detailed media quality info (e.g., 4K, HDR, x265, 5.1) for easy version distinction. :lollipop: Added standardized SSDP (Simple Service Discovery Protocol) and the Proprietary HDHomeRun UDP Discovery Protocol (Port 65001) :lady_beetle: Fixed some session handling issue :lollipop: UserTable: Copy credentials to clipboard from user table :lollipop: UserTable: Kick user action from streams table :lollipop: UserTable: Auto-generated username/password for new proxy users - v3.1.7Release v3.1.72025-10-10 · 2025-10-10 18:22 UTC
查看更新说明
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
- v3.1.6Release v3.1.62025-09-01 · 2025-09-01 16:59 UTC
查看更新说明
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
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
tuliprox — Self-Hosted Media Gateway & Playlist Processor
tuliprox is a high-performance, self-hosted media gateway for bringing IPTV providers, media servers, playlists, EPG data,
and local media libraries together behind one clean and controllable interface.
Instead of configuring every player against every upstream source, Tuliprox sits in the middle: it imports your authorized
media sources, normalizes and enriches their metadata, filters and reorganizes the catalog, manages provider connections,
and publishes the result in the formats your clients already understand.
One service. Multiple sources. Multiple users. Multiple output formats. Full control.
Legal Notice
tuliproxdoes not provide, host, sell, or distribute media content or access credentials. Users are solely responsible for ensuring that they have the necessary rights and authorization to access, process, proxy, record, or redistribute any media sources configured withtuliprox.The software is intended for use with legally obtained and properly authorized content and services.
✨ Why Tuliprox?
Tuliprox is built for more than playlist conversion. It is designed to become the central media gateway for a self-hosted setup:
- Unify fragmented sources — combine Xtream, M3U/M3U8, Stalker/Ministra, Plex, Emby, Jellyfin, local media, staged catalogs,
and EPG data in one place. - Publish once, consume everywhere — expose the same processed catalog as M3U, Xtream Codes API, HDHomeRun, or STRM without
maintaining separate setups. - Protect provider connections — share streams, enforce connection limits, prioritize users, recover from upstream problems,
and avoid wasting provider slots on unnecessary background work. - Shape the catalog your way — filter, rename, map, sort, merge, deduplicate, curate, and enrich content before it reaches users.
- Operate multiple users safely — assign targets, plans, output clusters, network restrictions, priorities, limits, and
server profiles per user. - Run it like infrastructure — health and readiness probes, durable notifications, stream history, QoS snapshots, quality
guards, hot reloads, audit events, and optional runtime watchdog support are built in. - Keep the stack small — Rust, a single application, embedded storage, and no mandatory external database.
- Stay in control of your data — self-hosted configuration, metadata, user management, recordings, and operational state.
🚀 At a Glance
| Area | What Tuliprox gives you |
|---|---|
| Inputs | Xtream, M3U/M3U8, Stalker/Ministra, Plex, Emby, Jellyfin, local libraries, staged sources |
| Outputs | M3U/M3U8, Xtream Codes API, HDHomeRun, STRM |
| Processing | Filtering, mapping DSL, sorting, templates, EPG matching, metadata enrichment, curation |
| Streaming | Reverse proxy, redirects, shared MPEG-TS/HLS, HLS cache/prefetch, catchup proxying, failover |
| Users | Multi-user gateway, plans, connection limits, priorities, output clusters, category access, network policies |
| Operations | Web UI, REST API, scheduler, health/readiness probes, notifications, QoS, stream history, watchdog |
| Storage | Embedded B+Tree engine, WAL protection, mmap scans, compression, compaction — no external DB required |
| Deployment | Docker, Docker Compose templates, Raspberry Pi, NAS, VPS, x86 and ARM |
🏆 Key Features
1. Fast, Lightweight, and Built for 24/7 Operation
Tuliprox is written in Rust and designed to keep the runtime footprint small even when the catalog and number of connected clients grow.
- Single native application — no Python, Node.js, Java, or mandatory database server
- Low CPU and memory overhead, including disk-based playlist processing for memory-constrained systems
- Runs comfortably on small servers and can operate with as little as 256 MB RAM depending on workload
- Tokio-based asynchronous I/O for highly concurrent streaming and background work
- Runs on Raspberry Pi, NAS, small VPS instances, and x86/ARM systems
- Hot configuration reloads reduce the need for service restarts
- Optional runtime liveness watchdog can detect a wedged async runtime and capture diagnostics; it can optionally
trigger a restart when explicitly enabled - Dedicated
/healthcheckand/readyendpoints separate process liveness from actual provider capacity
Benefit: Tuliprox can stay in the background as infrastructure instead of becoming another heavyweight service stack
you constantly have to maintain.
2. Bring All Your Media Sources Together
Use different upstream technologies without forcing every downstream player to understand them.
- Xtream Codes — Live, VOD, Series, Catchup, EPG metadata, provider aliases, and CSV batch accounts
- M3U/M3U8 — remote or local playlists with headers, credentials, EPG sources, and CSV batch inputs
- Stalker & Ministra — full portal catalogs with MAC, credential or combined authentication, configurable MAG profiles,
create_linkplayback resolution, resumable refreshes, and per-alias configuration - Plex, Emby & Jellyfin — import selected movie and TV libraries, each as its own category, and resolve protected playback
and artwork through Tuliprox - Local Media Library — scan movies and series from disk and enrich them with NFO or TMDB metadata
- Staged Sources — overlay a prepared Live, VOD, or Series catalog while keeping the original provider responsible for
actual stream delivery
Tuliprox can also stream large provider catalogs incrementally instead of requiring the complete catalog to be buffered in
memory before processing starts.
Benefit: change providers, combine sources, or migrate clients without rebuilding your whole media setup around one vendor-specific API.
3. One Catalog, Four Output Formats
| Format | Best for |
|---|---|
| M3U/M3U8 | IPTV players such as VLC, TiviMate, iMPlayer, and similar clients |
| Xtream Codes API | Clients expecting Live, VOD, Series, Catchup, EPG, categories, and account information |
| HDHomeRun | Plex, Jellyfin, Emby, and compatible tuner-based integrations with SSDP discovery |
| STRM | Kodi, Jellyfin, and Emby libraries with multi-version support and quality tags |
Generate several output types from the same processed source at the same time.
Benefit: the player no longer dictates how your upstream sources must be organized.
4. Powerful Processing Pipeline — Make the Catalog Yours
Tuliprox can transform provider data into the structure you actually want to use.
-
Merge multiple inputs into a single target
-
Filter Engine with complex boolean expressions, for example:
(Group ~ "^DE.*") AND NOT (Name ~ ".*XXX.*") -
Target filters can run during normal processing or at the final persist stage after EPG processing, mapping, merging,
deduplication, sorting, numbering, and counters -
Mapper DSL for advanced transformations:
- regex renaming with capture groups and backreferences
- variables,
if/else, andfor_each - functions such as
replace,pad,format,first,capitalize,lowercase,uppercase, andtemplate - counters with padding such as
001,002,003 - read-only metadata fields such as
@Inputand@Type - mapping stages including normal processing and
after_epg
-
Reusable templates — global, inline, list-based, and hot-reloaded
-
Sort Engine — regex sequences, source-order preservation, filtered sorting, and named capture groups
-
Accent-independent matching with
match_as_ascii -
Unicode normalization for filters and value comparisons
-
Output filters for the final playlist state
-
Favorites/bouquet management through
add_favourite(group_name) -
Target-specific bouquet whitelist/blacklist editing directly from the Web UI
-
Target-wide Trakt and TMDB Trending curation, with optional Xtream bouquets over locally available content
Benefit: providers supply the raw catalog; Tuliprox decides what your users actually see and how it is organized.
5. Protect Provider Slots and Improve Stream Delivery
Tuliprox is not just a metadata processor — it actively manages stream delivery.
- Reverse Proxy Mode — hide provider URLs and keep client traffic behind Tuliprox
- Redirect Mode — avoid proxy overhead where direct delivery is preferred
- Shared MPEG-TS Streams — several viewers can reuse one upstream provider stream
- Shared HLS Sessions — reuse one server-side HLS session while retaining individual user leases and accounting
- HLS Segment Cache & Prefetch — fetch manifests, initialization maps, and segments once and serve them locally
- HLS Recovery — optional manifest recovery, bounded segment repair, stale-origin recovery, and diagnostics for difficult upstream streams
- Universal Catchup — expose provider archive/catchup through regular M3U-compatible
.tsURLs - Bandwidth Throttling with flexible units
- Channel-switch friendly reservations to avoid unnecessary slot waits
- Fallback videos for unavailable channels, exhausted capacity, expired accounts, and similar conditions
- Configurable fallback error mode for reverse proxies that should handle failures themselves
Connection admission and priority
- Normal and soft user connection limits
- Dedicated soft priority for temporary overflow connections
- Provider and user priority handling
- Ordered admission strategies for deciding what happens when limits are reached:
- evict oldest/newest connections from the same user
- optionally scope eviction to the same IP
- instant or held grace-period strategies
- Anti-ping-pong protection for aggressive reconnect loops
- Session-aware handling for HLS/catchup and socket-bound admission for regular TS/VOD/local playback
Benefit: limited provider capacity can be shared intentionally instead of being consumed unpredictably by clients,
reconnects, probes, and background jobs.
6. Provider Resilience, Failover, and Safer Refreshes
Upstream providers are not always reliable. Tuliprox is designed to preserve usable service when they fail partially or temporarily.
- Automatic provider URL failover on timeouts and server errors
- Choose whether a provider resumes from the last working URL or restarts from the first URL on future requests
provider://references resolve to the currently active provider URLplayback_providerbinds a provider profile to inputs with plainhttp(s)://playlist URLs, so mappedprovider://playback URLs fail over too- Asynchronous DNS resolution and caching
- Persisted resolved IPs without overwriting source configuration
- HTTP, HTTPS, and SOCKS5 outbound proxy support for VPN gateways, corporate proxies, or Gluetun
- Effective public IPv4/IPv6 display in the Web UI to verify routing
- Provider aliases and CSV batch configuration for larger account pools
- Per-cluster update quality guards for Xtream, Stalker, and M3U inputs can reject suspicious Live/VOD/Series refreshes
and retain the last accepted data - Quality rejections are reported separately from technical failures
- Independent inputs can update in parallel while optional sequential groups protect providers that must not be refreshed concurrently
- Automatic Xtream account-expiration refresh with throttling designed to reduce unnecessary provider requests
- Stalker capability knowledge is reused during a running client session to avoid repeatedly probing known-failing endpoint variants
- Maintenance mode takes an input out of service from the dashboard or the REST API: new streams get a dedicated maintenance video, the last playlist and EPG keep being served, and no subsystem contacts the provider until maintenance ends; running streams and recordings continue
Benefit: a broken refresh or failing alias does not have to destroy an otherwise usable catalog.
7. Metadata, EPG, and Stream Intelligence
Tuliprox can improve incomplete provider data and make large catalogs easier to consume.
- Multi-source EPG with priorities
- Automatic provider EPG URL generation
- ICS/iCalendar sources converted into XMLTV programmes
- Smart fuzzy matching between playlist channels and EPG channels
- Configurable XMLTV timeshift with timezone and DST support
- Configurable normalization and cleanup for better matching
- Optional clearing of invalid EPG IDs without removing the playlist entry itself
- EPG logo override and authenticated image proxying
- In-memory EPG cache for fast UI and API access
- Asynchronous EPG processing for large guides
- Automatic EPG title synchronization after playlist updates
- Extended programme metadata where available
Metadata resolution and probing
- Background metadata resolution and stream probing when provider capacity is available
- Configurable fairness between metadata resolution and probing
- FFprobe-based codec, resolution, HDR, and audio-channel detection
- Provider-slot-aware probing — skip work instead of stealing the last available connection
- TMDB lookup for missing IDs and release information
- Persistent retry/cooldown state for failed metadata operations
- No-change cache to avoid repeating work for unchanged items
- Periodic live-stream probing
- Automatic quality tags such as
[2160p 4K HEVC HDR TrueHD 7.1] - Multi-version grouping for Jellyfin/Emby-style libraries
Benefit: clients receive a cleaner, richer catalog without each player having to solve metadata and EPG inconsistencies on its own.
8. Web UI — Operate Tuliprox Without Living in YAML
Tuliprox can be configured and monitored directly from the browser.
- Dashboard with backend status, active streams, system metrics, and provider capacity
- Maintenance card on the dashboard that turns red while inputs are in maintenance, with a dialog to put inputs into or take them out of maintenance with a remark
- Source Editor for M3U, Xtream, Stalker, Plex, Emby, Jellyfin, local-library, and target configuration
- Drag & drop, block selection, batch editing, and target bouquet whitelist/blacklist editing
- Input-focused Update view with per-input actions, affected-target selection, status, last update time, and
capability-aware Update/Refresh/Force Update/Rescan actions - Update Details explain where data came from, which quality guards were applied, processing order, target results,
and technical versus quality failures - Reload-safe update/cluster status so a browser refresh does not erase the operational picture
- Playlist Stats with per-target content counts, input-to-output ratios, largest groups, catch-up channels, EPG source health, and unmapped live channel CSV export
- Playlist Explorer with tree/gallery views, EPG timeline, text/regex search, and field-scoped search
- Manual item overrides: correct single channels, movies or series in the Playlist Explorer — for the whole input or for one target — without writing mapper rules, with validation, conflict checks and orphan cleanup
- Download & Recording Manager with retries, queue controls, fairness, and RBAC-protected actions
- User Management including plans, connection limits, priorities, category access, output clusters, and network policies
- RBAC Administration for users, groups, and permission grants
- Stream View with bandwidth, transferred bytes, player information, comments, and EPG details
- Stream History & QoS views for reliability analysis
- Messaging Configuration with channel routing, templates, and test/preview support
- Configurable landing page and stream-field visibility
- Multiple themes including a color-vision-deficiency-friendly option
- Runtime-discovered UI languages with RTL support
- Bookmarkable views via URL hash and working browser back/forward navigation
- Responsive design for desktop and mobile
UX and accessibility
- Health banner with green/amber/red capacity and backend state
- Live metric sparklines for CPU, memory, network, active users, and connections
- Persisted sidebar and table preferences
- Debounced filter editing for large expressions
- Guided empty states instead of unexplained blank views
- Recoverable per-view error boundaries
- Keyboard-friendly dialogs and menus
- Screen-reader improvements and descriptive image alt text
- Reduced-motion support for animations and micro-interactions
- Confirmation before destructive download/recording operations
Benefit: advanced functionality stays available to power users without forcing routine administration onto the command line.
9. Multi-User Gateway, Plans, and Access Control
Expose one Tuliprox instance to multiple users without giving everyone identical access.
- Assign each account to a processed target
- Advertise different LAN/public server profiles per user
- Choose reverse-proxy or redirect behavior per account
- Restrict Live, VOD, and Series independently through per-user output clusters
- Select allowed categories/bouquets
- Configure normal and soft connection limits
- Configure connection priority and soft priority
- Reusable plans for capability tiers, cluster access, connection limits, and enforced filters
- Store users in versionable configuration or the integrated user database
- Apply user and gateway configuration changes without restarting the service
RBAC
- 20 permissions across 9 domains
- Independent
.readand.writegrants - Custom groups and multi-group membership
- Additive permission resolution
- Compact permission bitmask in JWTs
- Built-in
admingroup with protected full access
Benefit: one backend can serve different devices, households, environments, or access tiers without duplicating the provider and processing configuration.
10. Security Built Into the Control Plane
- Argon2 password hashing
- JWT authentication with password-version tracking
- Sign-in throttling by client address and username
- Persistent token revocation for one user or all users
- Auth audit events for successful, failed, throttled, and permission-denied activity
- Per-IP request rate limiting
- Configurable Content Security Policy
- Per-user IPv4/IPv6 CIDR restrictions
- Per-user GeoIP country restrictions with secure deny behavior when GeoIP data is unavailable by default
- Configurable SSL/TLS behavior
- Header stripping for selected upstream/request headers
- Mandatory rewrite secret for stable resource URLs in reverse-proxy mode
- Sensitive values masked in configuration API responses
Benefit: Tuliprox can be exposed as a real multi-user gateway without treating authentication and access policies as an afterthought.
11. Event-Based Notifications and Monitoring
Tuliprox uses a shared event backbone so operational events can feed the Web UI, notifications, diagnostics, and future integrations consistently.
Supported notification channels include:
- Telegram
- Discord
- Pushover
- REST webhooks
- ntfy
- Gotify
- Slack
- Local command execution with structured event JSON on stdin
- Plugins can add more channels. See
plugins/examples/for source examples
Notification capabilities include:
- Event subscriptions using dotted event IDs and glob patterns
- Per-channel minimum severity
- Per-channel subscriptions and routing
- Quiet hours that defer notifications instead of silently dropping them
- Deduplication windows and per-hour rate caps
- Durable delivery with retry handling for transient failures
- Dead-letter tracking for notifications that permanently fail
- Provider
Retry-Aftersupport where applicable - HMAC-SHA256 signing for REST webhooks
- Per-channel Handlebars templates with
json_escape,bytesandroundhelpers - Preview/test endpoint so templates can be rendered without sending them
- Events for provider failures, exhausted pools, priority fallback, user connection denial, auth activity, config reload
failures, metadata failures, scheduled-task failures, recording lifecycle, disk alerts, and more - Playlist change tracking: get told when channels in the groups you care about change, or when whole groups appear or disappear — for example a new event or PPV group — each filtered by your own group patterns
- Event statistics and a recent-event ring for troubleshooting
- Disk usage alerts with warning/critical thresholds and configurable repeat intervals
Benefit: failures that would otherwise live only in a log file can reach the operator through the channel that is actually monitored.
12. Stream History and QoS Visibility
Optional stream telemetry can turn individual playback failures into longer-term reliability information.
- Persist stream connects, disconnects, preemptions, session expiry, and startup failures
- Classify failure stages and provider error classes
- Track stable stream identity across runs
- Track shared-stream participation
- Aggregate rolling reliability snapshots in the background
- Optionally measure Shared HLS origin transfer quality separately from availability, with sample coverage and
freshness, via
GET /api/v1/hls/origin-telemetry - Maintain 24-hour, 7-day, and 30-day QoS windows
- View QoS summaries/details in the Web UI or query them through the API
- Compact QoS storage periodically to reclaim expired data
Benefit: troubleshooting moves from “this channel sometimes fails” to data that can show where and how often it fails.
13. Digital Video Recorder (DVR)
Turn existing Tuliprox sources into a managed recording library without adding another DVR server and database stack.
- Record live channels directly through Tuliprox
- Scheduled and recurring recording rules
- Conflict preview before recordings start
- Provider-aware scheduling that respects available connection capacity
- Reliable queue operations: pause, resume, retry, edit, and cancel
- Crash-safe startup reconciliation
- Automatic retention by age, count, and disk-space thresholds
- Recording quota management
- Configurable recording container format
- Durable lifecycle notifications with per-channel retry handling
- Real-time Web UI updates for recordings and rules
- Protected media, thumbnail, and subtitle paths with filesystem containment checks
- Hot-reloadable DVR configuration
- Built-in recording subsystem health endpoint
dvr_doctordiagnostics for support and troubleshooting
Benefit: recording uses the same sources, permissions, provider limits, monitoring, and management UI you already configured for playback.
14. Embedded Storage — No External Database Required
Tuliprox includes its own storage engine for playlist and runtime data.
- Versioned 4 KiB slotted-page format
- Checksummed headers, pages, cells, and overflow chains
- Adaptive LZ4 compression
- Mmap-backed streaming scans instead of loading the complete database into RAM
- Shared query snapshots for reused mappings and validated routes
- WAL-protected in-place updates with immediate and batch flush policies
- Atomic publication of verified replacements and compaction results
- Startup migration for recognized legacy database versions
- Sorted indexes for playlist-order streaming
- String interning for repeated playlist values
- Tombstone and free-page reuse plus explicit compaction
Benefit: you get durable local state without deploying and maintaining PostgreSQL, MySQL, MongoDB, or Redis just to run Tuliprox.
15. Scheduling and Automation
- Cron-based scheduling with optional target selection
- Scheduled local-library scans
- Optional playlist update on startup
- Configuration file watching and hot reload
- Playlist/provider caching with configurable duration
- Staged-input processing
- Panel API integration for provider account provisioning/renewal workflows
- Dependency-aware parallel input processing
- Management REST API for configuration, processing, transfers, recordings, status, stream history, QoS, and system information
- Optional MCP server (read-only by default) so AI assistants such as Claude Desktop or Cursor can inspect status, streams, stream history, QoS, configuration, stored playlists (paged, filtered) and per-target EPG diagnostics under the REST API's own authentication and permissions; configurable in the Web UI
- JSON and CBOR responses on supported endpoints
- CLI one-shot processing for scripts and CI/CD
Benefit: common maintenance tasks can run unattended, while the same operations remain available through the UI, API,
or CLI when manual control is needed.
16. Complete Xtream-Compatible Delivery
- Player API for Live, VOD, and Series
- Categories and icons
- VOD and Series detail endpoints
- Catchup/timeshift support with session tracking
- XMLTV/EPG endpoints
- Panel API integration
- GET and POST request handling
- Series/Catchup lookup with virtual IDs
- Connection and bandwidth information in user responses
- Custom server messages
- Multiple advertised server profiles with different protocols, hosts, ports, and paths
17. Local Media Library
- Recursive directory scanning
- Automatic Movie/Series classification
- NFO, TMDB, and filename-based metadata resolution
- Incremental scans for new or changed files
- Scheduled rescans
- Stable virtual IDs
- Episode artwork/background integration
- Publish local content through the same Xtream, M3U, and STRM outputs as provider content
- Rebuild selected targets automatically after successful library rescans
Benefit: local files and provider content can live in one catalog instead of separate client libraries and workflows.
18. Operations and Deployment
- Alpine and Scratch Docker images
- Docker Compose templates for Traefik, CrowdSec, Gluetun/SOCKS5, iptv-org/epg, and Tuliprox
- Zero-downtime configuration swaps with
ArcSwap<Config> - Disk-based processing for large playlists
- Server and CLI modes
/healthcheckliveness endpoint/readycapacity-aware readiness endpoint/api/v1/statusdetailed status endpoint- SSDP/HDHomeRun discovery
- Database inspection tooling
${env:VAR}interpolation throughout configuration.envloading with host/container environment variables taking precedence- Optional startup runtime-configuration report in YAML or JSON with sensitive values redacted
- External log shipping via UDP (syslog RFC 5424, RFC 3164, or NDJSON) with independent remote log level and non-blocking delivery
- Configurable default outbound User-Agent
- Dev Container/Codespaces environment with the Rust/WASM tooling needed for development
🔐 Configuration and Secrets
Tuliprox ships with demo placeholder configuration only — nothing in this repository is a real credential.
- All major config files support
${env:VAR}interpolation, includingconfig.yml,source.yml,api-proxy.yml,mapping.yml, andtemplate.yml - Tuliprox can load variables from a
.envfile at startup; existing process/Docker environment variables take precedence - Provider credentials, webhook secrets, API keys, and tokens can therefore stay outside version-controlled configuration
config/user.txtcontains sample Argon2 hashes for demo accounts only; replace them with hashes generated locally usingtuliprox --genpwd- Pin
web_ui.auth.secretacross restarts so active logins can survive a service restart - Configuration API responses mask sensitive messaging secrets rather than returning them in clear text
- See Secrets & Environment Variables for the full guide and pre-publish checklist
🎯 Who Is Tuliprox For?
IPTV Enthusiasts
- Merge several providers into one catalog
- Normalize inconsistent names, groups, logos, and EPG data
- Keep only the content you actually want
- Use the same cleaned catalog in different players
- Share provider streams and make better use of limited connection slots
Self-Hosted and Homelab Users
- Run a complete gateway in one container without an external database stack
- Deploy on Raspberry Pi, NAS, VPS, or a larger home server
- Route upstream traffic through a VPN or SOCKS5 gateway
- Verify the effective public IP directly from the Web UI
- Monitor health, capacity, disk usage, streams, and notifications from one place
- Use Traefik, CrowdSec, Gluetun, and EPG templates as building blocks
Multi-User Setups
- Publish several virtual IPTV endpoints from one Tuliprox instance
- Assign different targets, plans, categories, clusters, limits, and priorities per user
- Share provider capacity while retaining per-user accounting and admission control
- Restrict access by CIDR and GeoIP policy
- Use RBAC for administrative access to Tuliprox itself
Developers and Power Users
- Mapper DSL for complex transformations
- Reusable templates and staged mapping
- Management REST API
- Event-based automation and signed webhooks
- CLI mode for scripting and CI/CD
- Database viewers and diagnostics
- Reproducible Dev Container/Codespaces setup
🐋 Docker Container Templates
- traefik template
- crowdsec template
- gluetun/socks5 template
- iptv-org-epg template
- tuliprox (including Traefik) template
./docker/container-templates
⚡ Quick Start
Start the latest Docker image:
services:
tuliprox:
container_name: tuliprox
image: ghcr.io/euzu/tuliprox-alpine:latest
working_dir: /app
volumes:
- /home/tuliprox/config:/app/config
- /home/tuliprox/data:/app/data
- /home/tuliprox/cache:/app/cache
environment:
- TZ=Europe/Paris
ports:
- "8901:8901"
restart: unless-stopped
Then open the Web UI in your browser and continue the setup there.
🤝 Community
Questions, ideas, feedback, and contributions are welcome.
Join the Tuliprox Discord community
🧱 Project Layout
backend/— backend crates;app/contains the main server and processing pipelinefrontend/— Yew Web UIshared/— DTOs and shared logicconfig/— example configurationdocs/— Markdown source for the project documentation
📚 Documentation
The detailed documentation lives in Markdown under docs/ and is designed to be rendered as a static site.
- Docs source:
docs/src/index.md - Build static docs:
make docs - Serve generated docs with the Web UI build at
/static/docs/
Main entry points:
- Getting Started
- Core Features
- Build & Deploy
- Installation
- Configuration Overview
- Examples & Recipes
- Operations & Debugging
- MCP Server
- Troubleshooting & Resilience
Documentation Strategy
The recommended format is:
- source in Markdown
- generated as static HTML
- shipped together with the frontend/web root
For this repository, mdBook is a natural fit:
- Markdown stays easy to review and edit in Git
- static HTML output is simple to host
- it fits the Rust ecosystem well
- navigation and search are available out of the box
📄 License
See LICENSE.