Skip to main content

Run modes

tuliprox has two distinct run modes:

CLI mode

In CLI mode, tuliprox reads your sources, processes the playlist, writes the output files, and exits. Use this when you want to generate static M3U files to serve with your own web server (Nginx, Apache, Caddy, etc.):
You can limit processing to a specific target by passing -t:

Server mode

In server mode, tuliprox starts a long-running process that exposes the M3U, Xtream Codes, HDHomeRun, and management APIs, runs the background scheduler, and serves the Web UI:
This is the mode used in the Docker deployment.

CLI arguments

--dbx, --dbm, --dbe, --dbv, and --dbms open interactive database inspection tools for debugging. They are intended for troubleshooting, not normal operation.

Home directory resolution

tuliprox resolves its home directory in this priority order:
  1. The --home CLI flag
  2. The TULIPROX_HOME environment variable
  3. The directory containing the tuliprox binary
All relative paths in your configuration files are resolved against the home directory. In Docker deployments, the working directory /app acts as the home directory.

Project layout

A typical tuliprox home directory looks like this:

Key configuration files

Utility commands

Generate a Web UI password hash

The Web UI user.txt file stores bcrypt-hashed passwords. Generate a hash for a new password:
Enter your desired password when prompted. Paste the resulting hash into user.txt.

Healthcheck

tuliprox exposes a healthcheck command suitable for Docker or container orchestration:
This exits with code 0 if the server is responding and 1 otherwise. Wire it into your docker-compose.yml healthcheck block:

Good first milestone

When setting up tuliprox for the first time, keep the scope small until each step is confirmed working. Adding filtering, mapping, reverse proxy, and metadata features all at once makes it hard to isolate failures.
1

Add one working input

Configure a single input in source.yml — one M3U URL or one set of Xtream Codes credentials. Start tuliprox and confirm it fetches the playlist without errors.
2

Create one target

Define one target with a single output type (start with m3u). Confirm the output file is written to your data/ directory.
3

Confirm playlist output

Open the generated M3U file and check that channels appear as expected. Verify channel count and spot-check group names.
4

Confirm one stream plays

Point VLC or another player at the playlist. Confirm at least one live stream plays from end to end before proceeding.
5

Add advanced features

Only once streaming is confirmed end-to-end, layer in mapping rules, filters, reverse proxy configuration, and metadata enrichment. Adding these one at a time keeps failures easy to diagnose.
Provider-specific issues (wrong credentials, URL format, connection limits) are much easier to diagnose when your tuliprox configuration is minimal. Get a bare pipeline working first.
Once you have a working baseline, explore the rest of the documentation in this order:

Config reference

Full reference for config.yml — API server, scheduling, logging, and reverse proxy settings.

Sources and targets

Define inputs, configure multiple providers, and shape outputs with filters.

API proxy

Configure per-user credentials, connection limits, and published server URLs.

Streaming and proxy

Understand how tuliprox handles live stream proxying, sharing, and failover.

Mapping and templates

Rename channels, rewrite attributes, and define reusable template expressions.

Examples and recipes

Copy-paste recipes for common setups and real-world filtering patterns.