
Seerr
Unified request management for Plex, Jellyfin, and Emby
Overview
Seerr is the unified media request manager that merges Overseerr and Jellyseerr into a single application, maintained by the seerr-team. It provides native support for Plex, Jellyfin, and Emby media servers with an intuitive interface for users to discover and request movies and TV shows. Requests are automatically forwarded to Sonarr and Radarr for download. User quota management, approval workflows, and extensive notification support (Discord, Slack, email, Telegram, Pushover) make Seerr the definitive content request tool for shared media servers.
QuickBox Pro installs Seerr per user from the official seerr-team/seerr GitHub repository, building with Node.js 22.11.0 and pnpm 10.24.0. The installer creates isolated virtual environments, configures a per-user systemd service (seerr@username), and allocates a unique public port and internal port for each user so multiple users on the same server can run Seerr side by side without collisions.
Seerr is the canonical replacement for both Overseerr and Jellyseerr in QuickBox Pro. Running qb update overseerr -u username or qb update jellyseerr -u username automatically migrates to Seerr. New installations should use qb install seerr -u username directly.
Seerr is a multi-user installable application — each user on the server can have their own Seerr instance with its own port, data directory, and optional subdomain. Whether a given non-admin user is permitted to install Seerr is controlled by their assigned user group. Your server administrator decides which user groups are allowed to install Seerr; administrators can install Seerr for any user regardless of group. If a user attempts to install Seerr and their group does not include it, the install will be blocked with a “package not allowed for user’s group” message.
Key features
Multi-Server Support
Native integration with Plex, Jellyfin, and Emby with automatic library scanning
Sonarr/Radarr Integration
Automatic request forwarding to media management tools with quality profile selection
User Management
Request quotas, approval workflows, and granular permissions per user
Rich Notifications
Discord, Slack, email, Telegram, and Pushover notifications for requests and approvals
Media Discovery
Browse popular, trending, and upcoming content from TMDb with rich metadata
Built-in Migration
Migrate from Overseerr or Jellyseerr with --migrate --from preserving settings, database, and ports
Per-User Service
systemd unit seerr@username with isolated Node.js venv and a unique randomized public port per user
Multi-User Installable
Multiple users on the same server can each run their own Seerr instance without port collisions
Reverse Proxy Ready
nginx fronts each user's public port and proxies to an internal localhost port with automatic path rewriting
TLS Domain Support
Optional per-user subdomain via the v4 dashboard <strong>SSL Control</strong> page (or qb install lecert --seerr -d domain -u username)
When to use it
Prerequisites
- Need a unified media request app supporting Plex, Jellyfin, and Emby
- Want to consolidate separate Overseerr and Jellyseerr installations
- Require user quota management and approval workflows for content requests
- Need automated notifications for request status updates across multiple channels
What you get
- Install via
qb install seerr -u usernameto clone seerr-team/seerr and build with pnpm - Each user is assigned a unique public port (randomized from the
5055base) and a derived internal port for the Node.js process - Optional per-user subdomain via the v4 dashboard SSL Control page, or directly with
qb install seerr -u username -d domain/qb install lecert --seerr -d domain -u username - Per-user systemd service
seerr@usernamewith Node.js 22.11.0 venv and auto-start on boot
Installation
Administrators can install Seerr for any user at any time. Non-admin users can install Seerr themselves only if their assigned user group includes Seerr in its allowed software list. If you are a regular user and the install command returns “package not allowed for user’s group”, ask your server administrator to add Seerr to your group’s software permissions. Installs triggered from the v4 dashboard’s Package Management page enforce the same group-based access rules.
Install from the QuickBox CLI
qb install seerr -u usernamePublish Seerr on a per-user subdomain
Each user can optionally have Seerr published on its own subdomain (e.g. https://seerr.user.example.com). The recommended workflow is the SSL Control page in the v4 dashboard, which an administrator uses to issue a Let’s Encrypt certificate and generate a per-user nginx vhost in one step. Under the hood, SSL Control invokes:
qb install lecert --seerr -d domain -u usernameThe same command is available directly from the CLI, and you can also pass -d at install time:
qb install seerr -u username -d 'seerr.example.com'The lecert workflow reads the user’s internal port from /opt/username/Seerr/env.conf, copies the subdomain.nginx.conf template, and writes /etc/nginx/sites-enabled/username.seerr.conf with the provided domain and certificate paths. When DNS credentials are configured (for example Cloudflare, Route53, or DigitalOcean), the installer detects them automatically and uses DNS challenge validation.
Migrate from Overseerr or Jellyseerr
Seerr includes a built-in migration utility that preserves your settings, database, port assignment, nginx configuration, and URL overrides:
# Migrate from Jellyseerr
qb install seerr -u username --migrate --from jellyseerr
# Migrate from Overseerr
qb install seerr -u username --migrate --from overseerrThe migration process:
- Backs up the source application
- Stops the old service
- Copies
settings.jsonanddb.sqlite3to the new Seerr install - Preserves the original port assignment
- Creates new nginx configs from Seerr templates
- Migrates URL override entries
- Removes old database entries, service files, and install directories
- Reloads systemd and nginx
Running qb update jellyseerr -u username or qb update overseerr -u username automatically triggers migration to Seerr. No manual intervention is needed.
Initial Configuration
First-Time Setup
On first access, Seerr prompts you to connect your media server:
- Open Seerr web interface at
http://host:port - Select Media Server Type: Choose Jellyfin, Emby, or Plex
- Authenticate: Sign in with your media server account
- Select Server: Pick your media server from the list
- Library Sync: Seerr automatically scans your media libraries
- Admin Assignment: First user to sign in becomes the administrator
Seerr is automatically integrated into your QuickBox dashboard. Find it in the Service Control panel with port and status information. Click the LAUNCH icon to open the web interface.
Connect Sonarr and Radarr
Configure media management integrations for automatic request handling:
- Navigate to Settings > Services in Seerr
- Add Radarr Server:
- Default Server - Enable for primary Radarr instance
- Server Name - Descriptive name (e.g., “QuickBox Radarr”)
- Hostname or IP -
localhost - Port - Your Radarr port (default
7878) - Use SSL - Uncheck (reverse proxy handles SSL)
- API Key - Copy from Radarr > Settings > General > API Key
- Quality Profile - Select default profile
- Root Folder - Select default media path
- Minimum Availability - Released, In Cinemas, or Announced
- Click Test to verify connection, then Save
- Add Sonarr Server:
- Follow same steps as Radarr
- Port - Your Sonarr port (default
8989) - API Key - Copy from Sonarr > Settings > General > API Key
- Quality Profile - Select default profile (e.g., “HD-1080p”)
- Root Folder - Select TV shows path
- Season Folder - Enable for organized library structure
- Click Test, then Save
Configure Notifications
Set up notification channels for request updates:
- Go to Settings > Notifications
- Discord Integration (recommended):
- Create Discord webhook in your server
- Enter Webhook URL
- Enable notification types: Media Requested, Media Approved, Media Available, Media Failed
- Click Test to send test notification
- Save Changes
- Email Notifications (optional):
- Configure SMTP Settings (host, port, credentials)
- Set From Email Address
- Enable desired notification types
- Save Changes
Access and authentication
URL / route
- Default:
https://host:<your-public-port>— nginx in/etc/nginx/apps-http/username.seerr.conflistens on the user’s randomized public port and proxies to the internal Node.js port on127.0.0.1. The exact public port is unique per user and recorded in the QuickBox database. - Path-based access: some installations also expose Seerr at
/seerrthrough/etc/nginx/software/username.seerr.confalongside the per-user public port listener. - With a subdomain:
https://domain/served by/etc/nginx/sites-enabled/username.seerr.confwhen installed with-d domainfrom lecert or via the v4 dashboard’s SSL Control page.
Find Seerr in the v4 dashboard under Package Management and in the Service Control tile on your app landing page. The tile shows your assigned port and a direct LAUNCH link. You can also read your assigned port from the software_port column of the user_software table or directly from /opt/username/Seerr/env.conf (which stores the internal Node.js port — add or subtract 10000 to map between internal and public).
Security notes
- The service runs as
usernameviaseerr@username.serviceand reads environment settings from/opt/username/Seerr/env.conf - Each user gets a unique public port and a unique internal port; the internal port is
public_port + 10000 - TLS is provisioned when lecert installs certificates into
/etc/nginx/ssl/domain/and binds them in the generated vhost - First user to sign in becomes the administrator with full permissions
- Additional users inherit permissions based on their media server role
- Webpush notifications are enabled by default during installation
Configuration and files
Common tasks
Service Management
Seerr runs as a per-user systemd service seerr@username:
# Start/stop/restart service
systemctl start seerr@username
systemctl stop seerr@username
systemctl restart seerr@username
# Check service status
systemctl status seerr@username
# View live logs
journalctl -u seerr@username -f
# Enable/disable auto-start on boot
systemctl enable seerr@username
systemctl disable seerr@usernameApplication Management
Use QuickBox CLI for application updates and maintenance:
# Update to latest release
qb update seerr -u username
# Reinstall (preserves database)
qb reinstall seerr -u username
# Remove application
qb remove seerr -u username
# View help
qb help seerrEvery Seerr update needs to know which public port your instance already owns so nginx, the database row, and the running service stay consistent. The updater resolves that port from multiple sources in priority order and refuses to proceed if none of them yield a valid value:
/opt/username/Seerr/env.conf— thePORT=value written by the last successful install or update. This is the most authoritative source because it is exactly what the runningseerr@usernameservice binds to.- QuickBox database (
user_software.software_portfor this user) — used whenenv.confis missing or unreadable. /etc/nginx/apps-http/username.seerr.conf— the public port parsed from thelistendirective. Fallback of last resort.
Each candidate is validated as a positive integer before it is accepted. If all three sources are missing, empty, or invalid, the update aborts cleanly — no files are rewritten, no services are restarted, and the install lock is released so you can retry after investigating. This guarantees qb update seerr will never silently re-assign your port or corrupt your deployment if the state on disk is partially damaged.
nginx Management
Reload nginx after configuration changes:
# Test configuration
sudo nginx -t
# Reload nginx
sudo systemctl reload nginxFAQ
5055) and a derived internal port equal to the public port plus 10000. The public port is recorded in the user_software.software_port database column and surfaced in the v4 dashboard's app tile. The internal port is written to /opt/username/Seerr/env.conf as PORT= — that's the port the Node.js process actually binds on localhost, and nginx proxies the public port to it. When migrating from Overseerr or Jellyseerr, the original port is preserved.seerr@username), data directory (/opt/username/Seerr/), public port, internal port, and nginx configs. Whether a specific non-admin user is allowed to install Seerr depends on their assigned user group's software permissions; administrators can install Seerr for any user./etc/systemd/system/seerr@username.service. Nginx public-port listener: /etc/nginx/apps-http/username.seerr.conf. Optional path-based proxy: /etc/nginx/software/username.seerr.conf. When installed with -d domain, the subdomain vhost lives at /etc/nginx/sites-enabled/username.seerr.conf.seerr-team/seerr, checks out the latest tagged release, installs Node.js 22.11.0 with pnpm 10.24.0 inside /opt/username/lib/nodejs/Seerr/.venv, runs pnpm install --frozen-lockfile, builds with pnpm build, and starts the application under the target user.qb install seerr -u username --migrate --from overseerr or --from jellyseerr. This preserves your settings, database, port, nginx config, and URL overrides. Alternatively, running qb update jellyseerr or qb update overseerr automatically triggers the migration.settings.json to allow browser push notifications for request updates. You can disable this in Seerr settings if not needed.settings.json and db.sqlite3 from the old application, preserves the port assignment, creates new nginx configs from Seerr templates, and removes the old install. A backup of the source application is created before any changes are made.env.conf, the QuickBox database, or the existing nginx listener. This is an intentional safety guard — it prevents a corrupt or zero-valued port from being written into your nginx config, env.conf, and database row. The install lock is released automatically on abort, so you can retry after repairing the broken source. See the Troubleshooting section above for the exact files to check and how to recover.Best practices
Do
- Use
qb install seerr -u usernamefor new installations (add-d domainwhen needed) - Run
qb update jellyseerr -u usernameorqb update overseerr -u usernameto auto-migrate existing installations to Seerr - Check service health with
systemctl status seerr@usernameand tail logs withjournalctl -u seerr@username -f - Reload nginx after adding or removing a domain:
sudo systemctl reload nginx - Set up Discord or email notifications for request updates to keep users informed
- Configure user quotas to prevent request spam (5-10 requests per week is a good starting point)
- Enable approval workflows for non-admin users to moderate content requests
- Regularly sync media server libraries to keep Seerr metadata updated
- Take a manual backup before major changes: use the Backups panel on the v4 dashboard's <a href="/docs/dashboard/app-management">App Management</a> page, or run
qb manage software -o backup -u username -s seerr. The install/reinstall/update-triggered copy in/home/username/.QuickBox/software/seerr/backup/is a safety net, not a substitute for user-scheduled backups.
Don't
- Avoid editing generated nginx files by hand -- rerun
qb reinstall seerr -u usernameto refresh templates - Do not swap the
PORT=value inenv.confdirectly — the internal port must stay in sync with the public port stored in the database and the nginx apps-http listener; useqb reinstall seerr -u usernameinstead - Don't install both Seerr and Jellyseerr/Overseerr for the same user -- use migration instead
- Don't grant admin access to all users -- use request quotas and approval workflows
- Don't configure multiple default servers in Sonarr/Radarr settings -- causes request routing conflicts
- Don't ignore failed notifications -- check logs and fix webhook/SMTP issues
- Don't forget to configure root folders in Sonarr/Radarr -- requests will fail without valid paths
Troubleshooting
Install hangs waiting for settings.json
Symptom: qb install seerr -u username or qb update seerr -u username aborts with Timed out waiting for /opt/username/Seerr/config/settings.json after 60s. The install lock is released automatically — no database rows are written and nginx is left untouched.
What this means: Right after building the app, the installer starts seerr@username and waits up to 60 seconds for Seerr’s first launch to generate /opt/username/Seerr/config/settings.json. If the Node.js process crashes before that file is written (missing dependency, corrupted build, bad prior state in the config directory, or insufficient memory/disk to complete the first boot), the wait trips and the install aborts.
Checks (run in this order):
-
Service state — look at why the first-boot attempt died:
systemctl status seerr@username journalctl -u seerr@username -n 100 --no-pagerCommon signals:
MODULE_NOT_FOUND,Cannot find module,EACCES,ENOSPC(disk full), or a Node-level stack trace. -
Installer log — the build step pipes its output here:
tail -n 200 /opt/quickbox/logs/seerr.logLook at the final lines before the timeout. A failed
pnpm installorpnpm build(network flake, locked pnpm cache, out-of-memory kill) will show up here and explains why the service could not start cleanly. -
Config directory — confirm the first-boot attempt did not leave a partial file behind:
ls -la /opt/username/Seerr/config/A zero-byte
settings.json, a leftoversettings.json.tmp, or a pre-existingsettings.jsonowned byrootis the bad-state signal. The installer’sjqstep writessettings.json.tmpthen renames it oversettings.json, so a stranded.tmpmeans the rename never happened. -
Node runtime — the installer pins Node 22.11.0 inside a per-user venv. Confirm that venv exists:
/opt/username/lib/nodejs/Seerr/.venv/bin/node --versionshould print
v22.11.0. If the venv path is missing, the dependency step failed earlier and the service could never start. -
Disk space and permissions — a full
/optpartition or a wrong owner on/opt/username/Seerrwill both surface as a service that exits before writingsettings.json:df -h /opt ls -ld /opt/username/SeerrThe install directory must be owned by
username:username.
Resolution:
-
If the journal shows a module/build error, do a full clean reinstall:
qb remove seerr -u username qb install seerr -u usernameThis tears down the systemd unit, nginx configs, Node/Python venvs, and the install directory, then rebuilds everything from scratch with a fresh Node venv and a clean
settings.json. -
If the journal shows a disk, permission, or memory problem, fix the underlying cause first (free space, correct ownership, add swap for low-RAM servers), then reinstall as above.
-
If the failure happened during a
qb update(including the auto-migration that runs when you updateoverseerrorjellyseerr), your original Seerr / source-app data is still on disk. A plain reinstall is safe because the installer will rebuild the config directory; if you want to preserve your existingsettings.jsonanddb.sqlite3, copy them out of/opt/username/Seerr/config/before the remove step and drop them back in after the reinstall completes. -
If every step above checks out clean and the install still trips the 60-second wait, collect
systemctl status seerr@username,journalctl -u seerr@username -n 200 --no-pager, and the tail of/opt/quickbox/logs/seerr.log, and open a Discord support ticket with those three pastes attached.
General install and update troubleshooting
The same five-step flow works for any Seerr install or update failure, not just the settings.json timeout:
- Service state —
systemctl status seerr@usernameshows whether the unit exists, whether it is enabled, and the exit code of its last attempt to start. - Journal —
journalctl -u seerr@username -n 100 --no-pagersurfaces the actual Node.js error that killed the process. Re-run with-fto watch a live restart. - Installer log —
tail -n 200 /opt/quickbox/logs/seerr.logcaptures the output of everynpm,pnpm, andgitcommand the installer ran. Most “failed to install” symptoms trace back to a single red line here. - Disk space —
df -h /optanddf -h /home. A full partition can silently breakpnpm install(the Seerrnode_modulestree is large) or preventdb.sqlite3from being written on first boot. - Ownership —
ls -ld /opt/username/Seerr /home/username/.config/Seerr. Both must be owned byusername:username. If a prior run was interrupted mid-chown, the service will fail to read its own config.
Service will not start
Checks:
- Check status:
systemctl status seerr@username - View logs:
journalctl -u seerr@username -f - Verify Node.js venv:
/opt/username/lib/nodejs/Seerr/.venv/bin/node --version(should show v22.11.0) - Check permissions:
ls -la /opt/username/Seerr(should be owned byusername:username) - Verify the assigned internal port is free:
ss -tuln | grep "$(grep -oP 'PORT=\K\d+' /opt/username/Seerr/env.conf)"(onlyseerr@usernameshould be bound there)
Resolution: If Node environment is missing or corrupted, reinstall with qb reinstall seerr -u username to rebuild the virtual environment.
404 on the Seerr URL
Symptom: Accessing Seerr through the reverse proxy returns 404 Not Found.
Checks:
- Verify the apps-http nginx config exists:
ls -la /etc/nginx/apps-http/username.seerr.conf - Look up the user’s internal port:
grep PORT /opt/username/Seerr/env.conf - Confirm the nginx config’s
proxy_passtarget matches that internal port - Test nginx config:
sudo nginx -t - Check service status:
systemctl status seerr@username(should be active) - Verify the Node.js process is listening on its internal port:
ss -tuln | grep "$(grep -oP 'PORT=\K\d+' /opt/username/Seerr/env.conf)"
Resolution: Reload nginx with sudo systemctl reload nginx. If the internal or public port drifted (for example after a manual edit of env.conf), run qb reinstall seerr -u username to rebuild the nginx templates against the database-stored port. If a domain was installed, ensure /etc/nginx/sites-enabled/username.seerr.conf references the active certificate paths under /etc/nginx/ssl/domain.
Cannot connect to Sonarr or Radarr
Symptom: Seerr reports “Failed to connect to Radarr” or “Failed to connect to Sonarr”.
Checks:
- Verify services are running:
systemctl status sonarr@username systemctl status radarr@username - Test API connectivity:
curl http://localhost:7878/api/v3/system/status?apikey=YOUR_RADARR_API_KEY curl http://localhost:8989/api/v3/system/status?apikey=YOUR_SONARR_API_KEY - Verify API keys match in Seerr settings
- Check hostname configuration: use
localhost(not127.0.0.1or server IP)
Resolution: Update Seerr connection settings with correct API keys and ensure “Default Server” is checked for your primary Sonarr/Radarr instance.
Requests not sending to Sonarr or Radarr
Symptom: User requests are approved but not appearing in Sonarr/Radarr.
Checks:
- View Seerr logs:
journalctl -u seerr@username -f | grep -i error - Verify “Default Server” is configured: Settings > Services > Radarr/Sonarr > Check ‘Default Server’
- Ensure quality profiles exist and are selected
- Verify root folders are configured and paths are valid
Resolution: Test manual request from Seerr UI and watch logs. Ensure quality profile and root folder are properly configured.
qb update seerr aborted with a port resolution error
Symptom: Running qb update seerr -u username stops early with a message that the public port could not be resolved. The install lock is released automatically — you can retry once the underlying state is fixed.
What this means: The updater intentionally refuses to continue if it cannot recover a valid public port from any of its trusted sources. This is a safety guard that prevents a partially-corrupt deployment from being rewritten with an invalid port (for example, listen 0 ssl; in nginx or a 0 in the database). No files are touched when this guard fires.
Checks:
- Check
env.conf:cat /opt/username/Seerr/env.conf— expect a line likePORT=15055. If the file is missing, empty, or the value is0, the first source has failed. - Check the database port: inspect
user_software.software_portfor this user in the QuickBox database. A value of0,NULL, or a missing row means the second source has failed. - Check the nginx listener:
grep -E '^\s*listen' /etc/nginx/apps-http/username.seerr.conf— expect a real port followed byssl. Alisten 0 ssl;line means the third fallback is also corrupt. - Look for a prior failed install/update that may have left partial state behind.
Resolution:
- If at least one source has a valid (non-zero) port, repair the others to match and retry
qb update seerr -u username. - If all three sources are corrupt, the safest path is to back up
/opt/username/Seerr/config/(your settings and database) and runqb reinstall seerr -u username. The reinstall will allocate a fresh port and rebuild nginx, systemd, andenv.conffrom a clean state while preserving your configuration directory. Open a Discord support ticket if you would like a staff member to walk through recovery with you.
Recover from an update wipe
The update-wipe scenario below only affects servers running a QuickBox Pro CLI release older than 3.2.2.4178. If your server is on 3.2.2.4178 or newer, you do not need to worry about this failure mode — every qb install seerr and qb update seerr now runs the following safeguards automatically:
- Backup first: your current
settings.jsonanddb.sqlite3are copied to~/.QuickBox/software/seerr/backup/before anything on the live install is touched. - Build in staging: the new Seerr version is built in a separate staging directory. Your live install keeps running the whole time.
- Atomic swap: the live install is only replaced after the staging build finishes cleanly.
- Auto-rollback: if the service fails to start on the new version, the entire install is rolled back to the previous state. You never end up with a missing
/opt/username/Seerrdirectory.
Check your CLI version with qb -v. If it is 3.2.2.4178 or higher, the recovery steps below are historical — keep reading only if you need to recover from a failure that happened on an earlier build.
Symptom: A failed qb update seerr -u username on a CLI build older than 3.2.2.4178 has left your install directory gone. Subsequent commands that try to enter /opt/username/Seerr fail with cd: /opt/username/Seerr: No such file or directory, and the Seerr URL returns 502 or connection refused. A fresh install attempt may also surface Timed out waiting for /opt/username/Seerr/config/settings.json after 60s if the rebuild can’t finish cleanly.
What this means: Older versions of the update path removed /opt/username/Seerr before cloning the new release. If the clone, build, or first-boot failed mid-flight, the directory was never restored. From QuickBox Pro 3.2.2.4178 onward, the update is fully transactional (see the green callout above), so new runs cannot reach this state — but installs that were already bitten on earlier builds need to be recovered from the QuickBox backup.
What is in /home/username/.QuickBox/software/seerr/backup/: QuickBox automatically writes settings.json and db.sqlite3 into this directory at specific moments. The directory lives in the user’s home — it is outside /opt/username/Seerr/ and is not touched by an update wipe — but what it contains depends on which of the following triggers ran most recently:
- After
qb install seerr -u username— the copy is taken just after Seerr’s first boot writes a defaultsettings.json. If you had not yet opened Seerr in your browser and completed first-time setup, this snapshot is a blank-defaultsettings.jsonand an essentially emptydb.sqlite3. It is a safety net, not your configured state. - After
qb reinstall seerr -u username— the copy captures the post-reinstall state, not your pre-reinstall state. Useful only if you took a manual backup before reinstalling. - After
qb update seerr -u usernameon CLI3.2.2.4178or newer — the copy is taken before the new version touches the live install, so it is a true pre-update snapshot of your running configuration and request database. This is the case that matters for recovery.
Fresh installs — the backup folder is not your data: if you hit this error on a brand-new install that never reached first-time setup, the backup/ folder contains default settings only. There is nothing meaningful to restore. Skip the restore steps below and run a clean install (qb install seerr -u username). For guaranteed point-in-time snapshots going forward, take a manual backup from the dashboard or CLI before major changes — see Take a manual backup below.
Verify your backup exists and contains real data before doing anything else:
ls -la /home/username/.QuickBox/software/seerr/backup/
stat -c '%s %y %n' /home/username/.QuickBox/software/seerr/backup/settings.json
stat -c '%s %y %n' /home/username/.QuickBox/software/seerr/backup/db.sqlite3Expect to see settings.json and db.sqlite3 with a modification time and byte size that match a moment when your install was actually working. A db.sqlite3 that is only a few KB typically indicates first-boot defaults rather than real request history.
Recovery steps:
-
Rebuild the install directory from scratch:
qb install seerr -u usernameThis reclones
seerr-team/seerr, rebuilds the Node.js venv, allocates a fresh port, writes a newenv.conf, regenerates the nginx config, and starts the service with a clean first-bootsettings.json. Wait for the installer to finish and confirm the service is up:systemctl status seerr@username -
Stop the service so the restore is atomic:
systemctl stop seerr@username -
Restore
settings.jsonanddb.sqlite3from the backup on top of the fresh install:cp -p /home/username/.QuickBox/software/seerr/backup/settings.json /opt/username/Seerr/config/settings.json cp -p /home/username/.QuickBox/software/seerr/backup/db.sqlite3 /opt/username/Seerr/config/db/db.sqlite3 chown -R username:username /opt/username/Seerr/config/ -
Start the service and confirm it’s healthy:
systemctl start seerr@username systemctl status seerr@username journalctl -u seerr@username -n 50 --no-pager -
Open Seerr in your browser — your previous settings, media server connection, Sonarr/Radarr links, user list, and request history should all be present.
If you never took a manual backup and the automatic backup is only defaults, a clean reinstall is the only path forward. This is unavoidable on CLI releases older than 3.2.2.4178 because those builds never captured a pre-update snapshot of your configured state — the backup/ folder on those servers only holds what was copied at install or reinstall time, which for most users is a blank-default settings.json and an empty db.sqlite3. Concretely, if any of the following is true:
- The
backup/directory is empty or the.QuickBoxdirectory was manually deleted. backup/settings.jsonexists but was written by a freshqb install seerrbefore you configured Seerr (default settings only — not your data).backup/db.sqlite3exists but is only a few kilobytes in size (empty database, not your request history).
Then your configuration and request database are unrecoverable from this folder. The only path forward is a clean install (qb install seerr -u username) followed by reconfiguring from scratch: reconnect your media server, re-add Sonarr and Radarr, re-invite your users, and rebuild request history as those users place new requests. Open a Discord support ticket with the output of ls -la /home/username/.QuickBox/software/seerr/ attached if you want a staff member to confirm there is no alternate backup source before you rebuild.
To avoid this class of loss in the future, take a manual backup from App Management in the v4 dashboard, or run qb manage software -o backup -u username -s seerr, before any major change. See Take a manual backup below for the full flow. From CLI 3.2.2.4178 onward, updates also capture a pre-update snapshot automatically — but that does not replace a user-scheduled backup cadence.
If step 1 itself fails with the 60-second timeout: see Install hangs waiting for settings.json above to diagnose the first-boot failure, then return to step 2 once the service is running.
Take a manual backup
The automatic copy written to /home/username/.QuickBox/software/seerr/backup/ only runs at install, reinstall, and (on CLI 3.2.2.4178+) at the start of an update. If you want a snapshot of your Seerr configuration and request database on demand — before editing settings, before a reinstall, or just on a schedule — take a manual backup.
From the v4 dashboard: open App Management, expand the Seerr row, and use the Backups panel to create a configuration backup, nginx backup, or full backup. The same panel lets you restore from or delete any previous backup. See App Management for the full dashboard flow.
From the CLI: run qb manage software with the backup operation:
# Back up Seerr's configuration files (settings.json, db.sqlite3)
qb manage software -o backup -u username -s seerr
# Back up the entire application (install directory + config) as timestamped tarballs
qb manage software -o backup -o app -u username -s seerrBoth variants write to /home/username/.QuickBox/software/seerr/backup/ with a timestamped filename, so they do not overwrite the install/reinstall/update-triggered copy. Use qb manage software -o restore -u username -s seerr to restore the most recent configuration backup, or -o rollback -o app to restore a full-application backup.
Related Applications
Request Management (Deprecated)
Resources
Official repository for the unified Seerr project
Comprehensive user guides and setup
Community support and discussions
Legacy Overseerr repository (Plex-only, deprecated)
Legacy Jellyseerr repository (now merged into Seerr)
Join the Community
Media server operators sharing configs, getting support, and shaping the future of QuickBox Pro.