Skip to content

Troubleshooting

Common problems, their likely causes, and fixes. If nothing here matches, collect a diagnostic bundle and reach out through the support page.

SymptomLikely causeFix
Container exits immediatelyDATABASE_URL missing or wrongCheck docker compose logs odeion. Set DATABASE_URL to local for the embedded database or a valid PostgreSQL DSN.
port is already allocatedAnother service owns the host portChange the host port mapping in docker-compose.yml (the installation wizard has a Host port field).
Permission errors on volumesPUID/PGID mismatchSet them to the owner of your media and data directories; run id on the host to find your IDs.
First start is slow with local databaseEmbedded PostgreSQL downloads on first runExpected once. Binaries land in the data directory and are reused afterwards.
External database connection refusedNetwork, credentials, or SSL modeTest with psql using the same DSN. Special characters in the password must be percent-encoded in the URL.
SymptomLikely causeFix
Web works, apps refuse to connectApps require HTTPSPut a reverse proxy with a valid certificate in front of the server.
Device link codes failBase URL wrong or not publicly reachable over HTTPSSet the base URL in Admin > Settings > General to your public HTTPS address. See Device Linking.
Watch Together or live updates broken behind nginxWebSocket headers strippedUse the nginx config from the reverse proxy guide; it forwards Upgrade/Connection and disables buffering.
Backup upload fails through proxyProxy body size limitclient_max_body_size 0 (nginx) or the equivalent for your proxy.
SymptomLikely causeFix
too many attempts on loginRate limiting after 10 failures per 15 minutesWait out the window; a successful login clears the per-user counter.
account is lockedAn admin locked the accountUnlock in Admin > Users, or use the CLI escape hatch below.
Only admin locked out, nobody can fix itNo second adminRun odeion reset-password <username> on the server host. It prints a reset link and clears the lock. See Password Reset.
All logins refusedLogin kill switch is onTurn it off in Admin > Settings > Operations.
OAuth button missing or failingProvider disabled, or redirect URI mismatchCheck Admin > Settings > Authentication and the provider console redirect URI. See OAuth and SSO Providers.
Invite code rejectedExpired, used up, or registration kill switchCheck the invite’s expiry and use count in Admin > Users; check the Registration kill switch.
SymptomLikely causeFix
GPU not used for transcodingDevice not passed through, or pool disabledVerify /dev/dri (VAAPI) or the NVIDIA toolkit is configured, then check pool status in Admin > Transcoding > Pools. See Transcoding.
Stuttering and rebuffering under loadSlow transcode cache storageMove the cache directory to fast local storage; see Storage.
GPU pool silently skippedGPU health check failedOdeion bypasses unavailable GPUs and falls back to lower-priority pools; check driver state and re-probe the pool.
Playback refused for everyonePlayback kill switchCheck Admin > Settings > Operations.
Subtitles missing from pickerExtraction disabled or unsupported formatText formats extract automatically when enabled; bitmap formats need burn-in during transcoding. See Subtitles.
SymptomLikely causeFix
New files not appearingScan has not run, or path not mountedTrigger a scan from the admin panel; confirm the library path is mounted into the container.
Scans never startScanning or background-tasks kill switchCheck Admin > Settings > Operations.
Tasks stuck or failingInspect the task errorAdmin > Tasks shows per-task status and errors, with retry buttons.
Wrong metadata matchMatching picked the wrong titleFix the match from the item’s admin page; .nfo or .plexmatch sidecars force correct IDs. See Libraries.
  1. Check the logs: docker compose logs -f odeion, or Admin > Logs in the web UI. Raise file_log_level to debug for more detail; see Debugging.
  2. Collect a diagnostic bundle with odeion doctor. It is redacted by default and safe to share.
  3. Reach out through the support page with the bundle attached.