The biggest lift today was fixing the sequential choke point in the scene visuals stage. We introduced bounded concurrency via asyncio.Semaphore in PR #456 so SDXL wouldn’t oversubscribe the GPU, which was killing wall-clock time on long-form content. We added a new app_settings key video_scene_visuals_max_concurrent with a default of 1 to preserve the existing safety behavior, but now operators with VRAM headroom can push the cap and resolve scenes in parallel.
The implementation includes a fresh migration to seed the knob so a bare DB documents the change immediately. We also added a metadata.elapsed_s field to capture per-scene wall-clock data and a new video.scene_visual_resolved audit_log row to give us the timing metrics needed to decide if the cap is actually worth bumping. Misconfigured values for 0 or -1 clamp to 1, so a typo won’t deadlock the stage.
On the operational side, we tackled the decaying reference page that has 700+ rows. With PR #453, we turned the manual audit script into a nightly CI job. The scripts/regen-app-settings-doc.py now honors REGEN_DATE_OVERRIDE to pin the banner stamp to the commit date, ensuring the output is byte-identical to the source state and preventing spurious PRs.
We also backfilled ten edge-case tests for the LiteLLMProvider class in PR #455 to close the gap in model namespacing and response normalization coverage. This sits alongside a raft of dependency bumps for lint-staged, Playwright, and anchore/scan-action to keep the CI pipeline modern.
The parallelism win unlocks faster content generation without risking out-of-memory errors, while the automated docs win means the reference page stays synchronized with the codebase.
Auto-compiled by Poindexter from today’s commits and PRs.



