Give your media server a secure HTTPS address, then connect it in Poster Tools. Your browser sends library requests and artwork directly to your server. No Poster Tools installation or relay is needed.
Prepare your server
A reverse proxy gives your media server an HTTPS address and forwards requests to its local address.
Check that Emby or Jellyfin opens on its host computer.
Use your existing proxy, set up Caddy below, or keep your existing Tailscale connection.
Check that the HTTPS address opens without a certificate warning.
Connect Poster Tools
Open Account Settings, select Integrations, then Emby / Jellyfin.
Choose your connection type and enter the HTTPS address.
Enter your media API key, choose your libraries and save.
Already have HTTPS access? Choose your proxy below to check its browser access settings.
Choose your setup
Choose your proxy or No proxy yet to see your setup steps.
Set up Caddy on your server
This public HTTPS route needs a domain and access to your server, DNS settings and router. Caddy runs on your server; visitors only need their browser.
Find your local media address. Open Emby or Jellyfin on its host computer, for example http://127.0.0.1:8096. Use the actual port for your installation.
Point a domain at your server. Set its DNS A record to your home’s public IP address. Only add an AAAA record if IPv6 reaches the server too. Dynamic DNS can help if your IP changes.
Route ports 80 and 443 to Caddy. Allow them through your router and server firewall. You do not need to forward the media server’s HTTP port. If your ISP uses CGNAT or you cannot change the router, this route may not work; an existing Tailscale connection can provide private access.
Generate the configuration below. Add it to your Caddyfile, keeping existing sites. For native Caddy, run caddy validate --config Caddyfile --adapter caddyfile. Start Caddy using the installation instructions, or use caddy reload --config Caddyfile --adapter caddyfile if it is already running.
Open your HTTPS address. Test from the device and network you will use for Poster Tools. Caddy obtains and renews the certificate when DNS and network access are ready.
For Jellyfin, add Caddy’s address under Known Proxies in the server’s network settings. See the Jellyfin proxy guide for forwarded addresses and WebSocket requirements.
Your server addresses
The local address is where Caddy reaches your media server. Use 127.0.0.1 only when both run directly on the same computer. In Docker, use an address reachable from the proxy container. This generated example requires a dedicated media hostname without a subpath.
Add the Authelia client
Docker Compose example
This example runs Authelia in Docker with your reverse proxy installed directly on the same computer. Emby or Jellyfin can keep running where it already does. If you already run Authelia, update that installation instead.
compose.yml · YAML
name: media-auth
services:
authelia:
# Version used for the Poster Tools integration tests.
# Choose a supported release for your deployment.
image: authelia/authelia:4.39.28
restart: unless-stopped
ports:
# Reachable by a proxy running on this computer.
- "127.0.0.1:9091:9091"
volumes:
# Authelia configuration and persistent data.
- ./authelia:/config
Files you need
Save compose.yml in a new folder. Inside it, create an authelia folder containing your configuration.yml and any user, key or secret files referenced by that configuration. Keep database and notification file paths under /config when using local file storage.
The Compose file starts the container; it does not create users or a complete Authelia configuration. Set up your authentication backend, session domain and secrets, storage, notifications, access rules and OIDC signing keys using the official Docker guide. Then merge the generated Poster Tools client settings below into configuration.yml.
Run these commands from the folder containing compose.yml. Start the service only after validation succeeds. After editing the configuration later, validate it again and run docker compose restart authelia.
Connect it to your proxy
For a proxy installed on this computer, use 127.0.0.1:9091 as the Authelia upstream. Give the login portal its own HTTPS address, such as https://auth.example.com, forwarding to that upstream. The protected media hostname still forwards to Emby or Jellyfin after the Authelia check.
If your proxy also runs in Docker, attach both services to the same Docker network and use authelia:9091 as the upstream. Inside a container, 127.0.0.1 points to that container. The loopback port mapping above is for a proxy running on the host.
Authelia configuration example
For the Compose example, save this as authelia/configuration.yml. It shows a single-instance test setup using a local user file and SQLite. Replace the example domains and every REPLACE_... value before validating or starting it. For an existing installation, merge the Poster Tools settings below into your current file.
configuration.yml · YAML template
server:
address: 'tcp://:9091/'
# Add the authz endpoint settings generated below for your proxy.
log:
level: 'info'
totp:
issuer: 'My Media Server'
authentication_backend:
file:
path: '/config/users_database.yml'
access_control:
default_policy: 'deny'
rules:
- domain: 'media.example.com'
policy: 'two_factor'
session:
secret: 'REPLACE_WITH_UNIQUE_RANDOM_SESSION_SECRET'
cookies:
- domain: 'example.com'
authelia_url: 'https://auth.example.com'
default_redirection_url: 'https://media.example.com'
storage:
encryption_key: 'REPLACE_WITH_UNIQUE_RANDOM_STORAGE_KEY'
local:
path: '/config/db.sqlite3'
# For testing: enrollment messages are written to this private file.
# Configure SMTP for normal email delivery.
notifier:
filesystem:
filename: '/config/notification.txt'
identity_providers:
oidc:
hmac_secret: 'REPLACE_WITH_UNIQUE_RANDOM_OIDC_SECRET'
jwks:
- key_id: 'media-signing-key'
algorithm: 'RS256'
use: 'sig'
key: |
REPLACE_WITH_YOUR_GENERATED_RSA_PRIVATE_KEY_PEM
# Merge the generated cors and clients settings here,
# at the same indentation as hmac_secret and jwks.
Complete the example
Replace example.com with the parent domain shared by your portal and media host. Set their full HTTPS addresses, including any custom ports. Access-control rules use the media hostname without a scheme or port.
Generate separate random secrets for the session, storage and OIDC settings. Follow Authelia’s secret generation guidance. Keep the storage encryption key when restarting or upgrading.
Create authelia/users_database.yml with your user and a generated password hash using the file authentication instructions. Register a second factor for the two-factor policy.
Generate an RSA signing key using the OIDC provider instructions. Replace the key placeholder with the complete PEM text, keeping every line indented beneath key: |.
Generate your Poster Tools settings using the addresses above. Merge cors and clients into identity_providers.oidc. For Caddy, merge the generated endpoints into server. Keep one copy of each YAML section.
Validate using the commands in the Compose example, then start Authelia. Your proxy must also serve the portal over HTTPS and enforce authorization on the media host.
The callback address belongs in the client’s redirect_uris. The Poster Tools site origin belongs in cors.allowed_origins. The generator fills both from the address where you opened this guide, so generate from the live site for live use, or your local site for local testing.
The generated settings below extend your Authelia configuration. Choose HTTPS without Authelia if you do not need a login portal.
This requires an Authelia version that supports authelia.bearer.authz (verified with 4.39.28) and a configured OpenID Connect provider with signing keys. The client registration is shared across proxies; the authorization endpoint depends on your proxy. Merge these sections into your existing configuration, retaining existing clients, CORS origins and authentication strategies. Use your existing access rules to allow the intended user to reach the media domain.
configuration.yml · Poster Tools settings to merge
Enter your media URL and generate the configuration.
The example requires two-factor authentication. Set the client policy to your intended Authelia policy. No client secret is used by this browser application.
Configure your proxy for browser access
Browser access settings (CORS) let Poster Tools request libraries and upload artwork. Your media server still checks its own API key.
The proxy must accept X-PosterTools-Authelia, pass it to Authelia as the authorization header, and remove it before forwarding to Emby/Jellyfin. Keep the media server’s own authorization header intact. Allow CORS preflight before authentication and include CORS headers on error responses.
This Caddy example uses a dedicated media hostname at the root path. If you already use a subpath, keep its routing in your existing configuration. Authelia authorization is included only when you select it above.
Enter your media URL and generate the configuration.
Additional requirements with Authelia
Send the value of X-PosterTools-Authelia to Authelia as Authorization on the authorization check only. Configure the endpoint used by your proxy to accept Bearer tokens through HeaderAuthorization.
Preserve Emby/Jellyfin’s own authorization headers on the media request. Remove X-PosterTools-Authelia before forwarding it to the media server.
Allow OPTIONS preflight without a login redirect. Allow the Poster Tools origin and the media API headers, including X-PosterTools-Authelia, in CORS.
Include CORS headers on denied requests too. Keep the original public URL and scheme correct in the forwarded headers.
The official proxy instructions are a starting point. Apply the Poster Tools header handling above as well; a working browser login alone does not confirm API access.
Allow the Poster Tools origin, OPTIONS preflight and media API headers in your proxy’s CORS settings. Preserve the media server’s authorization headers and include CORS headers on error responses. The Caddy example includes these settings.
Finish in Poster Tools
Validate and reload any configuration you changed. Check that the HTTPS address opens from this browser.
Create an API key named Poster Tools in your media server’s dashboard under API Keys. Copy it and treat it like a password.
In Poster Tools, open Account Settings, select Integrations, then Emby / Jellyfin.
Choose HTTPS, or Tailscale for your existing Tailscale address. Enter the media URL and API key.
Choose HTTPS with Authelia. Enter the media URL, API key, Authelia portal URL and registered client ID. Select Authorize & choose libraries and approve access in the portal.
Choose your libraries and save the integration. Open a library and load a poster to check the connection.
Authelia access stays in this browser tab. Use Reconnect Authelia under Account Settings, Integrations for a new tab or expired session.
lightbulbConnection not working?expand_more
HTTPS address does not open: check DNS, certificate, firewall and proxy routing.
The server opens, but Poster Tools cannot connect: check CORS settings and login redirects.
HTTP 401: check your media API key and, if enabled, Authelia authorization.
Tailscale: connect this browser’s device to your tailnet and check access permissions.