services: # ==================================================== # 1) HandBrake TSD Helper Web UI (Flask app + queue) # ==================================================== hb-web: image: kevina1724/bytesqueeze-tsd:latest pull_policy: always container_name: hb-web restart: unless-stopped ports: - "8081:8080" # Web UI → http://SERVER-IP:8081 environment: - TZ=America/Los_Angeles - HB_DATA_DIR=/app/data # job history + logs inside container - HB_PRESET_DIR=/presets # preset folder inside container - LIBVA_DRIVER_NAME=iHD - TSD_HW_DECODE=${TSD_HW_DECODE:-auto} - TSD_QSV_ADAPTER=${TSD_QSV_ADAPTER:-0} - TSD_QSV_RENDER_DEVICE=${TSD_QSV_RENDER_DEVICE:-/dev/dri/renderD128} volumes: # ✅ Media mount points - /mnt/nas/PLEX_MEDIA:/media/PLEX_MEDIA - /mnt/media:/media/Media - /mnt/media1:/media/Media1 # ✅ Persist jobs.json + log history across rebuilds - ./data:/app/data # ✅ Override/edit HandBrake presets without rebuilding image - ./presets:/presets devices: - /dev/dri:/dev/dri group_add: - "44" # video - "992" # render # ==================================================== # 2) Optional: HandBrake Desktop GUI (manual encoding) # ==================================================== handbrake: container_name: handbrake image: jlesage/handbrake:latest restart: unless-stopped ports: - "5800:5800" # GUI → http://SERVER-IP:5800 environment: - USER_ID=1000 - GROUP_ID=1000 - TZ=America/Los_Angeles volumes: # GUI config storage - /path/to/handbrake/config:/config # Same presets as hb-web for consistency - ./presets:/presets # Optional — access media for browsing/encoding - /mnt/nas/PLEX_MEDIA:/mnt/nas/PLEX_MEDIA - /mnt/media:/mnt/media - /mnt/media1:/mnt/media1