A self-hosted web app that provides invite-code-based user registration for Jellyfin, with built-in Quick Connect device authorization. Designed to be a one-page "Join [Your Server]" portal for friends and family.
- Invite-code registration — generate single-use or multi-use codes with optional expiration
- User login — existing users can log in to authorize new devices
- Quick Connect authorization — enter a 6-digit code from your TV or app to pair it, no existing client needed
- Admin panel — manage invites, view registered users, configure server settings
- Configurable branding — server name and Jellyfin URLs editable via the admin UI
cp .env.example .envEdit .env with your values:
| Variable | Required | Description |
|---|---|---|
JELLYFIN_API_KEY |
Yes | Jellyfin API key (from Dashboard → API Keys) |
JELLYFIN_URL |
Yes | Internal URL to Jellyfin (e.g. http://localhost:8096) |
ADMIN_PASSWORD_HASH |
Yes | SHA-256 hash of your admin password |
SERVER_NAME |
No | Display name (default: Jellyfin) |
JELLYFIN_PUBLIC_URL |
No | Public URL shown to users after registration |
DEFAULT_LIBRARIES |
No | Comma-separated library names to grant access (empty = all) |
Generate the admin password hash:
python3 -c "import hashlib; print(hashlib.sha256(b'your_password').hexdigest())"docker compose up -d --buildThe app will be available at http://localhost:5050.
Log in at /admin with your admin password. Use the Settings card to set:
- Server Name — what your Jellyfin instance is called (shown on the Join page)
- Jellyfin Internal URL — the URL the backend uses to reach Jellyfin
- Jellyfin Public URL — the link users see after registering (e.g. your Tailscale or public domain)
- Admin generates an invite code from the admin panel
- Share the JellyReg URL + invite code with the person
- They enter a username, password, and the invite code
- JellyReg creates the Jellyfin user, enables libraries, and authenticates as them
- The success page shows a link to open Jellyfin and a Connect a device section
After registration (or login), users can pair a TV or phone app:
- TV/app shows a 6-digit Quick Connect code
- User enters the code on the JellyReg success page
- JellyReg authorizes the code via the Jellyfin API using the user's session
- The device connects automatically — no existing logged-in client needed
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/api/register |
POST | none | Create Jellyfin user (invite code required) |
/api/login |
POST | none | Authenticate existing Jellyfin user |
/api/qc/authorize |
POST | session | Authorize a Quick Connect code |
/api/admin/invite |
POST | admin | Generate invite code |
/api/admin/invite/\<code\> |
DELETE | admin | Delete invite code |
/api/admin/settings |
GET | admin | Read settings |
/api/admin/settings |
POST | admin | Update settings |
/api/admin/health |
GET | none | Jellyfin connectivity check |
- Jellyfin 10.8+
- Docker
MIT