Pause/resume now write <service>_paused to video_settings, and the engine restores each worker's saved pause when it's (re)built — mirrors music's <service>_enrichment_paused boot flag. Isolated to video.db; music untouched.
Isolated enrichment subsystem mirroring the music worker pattern, on video.db. - VideoEnrichmentWorker: daemon loop pulling enrichment_next -> client.match -> enrichment_apply; pause/resume/stop; get_stats in the same shape the music enrichment API returns (enabled/running/paused/idle/current_item/stats/ progress/breakdown). Client injected -> loop fully unit-tested with a fake. - TMDB/TVDB clients (thin adapters, keys from video_settings): .enabled + match(kind,title,year) -> {id, metadata}; validated live, worker logic tested. - VideoEnrichmentEngine registry + lazy get_video_enrichment_engine() singleton. 8 tests (match/not_found/error-resilience/stats/disabled/engine/isolation).