Debugging
When things don't work as expected, here's how to troubleshoot.
Check the Logs
Logs are your primary debugging tool. Increase verbosity if needed:
TVARR_LOGGING_LEVEL=debug
Docker Logs
# Follow logs
docker logs -f tvarr
# Last 100 lines
docker logs --tail 100 tvarr
# Filter for errors
docker logs tvarr 2>&1 | grep -i error
Kubernetes Logs
# Follow logs
kubectl logs -f deploy/tvarr
# Previous container (if crashed)
kubectl logs deploy/tvarr --previous
Common Issues
"No channels after ingestion"
Check: Source URL is accessible
# Test from inside container
docker exec tvarr curl -I "your-m3u-url"
Check: Source format is correct
- M3U files must start with
#EXTM3U - Xtream credentials must be valid
Check: Filters aren't excluding everything
- Temporarily disable filters
- Check filter expressions for typos
"EPG not showing"
Check: EPG source ingested successfully
docker logs tvarr 2>&1 | grep -i epg
Check: tvg-id matches between M3U and XMLTV
- View channel details to see tvg-id
- Compare with XMLTV channel ids
Fix: Use data mapping to set correct tvg-id
channel_name contains "News Channel" SET tvg_id = "news1.example"
"Stream won't play"
Check: Origin stream is accessible
# Test stream URL
docker exec tvarr curl -I "stream-url"
Check: Transcoding errors
docker logs tvarr 2>&1 | grep -i ffmpeg
Check: Client codec support
- Try different format (hls-ts vs dash)
- Try passthrough (no transcoding)
"Transcoding not working"
Check: FFmpeg is detected
docker exec tvarr ffmpeg -version
Check: Hardware acceleration
# List available encoders
docker exec tvarr ffmpeg -encoders | grep -E "vaapi|nvenc|qsv"
# Test VAAPI
docker exec tvarr ls -la /dev/dri
Check: Worker connectivity (distributed mode)
- View Transcoders page
- Check worker logs
"High CPU/memory usage"
Check: Number of active streams
- Each stream consumes resources
- Transcoding uses significant CPU (or GPU)
Reduce: Concurrent stream limit
TVARR_RELAY_MAX_CONCURRENT_STREAMS=5
Reduce: Use hardware acceleration
Reduce: Lower encoding quality
"Database locked" (SQLite)
Cause: Multiple processes accessing SQLite
Fix: Only run one tvarr instance with SQLite
Alternative: Switch to PostgreSQL for multi-instance
Useful Log Patterns
Find errors
docker logs tvarr 2>&1 | grep -iE "error|fail|panic"
Track specific channel
docker logs tvarr 2>&1 | grep "channel-id-here"
Watch ingestion
docker logs -f tvarr 2>&1 | grep -i ingest
Watch transcoding
docker logs -f tvarr 2>&1 | grep -iE "ffmpeg|transcode|encode"
Getting Help
If you can't resolve an issue:
- Set
TVARR_LOGGING_LEVEL=debug - Reproduce the issue
- Collect relevant logs
- Open an issue at GitHub Issues
Include:
- tvarr version
- Deployment type (Docker/Kubernetes)
- Relevant configuration (redacted)
- Error logs
- Steps to reproduce