You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the continuous-video-episode feature (see parent epic). Depends on the beat compiler (#6225) and prompt linter (#6226) — this slice wires them into an end-to-end generation pipeline across PortOS's existing video backends.
Coordinate sequential generation across supported video backends (Reactor fast-h3, fal.ai, local LTX) using the existing backend modules in server/services/videoGen/.
Thread previous-clip identifiers (continue_from_clip_id, or last-frame still extraction) into dependent beats so continuation clips reference their predecessor.
Fall back to a fresh re-establish if an upstream clip in the chain fails or is evicted, so one failed clip doesn't stall the whole episode.
Stitch completed clips into a final episode video using the existing stitchVideos (server/services/videoGen/stitchVideos.js), reusing chainedVideo.js's stitching path rather than re-implementing it.
Expose this via a route (server/routes/) so a client can submit a script and track episode-generation progress (SSE or socket progress, matching the existing video-gen progress pattern).
Acceptance criteria
server/services/videoGen/continuousVideo.js composes the compiler + linter + backend submission + stitching into one orchestrated flow.
A lint failure on any clip is surfaced to the caller before submission (no silent generation of a rule-violating prompt).
An upstream clip failure triggers the fresh re-establish fallback rather than aborting the whole episode.
New route registered per server/AGENTS.md conventions (Zod validation, no try/catch in the handler) and reflected in the generated API route catalog.
Integration-level tests cover: full happy-path beat-to-stitched-video flow (with backends mocked), a lint-failure short-circuit, and the fresh-re-establish fallback on a mid-chain backend failure.
Files
server/services/videoGen/continuousVideo.js (new)
server/routes/ (new route for episode submission/progress)
server/services/videoGen/index.js / README if present
Context
Part of the continuous-video-episode feature (see parent epic). Depends on the beat compiler (#6225) and prompt linter (#6226) — this slice wires them into an end-to-end generation pipeline across PortOS's existing video backends.
Scope
Add
server/services/videoGen/continuousVideo.js:scriptVideoCompiler(Script-to-Beats Compiler for continuous video episodes #6225) to get beat/clip specs, thenvideoPromptLinter(Deterministic video-prompt linter for continuous episode clips #6226) to validate each clip prompt before submission.server/services/videoGen/.continue_from_clip_id, or last-frame still extraction) into dependent beats so continuation clips reference their predecessor.stitchVideos(server/services/videoGen/stitchVideos.js), reusingchainedVideo.js's stitching path rather than re-implementing it.server/routes/) so a client can submit a script and track episode-generation progress (SSE or socket progress, matching the existing video-gen progress pattern).Acceptance criteria
server/services/videoGen/continuousVideo.jscomposes the compiler + linter + backend submission + stitching into one orchestrated flow.server/AGENTS.mdconventions (Zod validation, no try/catch in the handler) and reflected in the generated API route catalog.Files
server/services/videoGen/continuousVideo.js(new)server/routes/(new route for episode submission/progress)server/services/videoGen/index.js/ README if presentPart of #6217
When this ships, check its box in the "Decomposed into" list on #6217. If it was the LAST open child, close #6217 with a summarizing comment.