DasPoschi 7a7f9979cd fix: correct
escape sequences in fetch_proxy_list (syntax error)
2026-04-13 18:16:23 +00:00
2026-04-13 18:16:23 +00:00

JD → Jellyfin WebGUI (Docker)

Web GUI to:

  • paste a URL (e.g. YouTube)
  • download via MyJDownloader
  • validate video with ffprobe
  • compute MD5 locally, upload via SFTP
  • verify MD5 on the Jellyfin VM
  • cleanup local file + remove JD package/links (best effort)
  • optional: TMDB naming, movie/series folders, Jellyfin library refresh

Files

  • docker-compose.yml stack
  • .env.example copy to .env and fill in your values (never commit .env!)
  • jd-webgui/app.py FastAPI web app
  • jd-webgui/Dockerfile includes ffprobe

Setup

  1. Copy env file:
cp .env.example .env
  1. Edit .env:
  • MYJD_EMAIL, MYJD_PASSWORD
  • JELLYFIN_HOST, JELLYFIN_USER, target dirs
  • SSH_KEY_PATH (absolute path on Docker host)
  • Optional: JELLYFIN_API_KEY, TMDB_API_KEY
  1. Start:
docker compose up -d --build
  1. Open WebGUI:
  • http://<docker-host>:${WEBGUI_PORT}

Notes

  • JDownloader must be logged into MyJDownloader and appear as an online device.
  • If MYJD_DEVICE is empty, the WebGUI will automatically pick the first available device.
  • Ensure the SSH user can write to /jellyfin/Filme (and series dir if used).

Security

  • Never commit .env it contains passwords and API keys. Only .env.example is tracked.
  • SSH host key verification: For secure SFTP transfers, provide a known_hosts file:
    ssh-keyscan -p 22 192.168.1.1 > known_hosts
    
    Mount it in docker-compose.yml and set SSH_KNOWN_HOSTS=/ssh/known_hosts. Without it, any host key is accepted (MITM risk on untrusted networks).
  • Basic Auth protects the WebGUI but transmits credentials in cleartext over HTTP. Use a reverse proxy with HTTPS (e.g. Traefik, Caddy) in production.

Troubleshooting

  • Device not found: list devices
docker exec -it jd-webgui python -c "from myjdapi import Myjdapi; import os; jd=Myjdapi(); jd.connect(os.environ['MYJD_EMAIL'], os.environ['MYJD_PASSWORD']); jd.update_devices(); print([d.get('name') for d in jd.devices])"
  • Check container can see downloads:
docker exec -it jd-webgui ls -la /output | head
Description
No description provided
Readme 209 KiB
Languages
Python 95.8%
CSS 3.3%
Dockerfile 0.9%