import type { StudioRecipe } from './types.js'; export const STUDIO_RECIPES: StudioRecipe[] = [ { id: 'create-video', title: 'Create New Video', goal: 'Create an original video from a brief, references, or scratch concept.', useWhen: ['product ad', 'brand film', 'short film', 'explainer', 'new video'], requiredInputs: ['project', 'intent'], optionalInputs: ['title', 'durationSeconds', 'client', 'platform', 'aspectRatio', 'sourceMode', 'audioMode', 'executionIntent'], riskLevel: 'medium', executionPolicy: 'dry-run-first', commands: [ { id: 'create-dry-run', title: 'Draft production plan', primary: 'vclaw video create --project --production-mode director --platform --aspect-ratio --clip-duration --audio --dry-run', when: 'always', produces: ['brief.json', 'storyboard.json', 'execution profile preview'], outputArtifacts: [ { stepId: 'create-dry-run', kind: 'brief', path: 'artifacts/brief.json', description: 'Creator brief preview.', }, { stepId: 'create-dry-run', kind: 'storyboard', path: 'artifacts/storyboard.json', description: 'Creator storyboard preview.', }, ], }, { id: 'readiness', title: 'Check project readiness', primary: 'vclaw video readiness --project --mode director', when: 'after brief and storyboard exist', produces: ['readiness.json'], outputArtifacts: [ { stepId: 'readiness', kind: 'readiness', path: 'artifacts/readiness.json', description: 'Provider and project readiness report.', }, ], }, { id: 'cost-estimate', title: 'Estimate production cost', primary: 'vclaw video cost-estimate --project --clip-duration ', when: 'before any render or hosted audio step', produces: ['cost estimate'], outputArtifacts: [ { stepId: 'cost-estimate', kind: 'cost-estimate', path: 'artifacts/cost-estimate.json', description: 'Anticipated creator production cost.', }, ], }, { id: 'review-ui', title: 'Open review surface', primary: 'vclaw video review-ui --project --dry-run', when: 'before spend or approval decisions', produces: ['review-ui launch plan'], outputArtifacts: [ { stepId: 'review-ui', kind: 'review-surface', path: 'artifacts/review-ui.json', description: 'Local review surface launch plan.', }, ], }, { id: 'execute-dry-run', title: 'Preview provider render', primary: 'vclaw video produce --project --mode director --dry-run', when: 'after readiness and explicit storyboard approval', produces: ['execution-report.json'], credentialRequirements: [ { id: 'provider-render-credentials', requiredForStepId: 'execute-dry-run', envVars: ['USEAPI_API_TOKEN', 'MAGNIFIC_API_KEY', 'APIZ_API_KEY', 'XSKILL_API_KEY'], requiredWhen: ['render'], description: 'At least one configured provider route is required for a real render; dry-run planning does not require provider credentials.', }, ], spendRequirement: { stepId: 'execute-dry-run', category: 'provider-render', anticipated: true, requiresConfirmation: true, estimatedUsd: null, description: 'Provider rendering may spend credits and stays dry unless --confirm-spend is supplied.', }, approvalRequirement: { type: 'storyboard', requiredBeforeStepId: 'execute-dry-run', status: 'pending', description: 'Storyboard approval remains a separate human gate before real render.', }, outputArtifacts: [ { stepId: 'execute-dry-run', kind: 'execution-report', path: 'artifacts/execution-report.json', description: 'Dry or confirmed render execution report.', }, ], }, { id: 'assemble-dry-run', title: 'Plan final assembly', primary: 'vclaw video assemble --project --from-clips --dry-run', when: 'after accepted scene clips exist', produces: ['assemble-report.json'], spendRequirement: { stepId: 'assemble-dry-run', category: 'local-assembly', anticipated: false, requiresConfirmation: false, estimatedUsd: 0, description: 'Local assembly is dry-run by default in Studio and does not submit to providers.', }, outputArtifacts: [ { stepId: 'assemble-dry-run', kind: 'assemble-report', path: 'artifacts/assemble-report.json', description: 'Final assembly plan or report.', }, ], }, { id: 'qc', title: 'Run final quality review', primary: 'vclaw video motion-qc --project ', when: 'after assembled or rendered clips exist', produces: ['review-report.json'], credentialRequirements: [ { id: 'hosted-qc-credentials', requiredForStepId: 'qc', envVars: ['GEMINI_API_KEYS', 'GOOGLE_API_KEYS', 'GOOGLE_API_KEY'], requiredWhen: ['render', 'publish-package'], description: 'Hosted visual QC needs a Gemini vision key; this step is not run by a plan-only request.', }, ], spendRequirement: { stepId: 'qc', category: 'hosted-qc', anticipated: true, requiresConfirmation: true, estimatedUsd: null, description: 'Hosted visual QC can call Gemini and remains gated by Studio execution policy.', }, approvalRequirement: { type: 'review', requiredBeforeStepId: 'qc', status: 'pending', description: 'Generated clips must be reviewed before publish handoff.', }, outputArtifacts: [ { stepId: 'qc', kind: 'review-report', path: 'artifacts/review-report.json', description: 'Review verdict and publish readiness evidence.', }, ], }, { id: 'publish-package-handoff', title: 'Prepare publish package handoff', primary: 'vclaw video publish --project --status ready', when: 'after review-report verdict is pass and publishReady is true', produces: ['publish-report.json'], approvalRequirement: { type: 'publish', requiredBeforeStepId: 'publish-package-handoff', status: 'pending', description: 'Publish/package handoff requires a passing review report.', }, outputArtifacts: [ { stepId: 'publish-package-handoff', kind: 'publish-report', path: 'artifacts/publish-report.json', description: 'Reviewed publish lifecycle handoff report.', }, ], }, ], }, { id: 'creator-demo', title: 'Zero-Key Creator Demo', goal: 'Create a local-first demo project with deterministic placeholders, readiness, cost estimate, and an openable preview portal.', useWhen: ['demo', 'zero key', 'first run', 'offline onboarding', 'local preview'], requiredInputs: ['project', 'intent'], optionalInputs: ['title', 'durationSeconds', 'client', 'platform', 'aspectRatio', 'sourceMode', 'audioMode'], riskLevel: 'low', executionPolicy: 'dry-run-first', commands: [ { id: 'creator-demo', title: 'Create complete local demo workspace', primary: 'vclaw video creator-demo --project --intent --platform --aspect-ratio --duration ', when: 'always', produces: ['project.json', 'brief.json', 'storyboard.json', 'asset-manifest.json', 'readiness.json', 'cost-estimate.json', 'preview.html', 'review.html', 'run.html'], spendRequirement: { stepId: 'creator-demo', category: 'local-assembly', anticipated: false, requiresConfirmation: false, estimatedUsd: 0, description: 'The complete demo is generated locally without provider or network calls.', }, outputArtifacts: [ { stepId: 'creator-demo', kind: 'brief', path: 'artifacts/brief.json', description: 'Offline creator brief.', }, { stepId: 'creator-demo', kind: 'storyboard', path: 'artifacts/storyboard.json', description: 'Offline storyboard with placeholder scene prompts.', }, { stepId: 'creator-demo', kind: 'asset-manifest', path: 'artifacts/asset-manifest.json', description: 'Local placeholder media manifest.', }, { stepId: 'creator-demo', kind: 'readiness', path: 'artifacts/readiness.json', description: 'Local readiness result; no provider route is called.', }, { stepId: 'creator-demo', kind: 'cost-estimate', path: 'artifacts/cost-estimate.json', description: 'Local low-cost estimate based on storyboard duration.', }, { stepId: 'creator-demo', kind: 'preview-portal', path: 'preview.html', description: 'Openable local preview. It is not a rendered final MP4.', }, ], }, ], }, { id: 'copy-reference', title: 'Copy Or Adapt Reference', goal: 'Analyze a reference video or ad and adapt it for a new subject.', useWhen: ['copy ad', 'clone reel', 'reference video', 'replicate'], requiredInputs: ['project', 'input', 'intent'], optionalInputs: ['client'], riskLevel: 'medium', executionPolicy: 'plan-first', commands: [ { id: 'analyze-reference', title: 'Analyze source reference', primary: 'vclaw video analyze --project --source --auto', when: 'reference source is available', produces: ['analyze-output.json'], }, { id: 'clone-plan', title: 'Build clone plan', primary: 'vclaw video clone-plan --template