Admin access
Unlock your archive
Sign in with your admin username and password to browse your library, import Trakt history, and review webhook appends.
Forgot your password?
Plembfin keeps administrator login local to this instance, so it does not send email reset links.
If you can sign in, change the password in Settings → General → Account with your current password.
If you are locked out, stop Plembfin, set a new ADMIN_PASSWORD in the host or container environment, and restart it. If the password was previously changed in Plembfin, remove only the authManagedInApp property from data/config.json first so the environment value can be used.
The old password cannot be recovered from the stored hash.
Administrator account
This account controls the local Plembfin instance and is created only once.
Dashboard
OverviewControls
Dashboard
Now Playing
Up Next
TV Shows - Recently watched
Movies - Recently watched
Playback Platforms
by watch eventsWatch Activity
Monthly archive volumeOne row per movie or show. Resume checkpoints and every target result remain available inside the row.
Account
Account Guide
Portal SecurityManages credentials for the admin portal. Saving a new password invalidates existing session cookies across all active browsers.
System Integrity
Integrity Help
Database CareRuns nine live checks. Each one is marked Online, Warnings Detected, Failed, or Not Configured.
Anything unhealthy gets a fix tip and a link to the right settings page.
- Watch History API - checks the local database responds.
- Server Configuration - checks saved settings can be read back.
- Webhook Listener Endpoint - pings the webhook URL and shows the last event received.
- Scheduled Cron Job - checks the background worker ran recently.
- Outbound Playstate Sync - checks the 5 most recent watches synced without errors.
- Plex / Emby / Jellyfin Media Server - tests the connection to each configured server.
- Plex Realtime Notifications - checks the live Plex connection works (falls back to periodic polling if not).
- Cross-Platform Library Matching - lists current "no matching item found" failures per platform.
A quicker, lighter check than the full diagnostic.
Shows row counts, database size, and how hard Plembfin is hitting each media server.
Useful before running a large Force Sync, to spot rate-limiting or an oversized database first.
Image Cache
About the Cache
Local Asset StorageLocal cover art thumbnails and wide hero banners fetched from Plex, TMDB, and TVDB.
Cached headshot portraits for cast and crew members on movie and show details pages.
Clearing the cache removes local image files from disk. Images are re-fetched automatically on demand as you browse.
Plex
Plex Setup
Watchstate Sync EnginePlembfin connects to your Plex server to read watched status, match media correctly, and push plays to your other connected servers.
The server URL and token are kept on the server and never shown in the browser.
Use Test before saving to check the server is reachable, the token works, and your account is found.
Emby
Emby Setup
Watchstate Sync EnginePlembfin connects to your Emby server to read watched status, match media correctly, and push plays to your other connected servers.
The server URL and API key are kept on the server and never shown in the browser.
Use Test before saving to check the server is reachable, the key works, and your account is found.
Jellyfin
Jellyfin Setup
Watchstate Sync EnginePlembfin connects to your Jellyfin server to read watched status, match media correctly, and push plays to your other connected servers.
The server URL and API key are kept on the server and never shown in the browser.
Use Test before saving to check the server is reachable, the key works, and your account is found.
Webhooks
Platform Setup
Per-Server InstructionsNo setup required. Plembfin connects to Plex's WebSocket notification channel automatically to capture watched and unwatched changes in real time.
Expand the setup dropdowns on the left to view provider-specific instructions for registering the webhook URL and choosing which events to send.
Webhook Secret
Not available
Each platform's setup guide above includes the full webhook URL with this secret already in it.
Automation clients can also pass the secret in an X-Plembfin-Webhook-Secret or Authorization: Bearer header.
Webhooks Guide
Real-Time Sync EngineReceives instant play, pause, stop, scrobble, and watched events pushed by Plex, Emby, and Jellyfin as media plays. Updates live session tracking instantly.
Authenticates incoming webhooks via ?token= or X-Plembfin-Webhook-Secret header. Rotate anytime to invalidate old endpoints without affecting admin login.
Executes every minute to evaluate active playback progress against your watched threshold (90%), write completed watches to history, and dispatch cross-platform sync.
Metadata Providers
Metadata Setup
Artwork & EnrichmentPowers core movie and TV metadata, posters, backdrops, cast bios, trailers, and release dates across Plembfin.
Enriches TV series with episode guides, season ordering, and high-resolution series artwork.
Fanart.tv supplies clearart, logos, and disc art. OMDB provides IMDb ratings and Rotten Tomatoes score comparisons.
Refresh Metadata
Refresh All TMDB Metadata
Idle
Pre-cache trailers, posters, cast, and summaries locally
Refresh All TVDB Metadata
Idle
Fetch episode schedules, series details, and artwork from TVDB
Refresh Metadata Help
Cache EnrichmentScans local history items and fetches missing trailers, posters, overview descriptions, and cast info from TMDB to keep local metadata cache up to date.
Scans local TV shows in your library, resolves TVDB series IDs, and pre-caches extended series metadata, season episode lists, and artwork from TVDB.
Trakt
Live Trakt Connection
Checking
Keep watched and unwatched state synchronized in both directions
Disable Trakt plugins/tasks in Plex, Emby, and Jellyfin first - Plembfin must be the sole Trakt bridge.
Manual Connection
Advanced fallback using personal Trakt API credentials
Trakt History Importer
Idle
Bulk import records from a Trakt.tv export
[idle] Waiting for files.
Trakt Help
Trakt ConnectionKeeps Trakt and Plembfin in sync automatically, both ways.
New watches, rewatches, and unwatches all sync across Plex, Emby, Jellyfin, and Trakt.
Sync Now also double-checks older Trakt watches and fixes anything that drifted out of sync.
Start from current state - the safe default. Records where things stand now, without changing anything on your other servers.
Import all existing Trakt watched state - pulls in your full Trakt history and queues it to sync everywhere.
Use custom Trakt API client credentials if you prefer a personal VIP developer application instead of Plembfin's built-in device application.
Bulk import watch history from Trakt.tv CSV or JSON exports into your local Plembfin database without making outbound API calls.
Let Plembfin be the sole Trakt bridge. Disable the Emby or Jellyfin Trakt plugins and their scheduled tasks so secondary writers do not overwrite recent state or introduce loops.
Seerr
Seerr Setup
Request IntegrationConnects your Seerr instance to display live request status pills and "Request on Seerr" action buttons directly on movie and TV show detail pages.
Requires your Seerr base URL and an API key from Overseerr/Jellyseerr Settings ➔ General. Enables one-click requesting without leaving Plembfin.
Guided setup
Setup Guide Help
OnboardingReopens the same step-by-step wizard shown on first run.
It's safe to run again - nothing already set up gets changed or reset. Each step just shows your current connections.
Use it to revisit a single step later, like adding a second media server or connecting Trakt.
Database Repairs
Repair History Rows
Idle
Fill in missing media types and backfill missing posters on recent history rows
Audit Phantom Watches
Idle
Finds suspicious duplicates and malformed imported episode rows
Remove Duplicate Watches
Idle
Keeps only the oldest watch date for each movie or episode across the whole library
Restore Missing Episode Names
Idle
Backfill real episode names onto watch rows that only stored a coordinate like “8”
Database Repairs Help
Database CareChecks your 300 most recent history rows for a missing media type or poster.
If the type is missing, it's guessed from the title (like S01E01 for an episode). A poster is then found from the cache, your media server, or TMDB.
Works in small batches of 10 rows, and stops on its own once a batch finds nothing left to fix.
Read-only scan for suspicious duplicate watches or broken imported episode data.
Each result is marked high-confidence or review-only. Nothing is changed or deleted - it's just a report.
Finds every movie or episode with more than one watch recorded, and keeps only the oldest date.
The rest are deleted for good, and the correction is pushed out to every connected platform.
You'll always see the exact number of watches affected before confirming. This cannot be undone.
Looks at watch history for TV episodes whose stored episode name is missing or is just a coordinate (such as 8 or Episode 08).
Audit is read-only and scans the full watch history. Restore fills in the real name using other stored rows and cached season metadata first, then a metadata lookup when needed. Episodes verified by the metadata source to have no title are reported separately as No title provided; only retryable failures remain for another attempt.
Library Rebuilds
Rematch All TV Shows
Idle
Resolve each show title against TVDB (primary) and update episode IDs
Backfill Trakt Imports
Idle
Fetch missing posters for imported Trakt events
Rebuilds & Backfills Help
Library CareLooks up each show on TVDB, the main source for TV matching.
The matching TMDB ID normally comes from TVDB's own cross-reference. If that's out of date, it falls back to a TMDB title search instead.
The corrected IDs are then saved onto your local episode rows.
Fetches missing posters and metadata for imported Trakt watch history events.
Wipe Data
These actions delete rows from the local database. There is no undo. Take a watch history or Plembfin backup first if you might want this data back.
Watch History
Idle
Watch history, playstate, resume progress, and live sessions
Loading row counts…
Personal Watchlist
Idle
Canonical rows, provider ledger, queue, runs, and activity
Loading row counts…
Sync History & Logs
Idle
Sync history, watch audit events, and diagnostic logs
Loading row counts…
Everything Tracked
Idle
Watch history and sync history/logs together
Loading row counts…
Wipe All / Fresh Start
Idle
Resets Plembfin to a brand-new install
Deletes every table above, plus settings, connections, cached artwork, and the admin login. You'll land back on the first-run setup screen and need to claim the account again. There is no undo.
Loading row counts…
Wipe Data Help
IrreversibleYour settings, media server connections, Trakt connection, API keys, and admin login are never touched by Watch History, Personal Watchlist, Sync History & Logs, or Everything Tracked.
Wipe All / Fresh Start is the one exception below - it resets those too.
Wiping local data does not unwatch anything on Plex, Emby, or Jellyfin themselves - it only clears what Plembfin has recorded.
Deletes every watched item, resume position, and live session Plembfin has recorded. This is the same data a watch-history backup restores from - back one up first if you want a way back.
Deletes the canonical local watchlist, mutation/tombstone history, provider observations, queued work, sync runs, activity, and Plembfin-owned playlist/container identifiers. It does not remove items from Plex, Emby, or Jellyfin.
Deletes the sync history list, audit trail, and diagnostic logs. Lower stakes - your actual watch history is untouched.
Runs Watch History, Personal Watchlist, and Sync History & Logs together. Your settings and connections still stay untouched.
The most destructive option here. Deletes everything above, plus settings, media server and Trakt connections, cached artwork, and the admin login.
Plembfin ends up exactly like a brand-new install - you'll be signed out and taken to first-run setup to claim the account again. A full Plembfin backup is the only way back.
Local
Local Watch History Backups
Enable scheduled local snapshots of watched state, playstate, and resume progress
Local Plembfin Backups
Create an encrypted full Plembfin backup and download it to your computer
Remote
Remote Destinations
Configure cloud destinations for remote backups
Remote Watch History Backups
Upload daily watch history backups to remote destinations
Remote Plembfin Backups
Store encrypted Plembfin backup files off-server automatically
Backup Guide
Disaster RecoveryDaily snapshots of watched state, playstate, and resume progress. Saved unencrypted to data/backups/watch-history on the server.
No passphrase needed. "Save Schedule" and "Back Up Now" work as soon as backups are enabled.
A full encrypted export of the database and saved settings, including server credentials and API keys.
Encrypted in your browser with the passphrase you enter - Plembfin never sees or stores the plaintext backup.
The passphrase needs to be at least 12 characters. Losing it means the backup can't be decrypted - there's no recovery.
Scheduled backups run on the server with no browser open, so the server needs the passphrase saved.
Checked: the passphrase is stored in data/config.json so the schedule can run on its own.
Unchecked: the passphrase stays browser-only. Only "Back Up Now" works, and the schedule stays off.
Add a Backblaze B2 bucket as an upload target: region/endpoint, bucket name, and an application key scoped to it.
Every enabled destination gets a copy of each remote backup run.
Mirrors the same two backup types to every enabled remote destination, each on its own schedule and retention.
Remote Plembfin backups use the same passphrase and "remember" setting as the local encrypted backup above.
Local
Local Watch History Restore
Restore a watch-history backup stored on this server or upload one
Local Plembfin Restore
Idle
Restore an encrypted full Plembfin backup
Restore log will appear here.
Remote
Remote Watch History Restore
Restore a watch-history backup mirrored to Backblaze B2
Remote Plembfin Restore
Restore an encrypted full Plembfin backup mirrored to a remote destination
Local Restore Guide
Disaster RecoveryTwo backup types
Watch-history backups contain watched state, playstate, and resume progress. Use them to roll watch history back to a known point and push that state to Plex, Emby, and Jellyfin.
Plembfin backups contain the full Plembfin database data and saved settings. They are encrypted because they can include API keys and server credentials.
Watch-history restore
The selected watch-history backup becomes the source of truth:
- Wipes the local watch history, playstate and resume progress, and reloads them from the backup.
- Pushes that state out to every connected app (Plex, Emby, Jellyfin).
- Stamps a restore watermark so background sync does not re-import the previous app state.
While the restore is running, the cron sync and incoming webhooks are ignored, so nothing is written to watch history mid-restore. Watch dates are always preserved - an item already watched on an earlier date is never re-added as watched today.
Merge into existing state
Adds only the items the backup knows about to each app, without touching anything else. Fast. Any watched items the apps have that the backup never tracked are left as they are.
Replace existing state
Marks every currently-watched item on each app as unwatched, then re-applies only the backup's watched set, so each app ends up matching the backup exactly. Slower (it touches every watched item on every app), but this is a true restore.
Sync Tuning
Sync Tuning Help
Understanding the DefaultsThese values decide when a play counts as watched, how a watched flag is dated, and how sync behaves.
The watched-flag policy defaults to Require review. The numeric fields remain optional: leave one blank to keep the built-in default (or a matching environment variable, if one is set on the server).
When you manually mark an item as watched in Plex / Emby / Jellyfin: choose now, the release day, the same before/after episode timing used by media pages, or Require review to approve each item manually from the Manual Watch review page.
Watched Threshold: playback progress percentage at which a play counts as watched. Default 90%.
Minimum Resume Position: playback position, in seconds, below which a stopped play is too short to save as a resume point. Default 60s.
Active Session TTL: how long a "now playing" session is kept without an update before it's considered stale. Default 5 minutes.
Outbound Request Timeout: how long Plembfin waits for a response from Plex, Emby, or Jellyfin before giving up. Default 10 seconds.
Fast Local-Network Sync: off by default. When enabled, Force Sync, Full Sync Watchstates, and other bulk sync operations send more concurrent requests with shorter gaps between them, finishing much faster. Only turn this on when Plex, Emby, and Jellyfin are all self-hosted on the same trusted local network as Plembfin.
Sync Tools
Checks for missing recent records without scanning the full libraries.
When to use: Run this when a recent watch was not picked up automatically.
[idle] Waiting for force sync.
Nothing is checked or pulled in first. If Plembfin's own record is wrong, this sends that wrong state out too.
When to use: Use this when you've confirmed Plembfin's record is correct and want every connected app to match it.
Purely additive: never sends anything back out, and never marks anything unwatched or removes existing history.
When to use: Use this to bring watched status in from a server without changing anything else.
Sync Tools Guide
Detailed Tool InformationPerforms a rapid incremental scan of recent watch activity and active sessions across Plex, Emby, and Jellyfin.
Sends Plembfin's watched status and resume positions to the selected server, or all of them, overwriting what they currently show.
Nothing is checked first - it just pushes Plembfin's record out.
Reads watched status from the selected server, or all of them, and adds anything Plembfin is missing.
Only adds - never sends anything out, marks anything unwatched, or removes existing history.
Cancels a Force Sync that's currently running.
If the server restarted mid-sync and left a stuck lock behind, this also clears it so a new sync can start.
Sync Issues
Loading...
Cross-Platform Match Report
Media each platform could not find during sync
Sync Issues Help
Understanding IssuesThis section shows any problems with propagating watched states between your media servers. Click on any issue to view detailed telemetry about what went wrong.
Missing Dispatch Telemetry: No logging data recorded. These likely synced successfully but the logs are missing. Safe to clear.
Plex Match Issues: Plex couldn't find the media item. Check Plex metadata and external IDs.
Emby/Jellyfin Match Issues: Plex found it but Emby/Jellyfin couldn't. Check their metadata and IDs.
Unresolved Sync Issues: Other sync problems detected. Click to view telemetry for error details.
Click "Retry" on an issue to re-attempt the sync and see detailed error messages. Click "Fix" to manually adjust the match if the item wasn't found.
Click "Refresh" in the Sync Issues header to immediately reload unresolved sync issues and match reports.
Sync History Help
Recent PropagationsRecent watched-state propagation attempts. Shows source, action, timestamp, and target sync results for every automatic and manual sync.
When you mark something as watched (on any platform), Plembfin automatically propagates that state to your other configured servers every 60 seconds.
Resume positions sync similarly. Use the controls in the Force Sync box when you need a library-wide Set Plembfin as Source of Truth or Import Watched Status operation with live terminal output.
Server Logs
Logs Guide
System Diagnostics & TelemetryEverything in one stream, in time order - both server activity and browser activity.
Live events pushed from Plex: playback updates, pause/resume, and unwatched detection.
Everything Plembfin sends to Plex, Emby, and Jellyfin.
Mark-played and mark-unplayed calls, resume syncs, loop checks, and each server's response.
The background worker that runs every minute.
Checks connected servers for recent watches, applies the watched threshold, and works through the sync queue.
General app events: startup, database setup, config changes, scheduled tasks, and errors or warnings.
Use Download Logs to save a full .log file with everything, for bug reports or troubleshooting.
Changelog
Release Guide
Updates & MaintenancePlembfin queries published releases on GitHub to check for new feature releases, bug fixes, and performance improvements.
The Current badge marks the version running on this instance. Any releases published since your build show a New badge.
For Docker deployments, pull the latest image (docker compose pull). For Git installs, run git pull, npm install, and restart the process.
About Plembfin
The local brain for your media stack.
Version v1.1.0 · Channel Latest
Links
Project, documentation, support, and release links.
Artwork & metadata: Artwork and metadata can come from TMDB, TheTVDB, Fanart.tv, OMDb, and YouTube. Plembfin is not endorsed or certified by those services.