Initial commit: TVH2Jellyfin application

A Docker-based Python application that transfers completed recordings
from TVHeadend to Jellyfin media storage via SCP.

Features:
- Monitors TVHeadend for completed recordings via JSON API
- Transfers files via SCP with SSH key authentication
- Organizes files by show name
- Deletes recordings from TVHeadend after successful transfer
- Tracks transferred files to avoid duplicates
- Dry run mode for testing without making changes
This commit is contained in:
2026-01-07 17:43:09 +00:00
commit a8b247a83f
25 changed files with 2962 additions and 0 deletions

45
.env.example Normal file
View File

@@ -0,0 +1,45 @@
# TVHeadend server configuration
TVH_HOST=192.168.1.100
TVH_PORT=9981
TVH_USER=admin
TVH_PASS=your_tvheadend_password
# TVHeadend SSH user (for SCP file transfer, defaults to TVH_USER)
TVH_SSH_USER=admin
# SSH port (defaults to 22)
TVH_SSH_PORT=22
# Path to SSH private key on the Docker host (for volume mount)
SSH_KEY_HOST_PATH=./id_rsa
# Path to Jellyfin media library on the Docker host
JELLYFIN_MEDIA_PATH=/mnt/jellyfin/tv
# Application settings
POLL_INTERVAL=300
LOG_LEVEL=INFO
# Dry run mode - set to true to test without transferring/deleting
DRY_RUN=false
# TVDB configuration (optional - for episode lookup)
# Get your API key from https://thetvdb.com/api-information
TVDB_API_KEY=
TVDB_PIN=
TVDB_ENABLED=true
TVDB_CACHE_TTL=86400
# Optional JSON file mapping TVHeadend show names to TVDB names
# TVDB_SHOW_MAPPING=/app/data/show_mapping.json
# TVMaze configuration (optional - fallback for episode lookup)
# No API key required - public API
TVMAZE_ENABLED=true
TVMAZE_CACHE_TTL=86400
# Jellyfin API configuration (optional - for library scan triggers)
# Get your API key from Jellyfin Admin Dashboard > API Keys
JELLYFIN_URL=http://localhost:8096
JELLYFIN_API_KEY=
# Optional: scan only a specific library (get ID from get_libraries())
# JELLYFIN_LIBRARY_ID=
JELLYFIN_ENABLED=true