Debug tools
Before diving into specific issues, enable detailed logging to get more information:Common issues
Streams not loading / 404 errors
Streams not loading / 404 errors
Symptoms: Channels appear in the playlist but fail to play; the player shows a 404 or “stream not found” error.Check the following:
- Confirm the upstream provider URL is reachable from the tuliprox host.
- Check that the target output is configured with the correct user credentials in
api-proxy.yml. - Verify
storage_diris writable and that the initial playlist update ran (update_on_boot: trueor a manual update). - Use
--dbmor--dbxto inspect the stored playlist and confirm the channel is present in the database.
- Check logs for
404or410responses from the upstream — these trigger provider failover if multiple URLs are configured.
Provider connection limits being hit
Provider connection limits being hit
Symptoms: Some users receive a fallback “connections exhausted” video or HTTP
503; new streams fail while others are active.Explanation: Each provider account has a maximum number of simultaneous streams. tuliprox enforces this limit and returns a custom fallback response when it is reached.Solutions:-
Enable stream sharing so multiple viewers attach to a single upstream connection:
-
Place a custom fallback video at:
- Add a second provider URL or account and configure failover rotation.
- Review the Web UI stream table to identify which users are holding connections open.
VLC seek problems (grace period tuning)
VLC seek problems (grace period tuning)
Symptoms: Seeking in VLC causes the stream to stall or fail; the player reconnects but the provider refuses the new connection because the previous one has not closed yet.Explanation: VLC and similar clients issue rapid reconnects during seeks. The provider may still count the previous connection as active, triggering a connection-limit error.Solution: Increase the grace period so tuliprox waits for stale connections to close before re-checking limits:
grace_period_millis— how long to wait (in milliseconds) before re-evaluating the connection limit after a reconnectgrace_period_timeout_secs— how long to hold the new connection attempt while waiting for the old one to cleargrace_period_hold_stream— iftrue, tuliprox delays sending any media data until the grace decision is made
HLS session issues
HLS session issues
Symptoms: HLS streams stall after a few segments; the player reconnects and gets a 503 or connection-limit error on the next segment request.Explanation: HLS clients repeatedly connect and disconnect for each playlist and segment fetch. tuliprox maintains an account reservation between requests rather than holding a real provider slot open. If Set this higher than your HLS target segment duration plus any network latency.
hls_session_ttl_secs is too short, the reservation expires between segment requests.Solution: Increase the session TTL:SSL certificate errors
SSL certificate errors
Symptoms: Streams or playlist fetches fail with TLS handshake errors or certificate validation failures in the log.Solution: Enable acceptance of self-signed or untrusted certificates:
Authentication failures (401 / 403)
Authentication failures (401 / 403)
Symptoms: Streams fail with HTTP
401 Unauthorized or 403 Forbidden; failover to the next provider URL does not occur.Explanation: tuliprox does not trigger provider failover for 401 or 403 responses. These status codes indicate a credential problem, not a transient server error. Failing over to another URL with the same credentials will produce the same result.Solutions:- Verify the provider username, password, and base URL in
source.ymlare correct. - Check whether the provider account is active and not expired.
- Confirm that
user_access_controlis not blocking the request due to an expired or invalid user inapi-proxy.yml. - Check the tuliprox log for the full request URL to confirm it is being constructed correctly.
Missing channels after a playlist update
Missing channels after a playlist update
Symptoms: Channels that were previously available no longer appear after a scheduled or manual playlist update.Check the following:
- The upstream provider may have removed or renamed the channels. Check the source M3U or Xtream API directly.
- Review your mapping and filter rules — a filter that previously passed the channel may no longer match after a rename.
-
If
watchnotifications are configured, check the alert that was sent for group-change details. -
Use
--dbmor--dbxto inspect the current database and confirm whether the channel entry exists: -
If the data directory is corrupted, clear
storage_dirand trigger a fresh playlist update. tuliprox will re-fetch and rebuild all databases.
Docker volume permission errors
Docker volume permission errors
Symptoms: tuliprox fails to start or write files; logs show Alternatively, add a Confirm the mount paths match the
permission denied errors for paths under config/, data/, or cache/.Solution: Ensure the host directories are owned by or readable and writable by the user the container runs as. For rootless containers, match the UID:user: directive to your docker-compose.yml:storage_dir, backup_dir, and web_root values in your config.yml.Web UI not loading
Web UI not loading
Symptoms: Navigating to
http://host:8901 returns a blank page, 404, or connection refused.Check the following:-
Confirm
web_ui.enabled: trueis set inconfig.yml. -
Verify
api.web_rootpoints to the correct directory containing the frontend assets. -
Ensure tuliprox is running in server mode (
-sflag). -
Check that the port in
api.portmatches what you are accessing in the browser. -
If authentication is enabled, confirm the credentials are correct. Generate a new password hash with:
- Inspect the tuliprox log for bind errors — another process may already be using the port.
Database inspection
When logs are not enough, inspect the internal databases directly:| Flag | Contents |
|---|---|
--dbx | Xtream channel data |
--dbm | M3U playlist data |
--dbe | EPG programme data |
--dbv | Target-ID virtual mappings |
--dbms | Metadata retry and failure status |