videoclaw 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +165 -0
- package/CLAUDE.md +232 -0
- package/LICENSE +36 -0
- package/README.md +737 -0
- package/dist/cli/args.d.ts +59 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +279 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/handlers/analysis.d.ts +3 -0
- package/dist/cli/handlers/analysis.d.ts.map +1 -0
- package/dist/cli/handlers/analysis.js +111 -0
- package/dist/cli/handlers/analysis.js.map +1 -0
- package/dist/cli/handlers/audio.d.ts +25 -0
- package/dist/cli/handlers/audio.d.ts.map +1 -0
- package/dist/cli/handlers/audio.js +321 -0
- package/dist/cli/handlers/audio.js.map +1 -0
- package/dist/cli/handlers/batch.d.ts +4 -0
- package/dist/cli/handlers/batch.d.ts.map +1 -0
- package/dist/cli/handlers/batch.js +424 -0
- package/dist/cli/handlers/batch.js.map +1 -0
- package/dist/cli/handlers/candidates.d.ts +10 -0
- package/dist/cli/handlers/candidates.d.ts.map +1 -0
- package/dist/cli/handlers/candidates.js +389 -0
- package/dist/cli/handlers/candidates.js.map +1 -0
- package/dist/cli/handlers/character.d.ts +8 -0
- package/dist/cli/handlers/character.d.ts.map +1 -0
- package/dist/cli/handlers/character.js +202 -0
- package/dist/cli/handlers/character.js.map +1 -0
- package/dist/cli/handlers/clone.d.ts +5 -0
- package/dist/cli/handlers/clone.d.ts.map +1 -0
- package/dist/cli/handlers/clone.js +303 -0
- package/dist/cli/handlers/clone.js.map +1 -0
- package/dist/cli/handlers/create.d.ts +5 -0
- package/dist/cli/handlers/create.d.ts.map +1 -0
- package/dist/cli/handlers/create.js +635 -0
- package/dist/cli/handlers/create.js.map +1 -0
- package/dist/cli/handlers/execution.d.ts +5 -0
- package/dist/cli/handlers/execution.d.ts.map +1 -0
- package/dist/cli/handlers/execution.js +132 -0
- package/dist/cli/handlers/execution.js.map +1 -0
- package/dist/cli/handlers/library.d.ts +8 -0
- package/dist/cli/handlers/library.d.ts.map +1 -0
- package/dist/cli/handlers/library.js +77 -0
- package/dist/cli/handlers/library.js.map +1 -0
- package/dist/cli/handlers/media-ops.d.ts +7 -0
- package/dist/cli/handlers/media-ops.d.ts.map +1 -0
- package/dist/cli/handlers/media-ops.js +120 -0
- package/dist/cli/handlers/media-ops.js.map +1 -0
- package/dist/cli/handlers/media-production.d.ts +56 -0
- package/dist/cli/handlers/media-production.d.ts.map +1 -0
- package/dist/cli/handlers/media-production.js +673 -0
- package/dist/cli/handlers/media-production.js.map +1 -0
- package/dist/cli/handlers/motion-overlay.d.ts +10 -0
- package/dist/cli/handlers/motion-overlay.d.ts.map +1 -0
- package/dist/cli/handlers/motion-overlay.js +651 -0
- package/dist/cli/handlers/motion-overlay.js.map +1 -0
- package/dist/cli/handlers/multi-shot.d.ts +2 -0
- package/dist/cli/handlers/multi-shot.d.ts.map +1 -0
- package/dist/cli/handlers/multi-shot.js +424 -0
- package/dist/cli/handlers/multi-shot.js.map +1 -0
- package/dist/cli/handlers/project-ops.d.ts +14 -0
- package/dist/cli/handlers/project-ops.d.ts.map +1 -0
- package/dist/cli/handlers/project-ops.js +241 -0
- package/dist/cli/handlers/project-ops.js.map +1 -0
- package/dist/cli/handlers/prompt-craft.d.ts +8 -0
- package/dist/cli/handlers/prompt-craft.d.ts.map +1 -0
- package/dist/cli/handlers/prompt-craft.js +397 -0
- package/dist/cli/handlers/prompt-craft.js.map +1 -0
- package/dist/cli/handlers/provider-registration.d.ts +29 -0
- package/dist/cli/handlers/provider-registration.d.ts.map +1 -0
- package/dist/cli/handlers/provider-registration.js +225 -0
- package/dist/cli/handlers/provider-registration.js.map +1 -0
- package/dist/cli/handlers/reference-sheets.d.ts +6 -0
- package/dist/cli/handlers/reference-sheets.d.ts.map +1 -0
- package/dist/cli/handlers/reference-sheets.js +181 -0
- package/dist/cli/handlers/reference-sheets.js.map +1 -0
- package/dist/cli/handlers/reporting.d.ts +18 -0
- package/dist/cli/handlers/reporting.d.ts.map +1 -0
- package/dist/cli/handlers/reporting.js +155 -0
- package/dist/cli/handlers/reporting.js.map +1 -0
- package/dist/cli/handlers/review-portal.d.ts +8 -0
- package/dist/cli/handlers/review-portal.d.ts.map +1 -0
- package/dist/cli/handlers/review-portal.js +276 -0
- package/dist/cli/handlers/review-portal.js.map +1 -0
- package/dist/cli/handlers/show.d.ts +11 -0
- package/dist/cli/handlers/show.d.ts.map +1 -0
- package/dist/cli/handlers/show.js +136 -0
- package/dist/cli/handlers/show.js.map +1 -0
- package/dist/cli/handlers/stages.d.ts +6 -0
- package/dist/cli/handlers/stages.d.ts.map +1 -0
- package/dist/cli/handlers/stages.js +333 -0
- package/dist/cli/handlers/stages.js.map +1 -0
- package/dist/cli/handlers/studio.d.ts +2 -0
- package/dist/cli/handlers/studio.d.ts.map +1 -0
- package/dist/cli/handlers/studio.js +159 -0
- package/dist/cli/handlers/studio.js.map +1 -0
- package/dist/cli/handlers/templates.d.ts +7 -0
- package/dist/cli/handlers/templates.d.ts.map +1 -0
- package/dist/cli/handlers/templates.js +61 -0
- package/dist/cli/handlers/templates.js.map +1 -0
- package/dist/cli/provider-adapter.d.ts +3 -0
- package/dist/cli/provider-adapter.d.ts.map +1 -0
- package/dist/cli/provider-adapter.js +96 -0
- package/dist/cli/provider-adapter.js.map +1 -0
- package/dist/cli/vclaw.d.ts +15 -0
- package/dist/cli/vclaw.d.ts.map +1 -0
- package/dist/cli/vclaw.js +318 -0
- package/dist/cli/vclaw.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +27 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +168 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +55 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +80 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/video/analyze-output.d.ts +5 -0
- package/dist/video/analyze-output.d.ts.map +1 -0
- package/dist/video/analyze-output.js +7 -0
- package/dist/video/analyze-output.js.map +1 -0
- package/dist/video/archive-project.d.ts +14 -0
- package/dist/video/archive-project.d.ts.map +1 -0
- package/dist/video/archive-project.js +41 -0
- package/dist/video/archive-project.js.map +1 -0
- package/dist/video/artifact-history.d.ts +8 -0
- package/dist/video/artifact-history.d.ts.map +1 -0
- package/dist/video/artifact-history.js +12 -0
- package/dist/video/artifact-history.js.map +1 -0
- package/dist/video/artifact-store.d.ts +8 -0
- package/dist/video/artifact-store.d.ts.map +1 -0
- package/dist/video/artifact-store.js +37 -0
- package/dist/video/artifact-store.js.map +1 -0
- package/dist/video/artifact-validation.d.ts +15 -0
- package/dist/video/artifact-validation.d.ts.map +1 -0
- package/dist/video/artifact-validation.js +287 -0
- package/dist/video/artifact-validation.js.map +1 -0
- package/dist/video/artifacts.d.ts +112 -0
- package/dist/video/artifacts.d.ts.map +1 -0
- package/dist/video/artifacts.js +31 -0
- package/dist/video/artifacts.js.map +1 -0
- package/dist/video/assemble/animate-slides.d.ts +108 -0
- package/dist/video/assemble/animate-slides.d.ts.map +1 -0
- package/dist/video/assemble/animate-slides.js +152 -0
- package/dist/video/assemble/animate-slides.js.map +1 -0
- package/dist/video/assemble/animation-styles.d.ts +21 -0
- package/dist/video/assemble/animation-styles.d.ts.map +1 -0
- package/dist/video/assemble/animation-styles.js +32 -0
- package/dist/video/assemble/animation-styles.js.map +1 -0
- package/dist/video/assemble/animation-styles.json +97 -0
- package/dist/video/assemble/assemble.d.ts +24 -0
- package/dist/video/assemble/assemble.d.ts.map +1 -0
- package/dist/video/assemble/assemble.js +457 -0
- package/dist/video/assemble/assemble.js.map +1 -0
- package/dist/video/assemble/audio-concat.d.ts +61 -0
- package/dist/video/assemble/audio-concat.d.ts.map +1 -0
- package/dist/video/assemble/audio-concat.js +108 -0
- package/dist/video/assemble/audio-concat.js.map +1 -0
- package/dist/video/assemble/audio-mix-plan.d.ts +84 -0
- package/dist/video/assemble/audio-mix-plan.d.ts.map +1 -0
- package/dist/video/assemble/audio-mix-plan.js +74 -0
- package/dist/video/assemble/audio-mix-plan.js.map +1 -0
- package/dist/video/assemble/audio-utils.d.ts +32 -0
- package/dist/video/assemble/audio-utils.d.ts.map +1 -0
- package/dist/video/assemble/audio-utils.js +91 -0
- package/dist/video/assemble/audio-utils.js.map +1 -0
- package/dist/video/assemble/cut-segment.d.ts +40 -0
- package/dist/video/assemble/cut-segment.d.ts.map +1 -0
- package/dist/video/assemble/cut-segment.js +77 -0
- package/dist/video/assemble/cut-segment.js.map +1 -0
- package/dist/video/assemble/ffmpeg.d.ts +91 -0
- package/dist/video/assemble/ffmpeg.d.ts.map +1 -0
- package/dist/video/assemble/ffmpeg.js +251 -0
- package/dist/video/assemble/ffmpeg.js.map +1 -0
- package/dist/video/assemble/gemini-vision-classify.d.ts +37 -0
- package/dist/video/assemble/gemini-vision-classify.d.ts.map +1 -0
- package/dist/video/assemble/gemini-vision-classify.js +123 -0
- package/dist/video/assemble/gemini-vision-classify.js.map +1 -0
- package/dist/video/assemble/index.d.ts +47 -0
- package/dist/video/assemble/index.d.ts.map +1 -0
- package/dist/video/assemble/index.js +40 -0
- package/dist/video/assemble/index.js.map +1 -0
- package/dist/video/assemble/media-qc.d.ts +44 -0
- package/dist/video/assemble/media-qc.d.ts.map +1 -0
- package/dist/video/assemble/media-qc.js +181 -0
- package/dist/video/assemble/media-qc.js.map +1 -0
- package/dist/video/assemble/music.d.ts +51 -0
- package/dist/video/assemble/music.d.ts.map +1 -0
- package/dist/video/assemble/music.js +171 -0
- package/dist/video/assemble/music.js.map +1 -0
- package/dist/video/assemble/narration-fit.d.ts +32 -0
- package/dist/video/assemble/narration-fit.d.ts.map +1 -0
- package/dist/video/assemble/narration-fit.js +59 -0
- package/dist/video/assemble/narration-fit.js.map +1 -0
- package/dist/video/assemble/overlay.d.ts +81 -0
- package/dist/video/assemble/overlay.d.ts.map +1 -0
- package/dist/video/assemble/overlay.js +141 -0
- package/dist/video/assemble/overlay.js.map +1 -0
- package/dist/video/assemble/pdf.d.ts +46 -0
- package/dist/video/assemble/pdf.d.ts.map +1 -0
- package/dist/video/assemble/pdf.js +111 -0
- package/dist/video/assemble/pdf.js.map +1 -0
- package/dist/video/assemble/qa-dialogue-lint.d.ts +56 -0
- package/dist/video/assemble/qa-dialogue-lint.d.ts.map +1 -0
- package/dist/video/assemble/qa-dialogue-lint.js +85 -0
- package/dist/video/assemble/qa-dialogue-lint.js.map +1 -0
- package/dist/video/assemble/qa-image-filter.d.ts +52 -0
- package/dist/video/assemble/qa-image-filter.d.ts.map +1 -0
- package/dist/video/assemble/qa-image-filter.js +102 -0
- package/dist/video/assemble/qa-image-filter.js.map +1 -0
- package/dist/video/assemble/qa-image-vision.d.ts +57 -0
- package/dist/video/assemble/qa-image-vision.d.ts.map +1 -0
- package/dist/video/assemble/qa-image-vision.js +96 -0
- package/dist/video/assemble/qa-image-vision.js.map +1 -0
- package/dist/video/assemble/qa-narration-vision.d.ts +53 -0
- package/dist/video/assemble/qa-narration-vision.d.ts.map +1 -0
- package/dist/video/assemble/qa-narration-vision.js +87 -0
- package/dist/video/assemble/qa-narration-vision.js.map +1 -0
- package/dist/video/assemble/qa-narration.d.ts +53 -0
- package/dist/video/assemble/qa-narration.d.ts.map +1 -0
- package/dist/video/assemble/qa-narration.js +85 -0
- package/dist/video/assemble/qa-narration.js.map +1 -0
- package/dist/video/assemble/stitch-ad.d.ts +88 -0
- package/dist/video/assemble/stitch-ad.d.ts.map +1 -0
- package/dist/video/assemble/stitch-ad.js +161 -0
- package/dist/video/assemble/stitch-ad.js.map +1 -0
- package/dist/video/assemble/stitch.d.ts +341 -0
- package/dist/video/assemble/stitch.d.ts.map +1 -0
- package/dist/video/assemble/stitch.js +607 -0
- package/dist/video/assemble/stitch.js.map +1 -0
- package/dist/video/assemble/text-card.d.ts +78 -0
- package/dist/video/assemble/text-card.d.ts.map +1 -0
- package/dist/video/assemble/text-card.js +210 -0
- package/dist/video/assemble/text-card.js.map +1 -0
- package/dist/video/assemble/title-card.d.ts +39 -0
- package/dist/video/assemble/title-card.d.ts.map +1 -0
- package/dist/video/assemble/title-card.js +127 -0
- package/dist/video/assemble/title-card.js.map +1 -0
- package/dist/video/assemble/transcript.d.ts +66 -0
- package/dist/video/assemble/transcript.d.ts.map +1 -0
- package/dist/video/assemble/transcript.js +200 -0
- package/dist/video/assemble/transcript.js.map +1 -0
- package/dist/video/assemble/tts-elevenlabs.d.ts +52 -0
- package/dist/video/assemble/tts-elevenlabs.d.ts.map +1 -0
- package/dist/video/assemble/tts-elevenlabs.js +118 -0
- package/dist/video/assemble/tts-elevenlabs.js.map +1 -0
- package/dist/video/assemble/tts.d.ts +79 -0
- package/dist/video/assemble/tts.d.ts.map +1 -0
- package/dist/video/assemble/tts.js +131 -0
- package/dist/video/assemble/tts.js.map +1 -0
- package/dist/video/assemble/types.d.ts +43 -0
- package/dist/video/assemble/types.d.ts.map +1 -0
- package/dist/video/assemble/types.js +2 -0
- package/dist/video/assemble/types.js.map +1 -0
- package/dist/video/assemble/upscale.d.ts +43 -0
- package/dist/video/assemble/upscale.d.ts.map +1 -0
- package/dist/video/assemble/upscale.js +52 -0
- package/dist/video/assemble/upscale.js.map +1 -0
- package/dist/video/asset-spec.d.ts +15 -0
- package/dist/video/asset-spec.d.ts.map +1 -0
- package/dist/video/asset-spec.js +43 -0
- package/dist/video/asset-spec.js.map +1 -0
- package/dist/video/asset-tag-lookup.d.ts +31 -0
- package/dist/video/asset-tag-lookup.d.ts.map +1 -0
- package/dist/video/asset-tag-lookup.js +45 -0
- package/dist/video/asset-tag-lookup.js.map +1 -0
- package/dist/video/atomic-write.d.ts +2 -0
- package/dist/video/atomic-write.d.ts.map +1 -0
- package/dist/video/atomic-write.js +7 -0
- package/dist/video/atomic-write.js.map +1 -0
- package/dist/video/audio-platform/native-elevenlabs-sfx.d.ts +29 -0
- package/dist/video/audio-platform/native-elevenlabs-sfx.d.ts.map +1 -0
- package/dist/video/audio-platform/native-elevenlabs-sfx.js +95 -0
- package/dist/video/audio-platform/native-elevenlabs-sfx.js.map +1 -0
- package/dist/video/audio-platform/native-elevenlabs-tts.d.ts +30 -0
- package/dist/video/audio-platform/native-elevenlabs-tts.d.ts.map +1 -0
- package/dist/video/audio-platform/native-elevenlabs-tts.js +95 -0
- package/dist/video/audio-platform/native-elevenlabs-tts.js.map +1 -0
- package/dist/video/audio-platform/native-flowmusic.d.ts +21 -0
- package/dist/video/audio-platform/native-flowmusic.d.ts.map +1 -0
- package/dist/video/audio-platform/native-flowmusic.js +137 -0
- package/dist/video/audio-platform/native-flowmusic.js.map +1 -0
- package/dist/video/audio-platform/native-gemini-tts.d.ts +26 -0
- package/dist/video/audio-platform/native-gemini-tts.d.ts.map +1 -0
- package/dist/video/audio-platform/native-gemini-tts.js +202 -0
- package/dist/video/audio-platform/native-gemini-tts.js.map +1 -0
- package/dist/video/audio-platform/native-lyria.d.ts +35 -0
- package/dist/video/audio-platform/native-lyria.d.ts.map +1 -0
- package/dist/video/audio-platform/native-lyria.js +189 -0
- package/dist/video/audio-platform/native-lyria.js.map +1 -0
- package/dist/video/audio-platform/native-lyria3.d.ts +36 -0
- package/dist/video/audio-platform/native-lyria3.d.ts.map +1 -0
- package/dist/video/audio-platform/native-lyria3.js +210 -0
- package/dist/video/audio-platform/native-lyria3.js.map +1 -0
- package/dist/video/audio-platform/registry.d.ts +82 -0
- package/dist/video/audio-platform/registry.d.ts.map +1 -0
- package/dist/video/audio-platform/registry.js +189 -0
- package/dist/video/audio-platform/registry.js.map +1 -0
- package/dist/video/audio-platform/suno-backend.d.ts +11 -0
- package/dist/video/audio-platform/suno-backend.d.ts.map +1 -0
- package/dist/video/audio-platform/suno-backend.js +33 -0
- package/dist/video/audio-platform/suno-backend.js.map +1 -0
- package/dist/video/audio-platform/types.d.ts +128 -0
- package/dist/video/audio-platform/types.d.ts.map +1 -0
- package/dist/video/audio-platform/types.js +9 -0
- package/dist/video/audio-platform/types.js.map +1 -0
- package/dist/video/batch-queue.d.ts +276 -0
- package/dist/video/batch-queue.d.ts.map +1 -0
- package/dist/video/batch-queue.js +519 -0
- package/dist/video/batch-queue.js.map +1 -0
- package/dist/video/blueprint-prompt.d.ts +37 -0
- package/dist/video/blueprint-prompt.d.ts.map +1 -0
- package/dist/video/blueprint-prompt.js +107 -0
- package/dist/video/blueprint-prompt.js.map +1 -0
- package/dist/video/brand-definition.d.ts +97 -0
- package/dist/video/brand-definition.d.ts.map +1 -0
- package/dist/video/brand-definition.js +206 -0
- package/dist/video/brand-definition.js.map +1 -0
- package/dist/video/brand-dna.d.ts +101 -0
- package/dist/video/brand-dna.d.ts.map +1 -0
- package/dist/video/brand-dna.js +370 -0
- package/dist/video/brand-dna.js.map +1 -0
- package/dist/video/brand-prompt.d.ts +13 -0
- package/dist/video/brand-prompt.d.ts.map +1 -0
- package/dist/video/brand-prompt.js +26 -0
- package/dist/video/brand-prompt.js.map +1 -0
- package/dist/video/candidate-migrate.d.ts +27 -0
- package/dist/video/candidate-migrate.d.ts.map +1 -0
- package/dist/video/candidate-migrate.js +119 -0
- package/dist/video/candidate-migrate.js.map +1 -0
- package/dist/video/category-registry.d.ts +38 -0
- package/dist/video/category-registry.d.ts.map +1 -0
- package/dist/video/category-registry.js +188 -0
- package/dist/video/category-registry.js.map +1 -0
- package/dist/video/chain-fallback.d.ts +39 -0
- package/dist/video/chain-fallback.d.ts.map +1 -0
- package/dist/video/chain-fallback.js +43 -0
- package/dist/video/chain-fallback.js.map +1 -0
- package/dist/video/character-auto-create.d.ts +72 -0
- package/dist/video/character-auto-create.d.ts.map +1 -0
- package/dist/video/character-auto-create.js +392 -0
- package/dist/video/character-auto-create.js.map +1 -0
- package/dist/video/character-consistency.d.ts +3 -0
- package/dist/video/character-consistency.d.ts.map +1 -0
- package/dist/video/character-consistency.js +69 -0
- package/dist/video/character-consistency.js.map +1 -0
- package/dist/video/characters.d.ts +44 -0
- package/dist/video/characters.d.ts.map +1 -0
- package/dist/video/characters.js +96 -0
- package/dist/video/characters.js.map +1 -0
- package/dist/video/checkpoints.d.ts +16 -0
- package/dist/video/checkpoints.d.ts.map +1 -0
- package/dist/video/checkpoints.js +29 -0
- package/dist/video/checkpoints.js.map +1 -0
- package/dist/video/cinema-profile.d.ts +57 -0
- package/dist/video/cinema-profile.d.ts.map +1 -0
- package/dist/video/cinema-profile.js +89 -0
- package/dist/video/cinema-profile.js.map +1 -0
- package/dist/video/cinematography.d.ts +299 -0
- package/dist/video/cinematography.d.ts.map +1 -0
- package/dist/video/cinematography.js +914 -0
- package/dist/video/cinematography.js.map +1 -0
- package/dist/video/cli-output.d.ts +52 -0
- package/dist/video/cli-output.d.ts.map +1 -0
- package/dist/video/cli-output.js +81 -0
- package/dist/video/cli-output.js.map +1 -0
- package/dist/video/cli-schema.d.ts +40 -0
- package/dist/video/cli-schema.d.ts.map +1 -0
- package/dist/video/cli-schema.js +447 -0
- package/dist/video/cli-schema.js.map +1 -0
- package/dist/video/cost-estimate.d.ts +37 -0
- package/dist/video/cost-estimate.d.ts.map +1 -0
- package/dist/video/cost-estimate.js +103 -0
- package/dist/video/cost-estimate.js.map +1 -0
- package/dist/video/csv-export.d.ts +8 -0
- package/dist/video/csv-export.d.ts.map +1 -0
- package/dist/video/csv-export.js +133 -0
- package/dist/video/csv-export.js.map +1 -0
- package/dist/video/dependencies.d.ts +23 -0
- package/dist/video/dependencies.d.ts.map +1 -0
- package/dist/video/dependencies.js +36 -0
- package/dist/video/dependencies.js.map +1 -0
- package/dist/video/dialogue-fit.d.ts +23 -0
- package/dist/video/dialogue-fit.d.ts.map +1 -0
- package/dist/video/dialogue-fit.js +38 -0
- package/dist/video/dialogue-fit.js.map +1 -0
- package/dist/video/dialogue.d.ts +77 -0
- package/dist/video/dialogue.d.ts.map +1 -0
- package/dist/video/dialogue.js +143 -0
- package/dist/video/dialogue.js.map +1 -0
- package/dist/video/director-defaults.d.ts +37 -0
- package/dist/video/director-defaults.d.ts.map +1 -0
- package/dist/video/director-defaults.js +383 -0
- package/dist/video/director-defaults.js.map +1 -0
- package/dist/video/director-preflight.d.ts +53 -0
- package/dist/video/director-preflight.d.ts.map +1 -0
- package/dist/video/director-preflight.js +462 -0
- package/dist/video/director-preflight.js.map +1 -0
- package/dist/video/doctor-portfolio.d.ts +43 -0
- package/dist/video/doctor-portfolio.d.ts.map +1 -0
- package/dist/video/doctor-portfolio.js +137 -0
- package/dist/video/doctor-portfolio.js.map +1 -0
- package/dist/video/doctor.d.ts +13 -0
- package/dist/video/doctor.d.ts.map +1 -0
- package/dist/video/doctor.js +449 -0
- package/dist/video/doctor.js.map +1 -0
- package/dist/video/emotion-cues.d.ts +15 -0
- package/dist/video/emotion-cues.d.ts.map +1 -0
- package/dist/video/emotion-cues.js +37 -0
- package/dist/video/emotion-cues.js.map +1 -0
- package/dist/video/environment-assets.d.ts +28 -0
- package/dist/video/environment-assets.d.ts.map +1 -0
- package/dist/video/environment-assets.js +43 -0
- package/dist/video/environment-assets.js.map +1 -0
- package/dist/video/environment-auto-create.d.ts +20 -0
- package/dist/video/environment-auto-create.d.ts.map +1 -0
- package/dist/video/environment-auto-create.js +88 -0
- package/dist/video/environment-auto-create.js.map +1 -0
- package/dist/video/errors.d.ts +35 -0
- package/dist/video/errors.d.ts.map +1 -0
- package/dist/video/errors.js +117 -0
- package/dist/video/errors.js.map +1 -0
- package/dist/video/events.d.ts +11 -0
- package/dist/video/events.d.ts.map +1 -0
- package/dist/video/events.js +32 -0
- package/dist/video/events.js.map +1 -0
- package/dist/video/execute-autochain.d.ts +65 -0
- package/dist/video/execute-autochain.d.ts.map +1 -0
- package/dist/video/execute-autochain.js +165 -0
- package/dist/video/execute-autochain.js.map +1 -0
- package/dist/video/execute.d.ts +27 -0
- package/dist/video/execute.d.ts.map +1 -0
- package/dist/video/execute.js +477 -0
- package/dist/video/execute.js.map +1 -0
- package/dist/video/execution-cancel.d.ts +11 -0
- package/dist/video/execution-cancel.d.ts.map +1 -0
- package/dist/video/execution-cancel.js +85 -0
- package/dist/video/execution-cancel.js.map +1 -0
- package/dist/video/execution-plan.d.ts +5 -0
- package/dist/video/execution-plan.d.ts.map +1 -0
- package/dist/video/execution-plan.js +145 -0
- package/dist/video/execution-plan.js.map +1 -0
- package/dist/video/execution-profile.d.ts +25 -0
- package/dist/video/execution-profile.d.ts.map +1 -0
- package/dist/video/execution-profile.js +124 -0
- package/dist/video/execution-profile.js.map +1 -0
- package/dist/video/execution-runtime.d.ts +104 -0
- package/dist/video/execution-runtime.d.ts.map +1 -0
- package/dist/video/execution-runtime.js +750 -0
- package/dist/video/execution-runtime.js.map +1 -0
- package/dist/video/execution-seed.d.ts +14 -0
- package/dist/video/execution-seed.d.ts.map +1 -0
- package/dist/video/execution-seed.js +29 -0
- package/dist/video/execution-seed.js.map +1 -0
- package/dist/video/execution-status.d.ts +12 -0
- package/dist/video/execution-status.d.ts.map +1 -0
- package/dist/video/execution-status.js +666 -0
- package/dist/video/execution-status.js.map +1 -0
- package/dist/video/filmmaking-prompts.d.ts +356 -0
- package/dist/video/filmmaking-prompts.d.ts.map +1 -0
- package/dist/video/filmmaking-prompts.js +1212 -0
- package/dist/video/filmmaking-prompts.js.map +1 -0
- package/dist/video/final-media.d.ts +17 -0
- package/dist/video/final-media.d.ts.map +1 -0
- package/dist/video/final-media.js +78 -0
- package/dist/video/final-media.js.map +1 -0
- package/dist/video/finish.d.ts +99 -0
- package/dist/video/finish.d.ts.map +1 -0
- package/dist/video/finish.js +159 -0
- package/dist/video/finish.js.map +1 -0
- package/dist/video/flow-character-library.d.ts +143 -0
- package/dist/video/flow-character-library.d.ts.map +1 -0
- package/dist/video/flow-character-library.js +211 -0
- package/dist/video/flow-character-library.js.map +1 -0
- package/dist/video/flow-markers.d.ts +107 -0
- package/dist/video/flow-markers.d.ts.map +1 -0
- package/dist/video/flow-markers.js +278 -0
- package/dist/video/flow-markers.js.map +1 -0
- package/dist/video/gemini-analyze.d.ts +44 -0
- package/dist/video/gemini-analyze.d.ts.map +1 -0
- package/dist/video/gemini-analyze.js +323 -0
- package/dist/video/gemini-analyze.js.map +1 -0
- package/dist/video/gemini-continuity.d.ts +40 -0
- package/dist/video/gemini-continuity.d.ts.map +1 -0
- package/dist/video/gemini-continuity.js +145 -0
- package/dist/video/gemini-continuity.js.map +1 -0
- package/dist/video/gemini-judge.d.ts +33 -0
- package/dist/video/gemini-judge.d.ts.map +1 -0
- package/dist/video/gemini-judge.js +218 -0
- package/dist/video/gemini-judge.js.map +1 -0
- package/dist/video/gemini-key-pool.d.ts +23 -0
- package/dist/video/gemini-key-pool.d.ts.map +1 -0
- package/dist/video/gemini-key-pool.js +107 -0
- package/dist/video/gemini-key-pool.js.map +1 -0
- package/dist/video/gen-image-flow.d.ts +187 -0
- package/dist/video/gen-image-flow.d.ts.map +1 -0
- package/dist/video/gen-image-flow.js +331 -0
- package/dist/video/gen-image-flow.js.map +1 -0
- package/dist/video/gen-image.d.ts +153 -0
- package/dist/video/gen-image.d.ts.map +1 -0
- package/dist/video/gen-image.js +263 -0
- package/dist/video/gen-image.js.map +1 -0
- package/dist/video/generation-telemetry.d.ts +60 -0
- package/dist/video/generation-telemetry.d.ts.map +1 -0
- package/dist/video/generation-telemetry.js +214 -0
- package/dist/video/generation-telemetry.js.map +1 -0
- package/dist/video/http-error-safety.d.ts +9 -0
- package/dist/video/http-error-safety.d.ts.map +1 -0
- package/dist/video/http-error-safety.js +14 -0
- package/dist/video/http-error-safety.js.map +1 -0
- package/dist/video/image-dimensions.d.ts +7 -0
- package/dist/video/image-dimensions.d.ts.map +1 -0
- package/dist/video/image-dimensions.js +54 -0
- package/dist/video/image-dimensions.js.map +1 -0
- package/dist/video/legacy-import.d.ts +11 -0
- package/dist/video/legacy-import.d.ts.map +1 -0
- package/dist/video/legacy-import.js +181 -0
- package/dist/video/legacy-import.js.map +1 -0
- package/dist/video/library-clean.d.ts +34 -0
- package/dist/video/library-clean.d.ts.map +1 -0
- package/dist/video/library-clean.js +340 -0
- package/dist/video/library-clean.js.map +1 -0
- package/dist/video/lipsync.d.ts +72 -0
- package/dist/video/lipsync.d.ts.map +1 -0
- package/dist/video/lipsync.js +136 -0
- package/dist/video/lipsync.js.map +1 -0
- package/dist/video/media-host.d.ts +41 -0
- package/dist/video/media-host.d.ts.map +1 -0
- package/dist/video/media-host.js +106 -0
- package/dist/video/media-host.js.map +1 -0
- package/dist/video/metrics.d.ts +30 -0
- package/dist/video/metrics.d.ts.map +1 -0
- package/dist/video/metrics.js +81 -0
- package/dist/video/metrics.js.map +1 -0
- package/dist/video/motion-overlay/analyze-reel.d.ts +38 -0
- package/dist/video/motion-overlay/analyze-reel.d.ts.map +1 -0
- package/dist/video/motion-overlay/analyze-reel.js +185 -0
- package/dist/video/motion-overlay/analyze-reel.js.map +1 -0
- package/dist/video/motion-overlay/animate-render.d.ts +63 -0
- package/dist/video/motion-overlay/animate-render.d.ts.map +1 -0
- package/dist/video/motion-overlay/animate-render.js +128 -0
- package/dist/video/motion-overlay/animate-render.js.map +1 -0
- package/dist/video/motion-overlay/animate.d.ts +37 -0
- package/dist/video/motion-overlay/animate.d.ts.map +1 -0
- package/dist/video/motion-overlay/animate.js +97 -0
- package/dist/video/motion-overlay/animate.js.map +1 -0
- package/dist/video/motion-overlay/avatar-host-transport.d.ts +161 -0
- package/dist/video/motion-overlay/avatar-host-transport.d.ts.map +1 -0
- package/dist/video/motion-overlay/avatar-host-transport.js +325 -0
- package/dist/video/motion-overlay/avatar-host-transport.js.map +1 -0
- package/dist/video/motion-overlay/avatar-host.d.ts +131 -0
- package/dist/video/motion-overlay/avatar-host.d.ts.map +1 -0
- package/dist/video/motion-overlay/avatar-host.js +131 -0
- package/dist/video/motion-overlay/avatar-host.js.map +1 -0
- package/dist/video/motion-overlay/compose-prompt.d.ts +48 -0
- package/dist/video/motion-overlay/compose-prompt.d.ts.map +1 -0
- package/dist/video/motion-overlay/compose-prompt.js +217 -0
- package/dist/video/motion-overlay/compose-prompt.js.map +1 -0
- package/dist/video/motion-overlay/execute.d.ts +190 -0
- package/dist/video/motion-overlay/execute.d.ts.map +1 -0
- package/dist/video/motion-overlay/execute.js +205 -0
- package/dist/video/motion-overlay/execute.js.map +1 -0
- package/dist/video/motion-overlay/flow-pack.d.ts +65 -0
- package/dist/video/motion-overlay/flow-pack.d.ts.map +1 -0
- package/dist/video/motion-overlay/flow-pack.js +178 -0
- package/dist/video/motion-overlay/flow-pack.js.map +1 -0
- package/dist/video/motion-overlay/ingest.d.ts +74 -0
- package/dist/video/motion-overlay/ingest.d.ts.map +1 -0
- package/dist/video/motion-overlay/ingest.js +172 -0
- package/dist/video/motion-overlay/ingest.js.map +1 -0
- package/dist/video/motion-overlay/motifs.d.ts +63 -0
- package/dist/video/motion-overlay/motifs.d.ts.map +1 -0
- package/dist/video/motion-overlay/motifs.js +192 -0
- package/dist/video/motion-overlay/motifs.js.map +1 -0
- package/dist/video/motion-overlay/motion-style.d.ts +56 -0
- package/dist/video/motion-overlay/motion-style.d.ts.map +1 -0
- package/dist/video/motion-overlay/motion-style.js +130 -0
- package/dist/video/motion-overlay/motion-style.js.map +1 -0
- package/dist/video/motion-overlay/plan.d.ts +49 -0
- package/dist/video/motion-overlay/plan.d.ts.map +1 -0
- package/dist/video/motion-overlay/plan.js +79 -0
- package/dist/video/motion-overlay/plan.js.map +1 -0
- package/dist/video/motion-overlay/preview.d.ts +36 -0
- package/dist/video/motion-overlay/preview.d.ts.map +1 -0
- package/dist/video/motion-overlay/preview.js +169 -0
- package/dist/video/motion-overlay/preview.js.map +1 -0
- package/dist/video/motion-overlay/render-local.d.ts +118 -0
- package/dist/video/motion-overlay/render-local.d.ts.map +1 -0
- package/dist/video/motion-overlay/render-local.js +298 -0
- package/dist/video/motion-overlay/render-local.js.map +1 -0
- package/dist/video/motion-overlay/run.d.ts +58 -0
- package/dist/video/motion-overlay/run.d.ts.map +1 -0
- package/dist/video/motion-overlay/run.js +147 -0
- package/dist/video/motion-overlay/run.js.map +1 -0
- package/dist/video/motion-overlay/slice.d.ts +29 -0
- package/dist/video/motion-overlay/slice.d.ts.map +1 -0
- package/dist/video/motion-overlay/slice.js +88 -0
- package/dist/video/motion-overlay/slice.js.map +1 -0
- package/dist/video/motion-overlay/transcribe.d.ts +49 -0
- package/dist/video/motion-overlay/transcribe.d.ts.map +1 -0
- package/dist/video/motion-overlay/transcribe.js +180 -0
- package/dist/video/motion-overlay/transcribe.js.map +1 -0
- package/dist/video/motion-overlay/types.d.ts +82 -0
- package/dist/video/motion-overlay/types.d.ts.map +1 -0
- package/dist/video/motion-overlay/types.js +12 -0
- package/dist/video/motion-overlay/types.js.map +1 -0
- package/dist/video/motion-overlay/v2v-transport.d.ts +37 -0
- package/dist/video/motion-overlay/v2v-transport.d.ts.map +1 -0
- package/dist/video/motion-overlay/v2v-transport.js +178 -0
- package/dist/video/motion-overlay/v2v-transport.js.map +1 -0
- package/dist/video/motion-overlay/write.d.ts +40 -0
- package/dist/video/motion-overlay/write.d.ts.map +1 -0
- package/dist/video/motion-overlay/write.js +113 -0
- package/dist/video/motion-overlay/write.js.map +1 -0
- package/dist/video/multi-shot-artifact.d.ts +19 -0
- package/dist/video/multi-shot-artifact.d.ts.map +1 -0
- package/dist/video/multi-shot-artifact.js +44 -0
- package/dist/video/multi-shot-artifact.js.map +1 -0
- package/dist/video/multi-shot-prompt.d.ts +99 -0
- package/dist/video/multi-shot-prompt.d.ts.map +1 -0
- package/dist/video/multi-shot-prompt.js +466 -0
- package/dist/video/multi-shot-prompt.js.map +1 -0
- package/dist/video/music-video.d.ts +110 -0
- package/dist/video/music-video.d.ts.map +1 -0
- package/dist/video/music-video.js +190 -0
- package/dist/video/music-video.js.map +1 -0
- package/dist/video/narrate.d.ts +58 -0
- package/dist/video/narrate.d.ts.map +1 -0
- package/dist/video/narrate.js +145 -0
- package/dist/video/narrate.js.map +1 -0
- package/dist/video/native-dreamina.d.ts +35 -0
- package/dist/video/native-dreamina.d.ts.map +1 -0
- package/dist/video/native-dreamina.js +532 -0
- package/dist/video/native-dreamina.js.map +1 -0
- package/dist/video/native-flow-r2v.d.ts +113 -0
- package/dist/video/native-flow-r2v.d.ts.map +1 -0
- package/dist/video/native-flow-r2v.js +223 -0
- package/dist/video/native-flow-r2v.js.map +1 -0
- package/dist/video/native-runway.d.ts +41 -0
- package/dist/video/native-runway.d.ts.map +1 -0
- package/dist/video/native-runway.js +523 -0
- package/dist/video/native-runway.js.map +1 -0
- package/dist/video/native-seedance.d.ts +74 -0
- package/dist/video/native-seedance.d.ts.map +1 -0
- package/dist/video/native-seedance.js +461 -0
- package/dist/video/native-seedance.js.map +1 -0
- package/dist/video/native-veo.d.ts +20 -0
- package/dist/video/native-veo.d.ts.map +1 -0
- package/dist/video/native-veo.js +390 -0
- package/dist/video/native-veo.js.map +1 -0
- package/dist/video/next-actions.d.ts +27 -0
- package/dist/video/next-actions.d.ts.map +1 -0
- package/dist/video/next-actions.js +201 -0
- package/dist/video/next-actions.js.map +1 -0
- package/dist/video/obsidian-export.d.ts +12 -0
- package/dist/video/obsidian-export.d.ts.map +1 -0
- package/dist/video/obsidian-export.js +285 -0
- package/dist/video/obsidian-export.js.map +1 -0
- package/dist/video/obsidian-sync.d.ts +13 -0
- package/dist/video/obsidian-sync.d.ts.map +1 -0
- package/dist/video/obsidian-sync.js +479 -0
- package/dist/video/obsidian-sync.js.map +1 -0
- package/dist/video/obsidian-vault.d.ts +8 -0
- package/dist/video/obsidian-vault.d.ts.map +1 -0
- package/dist/video/obsidian-vault.js +81 -0
- package/dist/video/obsidian-vault.js.map +1 -0
- package/dist/video/outfit-prompts.d.ts +10 -0
- package/dist/video/outfit-prompts.d.ts.map +1 -0
- package/dist/video/outfit-prompts.js +14 -0
- package/dist/video/outfit-prompts.js.map +1 -0
- package/dist/video/outpaint-keyframe.d.ts +95 -0
- package/dist/video/outpaint-keyframe.d.ts.map +1 -0
- package/dist/video/outpaint-keyframe.js +244 -0
- package/dist/video/outpaint-keyframe.js.map +1 -0
- package/dist/video/pipeline-manifest.d.ts +4 -0
- package/dist/video/pipeline-manifest.d.ts.map +1 -0
- package/dist/video/pipeline-manifest.js +13 -0
- package/dist/video/pipeline-manifest.js.map +1 -0
- package/dist/video/pipeline-manifests/director.json +46 -0
- package/dist/video/pipeline-manifests/storyboard.json +46 -0
- package/dist/video/platform-specs.d.ts +26 -0
- package/dist/video/platform-specs.d.ts.map +1 -0
- package/dist/video/platform-specs.js +34 -0
- package/dist/video/platform-specs.js.map +1 -0
- package/dist/video/playbooks.d.ts +11 -0
- package/dist/video/playbooks.d.ts.map +1 -0
- package/dist/video/playbooks.js +22 -0
- package/dist/video/playbooks.js.map +1 -0
- package/dist/video/post-production.d.ts +57 -0
- package/dist/video/post-production.d.ts.map +1 -0
- package/dist/video/post-production.js +210 -0
- package/dist/video/post-production.js.map +1 -0
- package/dist/video/preview-portal/audit.d.ts +4 -0
- package/dist/video/preview-portal/audit.d.ts.map +1 -0
- package/dist/video/preview-portal/audit.js +16 -0
- package/dist/video/preview-portal/audit.js.map +1 -0
- package/dist/video/preview-portal/discovery.d.ts +23 -0
- package/dist/video/preview-portal/discovery.d.ts.map +1 -0
- package/dist/video/preview-portal/discovery.js +733 -0
- package/dist/video/preview-portal/discovery.js.map +1 -0
- package/dist/video/preview-portal/generate.d.ts +42 -0
- package/dist/video/preview-portal/generate.d.ts.map +1 -0
- package/dist/video/preview-portal/generate.js +101 -0
- package/dist/video/preview-portal/generate.js.map +1 -0
- package/dist/video/preview-portal/index.d.ts +12 -0
- package/dist/video/preview-portal/index.d.ts.map +1 -0
- package/dist/video/preview-portal/index.js +8 -0
- package/dist/video/preview-portal/index.js.map +1 -0
- package/dist/video/preview-portal/publish.d.ts +48 -0
- package/dist/video/preview-portal/publish.d.ts.map +1 -0
- package/dist/video/preview-portal/publish.js +169 -0
- package/dist/video/preview-portal/publish.js.map +1 -0
- package/dist/video/preview-portal/render.d.ts +4 -0
- package/dist/video/preview-portal/render.d.ts.map +1 -0
- package/dist/video/preview-portal/render.js +822 -0
- package/dist/video/preview-portal/render.js.map +1 -0
- package/dist/video/preview-portal/shared-assets.d.ts +6 -0
- package/dist/video/preview-portal/shared-assets.d.ts.map +1 -0
- package/dist/video/preview-portal/shared-assets.js +452 -0
- package/dist/video/preview-portal/shared-assets.js.map +1 -0
- package/dist/video/preview-portal/templates.d.ts +4 -0
- package/dist/video/preview-portal/templates.d.ts.map +1 -0
- package/dist/video/preview-portal/templates.js +109 -0
- package/dist/video/preview-portal/templates.js.map +1 -0
- package/dist/video/preview-portal/types.d.ts +246 -0
- package/dist/video/preview-portal/types.d.ts.map +1 -0
- package/dist/video/preview-portal/types.js +28 -0
- package/dist/video/preview-portal/types.js.map +1 -0
- package/dist/video/product-references.d.ts +21 -0
- package/dist/video/product-references.d.ts.map +1 -0
- package/dist/video/product-references.js +25 -0
- package/dist/video/product-references.js.map +1 -0
- package/dist/video/project-blueprint.d.ts +178 -0
- package/dist/video/project-blueprint.d.ts.map +1 -0
- package/dist/video/project-blueprint.js +286 -0
- package/dist/video/project-blueprint.js.map +1 -0
- package/dist/video/project-index.d.ts +82 -0
- package/dist/video/project-index.d.ts.map +1 -0
- package/dist/video/project-index.js +89 -0
- package/dist/video/project-index.js.map +1 -0
- package/dist/video/projects.d.ts +3 -0
- package/dist/video/projects.d.ts.map +1 -0
- package/dist/video/projects.js +18 -0
- package/dist/video/projects.js.map +1 -0
- package/dist/video/prompt-guidance.d.ts +14 -0
- package/dist/video/prompt-guidance.d.ts.map +1 -0
- package/dist/video/prompt-guidance.js +44 -0
- package/dist/video/prompt-guidance.js.map +1 -0
- package/dist/video/prompt-library.d.ts +11 -0
- package/dist/video/prompt-library.d.ts.map +1 -0
- package/dist/video/prompt-library.js +85 -0
- package/dist/video/prompt-library.js.map +1 -0
- package/dist/video/prompt-lint.d.ts +146 -0
- package/dist/video/prompt-lint.d.ts.map +1 -0
- package/dist/video/prompt-lint.js +433 -0
- package/dist/video/prompt-lint.js.map +1 -0
- package/dist/video/prompt-quality.d.ts +29 -0
- package/dist/video/prompt-quality.d.ts.map +1 -0
- package/dist/video/prompt-quality.js +532 -0
- package/dist/video/prompt-quality.js.map +1 -0
- package/dist/video/prompt-rules.d.ts +94 -0
- package/dist/video/prompt-rules.d.ts.map +1 -0
- package/dist/video/prompt-rules.js +169 -0
- package/dist/video/prompt-rules.js.map +1 -0
- package/dist/video/provider-adapter-runner.d.ts +5 -0
- package/dist/video/provider-adapter-runner.d.ts.map +1 -0
- package/dist/video/provider-adapter-runner.js +92 -0
- package/dist/video/provider-adapter-runner.js.map +1 -0
- package/dist/video/provider-platform/index.d.ts +6 -0
- package/dist/video/provider-platform/index.d.ts.map +1 -0
- package/dist/video/provider-platform/index.js +6 -0
- package/dist/video/provider-platform/index.js.map +1 -0
- package/dist/video/provider-platform/registry.d.ts +5 -0
- package/dist/video/provider-platform/registry.d.ts.map +1 -0
- package/dist/video/provider-platform/registry.js +279 -0
- package/dist/video/provider-platform/registry.js.map +1 -0
- package/dist/video/provider-platform/route-capabilities.d.ts +133 -0
- package/dist/video/provider-platform/route-capabilities.d.ts.map +1 -0
- package/dist/video/provider-platform/route-capabilities.js +192 -0
- package/dist/video/provider-platform/route-capabilities.js.map +1 -0
- package/dist/video/provider-platform/router.d.ts +7 -0
- package/dist/video/provider-platform/router.d.ts.map +1 -0
- package/dist/video/provider-platform/router.js +150 -0
- package/dist/video/provider-platform/router.js.map +1 -0
- package/dist/video/provider-platform/security.d.ts +8 -0
- package/dist/video/provider-platform/security.d.ts.map +1 -0
- package/dist/video/provider-platform/security.js +21 -0
- package/dist/video/provider-platform/security.js.map +1 -0
- package/dist/video/provider-platform/telemetry.d.ts +24 -0
- package/dist/video/provider-platform/telemetry.d.ts.map +1 -0
- package/dist/video/provider-platform/telemetry.js +88 -0
- package/dist/video/provider-platform/telemetry.js.map +1 -0
- package/dist/video/provider-platform/types.d.ts +139 -0
- package/dist/video/provider-platform/types.d.ts.map +1 -0
- package/dist/video/provider-platform/types.js +17 -0
- package/dist/video/provider-platform/types.js.map +1 -0
- package/dist/video/provider-status.d.ts +12 -0
- package/dist/video/provider-status.d.ts.map +1 -0
- package/dist/video/provider-status.js +169 -0
- package/dist/video/provider-status.js.map +1 -0
- package/dist/video/providers/dreamina-useapi.d.ts +170 -0
- package/dist/video/providers/dreamina-useapi.d.ts.map +1 -0
- package/dist/video/providers/dreamina-useapi.js +176 -0
- package/dist/video/providers/dreamina-useapi.js.map +1 -0
- package/dist/video/providers/flowmusic-useapi.d.ts +114 -0
- package/dist/video/providers/flowmusic-useapi.d.ts.map +1 -0
- package/dist/video/providers/flowmusic-useapi.js +159 -0
- package/dist/video/providers/flowmusic-useapi.js.map +1 -0
- package/dist/video/providers/google-flow.d.ts +57 -0
- package/dist/video/providers/google-flow.d.ts.map +1 -0
- package/dist/video/providers/google-flow.js +63 -0
- package/dist/video/providers/google-flow.js.map +1 -0
- package/dist/video/providers/public-host.d.ts +40 -0
- package/dist/video/providers/public-host.d.ts.map +1 -0
- package/dist/video/providers/public-host.js +91 -0
- package/dist/video/providers/public-host.js.map +1 -0
- package/dist/video/providers/runway-useapi.d.ts +159 -0
- package/dist/video/providers/runway-useapi.d.ts.map +1 -0
- package/dist/video/providers/runway-useapi.js +200 -0
- package/dist/video/providers/runway-useapi.js.map +1 -0
- package/dist/video/providers/xskill.d.ts +108 -0
- package/dist/video/providers/xskill.d.ts.map +1 -0
- package/dist/video/providers/xskill.js +233 -0
- package/dist/video/providers/xskill.js.map +1 -0
- package/dist/video/readiness.d.ts +18 -0
- package/dist/video/readiness.d.ts.map +1 -0
- package/dist/video/readiness.js +221 -0
- package/dist/video/readiness.js.map +1 -0
- package/dist/video/reference-sheet-store.d.ts +5 -0
- package/dist/video/reference-sheet-store.d.ts.map +1 -0
- package/dist/video/reference-sheet-store.js +28 -0
- package/dist/video/reference-sheet-store.js.map +1 -0
- package/dist/video/reference-sheets.d.ts +40 -0
- package/dist/video/reference-sheets.d.ts.map +1 -0
- package/dist/video/reference-sheets.js +160 -0
- package/dist/video/reference-sheets.js.map +1 -0
- package/dist/video/remix-narrated.d.ts +12 -0
- package/dist/video/remix-narrated.d.ts.map +1 -0
- package/dist/video/remix-narrated.js +73 -0
- package/dist/video/remix-narrated.js.map +1 -0
- package/dist/video/report-diff.d.ts +89 -0
- package/dist/video/report-diff.d.ts.map +1 -0
- package/dist/video/report-diff.js +176 -0
- package/dist/video/report-diff.js.map +1 -0
- package/dist/video/report-history.d.ts +40 -0
- package/dist/video/report-history.d.ts.map +1 -0
- package/dist/video/report-history.js +74 -0
- package/dist/video/report-history.js.map +1 -0
- package/dist/video/report.d.ts +15 -0
- package/dist/video/report.d.ts.map +1 -0
- package/dist/video/report.js +21 -0
- package/dist/video/report.js.map +1 -0
- package/dist/video/review-ui.d.ts +180 -0
- package/dist/video/review-ui.d.ts.map +1 -0
- package/dist/video/review-ui.js +2008 -0
- package/dist/video/review-ui.js.map +1 -0
- package/dist/video/scene-candidate-store.d.ts +12 -0
- package/dist/video/scene-candidate-store.d.ts.map +1 -0
- package/dist/video/scene-candidate-store.js +134 -0
- package/dist/video/scene-candidate-store.js.map +1 -0
- package/dist/video/scene-candidates.d.ts +57 -0
- package/dist/video/scene-candidates.d.ts.map +1 -0
- package/dist/video/scene-candidates.js +149 -0
- package/dist/video/scene-candidates.js.map +1 -0
- package/dist/video/scene-selection-store.d.ts +5 -0
- package/dist/video/scene-selection-store.d.ts.map +1 -0
- package/dist/video/scene-selection-store.js +22 -0
- package/dist/video/scene-selection-store.js.map +1 -0
- package/dist/video/scene-selection.d.ts +83 -0
- package/dist/video/scene-selection.d.ts.map +1 -0
- package/dist/video/scene-selection.js +225 -0
- package/dist/video/scene-selection.js.map +1 -0
- package/dist/video/scheduling.d.ts +3 -0
- package/dist/video/scheduling.d.ts.map +1 -0
- package/dist/video/scheduling.js +16 -0
- package/dist/video/scheduling.js.map +1 -0
- package/dist/video/scorecard.d.ts +12 -0
- package/dist/video/scorecard.d.ts.map +1 -0
- package/dist/video/scorecard.js +68 -0
- package/dist/video/scorecard.js.map +1 -0
- package/dist/video/seedance-asset-library.d.ts +82 -0
- package/dist/video/seedance-asset-library.d.ts.map +1 -0
- package/dist/video/seedance-asset-library.js +146 -0
- package/dist/video/seedance-asset-library.js.map +1 -0
- package/dist/video/seedance-blocks.d.ts +56 -0
- package/dist/video/seedance-blocks.d.ts.map +1 -0
- package/dist/video/seedance-blocks.js +97 -0
- package/dist/video/seedance-blocks.js.map +1 -0
- package/dist/video/seedance-chain-host.d.ts +42 -0
- package/dist/video/seedance-chain-host.d.ts.map +1 -0
- package/dist/video/seedance-chain-host.js +128 -0
- package/dist/video/seedance-chain-host.js.map +1 -0
- package/dist/video/seedance-content-filter.d.ts +80 -0
- package/dist/video/seedance-content-filter.d.ts.map +1 -0
- package/dist/video/seedance-content-filter.js +293 -0
- package/dist/video/seedance-content-filter.js.map +1 -0
- package/dist/video/seedance-skill-loader.d.ts +40 -0
- package/dist/video/seedance-skill-loader.d.ts.map +1 -0
- package/dist/video/seedance-skill-loader.js +53 -0
- package/dist/video/seedance-skill-loader.js.map +1 -0
- package/dist/video/sfx.d.ts +49 -0
- package/dist/video/sfx.d.ts.map +1 -0
- package/dist/video/sfx.js +104 -0
- package/dist/video/sfx.js.map +1 -0
- package/dist/video/shot-grammar.d.ts +103 -0
- package/dist/video/shot-grammar.d.ts.map +1 -0
- package/dist/video/shot-grammar.js +286 -0
- package/dist/video/shot-grammar.js.map +1 -0
- package/dist/video/show-bible.d.ts +113 -0
- package/dist/video/show-bible.d.ts.map +1 -0
- package/dist/video/show-bible.js +140 -0
- package/dist/video/show-bible.js.map +1 -0
- package/dist/video/soundtrack.d.ts +72 -0
- package/dist/video/soundtrack.d.ts.map +1 -0
- package/dist/video/soundtrack.js +171 -0
- package/dist/video/soundtrack.js.map +1 -0
- package/dist/video/stage-guards.d.ts +4 -0
- package/dist/video/stage-guards.d.ts.map +1 -0
- package/dist/video/stage-guards.js +94 -0
- package/dist/video/stage-guards.js.map +1 -0
- package/dist/video/status.d.ts +69 -0
- package/dist/video/status.d.ts.map +1 -0
- package/dist/video/status.js +245 -0
- package/dist/video/status.js.map +1 -0
- package/dist/video/story-bible.d.ts +70 -0
- package/dist/video/story-bible.d.ts.map +1 -0
- package/dist/video/story-bible.js +181 -0
- package/dist/video/story-bible.js.map +1 -0
- package/dist/video/storyboard-grid.d.ts +28 -0
- package/dist/video/storyboard-grid.d.ts.map +1 -0
- package/dist/video/storyboard-grid.js +231 -0
- package/dist/video/storyboard-grid.js.map +1 -0
- package/dist/video/storyboard-markdown.d.ts +62 -0
- package/dist/video/storyboard-markdown.d.ts.map +1 -0
- package/dist/video/storyboard-markdown.js +332 -0
- package/dist/video/storyboard-markdown.js.map +1 -0
- package/dist/video/storyboard-still-candidates.d.ts +31 -0
- package/dist/video/storyboard-still-candidates.d.ts.map +1 -0
- package/dist/video/storyboard-still-candidates.js +57 -0
- package/dist/video/storyboard-still-candidates.js.map +1 -0
- package/dist/video/storyboard-templates.d.ts +28 -0
- package/dist/video/storyboard-templates.d.ts.map +1 -0
- package/dist/video/storyboard-templates.js +215 -0
- package/dist/video/storyboard-templates.js.map +1 -0
- package/dist/video/studio/execute.d.ts +142 -0
- package/dist/video/studio/execute.d.ts.map +1 -0
- package/dist/video/studio/execute.js +270 -0
- package/dist/video/studio/execute.js.map +1 -0
- package/dist/video/studio/planner.d.ts +3 -0
- package/dist/video/studio/planner.d.ts.map +1 -0
- package/dist/video/studio/planner.js +110 -0
- package/dist/video/studio/planner.js.map +1 -0
- package/dist/video/studio/project-context.d.ts +4 -0
- package/dist/video/studio/project-context.d.ts.map +1 -0
- package/dist/video/studio/project-context.js +20 -0
- package/dist/video/studio/project-context.js.map +1 -0
- package/dist/video/studio/recipes.d.ts +4 -0
- package/dist/video/studio/recipes.d.ts.map +1 -0
- package/dist/video/studio/recipes.js +343 -0
- package/dist/video/studio/recipes.js.map +1 -0
- package/dist/video/studio/session.d.ts +8 -0
- package/dist/video/studio/session.d.ts.map +1 -0
- package/dist/video/studio/session.js +17 -0
- package/dist/video/studio/session.js.map +1 -0
- package/dist/video/studio/types.d.ts +59 -0
- package/dist/video/studio/types.d.ts.map +1 -0
- package/dist/video/studio/types.js +2 -0
- package/dist/video/studio/types.js.map +1 -0
- package/dist/video/template-store.d.ts +65 -0
- package/dist/video/template-store.d.ts.map +1 -0
- package/dist/video/template-store.js +168 -0
- package/dist/video/template-store.js.map +1 -0
- package/dist/video/timeline.d.ts +8 -0
- package/dist/video/timeline.d.ts.map +1 -0
- package/dist/video/timeline.js +21 -0
- package/dist/video/timeline.js.map +1 -0
- package/dist/video/title-overlay.d.ts +85 -0
- package/dist/video/title-overlay.d.ts.map +1 -0
- package/dist/video/title-overlay.js +163 -0
- package/dist/video/title-overlay.js.map +1 -0
- package/dist/video/types.d.ts +403 -0
- package/dist/video/types.d.ts.map +1 -0
- package/dist/video/types.js +2 -0
- package/dist/video/types.js.map +1 -0
- package/dist/video/veo-subprocess.d.ts +27 -0
- package/dist/video/veo-subprocess.d.ts.map +1 -0
- package/dist/video/veo-subprocess.js +52 -0
- package/dist/video/veo-subprocess.js.map +1 -0
- package/dist/video/verify-env.d.ts +43 -0
- package/dist/video/verify-env.d.ts.map +1 -0
- package/dist/video/verify-env.js +156 -0
- package/dist/video/verify-env.js.map +1 -0
- package/dist/video/verify-final.d.ts +20 -0
- package/dist/video/verify-final.d.ts.map +1 -0
- package/dist/video/verify-final.js +39 -0
- package/dist/video/verify-final.js.map +1 -0
- package/dist/video/video-context.d.ts +10 -0
- package/dist/video/video-context.d.ts.map +1 -0
- package/dist/video/video-context.js +74 -0
- package/dist/video/video-context.js.map +1 -0
- package/dist/video/vocal-map.d.ts +55 -0
- package/dist/video/vocal-map.d.ts.map +1 -0
- package/dist/video/vocal-map.js +107 -0
- package/dist/video/vocal-map.js.map +1 -0
- package/dist/video/vocal-sync-plan.d.ts +76 -0
- package/dist/video/vocal-sync-plan.d.ts.map +1 -0
- package/dist/video/vocal-sync-plan.js +166 -0
- package/dist/video/vocal-sync-plan.js.map +1 -0
- package/dist/video/voice-clone.d.ts +152 -0
- package/dist/video/voice-clone.d.ts.map +1 -0
- package/dist/video/voice-clone.js +267 -0
- package/dist/video/voice-clone.js.map +1 -0
- package/dist/video/with-retry.d.ts +67 -0
- package/dist/video/with-retry.d.ts.map +1 -0
- package/dist/video/with-retry.js +105 -0
- package/dist/video/with-retry.js.map +1 -0
- package/dist/video/workload.d.ts +20 -0
- package/dist/video/workload.d.ts.map +1 -0
- package/dist/video/workload.js +55 -0
- package/dist/video/workload.js.map +1 -0
- package/dist/video/workspace.d.ts +109 -0
- package/dist/video/workspace.d.ts.map +1 -0
- package/dist/video/workspace.js +132 -0
- package/dist/video/workspace.js.map +1 -0
- package/docs/AGENT_INTEGRATION_RESEARCH.md +123 -0
- package/docs/AI_FILMMAKING_PROMPTS.md +195 -0
- package/docs/ARCHITECTURE.md +257 -0
- package/docs/ASSEMBLE.md +376 -0
- package/docs/BRAND_AGENCY.md +63 -0
- package/docs/CLAWBOT_COVERAGE_PROMPT.md +78 -0
- package/docs/CLI_REFERENCE.md +2638 -0
- package/docs/CONCIERGE_PROMPT.md +139 -0
- package/docs/Claude Code + Higgsfield MCP = FULL Creative Agency.md +179 -0
- package/docs/DEMO_RECORDING.md +61 -0
- package/docs/DEPRECATION.md +79 -0
- package/docs/DIAGRAMS_SOURCE.md +347 -0
- package/docs/DIRECTOR_BLUEPRINT.md +94 -0
- package/docs/GENERATION_TELEMETRY.md +81 -0
- package/docs/IMPROVE_PROMPT.md +76 -0
- package/docs/INFOGRAPHICS_PROMPT.md +83 -0
- package/docs/MASTER_PLAN_ALIGNMENT.md +563 -0
- package/docs/MIGRATION.md +213 -0
- package/docs/MOTION_OVERLAY.md +355 -0
- package/docs/OBSIDIAN.md +300 -0
- package/docs/OPERATIONS.md +142 -0
- package/docs/OPERATOR_HANDOFF.md +108 -0
- package/docs/PRODUCTION_WORKFLOW.md +148 -0
- package/docs/PROJECT_LAYOUT.md +262 -0
- package/docs/PROMPT_QUALITY.md +214 -0
- package/docs/PROVIDER_PLATFORM.md +195 -0
- package/docs/PUBLISHING.md +175 -0
- package/docs/PYTHON_PIPELINE.md +139 -0
- package/docs/REFERENCE_SHEETS.md +469 -0
- package/docs/REFERENCE_VIDEO_SEEDANCE_MOTION_DESIGN_WORKFLOW.md +465 -0
- package/docs/RELEASE_READINESS.md +573 -0
- package/docs/REVIEW_UI_STORYBOARD_WORKFLOW.md +200 -0
- package/docs/SCENE_CANDIDATES.md +518 -0
- package/docs/SKILLS.md +477 -0
- package/docs/SKILL_COHESION_PROMPT.md +88 -0
- package/docs/STORY_BIBLE.md +288 -0
- package/docs/STUDIO.md +96 -0
- package/docs/TEMPLATES.md +143 -0
- package/docs/UNIFICATION_AUDIT.md +321 -0
- package/docs/UPDATE_DOCS_PROMPT.md +78 -0
- package/docs/assets/demo-quickstart.cast +13 -0
- package/docs/assets/demo-quickstart.gif +0 -0
- package/docs/assets/diagram-architecture.jpg +0 -0
- package/docs/assets/diagram-assemble.jpg +0 -0
- package/docs/assets/diagram-lifecycle.jpg +0 -0
- package/docs/assets/diagram-obsidian-loop.jpg +0 -0
- package/docs/assets/diagram-obsidian-vault.jpg +0 -0
- package/docs/assets/diagram-routing.jpg +0 -0
- package/docs/assets/diagram-skills-ecosystem.jpg +0 -0
- package/docs/assets/diagram-story-bible.jpg +0 -0
- package/docs/assets/diagram-studio-goals.jpg +0 -0
- package/docs/assets/docsite-preview.png +0 -0
- package/docs/assets/logo.jpg +0 -0
- package/docs/assets/logo.png +0 -0
- package/docs/preview-portal-audit.md +151 -0
- package/package.json +119 -0
- package/playbooks/seedance-ugc.json +32 -0
- package/playbooks/veo-generic.json +26 -0
- package/references/video/.fixtures/multi-shot-runway-10s.txt +9 -0
- package/references/video/.fixtures/multi-shot-seedance-10s.txt +9 -0
- package/references/video/.fixtures/multi-shot-valid.txt +13 -0
- package/references/video/.fixtures/multi-shot-veo-8s.txt +9 -0
- package/references/video/ai-director-blueprint.md +614 -0
- package/references/video/camera-bible.md +294 -0
- package/references/video/character-reference-sheet.md +14 -0
- package/references/video/checkpoint-protocol.md +26 -0
- package/references/video/clone-ad-template-workflow.md +14 -0
- package/references/video/dialogue-duration-preflight.md +17 -0
- package/references/video/generation-telemetry.md +18 -0
- package/references/video/multi-shot-framework.md +455 -0
- package/references/video/seedance-skills/01-cinematic.md +1329 -0
- package/references/video/seedance-skills/02-3d-cgi.md +884 -0
- package/references/video/seedance-skills/03-cartoon.md +1668 -0
- package/references/video/seedance-skills/04-comic-to-video.md +1810 -0
- package/references/video/seedance-skills/05-fight-scenes.md +741 -0
- package/references/video/seedance-skills/06-motion-design-ad.md +1145 -0
- package/references/video/seedance-skills/07-ecommerce-ad.md +928 -0
- package/references/video/seedance-skills/08-anime-action.md +1145 -0
- package/references/video/seedance-skills/09-product-360.md +988 -0
- package/references/video/seedance-skills/10-music-video.md +1662 -0
- package/references/video/seedance-skills/11-social-hook.md +1874 -0
- package/references/video/seedance-skills/12-brand-story.md +1151 -0
- package/references/video/seedance-skills/13-fashion-lookbook.md +1236 -0
- package/references/video/seedance-skills/14-food-beverage.md +1110 -0
- package/references/video/seedance-skills/15-real-estate.md +2344 -0
- package/references/video/seedance-transport-payloads.md +144 -0
- package/references/video/seedance-ugc-formulas.md +104 -0
- package/references/video/stage-directors.md +47 -0
- package/references/video/style-template-schema.md +40 -0
- package/references/video/veo-prompting-guide.md +42 -0
- package/schemas/video/artifacts/analyze-output.schema.json +60 -0
- package/schemas/video/artifacts/assemble-report.schema.json +116 -0
- package/schemas/video/artifacts/asset-manifest.schema.json +23 -0
- package/schemas/video/artifacts/batch-queue-manifest.schema.json +59 -0
- package/schemas/video/artifacts/brand-definition.schema.json +93 -0
- package/schemas/video/artifacts/brand-dna.schema.json +55 -0
- package/schemas/video/artifacts/brief.schema.json +13 -0
- package/schemas/video/artifacts/clone-plan.schema.json +44 -0
- package/schemas/video/artifacts/dialogue.schema.json +52 -0
- package/schemas/video/artifacts/environment-assets.schema.json +30 -0
- package/schemas/video/artifacts/execution-plan.schema.json +64 -0
- package/schemas/video/artifacts/execution-report.schema.json +37 -0
- package/schemas/video/artifacts/filmmaking-prompts.schema.json +129 -0
- package/schemas/video/artifacts/flow-characters.schema.json +31 -0
- package/schemas/video/artifacts/flow-voices.schema.json +30 -0
- package/schemas/video/artifacts/motion-overlay-plan.schema.json +50 -0
- package/schemas/video/artifacts/multi-shot-prompt.schema.json +90 -0
- package/schemas/video/artifacts/music-video-config.schema.json +108 -0
- package/schemas/video/artifacts/narration.schema.json +54 -0
- package/schemas/video/artifacts/product-references.schema.json +29 -0
- package/schemas/video/artifacts/project-blueprint.schema.json +236 -0
- package/schemas/video/artifacts/publish-report.schema.json +12 -0
- package/schemas/video/artifacts/reference-sheets.schema.json +85 -0
- package/schemas/video/artifacts/review-report.schema.json +12 -0
- package/schemas/video/artifacts/scene-candidates.schema.json +86 -0
- package/schemas/video/artifacts/scene-selection.schema.json +50 -0
- package/schemas/video/artifacts/seedance-assets.schema.json +31 -0
- package/schemas/video/artifacts/sfx.schema.json +31 -0
- package/schemas/video/artifacts/show-bible.schema.json +66 -0
- package/schemas/video/artifacts/soundtrack.schema.json +39 -0
- package/schemas/video/artifacts/story-bible.schema.json +131 -0
- package/schemas/video/artifacts/storyboard.schema.json +58 -0
- package/schemas/video/artifacts/voice-clones.schema.json +37 -0
- package/schemas/video/brand-profile.schema.json +20 -0
- package/schemas/video/errors.json +48 -0
- package/schemas/video/pipeline-manifest.schema.json +51 -0
- package/skills/README.md +113 -0
- package/skills/ai-director/SKILL.md +140 -0
- package/skills/ai-filmmaking/SKILL.md +239 -0
- package/skills/ai-slop-cleaner/SKILL.md +114 -0
- package/skills/brand-agency/SKILL.md +181 -0
- package/skills/brand-presenter/SKILL.md +114 -0
- package/skills/build-fix/SKILL.md +145 -0
- package/skills/bunty/SKILL.md +41 -0
- package/skills/catalog.json +326 -0
- package/skills/character-ad/SKILL.md +154 -0
- package/skills/character-creator/SKILL.md +303 -0
- package/skills/character-library/README.md +12 -0
- package/skills/character-library/SKILL.md +110 -0
- package/skills/clawbot/SKILL.md +26 -0
- package/skills/concierge/SKILL.md +183 -0
- package/skills/configure-notifications/SKILL.md +286 -0
- package/skills/davendra-presenter/SKILL.md +27 -0
- package/skills/davendra-presenter/assets/davendra_intro_1.jpg +0 -0
- package/skills/davendra-presenter/assets/davendra_intro_2.jpg +0 -0
- package/skills/davendra-presenter/assets/davendra_outro_1.jpg +0 -0
- package/skills/davendra-presenter/assets/davendra_outro_2.jpg +0 -0
- package/skills/deep-interview/SKILL.md +358 -0
- package/skills/deepsearch/SKILL.md +38 -0
- package/skills/doctor/SKILL.md +200 -0
- package/skills/graphify/SKILL.md +616 -0
- package/skills/help/SKILL.md +200 -0
- package/skills/higgsfield-generate/SKILL.md +171 -0
- package/skills/improvement-run/SKILL.md +47 -0
- package/skills/motion-reel/SKILL.md +102 -0
- package/skills/movie-director/SKILL.md +338 -0
- package/skills/multi-shot-prompt/SKILL.md +77 -0
- package/skills/nex-presenter/SKILL.md +25 -0
- package/skills/nex-presenter/assets/logo_manifest.json +26 -0
- package/skills/nex-presenter/assets/logo_source.jpg +0 -0
- package/skills/nex-presenter/assets/nex_brief_intro.mp4 +0 -0
- package/skills/nex-presenter/assets/nex_intro_1.jpg +0 -0
- package/skills/nex-presenter/assets/nex_intro_2.jpg +0 -0
- package/skills/nex-presenter/assets/nex_outro_1.jpg +0 -0
- package/skills/nex-presenter/assets/nex_outro_2.jpg +0 -0
- package/skills/nex-presenter/assets/text_overlay.png +0 -0
- package/skills/note/SKILL.md +62 -0
- package/skills/pipeline/SKILL.md +86 -0
- package/skills/review/SKILL.md +38 -0
- package/skills/runway/SKILL.md +131 -0
- package/skills/seedance-prompts/SKILL.md +194 -0
- package/skills/skill/SKILL.md +835 -0
- package/skills/skills-auditor/SKILL.md +73 -0
- package/skills/studio-mode/SKILL.md +148 -0
- package/skills/ugc/SKILL.md +386 -0
- package/skills/ui-ux-pro-max/SKILL.md +386 -0
- package/skills/video-analyze-template/SKILL.md +77 -0
- package/skills/video-clone-ad/SKILL.md +67 -0
- package/skills/video-framework/SKILL.md +201 -0
- package/skills/video-portfolio-ops/SKILL.md +84 -0
- package/skills/video-post/SKILL.md +97 -0
- package/skills/video-production-handoff/SKILL.md +130 -0
- package/skills/video-release-readiness/SKILL.md +93 -0
- package/skills/video-replicator/SKILL.md +368 -0
- package/skills/video-review-ui-qa/SKILL.md +103 -0
- package/skills/video-storyboard/SKILL.md +71 -0
- package/skills/video-thumbnail-lab/SKILL.md +67 -0
- package/skills/web-clone/SKILL.md +366 -0
- package/skills/worker/SKILL.md +106 -0
- package/skills/youtube-audio/SKILL.md +114 -0
- package/src/video/analyze-output.ts +10 -0
- package/src/video/archive-project.ts +65 -0
- package/src/video/artifact-history.ts +23 -0
- package/src/video/artifact-store.ts +59 -0
- package/src/video/artifact-validation.ts +268 -0
- package/src/video/artifacts.ts +156 -0
- package/src/video/assemble/animate-slides.ts +199 -0
- package/src/video/assemble/animation-styles.json +97 -0
- package/src/video/assemble/animation-styles.ts +54 -0
- package/src/video/assemble/assemble.ts +547 -0
- package/src/video/assemble/audio-concat.ts +165 -0
- package/src/video/assemble/audio-mix-plan.ts +150 -0
- package/src/video/assemble/audio-utils.ts +101 -0
- package/src/video/assemble/cut-segment.ts +121 -0
- package/src/video/assemble/ffmpeg.ts +333 -0
- package/src/video/assemble/gemini-vision-classify.ts +153 -0
- package/src/video/assemble/index.ts +247 -0
- package/src/video/assemble/media-qc.ts +252 -0
- package/src/video/assemble/music.ts +261 -0
- package/src/video/assemble/narration-fit.ts +90 -0
- package/src/video/assemble/overlay.ts +225 -0
- package/src/video/assemble/pdf.ts +169 -0
- package/src/video/assemble/qa-dialogue-lint.ts +129 -0
- package/src/video/assemble/qa-image-filter.ts +147 -0
- package/src/video/assemble/qa-image-vision.ts +154 -0
- package/src/video/assemble/qa-narration-vision.ts +135 -0
- package/src/video/assemble/qa-narration.ts +139 -0
- package/src/video/assemble/stitch-ad.ts +222 -0
- package/src/video/assemble/stitch.ts +918 -0
- package/src/video/assemble/text-card.ts +285 -0
- package/src/video/assemble/title-card.ts +186 -0
- package/src/video/assemble/transcript.ts +240 -0
- package/src/video/assemble/tts-elevenlabs.ts +182 -0
- package/src/video/assemble/tts.ts +227 -0
- package/src/video/assemble/types.ts +45 -0
- package/src/video/assemble/upscale.ts +80 -0
- package/src/video/asset-spec.ts +53 -0
- package/src/video/asset-tag-lookup.ts +51 -0
- package/src/video/atomic-write.ts +7 -0
- package/src/video/audio-platform/native-elevenlabs-sfx.ts +128 -0
- package/src/video/audio-platform/native-elevenlabs-tts.ts +119 -0
- package/src/video/audio-platform/native-flowmusic.ts +167 -0
- package/src/video/audio-platform/native-gemini-tts.ts +226 -0
- package/src/video/audio-platform/native-lyria.ts +231 -0
- package/src/video/audio-platform/native-lyria3.ts +244 -0
- package/src/video/audio-platform/registry.ts +220 -0
- package/src/video/audio-platform/suno-backend.ts +36 -0
- package/src/video/audio-platform/types.ts +138 -0
- package/src/video/batch-queue.ts +685 -0
- package/src/video/blueprint-prompt.ts +118 -0
- package/src/video/brand-definition.ts +287 -0
- package/src/video/brand-dna.ts +478 -0
- package/src/video/brand-prompt.ts +28 -0
- package/src/video/candidate-migrate.ts +171 -0
- package/src/video/category-registry.ts +224 -0
- package/src/video/chain-fallback.ts +53 -0
- package/src/video/character-auto-create.ts +547 -0
- package/src/video/character-consistency.ts +85 -0
- package/src/video/characters.ts +145 -0
- package/src/video/checkpoints.ts +60 -0
- package/src/video/cinema-profile.ts +120 -0
- package/src/video/cinematography.ts +1229 -0
- package/src/video/cli-output.ts +94 -0
- package/src/video/cli-schema.ts +505 -0
- package/src/video/cost-estimate.ts +150 -0
- package/src/video/csv-export.ts +150 -0
- package/src/video/dependencies.ts +64 -0
- package/src/video/dialogue-fit.ts +62 -0
- package/src/video/dialogue.ts +221 -0
- package/src/video/director-defaults.ts +432 -0
- package/src/video/director-preflight.ts +543 -0
- package/src/video/doctor-portfolio.ts +197 -0
- package/src/video/doctor.ts +499 -0
- package/src/video/emotion-cues.ts +36 -0
- package/src/video/environment-assets.ts +69 -0
- package/src/video/environment-auto-create.ts +122 -0
- package/src/video/errors.ts +133 -0
- package/src/video/events.ts +42 -0
- package/src/video/execute-autochain.ts +226 -0
- package/src/video/execute.ts +569 -0
- package/src/video/execution-cancel.ts +103 -0
- package/src/video/execution-plan.ts +178 -0
- package/src/video/execution-profile.ts +162 -0
- package/src/video/execution-runtime.ts +975 -0
- package/src/video/execution-seed.ts +46 -0
- package/src/video/execution-status.ts +736 -0
- package/src/video/filmmaking-prompts.ts +1789 -0
- package/src/video/final-media.ts +118 -0
- package/src/video/finish.ts +255 -0
- package/src/video/flow-character-library.ts +342 -0
- package/src/video/flow-markers.ts +330 -0
- package/src/video/gemini-analyze.ts +387 -0
- package/src/video/gemini-continuity.ts +186 -0
- package/src/video/gemini-judge.ts +300 -0
- package/src/video/gemini-key-pool.ts +153 -0
- package/src/video/gen-image-flow.ts +491 -0
- package/src/video/gen-image.ts +392 -0
- package/src/video/generation-telemetry.ts +282 -0
- package/src/video/http-error-safety.ts +13 -0
- package/src/video/image-dimensions.ts +69 -0
- package/src/video/legacy-import.ts +197 -0
- package/src/video/library-clean.ts +399 -0
- package/src/video/lipsync.ts +200 -0
- package/src/video/media-host.ts +153 -0
- package/src/video/metrics.ts +116 -0
- package/src/video/motion-overlay/analyze-reel.ts +200 -0
- package/src/video/motion-overlay/animate-render.ts +176 -0
- package/src/video/motion-overlay/animate.ts +93 -0
- package/src/video/motion-overlay/avatar-host-transport.ts +458 -0
- package/src/video/motion-overlay/avatar-host.ts +238 -0
- package/src/video/motion-overlay/compose-prompt.ts +247 -0
- package/src/video/motion-overlay/execute.ts +355 -0
- package/src/video/motion-overlay/flow-pack.ts +223 -0
- package/src/video/motion-overlay/ingest.ts +210 -0
- package/src/video/motion-overlay/motifs.ts +223 -0
- package/src/video/motion-overlay/motion-style.ts +162 -0
- package/src/video/motion-overlay/plan.ts +111 -0
- package/src/video/motion-overlay/preview.ts +191 -0
- package/src/video/motion-overlay/render-local.ts +441 -0
- package/src/video/motion-overlay/run.ts +217 -0
- package/src/video/motion-overlay/slice.ts +98 -0
- package/src/video/motion-overlay/transcribe.ts +211 -0
- package/src/video/motion-overlay/types.ts +89 -0
- package/src/video/motion-overlay/v2v-transport.ts +209 -0
- package/src/video/motion-overlay/write.ts +142 -0
- package/src/video/multi-shot-artifact.ts +64 -0
- package/src/video/multi-shot-prompt.ts +608 -0
- package/src/video/music-video.ts +324 -0
- package/src/video/narrate.ts +221 -0
- package/src/video/native-dreamina.ts +638 -0
- package/src/video/native-flow-r2v.ts +279 -0
- package/src/video/native-runway.ts +647 -0
- package/src/video/native-seedance.ts +615 -0
- package/src/video/native-veo.ts +470 -0
- package/src/video/next-actions.ts +247 -0
- package/src/video/obsidian-export.ts +336 -0
- package/src/video/obsidian-sync.ts +649 -0
- package/src/video/obsidian-vault.ts +96 -0
- package/src/video/outfit-prompts.ts +14 -0
- package/src/video/outpaint-keyframe.ts +365 -0
- package/src/video/pipeline-manifest.ts +16 -0
- package/src/video/pipeline-manifests/director.json +46 -0
- package/src/video/pipeline-manifests/storyboard.json +46 -0
- package/src/video/platform-specs.ts +50 -0
- package/src/video/playbooks.ts +34 -0
- package/src/video/post-production.ts +277 -0
- package/src/video/preview-portal/audit.ts +20 -0
- package/src/video/preview-portal/discovery.ts +787 -0
- package/src/video/preview-portal/generate.ts +138 -0
- package/src/video/preview-portal/index.ts +41 -0
- package/src/video/preview-portal/publish.ts +215 -0
- package/src/video/preview-portal/render.ts +865 -0
- package/src/video/preview-portal/shared-assets.ts +455 -0
- package/src/video/preview-portal/templates.ts +112 -0
- package/src/video/preview-portal/types.ts +288 -0
- package/src/video/product-references.ts +43 -0
- package/src/video/project-blueprint.ts +458 -0
- package/src/video/project-index.ts +179 -0
- package/src/video/projects.ts +18 -0
- package/src/video/prompt-guidance.ts +64 -0
- package/src/video/prompt-library.ts +96 -0
- package/src/video/prompt-lint.ts +568 -0
- package/src/video/prompt-quality.ts +635 -0
- package/src/video/prompt-rules.ts +209 -0
- package/src/video/provider-adapter-runner.ts +104 -0
- package/src/video/provider-platform/index.ts +5 -0
- package/src/video/provider-platform/registry.ts +286 -0
- package/src/video/provider-platform/route-capabilities.ts +327 -0
- package/src/video/provider-platform/router.ts +221 -0
- package/src/video/provider-platform/security.ts +29 -0
- package/src/video/provider-platform/telemetry.ts +116 -0
- package/src/video/provider-platform/types.ts +192 -0
- package/src/video/provider-status.ts +199 -0
- package/src/video/providers/dreamina-useapi.ts +345 -0
- package/src/video/providers/flowmusic-useapi.ts +252 -0
- package/src/video/providers/google-flow.ts +110 -0
- package/src/video/providers/public-host.ts +128 -0
- package/src/video/providers/runway-useapi.ts +377 -0
- package/src/video/providers/xskill.ts +304 -0
- package/src/video/readiness.ts +284 -0
- package/src/video/reference-sheet-store.ts +40 -0
- package/src/video/reference-sheets.ts +224 -0
- package/src/video/remix-narrated.ts +92 -0
- package/src/video/report-diff.ts +299 -0
- package/src/video/report-history.ts +122 -0
- package/src/video/report.ts +35 -0
- package/src/video/review-ui.ts +2495 -0
- package/src/video/scene-candidate-store.ts +152 -0
- package/src/video/scene-candidates.ts +195 -0
- package/src/video/scene-selection-store.ts +36 -0
- package/src/video/scene-selection.ts +306 -0
- package/src/video/scheduling.ts +18 -0
- package/src/video/scorecard.ts +90 -0
- package/src/video/seedance-asset-library.ts +259 -0
- package/src/video/seedance-blocks.ts +118 -0
- package/src/video/seedance-chain-host.ts +152 -0
- package/src/video/seedance-content-filter.ts +354 -0
- package/src/video/seedance-skill-loader.ts +83 -0
- package/src/video/sfx.ts +159 -0
- package/src/video/shot-grammar.ts +349 -0
- package/src/video/show-bible.ts +235 -0
- package/src/video/soundtrack.ts +257 -0
- package/src/video/stage-guards.ts +112 -0
- package/src/video/status.ts +342 -0
- package/src/video/story-bible.ts +302 -0
- package/src/video/storyboard-grid.ts +320 -0
- package/src/video/storyboard-markdown.ts +434 -0
- package/src/video/storyboard-still-candidates.ts +82 -0
- package/src/video/storyboard-templates.ts +249 -0
- package/src/video/studio/execute.ts +401 -0
- package/src/video/studio/planner.ts +114 -0
- package/src/video/studio/project-context.ts +25 -0
- package/src/video/studio/recipes.ts +346 -0
- package/src/video/studio/session.ts +24 -0
- package/src/video/studio/types.ts +76 -0
- package/src/video/template-store.ts +241 -0
- package/src/video/timeline.ts +32 -0
- package/src/video/title-overlay.ts +234 -0
- package/src/video/types.ts +465 -0
- package/src/video/veo-subprocess.ts +77 -0
- package/src/video/verify-env.ts +206 -0
- package/src/video/verify-final.ts +65 -0
- package/src/video/video-context.ts +92 -0
- package/src/video/vocal-map.ts +155 -0
- package/src/video/vocal-sync-plan.ts +224 -0
- package/src/video/voice-clone.ts +410 -0
- package/src/video/with-retry.ts +149 -0
- package/src/video/workload.ts +87 -0
- package/src/video/workspace.ts +255 -0
- package/tmp/review-station/index.html +4194 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,685 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overnight batch video queue.
|
|
3
|
+
*
|
|
4
|
+
* A "batch" is a JSON manifest the operator authors listing many independent
|
|
5
|
+
* video jobs. It compiles into ONE {@link VideoExecutionPayload} with N tasks,
|
|
6
|
+
* which is exactly the shape the native route transports (native-runway,
|
|
7
|
+
* native-dreamina, native-seedance) already accept and loop over. This module
|
|
8
|
+
* is pure/deterministic apart from the small fs helpers at the bottom:
|
|
9
|
+
*
|
|
10
|
+
* - readBatchManifest() — graceful parse, throws on malformed (no silent fallback)
|
|
11
|
+
* - buildBatchPayload() — pure: manifest -> VideoExecutionPayload
|
|
12
|
+
* - queue-state helpers — persist <outDir>/batch-queue.json, idempotent rollup
|
|
13
|
+
* - clip mapping helpers — scene-<i>.mp4 -> clips/<jobId>.mp4
|
|
14
|
+
*
|
|
15
|
+
* The default route is the FREE runway-useapi explore mode, so a large queue
|
|
16
|
+
* can run unattended overnight at zero credit cost (low-res/slow drafts).
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { existsSync } from 'node:fs';
|
|
20
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import type { VideoExecutionPayload, VideoExecutionTask } from './types.js';
|
|
23
|
+
|
|
24
|
+
const VALID_ASPECT_RATIOS = ['16:9', '9:16', '1:1'] as const;
|
|
25
|
+
const VALID_RESOLUTIONS = ['720p', '1080p'] as const;
|
|
26
|
+
|
|
27
|
+
/** Routes the batch queue can target. A subset of ProviderRouteId — the three
|
|
28
|
+
* routes with in-process native submit/poll transports that loop payload.tasks. */
|
|
29
|
+
export type BatchRouteId = 'runway-useapi' | 'dreamina-useapi' | 'seedance-direct';
|
|
30
|
+
|
|
31
|
+
const SUPPORTED_ROUTES: readonly BatchRouteId[] = ['runway-useapi', 'dreamina-useapi', 'seedance-direct'];
|
|
32
|
+
|
|
33
|
+
const DEFAULT_ROUTE: BatchRouteId = 'runway-useapi';
|
|
34
|
+
// 10s is the free runway-useapi explore-mode ceiling (720p, ≤10s); default to it
|
|
35
|
+
// so free-lane batch clips use the full available length unless a job overrides.
|
|
36
|
+
const DEFAULT_SECONDS = 10;
|
|
37
|
+
const DEFAULT_ASPECT_RATIO: VideoExecutionPayload['executionProfile']['aspectRatio'] = '16:9';
|
|
38
|
+
const DEFAULT_RESOLUTION: VideoExecutionPayload['executionProfile']['resolution'] = '720p';
|
|
39
|
+
|
|
40
|
+
export interface BatchQueueJob {
|
|
41
|
+
/** Stable, operator-chosen id. Used as the downloaded clip filename. */
|
|
42
|
+
id: string;
|
|
43
|
+
prompt: string;
|
|
44
|
+
/** Optional first-frame keyframe — a local path or a public http(s) URL. */
|
|
45
|
+
keyframe?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Optional END keyframe — a local path or public http(s) URL. With `keyframe`
|
|
48
|
+
* set, the clip animates from `keyframe` (first frame) to `endKeyframe` (last
|
|
49
|
+
* frame) via Seedance-2 keyframe interpolation, turning two stills into one
|
|
50
|
+
* continuous shot. Requires `keyframe`; mutually exclusive with
|
|
51
|
+
* `characterRefs`.
|
|
52
|
+
*/
|
|
53
|
+
endKeyframe?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Optional character reference images (local paths or public http(s) URLs) —
|
|
56
|
+
* one per character, delivered to the provider's reference slot (Runway
|
|
57
|
+
* `imageAssetId1..N`, Dreamina `omni_N_imageRef`) via `referenceRole:
|
|
58
|
+
* 'character'`. Unlike `keyframe`, these are NEVER used as the video's first
|
|
59
|
+
* frame, so a lone character sheet does not open the clip on the character
|
|
60
|
+
* grid (the grid-open bug fixed on main). Mutually exclusive with `keyframe`.
|
|
61
|
+
*/
|
|
62
|
+
characterRefs?: string[];
|
|
63
|
+
/** Per-job duration override; falls back to defaults.seconds, then 10. */
|
|
64
|
+
seconds?: number;
|
|
65
|
+
/** Per-job aspect-ratio override (recorded; provider uses the batch default). */
|
|
66
|
+
aspectRatio?: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface BatchQueueManifest {
|
|
70
|
+
schemaVersion: 1;
|
|
71
|
+
route?: BatchRouteId;
|
|
72
|
+
defaults?: {
|
|
73
|
+
seconds?: number;
|
|
74
|
+
aspectRatio?: string;
|
|
75
|
+
resolution?: string;
|
|
76
|
+
};
|
|
77
|
+
jobs: BatchQueueJob[];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export type BatchJobStatus = 'pending' | 'done' | 'failed';
|
|
81
|
+
|
|
82
|
+
export interface BatchQueueJobState {
|
|
83
|
+
id: string;
|
|
84
|
+
sceneIndex: number;
|
|
85
|
+
taskId: string;
|
|
86
|
+
status: BatchJobStatus;
|
|
87
|
+
/** Set once the clip has been copied to clips/<id>.mp4. */
|
|
88
|
+
clipPath?: string;
|
|
89
|
+
error?: string;
|
|
90
|
+
/**
|
|
91
|
+
* ISO timestamp of when this job's scene was (re)submitted. Used by wedge
|
|
92
|
+
* detection to measure stall time. Optional for backward compat: queues
|
|
93
|
+
* written before this field fall back to the batch-level state.submittedAt.
|
|
94
|
+
*/
|
|
95
|
+
submittedAt?: string;
|
|
96
|
+
/**
|
|
97
|
+
* The real provider-issued task id captured from the native submit's
|
|
98
|
+
* rawResult (e.g. a Runway useapi task id). Distinct from the synthetic
|
|
99
|
+
* `taskId` (`<externalJobId>#<sceneIndex>`) the batch queue keys downloads on.
|
|
100
|
+
* Optional/best-effort: absent when the transport did not surface a per-scene
|
|
101
|
+
* id, so queues written before this field still load unchanged.
|
|
102
|
+
*/
|
|
103
|
+
providerTaskId?: string;
|
|
104
|
+
/**
|
|
105
|
+
* How many times this scene has been auto-resubmitted (Phase 3 PR2). Absent /
|
|
106
|
+
* 0 means it has never been resubmitted; bounded by --max-resubmits. Optional
|
|
107
|
+
* for backward compat: queues written before this field load unchanged.
|
|
108
|
+
*/
|
|
109
|
+
resubmitCount?: number;
|
|
110
|
+
/**
|
|
111
|
+
* When a scene is re-submitted it lives under a NEW externalJobId. This field
|
|
112
|
+
* records that id so the monitor polls the scene's CURRENT job-state file
|
|
113
|
+
* (`.vclaw-jobs/<activeExternalJobId>.json`) rather than the dead original.
|
|
114
|
+
* Absent means the scene is still owned by the batch-level state.externalJobId
|
|
115
|
+
* (the default for every job until it is resubmitted), so existing queues are
|
|
116
|
+
* unchanged.
|
|
117
|
+
*/
|
|
118
|
+
activeExternalJobId?: string;
|
|
119
|
+
/**
|
|
120
|
+
* The compiled single-scene execution task captured at submit time. Persisted
|
|
121
|
+
* so an auto-resubmit can rebuild a byte-identical one-task payload (same
|
|
122
|
+
* prompt / referencePaths / referenceRole / duration / inputKind) WITHOUT
|
|
123
|
+
* re-reading the original manifest. Optional/best-effort: absent on queues
|
|
124
|
+
* written before this field, which simply cannot be auto-resubmitted.
|
|
125
|
+
*/
|
|
126
|
+
task?: VideoExecutionTask;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export interface BatchQueueState {
|
|
130
|
+
schemaVersion: 1;
|
|
131
|
+
externalJobId: string;
|
|
132
|
+
route: BatchRouteId;
|
|
133
|
+
outputDir: string;
|
|
134
|
+
workspaceRoot: string;
|
|
135
|
+
submittedAt: string;
|
|
136
|
+
jobs: BatchQueueJobState[];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export interface BatchQueueRollup {
|
|
140
|
+
total: number;
|
|
141
|
+
done: number;
|
|
142
|
+
pending: number;
|
|
143
|
+
failed: number;
|
|
144
|
+
/** True when no job is still pending (every job is done or failed). */
|
|
145
|
+
terminal: boolean;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function isSupportedRoute(value: unknown): value is BatchRouteId {
|
|
149
|
+
return typeof value === 'string' && (SUPPORTED_ROUTES as readonly string[]).includes(value);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Reads + validates a batch manifest. Throws loudly on malformed JSON or
|
|
154
|
+
* missing required fields — no silent fallback. The only default applied is
|
|
155
|
+
* `route` -> "runway-useapi" when omitted (the free explore default).
|
|
156
|
+
*/
|
|
157
|
+
export async function readBatchManifest(path: string): Promise<BatchQueueManifest & { route: BatchRouteId }> {
|
|
158
|
+
let raw: string;
|
|
159
|
+
try {
|
|
160
|
+
raw = await readFile(path, 'utf-8');
|
|
161
|
+
} catch (err) {
|
|
162
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
163
|
+
throw new Error(`batch manifest not readable at ${path}: ${message}`);
|
|
164
|
+
}
|
|
165
|
+
let parsed: unknown;
|
|
166
|
+
try {
|
|
167
|
+
parsed = JSON.parse(raw);
|
|
168
|
+
} catch (err) {
|
|
169
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
170
|
+
throw new Error(`batch manifest is not valid JSON (${path}): ${message}`);
|
|
171
|
+
}
|
|
172
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
173
|
+
throw new Error(`batch manifest must be a JSON object: ${path}`);
|
|
174
|
+
}
|
|
175
|
+
const obj = parsed as Record<string, unknown>;
|
|
176
|
+
if (obj.schemaVersion !== 1) {
|
|
177
|
+
throw new Error(`batch manifest schemaVersion must be 1, got: ${JSON.stringify(obj.schemaVersion)}`);
|
|
178
|
+
}
|
|
179
|
+
const route = obj.route === undefined ? DEFAULT_ROUTE : obj.route;
|
|
180
|
+
if (!isSupportedRoute(route)) {
|
|
181
|
+
throw new Error(
|
|
182
|
+
`batch manifest route must be one of ${SUPPORTED_ROUTES.join(', ')}, got: ${JSON.stringify(obj.route)}`,
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
if (!Array.isArray(obj.jobs) || obj.jobs.length === 0) {
|
|
186
|
+
throw new Error(`batch manifest requires at least one job in "jobs": ${path}`);
|
|
187
|
+
}
|
|
188
|
+
const seenIds = new Set<string>();
|
|
189
|
+
const jobs: BatchQueueJob[] = obj.jobs.map((entry, index) => {
|
|
190
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
191
|
+
throw new Error(`batch manifest job ${index} must be an object`);
|
|
192
|
+
}
|
|
193
|
+
const job = entry as Record<string, unknown>;
|
|
194
|
+
if (typeof job.id !== 'string' || !job.id.trim()) {
|
|
195
|
+
throw new Error(`batch manifest job ${index} requires a non-empty string "id"`);
|
|
196
|
+
}
|
|
197
|
+
if (typeof job.prompt !== 'string' || !job.prompt.trim()) {
|
|
198
|
+
throw new Error(`batch manifest job "${job.id}" requires a non-empty string "prompt"`);
|
|
199
|
+
}
|
|
200
|
+
if (seenIds.has(job.id)) {
|
|
201
|
+
throw new Error(`batch manifest has a duplicate job id: "${job.id}"`);
|
|
202
|
+
}
|
|
203
|
+
seenIds.add(job.id);
|
|
204
|
+
if (job.keyframe !== undefined && (typeof job.keyframe !== 'string' || !job.keyframe.trim())) {
|
|
205
|
+
throw new Error(`batch manifest job "${job.id}" keyframe must be a non-empty string when present`);
|
|
206
|
+
}
|
|
207
|
+
if (job.endKeyframe !== undefined) {
|
|
208
|
+
if (typeof job.endKeyframe !== 'string' || !job.endKeyframe.trim()) {
|
|
209
|
+
throw new Error(`batch manifest job "${job.id}" endKeyframe must be a non-empty string when present`);
|
|
210
|
+
}
|
|
211
|
+
if (typeof job.keyframe !== 'string' || !job.keyframe.trim()) {
|
|
212
|
+
throw new Error(`batch manifest job "${job.id}" endKeyframe requires a "keyframe" (first frame) to interpolate from`);
|
|
213
|
+
}
|
|
214
|
+
if (Array.isArray(job.characterRefs) && job.characterRefs.length > 0) {
|
|
215
|
+
throw new Error(`batch manifest job "${job.id}" endKeyframe is mutually exclusive with characterRefs`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (job.characterRefs !== undefined) {
|
|
219
|
+
if (!Array.isArray(job.characterRefs) || job.characterRefs.some((ref: unknown) => typeof ref !== 'string' || !ref.trim())) {
|
|
220
|
+
throw new Error(`batch manifest job "${job.id}" characterRefs must be an array of non-empty strings when present`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (job.seconds !== undefined && (typeof job.seconds !== 'number' || !Number.isFinite(job.seconds))) {
|
|
224
|
+
throw new Error(`batch manifest job "${job.id}" seconds must be a number when present`);
|
|
225
|
+
}
|
|
226
|
+
if (job.aspectRatio !== undefined && typeof job.aspectRatio !== 'string') {
|
|
227
|
+
throw new Error(`batch manifest job "${job.id}" aspectRatio must be a string when present`);
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
id: job.id,
|
|
231
|
+
prompt: job.prompt,
|
|
232
|
+
...(typeof job.keyframe === 'string' ? { keyframe: job.keyframe } : {}),
|
|
233
|
+
...(typeof job.endKeyframe === 'string' ? { endKeyframe: job.endKeyframe } : {}),
|
|
234
|
+
...(Array.isArray(job.characterRefs) ? { characterRefs: job.characterRefs as string[] } : {}),
|
|
235
|
+
...(typeof job.seconds === 'number' ? { seconds: job.seconds } : {}),
|
|
236
|
+
...(typeof job.aspectRatio === 'string' ? { aspectRatio: job.aspectRatio } : {}),
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
let defaults: BatchQueueManifest['defaults'];
|
|
241
|
+
if (obj.defaults !== undefined) {
|
|
242
|
+
if (!obj.defaults || typeof obj.defaults !== 'object' || Array.isArray(obj.defaults)) {
|
|
243
|
+
throw new Error(`batch manifest defaults must be an object when present`);
|
|
244
|
+
}
|
|
245
|
+
const d = obj.defaults as Record<string, unknown>;
|
|
246
|
+
if (d.seconds !== undefined && (typeof d.seconds !== 'number' || !Number.isFinite(d.seconds))) {
|
|
247
|
+
throw new Error(`batch manifest defaults.seconds must be a number when present`);
|
|
248
|
+
}
|
|
249
|
+
if (d.aspectRatio !== undefined) {
|
|
250
|
+
if (typeof d.aspectRatio !== 'string' || !(VALID_ASPECT_RATIOS as readonly string[]).includes(d.aspectRatio)) {
|
|
251
|
+
throw new Error(
|
|
252
|
+
`batch manifest defaults.aspectRatio must be one of ${VALID_ASPECT_RATIOS.join(', ')}, got: ${JSON.stringify(d.aspectRatio)}`,
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (d.resolution !== undefined) {
|
|
257
|
+
if (typeof d.resolution !== 'string' || !(VALID_RESOLUTIONS as readonly string[]).includes(d.resolution)) {
|
|
258
|
+
throw new Error(
|
|
259
|
+
`batch manifest defaults.resolution must be one of ${VALID_RESOLUTIONS.join(', ')}, got: ${JSON.stringify(d.resolution)}`,
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
defaults = d as BatchQueueManifest['defaults'];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return { schemaVersion: 1, route, ...(defaults ? { defaults } : {}), jobs };
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function resolveAspectRatio(value: string | undefined): VideoExecutionPayload['executionProfile']['aspectRatio'] {
|
|
270
|
+
if (value === undefined) return DEFAULT_ASPECT_RATIO;
|
|
271
|
+
if (value === '9:16' || value === '1:1' || value === '16:9') return value;
|
|
272
|
+
throw new Error(
|
|
273
|
+
`batch manifest defaults.aspectRatio must be one of ${VALID_ASPECT_RATIOS.join(', ')}, got: ${JSON.stringify(value)}`,
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function resolveResolution(value: string | undefined): VideoExecutionPayload['executionProfile']['resolution'] {
|
|
278
|
+
if (value === undefined) return DEFAULT_RESOLUTION;
|
|
279
|
+
if (value === '1080p' || value === '720p') return value;
|
|
280
|
+
throw new Error(
|
|
281
|
+
`batch manifest defaults.resolution must be one of ${VALID_RESOLUTIONS.join(', ')}, got: ${JSON.stringify(value)}`,
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Pure: compiles a manifest into a single VideoExecutionPayload whose `tasks`
|
|
287
|
+
* map jobs 1:1. Job index becomes sceneIndex; job.keyframe becomes the task's
|
|
288
|
+
* sole referencePath; duration resolves job.seconds -> defaults.seconds -> 10.
|
|
289
|
+
*
|
|
290
|
+
* The resulting payload is byte-compatible with what the native route
|
|
291
|
+
* transports already consume, so submit/poll need no batch-specific code path.
|
|
292
|
+
*/
|
|
293
|
+
export function buildBatchPayload(
|
|
294
|
+
manifest: BatchQueueManifest,
|
|
295
|
+
opts: { workspaceRoot: string; outputDir: string },
|
|
296
|
+
): VideoExecutionPayload {
|
|
297
|
+
const route = isSupportedRoute(manifest.route) ? manifest.route : DEFAULT_ROUTE;
|
|
298
|
+
const defaultSeconds =
|
|
299
|
+
typeof manifest.defaults?.seconds === 'number' && Number.isFinite(manifest.defaults.seconds)
|
|
300
|
+
? manifest.defaults.seconds
|
|
301
|
+
: DEFAULT_SECONDS;
|
|
302
|
+
const aspectRatio = resolveAspectRatio(manifest.defaults?.aspectRatio);
|
|
303
|
+
const resolution = resolveResolution(manifest.defaults?.resolution);
|
|
304
|
+
|
|
305
|
+
const tasks = manifest.jobs.map((job, index) => {
|
|
306
|
+
// characterRefs take priority: delivered as identity references (never the
|
|
307
|
+
// first frame). A keyframe stays a genuine first-frame seed. A job uses one
|
|
308
|
+
// or the other; characterRefs wins if both are somehow present.
|
|
309
|
+
const characterRefs = (job.characterRefs ?? []).filter((ref) => typeof ref === 'string' && ref.trim());
|
|
310
|
+
const referencePaths = characterRefs.length > 0
|
|
311
|
+
? characterRefs
|
|
312
|
+
: job.keyframe
|
|
313
|
+
? [job.keyframe]
|
|
314
|
+
: [];
|
|
315
|
+
const referenceRole: 'character' | undefined = characterRefs.length > 0 ? 'character' : undefined;
|
|
316
|
+
// End keyframe only applies to the keyframe path (not characterRefs) and is
|
|
317
|
+
// carried separately so it never counts as a second referencePaths image.
|
|
318
|
+
const endKeyframePath =
|
|
319
|
+
characterRefs.length === 0 && job.keyframe && typeof job.endKeyframe === 'string'
|
|
320
|
+
? job.endKeyframe
|
|
321
|
+
: undefined;
|
|
322
|
+
const durationSeconds =
|
|
323
|
+
typeof job.seconds === 'number' && Number.isFinite(job.seconds) ? job.seconds : defaultSeconds;
|
|
324
|
+
return {
|
|
325
|
+
sceneIndex: index,
|
|
326
|
+
prompt: job.prompt,
|
|
327
|
+
inputKind: (referencePaths.length > 0 ? 'image' : 'text') as 'image' | 'text',
|
|
328
|
+
referencePaths,
|
|
329
|
+
...(referenceRole ? { referenceRole } : {}),
|
|
330
|
+
...(endKeyframePath ? { endKeyframePath } : {}),
|
|
331
|
+
sourceAssetIds: [],
|
|
332
|
+
backendHints: ['batch-queue'],
|
|
333
|
+
characters: [],
|
|
334
|
+
durationSeconds,
|
|
335
|
+
};
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
return {
|
|
339
|
+
workspaceRoot: opts.workspaceRoot,
|
|
340
|
+
projectSlug: 'batch-queue',
|
|
341
|
+
productionMode: 'storyboard',
|
|
342
|
+
routeId: route,
|
|
343
|
+
operationKind: 'text-to-video',
|
|
344
|
+
executionProfile: {
|
|
345
|
+
aspectRatio,
|
|
346
|
+
quality: 'fast',
|
|
347
|
+
resolution,
|
|
348
|
+
generateAudio: false,
|
|
349
|
+
outputCount: 1,
|
|
350
|
+
},
|
|
351
|
+
generatedAt: new Date().toISOString(),
|
|
352
|
+
outputDir: opts.outputDir,
|
|
353
|
+
tasks,
|
|
354
|
+
promptGuidance: [],
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/** The path the native transport writes a completed scene to. */
|
|
359
|
+
export function sceneOutputPathFor(outputDir: string, sceneIndex: number): string {
|
|
360
|
+
return join(outputDir, `scene-${sceneIndex}.mp4`);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/** The stable per-job clip path the batch monitor copies completed scenes to. */
|
|
364
|
+
export function clipPathForJob(outputDir: string, jobId: string): string {
|
|
365
|
+
return join(outputDir, 'clips', `${jobId}.mp4`);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
export function batchQueueStatePath(outputDir: string): string {
|
|
369
|
+
return join(outputDir, 'batch-queue.json');
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
export function batchStatusPath(outputDir: string): string {
|
|
373
|
+
return join(outputDir, 'batch-status.json');
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export async function writeBatchQueueState(state: BatchQueueState): Promise<void> {
|
|
377
|
+
await mkdir(state.outputDir, { recursive: true });
|
|
378
|
+
await writeFile(batchQueueStatePath(state.outputDir), `${JSON.stringify(state, null, 2)}\n`);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export async function readBatchQueueState(outputDir: string): Promise<BatchQueueState> {
|
|
382
|
+
const path = batchQueueStatePath(outputDir);
|
|
383
|
+
if (!existsSync(path)) {
|
|
384
|
+
throw new Error(`batch-queue.json not found in ${outputDir}; run "vclaw video batch-submit" first.`);
|
|
385
|
+
}
|
|
386
|
+
return JSON.parse(await readFile(path, 'utf-8')) as BatchQueueState;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Reads the native transport's per-scene job-state file
|
|
391
|
+
* (`<outputDir>/.vclaw-jobs/<externalJobId>.json`) and returns a map from
|
|
392
|
+
* sceneIndex to `{ status, error }`. All three transports (runway, dreamina,
|
|
393
|
+
* seedance) write this file with an identical `scenes[]` shape.
|
|
394
|
+
*
|
|
395
|
+
* Returns an empty map when the file is absent (e.g. a very early poll pass
|
|
396
|
+
* before the transport has flushed state). The caller treats absent scenes as
|
|
397
|
+
* still-pending.
|
|
398
|
+
*/
|
|
399
|
+
export async function readNativeJobSceneStates(
|
|
400
|
+
outputDir: string,
|
|
401
|
+
externalJobId: string,
|
|
402
|
+
): Promise<Map<number, { status: 'submitted' | 'completed' | 'failed'; error?: string; outputPath: string }>> {
|
|
403
|
+
const path = join(outputDir, '.vclaw-jobs', `${externalJobId}.json`);
|
|
404
|
+
if (!existsSync(path)) return new Map();
|
|
405
|
+
let raw: string;
|
|
406
|
+
try {
|
|
407
|
+
raw = await readFile(path, 'utf-8');
|
|
408
|
+
} catch {
|
|
409
|
+
return new Map();
|
|
410
|
+
}
|
|
411
|
+
let parsed: unknown;
|
|
412
|
+
try {
|
|
413
|
+
parsed = JSON.parse(raw);
|
|
414
|
+
} catch {
|
|
415
|
+
return new Map();
|
|
416
|
+
}
|
|
417
|
+
const jobState = parsed as {
|
|
418
|
+
scenes?: Array<{ sceneIndex?: number; status?: string; error?: string; outputPath?: string }>;
|
|
419
|
+
};
|
|
420
|
+
const result = new Map<number, { status: 'submitted' | 'completed' | 'failed'; error?: string; outputPath: string }>();
|
|
421
|
+
for (const scene of jobState.scenes ?? []) {
|
|
422
|
+
if (typeof scene.sceneIndex !== 'number') continue;
|
|
423
|
+
const status =
|
|
424
|
+
scene.status === 'completed' || scene.status === 'failed' || scene.status === 'submitted'
|
|
425
|
+
? scene.status
|
|
426
|
+
: 'submitted';
|
|
427
|
+
result.set(scene.sceneIndex, {
|
|
428
|
+
status,
|
|
429
|
+
outputPath: typeof scene.outputPath === 'string' ? scene.outputPath : '',
|
|
430
|
+
...(scene.error ? { error: scene.error } : {}),
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
return result;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/** Counts done/pending/failed and reports whether the queue is fully terminal. */
|
|
437
|
+
export function rollupBatchQueueState(state: BatchQueueState): BatchQueueRollup {
|
|
438
|
+
let done = 0;
|
|
439
|
+
let pending = 0;
|
|
440
|
+
let failed = 0;
|
|
441
|
+
for (const job of state.jobs) {
|
|
442
|
+
if (job.status === 'done') done += 1;
|
|
443
|
+
else if (job.status === 'failed') failed += 1;
|
|
444
|
+
else pending += 1;
|
|
445
|
+
}
|
|
446
|
+
return { total: state.jobs.length, done, pending, failed, terminal: pending === 0 };
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Runway free explore mode allows ~1 concurrent job and returns
|
|
451
|
+
* canUseExploreMode:false / HTTP 429 / rate-limit text when saturated. Detect
|
|
452
|
+
* that signal from a monitor pass's combined stdout+stderr so the loop can back
|
|
453
|
+
* off instead of hammering at the normal interval. Pure/deterministic.
|
|
454
|
+
*/
|
|
455
|
+
export function isExploreThrottled(passOutput: string): boolean {
|
|
456
|
+
// Allow an optional closing quote/whitespace between the key and the colon so a
|
|
457
|
+
// JSON fragment like `"canUseExploreMode": false` is matched, not just bare `canUseExploreMode:false`.
|
|
458
|
+
return /canUseExploreMode["'\s]*[:=]\s*false|\b429\b|too many requests|rate.?limit/i.test(passOutput);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Pure: extracts the provider-issued per-scene task ids from a native submit's
|
|
463
|
+
* `rawResult`. Defensively reads `rawResult.submittedScenes` (an array of
|
|
464
|
+
* `{ sceneIndex: number, taskId: string }`) and returns a Map sceneIndex ->
|
|
465
|
+
* taskId. Tolerant by design — a missing/non-object rawResult, a missing or
|
|
466
|
+
* non-array `submittedScenes`, or partial/wrong-typed entries are skipped
|
|
467
|
+
* rather than throwing. Returns an empty Map when nothing usable is present.
|
|
468
|
+
*/
|
|
469
|
+
export function extractProviderTaskIds(rawResult: unknown): Map<number, string> {
|
|
470
|
+
const result = new Map<number, string>();
|
|
471
|
+
if (!rawResult || typeof rawResult !== 'object' || Array.isArray(rawResult)) return result;
|
|
472
|
+
const submittedScenes = (rawResult as { submittedScenes?: unknown }).submittedScenes;
|
|
473
|
+
if (!Array.isArray(submittedScenes)) return result;
|
|
474
|
+
for (const entry of submittedScenes) {
|
|
475
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) continue;
|
|
476
|
+
const { sceneIndex, taskId } = entry as { sceneIndex?: unknown; taskId?: unknown };
|
|
477
|
+
if (typeof sceneIndex !== 'number' || !Number.isFinite(sceneIndex)) continue;
|
|
478
|
+
if (typeof taskId !== 'string' || !taskId) continue;
|
|
479
|
+
result.set(sceneIndex, taskId);
|
|
480
|
+
}
|
|
481
|
+
return result;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Pure: exponential backoff for the explore-throttle case. Returns
|
|
486
|
+
* `baseMs * 2^consecutiveThrottles`, clamped to `[baseMs, capMs]`. A
|
|
487
|
+
* `consecutiveThrottles <= 0` returns `baseMs` (the normal interval). Used by
|
|
488
|
+
* the monitor loop to widen the poll interval while Runway explore mode is
|
|
489
|
+
* saturated instead of hammering at the flat interval.
|
|
490
|
+
*/
|
|
491
|
+
export function nextBackoffMs(baseMs: number, consecutiveThrottles: number, capMs: number): number {
|
|
492
|
+
if (!(consecutiveThrottles > 0)) return Math.min(baseMs, capMs);
|
|
493
|
+
const scaled = baseMs * 2 ** consecutiveThrottles;
|
|
494
|
+
return Math.min(Math.max(scaled, baseMs), capMs);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
export interface WedgedScene {
|
|
498
|
+
id: string;
|
|
499
|
+
sceneIndex: number;
|
|
500
|
+
stalledMinutes: number;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* A scene is "wedged" when its job is still pending, the native transport still
|
|
505
|
+
* reports it 'submitted' (never reached completed/failed — e.g. a Runway explore
|
|
506
|
+
* queue that never returns it), and it has made no progress for more than
|
|
507
|
+
* stallMinutes. `stallMinutes <= 0` disables detection. Per-job submittedAt falls
|
|
508
|
+
* back to the batch-level state.submittedAt for queues written before that field
|
|
509
|
+
* existed, so old `batch-queue.json` files still work. Pure/deterministic.
|
|
510
|
+
*/
|
|
511
|
+
export function detectWedgedScenes<S extends { status: 'submitted' | 'completed' | 'failed' }>(
|
|
512
|
+
state: BatchQueueState,
|
|
513
|
+
sceneStates: Map<number, S>,
|
|
514
|
+
nowMs: number,
|
|
515
|
+
stallMinutes: number,
|
|
516
|
+
): WedgedScene[] {
|
|
517
|
+
if (!(stallMinutes > 0)) return [];
|
|
518
|
+
const wedged: WedgedScene[] = [];
|
|
519
|
+
for (const job of state.jobs) {
|
|
520
|
+
if (job.status !== 'pending' || !job.taskId) continue;
|
|
521
|
+
const scene = sceneStates.get(job.sceneIndex);
|
|
522
|
+
if (!scene || scene.status !== 'submitted') continue;
|
|
523
|
+
const submittedIso = job.submittedAt ?? state.submittedAt;
|
|
524
|
+
const submittedMs = Date.parse(submittedIso);
|
|
525
|
+
if (Number.isNaN(submittedMs)) continue;
|
|
526
|
+
const stalledMinutes = (nowMs - submittedMs) / 60000;
|
|
527
|
+
if (stalledMinutes > stallMinutes) {
|
|
528
|
+
wedged.push({ id: job.id, sceneIndex: job.sceneIndex, stalledMinutes });
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
return wedged;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Pure: the distinct set of job-state ids the monitor must poll. A scene that
|
|
536
|
+
* has never been resubmitted is owned by the batch-level `state.externalJobId`;
|
|
537
|
+
* a re-submitted scene is owned by its `activeExternalJobId`. The monitor reads
|
|
538
|
+
* `.vclaw-jobs/<id>.json` for each id in this set and merges the per-scene
|
|
539
|
+
* states. Order is preserved (first occurrence wins); deduped. When no job has
|
|
540
|
+
* been resubmitted this returns exactly `[state.externalJobId]`, so the default
|
|
541
|
+
* monitor behaviour is unchanged.
|
|
542
|
+
*/
|
|
543
|
+
export function activeJobIdsFor(state: BatchQueueState): string[] {
|
|
544
|
+
const ids: string[] = [];
|
|
545
|
+
const seen = new Set<string>();
|
|
546
|
+
for (const job of state.jobs) {
|
|
547
|
+
const id = job.activeExternalJobId ?? state.externalJobId;
|
|
548
|
+
if (seen.has(id)) continue;
|
|
549
|
+
seen.add(id);
|
|
550
|
+
ids.push(id);
|
|
551
|
+
}
|
|
552
|
+
// Defensive: a state with zero jobs still yields the batch-level id so the
|
|
553
|
+
// monitor has something to poll (matches pre-resubmit behaviour).
|
|
554
|
+
if (ids.length === 0 && state.externalJobId) {
|
|
555
|
+
ids.push(state.externalJobId);
|
|
556
|
+
}
|
|
557
|
+
return ids;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Pure: plans which wedged scenes are eligible for an auto-resubmit this pass.
|
|
562
|
+
* Delegates wedge detection to {@link detectWedgedScenes} (same stall policy),
|
|
563
|
+
* then keeps only the wedged scenes whose job has been resubmitted fewer than
|
|
564
|
+
* `maxResubmits` times (`resubmitCount ?? 0 < maxResubmits`). Returns the planned
|
|
565
|
+
* `{ sceneIndex, jobId }` list — the side-effecting submit + state mutation lives
|
|
566
|
+
* in the CLI, not here. Empty when `stallMinutes <= 0`, when nothing is wedged,
|
|
567
|
+
* or when every wedged scene has hit its resubmit cap. Never throws.
|
|
568
|
+
*/
|
|
569
|
+
export function planResubmits(
|
|
570
|
+
state: BatchQueueState,
|
|
571
|
+
sceneStates: Map<number, { status: 'submitted' | 'completed' | 'failed' }>,
|
|
572
|
+
nowMs: number,
|
|
573
|
+
opts: { stallMinutes: number; maxResubmits: number },
|
|
574
|
+
): { sceneIndex: number; jobId: string }[] {
|
|
575
|
+
let wedged: WedgedScene[];
|
|
576
|
+
try {
|
|
577
|
+
wedged = detectWedgedScenes(state, sceneStates, nowMs, opts.stallMinutes);
|
|
578
|
+
} catch {
|
|
579
|
+
return [];
|
|
580
|
+
}
|
|
581
|
+
if (wedged.length === 0) return [];
|
|
582
|
+
const byIndex = new Map(state.jobs.map((job) => [job.sceneIndex, job] as const));
|
|
583
|
+
const planned: { sceneIndex: number; jobId: string }[] = [];
|
|
584
|
+
for (const scene of wedged) {
|
|
585
|
+
const job = byIndex.get(scene.sceneIndex);
|
|
586
|
+
if (!job) continue;
|
|
587
|
+
if ((job.resubmitCount ?? 0) < opts.maxResubmits) {
|
|
588
|
+
planned.push({ sceneIndex: scene.sceneIndex, jobId: job.id });
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
return planned;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Pure: builds a single-task VideoExecutionPayload for ONE scene of an existing
|
|
596
|
+
* batch state, reusing that scene's persisted `task` (same prompt /
|
|
597
|
+
* referencePaths / referenceRole / duration / inputKind) so a resubmit
|
|
598
|
+
* reproduces the same job. The task keeps its ORIGINAL `sceneIndex` so the
|
|
599
|
+
* transport writes `scene-<i>.mp4` into the same outputDir the batch monitor
|
|
600
|
+
* reads. The payload's routeId/outputDir/workspaceRoot/profile come from the
|
|
601
|
+
* batch state (the route is the credit-safety-guarded runway-useapi).
|
|
602
|
+
*
|
|
603
|
+
* Throws if the scene is unknown or its `task` was not captured at submit time
|
|
604
|
+
* (an old queue) — the CLI guards against the latter before calling this, so a
|
|
605
|
+
* resubmit is simply skipped rather than crashing the monitor.
|
|
606
|
+
*/
|
|
607
|
+
export function buildSingleSceneResubmitPayload(
|
|
608
|
+
state: BatchQueueState,
|
|
609
|
+
sceneIndex: number,
|
|
610
|
+
): VideoExecutionPayload {
|
|
611
|
+
const job = state.jobs.find((j) => j.sceneIndex === sceneIndex);
|
|
612
|
+
if (!job) {
|
|
613
|
+
throw new Error(`buildSingleSceneResubmitPayload: no job for sceneIndex ${sceneIndex}`);
|
|
614
|
+
}
|
|
615
|
+
if (!job.task) {
|
|
616
|
+
throw new Error(
|
|
617
|
+
`buildSingleSceneResubmitPayload: job "${job.id}" (scene ${sceneIndex}) has no captured task to resubmit`,
|
|
618
|
+
);
|
|
619
|
+
}
|
|
620
|
+
// Preserve the original sceneIndex so the transport writes scene-<i>.mp4 to the
|
|
621
|
+
// same place; everything else is the captured task verbatim.
|
|
622
|
+
const task: VideoExecutionTask = { ...job.task, sceneIndex };
|
|
623
|
+
return {
|
|
624
|
+
workspaceRoot: state.workspaceRoot,
|
|
625
|
+
projectSlug: 'batch-queue',
|
|
626
|
+
productionMode: 'storyboard',
|
|
627
|
+
routeId: state.route,
|
|
628
|
+
operationKind: 'text-to-video',
|
|
629
|
+
executionProfile: {
|
|
630
|
+
aspectRatio: DEFAULT_ASPECT_RATIO,
|
|
631
|
+
quality: 'fast',
|
|
632
|
+
resolution: DEFAULT_RESOLUTION,
|
|
633
|
+
generateAudio: false,
|
|
634
|
+
outputCount: 1,
|
|
635
|
+
},
|
|
636
|
+
generatedAt: new Date().toISOString(),
|
|
637
|
+
outputDir: state.outputDir,
|
|
638
|
+
tasks: [task],
|
|
639
|
+
promptGuidance: [],
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* Returns a copy of `state` with the given scene's taskId/submittedAt cleared so
|
|
645
|
+
* a subsequent submit pass re-queues it. Pure — does not mutate the input.
|
|
646
|
+
*/
|
|
647
|
+
export function clearWedgedScene(state: BatchQueueState, sceneIndex: number): BatchQueueState {
|
|
648
|
+
return {
|
|
649
|
+
...state,
|
|
650
|
+
jobs: state.jobs.map((job) =>
|
|
651
|
+
job.sceneIndex === sceneIndex ? { ...job, taskId: '', submittedAt: undefined } : job,
|
|
652
|
+
),
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Applies wedge handling to a freshly-polled batch state. Pure/deterministic:
|
|
658
|
+
* given the current jobs, the transport's per-scene states, the clock, and the
|
|
659
|
+
* stall policy, returns the wedged scenes and — when `failWedged` is set — a new
|
|
660
|
+
* state with those still-pending wedged jobs marked 'failed'. Failing them lets
|
|
661
|
+
* the queue reach `terminal` so the monitor can stop instead of polling a stuck
|
|
662
|
+
* scene until its deadline. Does NOT mutate the input.
|
|
663
|
+
*
|
|
664
|
+
* `stallMinutes <= 0` disables detection (returns the state unchanged + an empty
|
|
665
|
+
* list), so the monitor's default behaviour is byte-identical to before.
|
|
666
|
+
*/
|
|
667
|
+
export function applyWedgeHandling(
|
|
668
|
+
state: BatchQueueState,
|
|
669
|
+
sceneStates: Map<number, { status: 'submitted' | 'completed' | 'failed' }>,
|
|
670
|
+
nowMs: number,
|
|
671
|
+
opts: { stallMinutes: number; failWedged: boolean },
|
|
672
|
+
): { state: BatchQueueState; wedged: WedgedScene[] } {
|
|
673
|
+
const wedged = detectWedgedScenes(state, sceneStates, nowMs, opts.stallMinutes);
|
|
674
|
+
if (!opts.failWedged || wedged.length === 0) return { state, wedged };
|
|
675
|
+
const wedgedIndexes = new Set(wedged.map((scene) => scene.sceneIndex));
|
|
676
|
+
const next: BatchQueueState = {
|
|
677
|
+
...state,
|
|
678
|
+
jobs: state.jobs.map((job) =>
|
|
679
|
+
wedgedIndexes.has(job.sceneIndex) && job.status === 'pending'
|
|
680
|
+
? { ...job, status: 'failed' as const, error: `wedged: no provider progress in >${opts.stallMinutes}m` }
|
|
681
|
+
: job,
|
|
682
|
+
),
|
|
683
|
+
};
|
|
684
|
+
return { state: next, wedged };
|
|
685
|
+
}
|