Plex Generate Previews v3.1.0 — Webhook Support, Live Worker Scaling & Bug Fixes
Release Notes — v3.1.0
Highlights
This release delivers Radarr/Sonarr webhook support for single-file processing, live worker scaling (add/remove/pause/resume), improved ETA accuracy, and numerous bug fixes reported by the community.
New Features
-
Radarr/Sonarr Webhook Integration — Receive webhook payloads on media import and process only the imported file(s) instead of scanning the entire library. Includes configurable debounce delay, retry logic, path mappings, and a dedicated Webhooks page in the web UI. (#149)
-
Live Worker Scaling — Add or remove GPU, CPU, and CPU Fallback workers while a job is running, directly from the dashboard. Busy workers finish their current item before being retired. (#145)
-
Pause / Resume Processing — Global pause/resume control that halts dispatch of new tasks while letting active workers finish gracefully. Includes tooltip describing behavior. (#145)
-
CPU Fallback Workers — New worker type that only processes items that fail GPU acceleration (codec incompatibility). Configurable separately from regular CPU workers. (#142)
-
Shared Queue Across Libraries — Workers now process items from all selected libraries in a single shared queue, so idle workers immediately pick up items from the next library instead of waiting for the current one to finish.
Bug Fixes
-
CPU thread setting ignored — Setting CPU threads to 0 in the UI now correctly disables CPU workers. Previously a parsing error always spawned at least one. (#142)
-
ETA not displayed / wildly inaccurate — Per-worker ETA now uses FFmpeg's real-time speed multiplier (e.g. 120x) to calculate remaining wall-clock time instead of a static estimate. (#143)
-
Worker progress showing false precision — Progress percentage now reflects actual sub-percent granularity from FFmpeg instead of whole-number steps with a misleading decimal point. (#144)
-
Job stuck at 100% after removing workers — When all CPU-capable workers were removed while codec-fallback items remained in the queue, the dispatch loop would spin forever. These items are now drained as failures with a clear warning. (#149)
-
NoneType crash on Sonarr webhook payloads — Sonarr TV show payloads with missing or malformed fields no longer cause unhandled exceptions. All webhook path extraction functions have comprehensive None guards.
-
GPU counter briefly showing wrong value on page load — Fixed a race condition where the dashboard would flash config defaults (e.g. "1") before actual worker data loaded.
-
Webhook full-library scan — Webhook-triggered jobs no longer scan the entire Plex library. File paths are resolved using bounded recent-item lookups (configurable via
WEBHOOK_RECENT_LIMIT/WEBHOOK_FALLBACK_LIMITenvironment variables).
Improvements
- Better path mappings — Webhook file paths are expanded through all configured path mappings for reliable matching across multi-disk setups.
- Improved logging — More detailed and consistent log output for webhook events, worker lifecycle, job progress, and debug diagnostics.
- Log viewer improvements — Better log scrolling behavior in the web UI.
- UI tooltips — Added tooltips for pause/resume and worker scaling controls.
- Documentation — Added webhook setup guides for Radarr/Sonarr, updated API reference with webhook endpoints, and added screenshots.
Testing
- Expanded test suite from ~450 to 830+ tests covering webhooks, worker scaling, ETA calculation, path resolution, job lifecycle, and concurrency edge cases.
Upgrading
Pull the latest image and restart your container. No configuration migration is required — new settings (webhook delay, retry count, webhook secret) use sensible defaults and can be adjusted in Settings.
For Radarr/Sonarr webhook setup, navigate to the new Webhooks page in the web UI and follow the instructions.