- videogen.LipSyncer/LipsyncProvider: SadTalker talking heads via POST /upstream/<id>/v1/talking_head (multipart image+audio parts, still/enhance/preprocess flags) -> mp4. - videogen.VideoBackgroundRemover/VideoBackgroundRemovalProvider: POST /upstream/<id>/v1/video/matte (output greenscreen_mp4|alpha_webm). - videogen.VideoUpscaler/VideoUpscaleProvider: POST /upstream/<id>/v1/video/upscale (scale 2|4). - videogen.Chainer/ChainerProvider: async long-video chain-job client — SubmitChain (JSON POST /v1/video/chain, init_image_b64), ChainStatus (GET /v1/jobs/{id}, tolerant segment-id decode), ChainResult, ChainSegmentResult (partial delivery after mid-chain failure); hostile job-id path rejection. - Shared singleVideoResult validation (positive video evidence) + a videoInputFilename hint helper; httptest contract tests per surface; ADR-0025 (index row deferred — MJ-A backfills the ADR index table and parallel edits would conflict). Co-Authored-By: Claude Fable 5 <[email protected]>