## Lecture Video
### New Features
* Lecture-video assistants now generate spoken narration audio for intro
prompts and post-answer transitions using the configured voice.
Narrations are synthesized via ElevenLabs and stored for playback during
lecture presentations.
* Assistant cards and the assistant editor now show lecture-video
processing status, with a refresh option next to the status text.
* If narration processing fails, moderators can restart processing from
the the assistant editor. Only the failed narrations are re-processed,
preserving any that completed successfully.
### Updates & Improvements
* A specific error message is now shown when users attempt to start a
lecture presentation whose narration processing has failed.
* Copying a lecture video assistant is now blocked until narration
processing is complete, preventing incomplete copies.
## Internal
### New Features
- New CLI command: lecture-video run-worker starts a
multiprocessing-based narration worker pool with configurable
`—workers`, `--poll-interval`, `—host`, and `--port flags`.
- New generic `WorkerPoolManager` in `worker_pool.py` — a reusable
multiprocessing pool with lease-based run claiming, dead worker
detection/respawn, and graceful shutdown.
- New `LectureVideoProcessingRun` model tracking processing run
lifecycle (queued, running, completed, failed, cancelled) with lease
tokens, runner identity, and attempt numbering.