@milenyumai/film-kit 2.3.4 → 2.3.5
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/README.md +5 -2
- package/build/index.d.ts +1 -1
- package/build/lib/cli.js +1 -1
- package/build/lib/configure.js +14 -9
- package/build/lib/storyboard-reference/adapters/seedance20.js +5 -5
- package/build/lib/storyboard-reference/index.d.ts +1 -1
- package/build/lib/storyboard-reference/output-writer.js +6 -0
- package/build/lib/storyboard-reference/prompt-bundle-builder.js +68 -19
- package/build/lib/storyboard-reference/types.d.ts +25 -0
- package/build/lib/storyboard-reference/validators.js +4 -0
- package/build/lib/templates.js +1 -1
- package/content/skills/storyboard-reference/SKILL.md +7 -4
- package/content/workflows/generate-storyboard.md +7 -6
- package/package.json +1 -1
- package/packages/gpt-image-smart/content/skills/storyboard-reference/SKILL.md +7 -4
- package/packages/gpt-image-smart/content/workflows/generate-storyboard.md +7 -6
- package/packages/hybrid/content/skills/storyboard-reference/SKILL.md +7 -4
- package/packages/hybrid/content/workflows/generate-storyboard.md +7 -6
- package/packages/hybrid-smart/content/skills/storyboard-reference/SKILL.md +7 -4
- package/packages/hybrid-smart/content/workflows/generate-storyboard.md +7 -6
- package/packages/multi/build/lib/configure.js +4 -4
- package/packages/multi/build/lib/templates.js +9 -9
- package/packages/multi/content/skills/storyboard-reference/SKILL.md +7 -4
- package/packages/multi/content/workflows/generate-storyboard.md +7 -6
- package/packages/studio/content/skills/storyboard-reference/SKILL.md +7 -4
- package/packages/studio/content/workflows/generate-storyboard.md +7 -6
package/README.md
CHANGED
|
@@ -183,6 +183,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
183
183
|
Outputs:
|
|
184
184
|
|
|
185
185
|
- `outputs/storyboard-reference-plan.json`
|
|
186
|
+
- `outputs/storyboard-prompt.md`
|
|
186
187
|
- `outputs/reference-prep/CHARACTER-SHEET-*.md`
|
|
187
188
|
- `outputs/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md`
|
|
188
189
|
- `outputs/prompt-bundles/SHOTNN.bundle.json`
|
|
@@ -196,8 +197,10 @@ Rules:
|
|
|
196
197
|
- `@character1` is used once to create a 16:9 character sheet prompt with front, back, side, three-quarter, and face close-up views.
|
|
197
198
|
- GPT Image 2 still prompts use `REFERENCE LOCK`, `Keep same`, `Change only`, and `Avoid` sections so character identity, wardrobe, props, and materials stay immutable unless explicitly changed.
|
|
198
199
|
- Each `SHOTNN.md` includes a professional `GPT IMAGE 2 STORYBOARD PROMPT`; the generated shot storyboard controls composition, blocking, camera, timing, and editorial phase order only.
|
|
199
|
-
-
|
|
200
|
+
- If no external storyboard image exists, Film-Kit still generates the GPT Image 2 storyboard bootstrap prompt and writes it to both `outputs/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md` and the convenience alias `outputs/storyboard-prompt.md`.
|
|
201
|
+
- Storyboard prompts use production-board grammar: 16:9 storyboard sheet, rough black-and-white pencil panels, strong silhouettes, visible body/camera momentum, cinematic camera variety, and optional color-coded planning annotations. Seedance is instructed to follow the panel order while ignoring arrows, notes, labels, and timestamps in the rendered video.
|
|
200
202
|
- Seedance provider-facing tokens map generated character sheets first (`@Image1`, `@Image2`, ...) and the generated shot storyboard next. Legacy lowercase aliases remain documented in runtime text.
|
|
203
|
+
- `SHOTNN.bundle.json` includes `storyboard_creation` metadata with provider, prompt path, alias path, reading order, panel count, Seedance token, annotation policy, and prompt text.
|
|
201
204
|
- Speaking shots must bind `Audio Plan.activeSpeakerKey` back to project-level `voiceCast`; broken voice bindings fail QA.
|
|
202
205
|
- Public-figure, celebrity, likeness, logo, trademark, or brand references in the brief, dialogue metadata, or reference metadata are blocked unless safely anonymized first.
|
|
203
206
|
- Phase budget: 4-6s uses 1-2 phases, 7-10s uses 2-3 phases, and 11-15s uses 3-4 phases.
|
|
@@ -216,7 +219,7 @@ CLI flags for direct storyboard bundle generation:
|
|
|
216
219
|
| `--models` | Comma-separated target models: `veo31`, `seedance-2.0`, `kling-3.0` |
|
|
217
220
|
| `--duration` | Duration in seconds per generated shot. Seedance provider range is 4-15 seconds |
|
|
218
221
|
| `--aspect` | `16:9`, `9:16`, or `1:1` |
|
|
219
|
-
| `--storyboard-panel-count-hint` | Optional
|
|
222
|
+
| `--storyboard-panel-count-hint` | Optional GPT Image 2 storyboard sheet panel count, `1-12`. This does not by itself split SHOT files |
|
|
220
223
|
| `--max-storyboard-phases` | Upper bound per shot. Default: `4` |
|
|
221
224
|
|
|
222
225
|
## CLI
|
package/build/index.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export { buildStoryboardReferencePromptBundles, normalizeVideoPromptRequest, ren
|
|
|
4
4
|
export { assertModelAllowed, getModel, getModelAdapterKey, getModelDisplayName, getReplacementModel, isActiveModelId, isDeprecatedModelId, isImageModelId, isKnownModelId, isModelSupportedByPreset, isRemovedModelId, isVideoModelId, listActiveModels, listActiveVideoModelIds, listImageModels, listModels, listModelsForPreset, listModelsForReferenceMode, listRunnableVideoModelIds, listRunnableVideoModels, listVideoModels, requireModel, validateModelAllowed } from "./lib/model-registry/index.js";
|
|
5
5
|
export type { AgentConfigOptions, ConfigureFilmKitResult, ConfigureResult, FilmKitConfigFile, FilmKitConfigOptions, FilmKitPreset, GptImageFormat, GptImageQuality, GptImageSize, HybridAspectRatio, KlingPreset, NanoBananaImageSize, ReferenceMode, StoryboardReferenceConfig, SupportedModel, SupportedPlatform } from "./lib/types.js";
|
|
6
6
|
export type { ActiveModelId, AudioModelId, DeprecatedModelId, ImageModelId, KnownModelId, ModelAdapterKey, ModelAllowedContext, ModelAllowedResult, ModelCapabilities, ModelLifecycleStatus, ModelModality, ModelRegistryEntry, MultimodalModelId, RemovedModelId, VideoModelId } from "./lib/model-registry/index.js";
|
|
7
|
-
export type { CharacterReferenceSheetPrompt, ModelPromptOutput, ModelRouteMetadata, PromptBundle, ProviderAssetMappingEntry, ProviderFileLimitReport, ProviderReferenceTokenPolicy, ReferenceAsset, ReferenceAssetRequirement, SeedanceContinuityMode, ShotHandoffNote, StoryboardImagePrompt, StoryboardPhaseBudget, StoryboardReferenceBuildResult, StoryboardReferencePolicy, StoryboardReferenceWriteResult, VideoPromptRequest } from "./lib/storyboard-reference/index.js";
|
|
7
|
+
export type { CharacterReferenceSheetPrompt, ModelPromptOutput, ModelRouteMetadata, PromptBundle, ProviderAssetMappingEntry, ProviderFileLimitReport, ProviderReferenceTokenPolicy, ReferenceAsset, ReferenceAssetRequirement, SeedanceContinuityMode, ShotHandoffNote, StoryboardCreationMetadata, StoryboardImagePrompt, StoryboardPhaseBudget, StoryboardReferenceBuildResult, StoryboardReferencePolicy, StoryboardReferenceWriteResult, VideoPromptRequest } from "./lib/storyboard-reference/index.js";
|
package/build/lib/cli.js
CHANGED
|
@@ -542,7 +542,7 @@ generate-storyboard flags:
|
|
|
542
542
|
--dialogue Repeatable "Speaker: exact line" value
|
|
543
543
|
--audio-intent SFX/ambience direction
|
|
544
544
|
--style-intent Visual style direction
|
|
545
|
-
--storyboard-panel-count-hint
|
|
545
|
+
--storyboard-panel-count-hint GPT Image 2 storyboard sheet panel count, 1-12; does not split SHOT files by itself
|
|
546
546
|
--max-storyboard-phases Upper bound per SHOTNN storyboard phase count
|
|
547
547
|
|
|
548
548
|
Install:
|
package/build/lib/configure.js
CHANGED
|
@@ -160,6 +160,7 @@ description: Generate storyboard-reference prompt bundles from character referen
|
|
|
160
160
|
\`\`\`text
|
|
161
161
|
${vars.outputDir}/
|
|
162
162
|
├── storyboard-reference-plan.json
|
|
163
|
+
├── storyboard-prompt.md
|
|
163
164
|
├── reference-prep/
|
|
164
165
|
│ └── CHARACTER-SHEET-*.md
|
|
165
166
|
├── storyboard-prompts/
|
|
@@ -187,18 +188,21 @@ ${vars.outputDir}/
|
|
|
187
188
|
- \`maxStoryboardPhases: ${vars.maxStoryboardPhases}\`
|
|
188
189
|
- \`voiceCast\` when dialogue or narration exists
|
|
189
190
|
- \`visual_world\` for camera, lens, lighting, scale, reflection, physics, screen direction, and continuity anchors
|
|
190
|
-
4. Split the scenario into shots by dramatic beat. Use this phase budget:
|
|
191
|
+
4. Split the scenario into shots by dramatic beat. Use this video phase budget:
|
|
191
192
|
- 4-6 seconds: 1-2 phases
|
|
192
193
|
- 7-10 seconds: 2-3 phases
|
|
193
194
|
- 11-15 seconds: 3-4 phases
|
|
194
|
-
- 5+ distinct phases: split into separate \`SHOTNN.md\` files
|
|
195
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into separate \`SHOTNN.md\` files
|
|
196
|
+
- GPT Image 2 storyboard sheets may use 1-12 panels; 5-12 storyboard sheet panels alone do not force a split
|
|
195
197
|
5. For each shot, write a GPT Image 2 storyboard prompt:
|
|
196
198
|
- use character sheets as the only identity source
|
|
197
199
|
- use optional storyboard guides only for staging and timing
|
|
200
|
+
- use raw black-and-white rough pencil storyboard panels, strong silhouettes, visible motion, cinematic camera variety, and color-coded planning annotations
|
|
198
201
|
- include previous-shot handoff and next-shot handoff
|
|
199
202
|
- preserve shared \`visual_world\`, lighting, screen direction, and action rhythm
|
|
200
203
|
6. Build model-ready video prompt bundles:
|
|
201
204
|
- Seedance: character sheet tokens first, generated shot storyboard token next
|
|
205
|
+
- Seedance: follow storyboard panels left-to-right/top-to-bottom as visual/action/camera source, but never render arrows, labels, annotations, timestamps, or panel borders
|
|
202
206
|
- Veo: visual planning prompt with full audio direction
|
|
203
207
|
- Kling: block-structured storyboard route, not a mandatory Start+End frame route
|
|
204
208
|
7. Keep coverage inside the same \`SHOTNN.md\`; coverage uses storyboard planning prompts and does not request separate start/end still prompts.
|
|
@@ -351,13 +355,14 @@ description: Finalize storyboard-reference prompt packages after storyboard QA p
|
|
|
351
355
|
## Validate Files
|
|
352
356
|
|
|
353
357
|
1. \`${vars.outputDir}/storyboard-reference-plan.json\` exists.
|
|
354
|
-
2. \`${vars.outputDir}/
|
|
355
|
-
3. \`${vars.outputDir}/
|
|
356
|
-
4. \`${vars.outputDir}/
|
|
357
|
-
5.
|
|
358
|
-
6.
|
|
359
|
-
7.
|
|
360
|
-
8.
|
|
358
|
+
2. \`${vars.outputDir}/storyboard-prompt.md\` exists as the storyboard bootstrap alias.
|
|
359
|
+
3. \`${vars.outputDir}/reference-prep/\` contains character sheet prompt files.
|
|
360
|
+
4. \`${vars.outputDir}/storyboard-prompts/\` contains per-shot GPT Image 2 storyboard prompts.
|
|
361
|
+
5. \`${vars.outputDir}/prompt-bundles/\` contains model prompt bundles with \`storyboard_creation\` metadata.
|
|
362
|
+
6. Every \`${vars.outputDir}/shots/SHOTNN.md\` contains the required storyboard-reference sections.
|
|
363
|
+
7. Coverage stays in the same \`SHOTNN.md\`.
|
|
364
|
+
8. No generated shot contains forbidden start/end frame sections or exact first-frame reuse instructions.
|
|
365
|
+
9. \`storyboard_reference_status\` and \`storyboard_handoff_status\` are pass.
|
|
361
366
|
|
|
362
367
|
## Final Summary
|
|
363
368
|
|
|
@@ -47,8 +47,8 @@ export class Seedance20PromptAdapter extends BaseVideoModelPromptAdapter {
|
|
|
47
47
|
const storyboardEntry = this.getMappingEntries(input, "storyboard_plan")[0];
|
|
48
48
|
const storyboardToken = storyboardEntry?.token ?? "@Image2";
|
|
49
49
|
const continuityInstruction = input.continuityMode === "continuous-shot"
|
|
50
|
-
?
|
|
51
|
-
: `
|
|
50
|
+
? `Use the generated storyboard reference ${storyboardToken} as the complete visual, action, camera, and choreography source for this ${input.request.durationSeconds}-second video. Follow the single storyboard beat exactly. No scene cuts throughout, one continuous shot.`
|
|
51
|
+
: `Use the generated storyboard reference ${storyboardToken} as the complete visual, action, camera, and choreography source for this ${input.request.durationSeconds}-second video. Follow all ${input.storyboardImagePrompt.panelCount} beats sequentially from left-to-right, top-to-bottom as the exact visual beat order. Do not reinterpret actions, poses, camera angles, emotional progression, frame variety, movement logic, shot order, or the final pose. Compress the full ${input.storyboardImagePrompt.panelCount}-beat sequence into the full duration as fast readable motion snapshots, not full-length actions. Use urgent rhythm, storyboard-motivated cuts, quick cuts, match cuts, whip transitions, or motivated camera moves only when the storyboard supports them. Do not add unplanned cuts, extra scene jumps, duplicate performers, or new locations.`;
|
|
52
52
|
const characterEntries = this.getMappingEntries(input, "character_identity");
|
|
53
53
|
const characterTokenText = characterEntries.map(entry => entry.token).join(", ") || "@Image1";
|
|
54
54
|
const promptText = `${this.formatCharacterRoleLine(input)}
|
|
@@ -69,13 +69,13 @@ ${input.request.brief}
|
|
|
69
69
|
${formatPhaseLines(input.interpretation.phases)}
|
|
70
70
|
|
|
71
71
|
[GPT IMAGE 2 STORYBOARD SOURCE]
|
|
72
|
-
Use the generated storyboard image from ${input.storyboardImagePrompt.outputPath} as ${storyboardToken}. It has ${input.storyboardImagePrompt.panelCount} panel(s), follows the shot handoff, and is not an identity source. Treat colored arrows, panel labels,
|
|
72
|
+
Use the generated storyboard image from ${input.storyboardImagePrompt.outputPath} as ${storyboardToken}. It has ${input.storyboardImagePrompt.panelCount} panel(s), follows the shot handoff, and is not an identity source. Treat colored arrows, panel labels, lens notes, and framing marks as planning annotations only; never render arrows, annotation marks, notes, labels, timestamps, panel borders, or storyboard text into the video.
|
|
73
73
|
|
|
74
74
|
[CAMERA]
|
|
75
75
|
${input.interpretation.cameraPlan.framing}, ${input.interpretation.cameraPlan.movement}, ${input.interpretation.cameraPlan.lens}, ${input.interpretation.cameraPlan.stabilization}. Preserve ${input.interpretation.cameraPlan.screenDirection}.
|
|
76
76
|
|
|
77
77
|
[PERFORMANCE]
|
|
78
|
-
Visible
|
|
78
|
+
Keep the same performer identity from ${characterTokenText}; do not duplicate the character. Visible performance must include breath, mouth movement when dialogue or singing is present, body strain, fabric motion, floor or prop contact, and emotional escalation while preserving exact identity. Acting stays concrete and physically grounded: gaze, breathing, posture, hand behavior, and facial tension evolve from the brief without changing wardrobe or body design.
|
|
79
79
|
|
|
80
80
|
[AUDIO]
|
|
81
81
|
Dialogue: ${buildDialogueTranscript(input)}.
|
|
@@ -86,7 +86,7 @@ Music: NONE.
|
|
|
86
86
|
[CONTINUITY]
|
|
87
87
|
Identity reference stays locked to ${characterTokenText}. Storyboard ${storyboardToken} controls staging, shot order, pose logic, camera variety, emotional progression, and visual rhythm only. Character design, wardrobe, accessories, and visible props cannot be inherited from the storyboard. Storyboard text, panel borders, arrows, colored marks, lens notes, watermark, logo, and alternate character design are never identity sources and must not appear in the rendered video.
|
|
88
88
|
|
|
89
|
-
Avoid: identity drift, face drift, outfit drift, storyboard text, panel borders, colored arrows, annotation marks, lens notes, timestamps, watermark, logo, distorted hands, rubbery motion, flicker, unnatural camera jumps.`;
|
|
89
|
+
Avoid: identity drift, face drift, outfit drift, duplicated performer, storyboard text, annotations, panel borders, colored arrows, annotation marks, lens notes, timestamps, watermark, logo, distorted hands, rubbery motion, flicker, unnatural camera jumps. No text, no annotations, no timestamps, no watermark.`;
|
|
90
90
|
const output = {
|
|
91
91
|
model: this.model,
|
|
92
92
|
displayName: getDisplayName(this.model),
|
|
@@ -4,4 +4,4 @@ export { resolveAssetRoles } from "./asset-role-resolver.js";
|
|
|
4
4
|
export { interpretStoryboard } from "./storyboard-interpreter.js";
|
|
5
5
|
export { renderShotMarkdown, writeStoryboardReferenceOutputs } from "./output-writer.js";
|
|
6
6
|
export { assertSafeStoryboardReferenceRequest, assertStoryboardReferenceBuildPass, validateModelPromptOutput, validatePromptBundle, validateResolvedAssetRoles } from "./validators.js";
|
|
7
|
-
export type { AdapterInput, AudioPlan, CameraPlan, CharacterReferenceSheetPrompt, ContinuityAnchors, DialogueLine, ModelPromptOutput, ModelPromptQa, ModelRouteMetadata, NormalizedVideoPromptRequest, PromptBundle, PromptBundleQa, ProviderAssetMappingEntry, ProviderFileLimitReport, ProviderReferenceTokenPolicy, ReferenceAsset, ReferenceAssetRequirement, ReferenceAssetRole, ReferenceLockStrength, ResolvedAssetRoles, SeedanceContinuityMode, ShotHandoffNote, StoryboardImagePrompt, StoryboardInterpretation, StoryboardPhase, StoryboardPhaseBudget, StoryboardReferenceBuildResult, StoryboardReferencePlan, StoryboardReferencePolicy, StoryboardReferenceWriteResult, VideoModelPromptAdapter, VideoPromptRequest, VisualWorld, VoiceCastEntry } from "./types.js";
|
|
7
|
+
export type { AdapterInput, AudioPlan, CameraPlan, CharacterReferenceSheetPrompt, ContinuityAnchors, DialogueLine, ModelPromptOutput, ModelPromptQa, ModelRouteMetadata, NormalizedVideoPromptRequest, PromptBundle, PromptBundleQa, ProviderAssetMappingEntry, ProviderFileLimitReport, ProviderReferenceTokenPolicy, ReferenceAsset, ReferenceAssetRequirement, ReferenceAssetRole, ReferenceLockStrength, ResolvedAssetRoles, SeedanceContinuityMode, ShotHandoffNote, StoryboardCreationMetadata, StoryboardImagePrompt, StoryboardInterpretation, StoryboardPhase, StoryboardPhaseBudget, StoryboardReferenceBuildResult, StoryboardReferencePlan, StoryboardReferencePolicy, StoryboardReferenceWriteResult, VideoModelPromptAdapter, VideoPromptRequest, VisualWorld, VoiceCastEntry } from "./types.js";
|
|
@@ -169,6 +169,9 @@ ${bundle.storyboardImagePrompt.promptText}
|
|
|
169
169
|
\`\`\`
|
|
170
170
|
`;
|
|
171
171
|
}
|
|
172
|
+
function renderStoryboardPromptAlias(result) {
|
|
173
|
+
return result.bundles.map(renderStoryboardPromptFile).join("\n---\n\n");
|
|
174
|
+
}
|
|
172
175
|
function renderQaReport(result) {
|
|
173
176
|
const models = result.request.targetModels.join(", ");
|
|
174
177
|
const rows = result.bundles
|
|
@@ -219,6 +222,7 @@ export async function writeStoryboardReferenceOutputs(result, rootDir = process.
|
|
|
219
222
|
const written = [];
|
|
220
223
|
const planPath = join(outputRoot, "storyboard-reference-plan.json");
|
|
221
224
|
const projectInfoPath = join(outputRoot, "project-info.md");
|
|
225
|
+
const storyboardPromptAliasPath = join(outputRoot, "storyboard-prompt.md");
|
|
222
226
|
const qaPath = join(outputRoot, "reports", "STORYBOARD-REFERENCE-QA.md");
|
|
223
227
|
await writeText(planPath, `${JSON.stringify(result.plan, null, 2)}\n`);
|
|
224
228
|
written.push(planPath);
|
|
@@ -234,6 +238,8 @@ export async function writeStoryboardReferenceOutputs(result, rootDir = process.
|
|
|
234
238
|
- Safety context: ${result.request.safetyContext}
|
|
235
239
|
`);
|
|
236
240
|
written.push(projectInfoPath);
|
|
241
|
+
await writeText(storyboardPromptAliasPath, renderStoryboardPromptAlias(result));
|
|
242
|
+
written.push(storyboardPromptAliasPath);
|
|
237
243
|
for (const prompt of result.characterReferenceSheetPrompts) {
|
|
238
244
|
const promptPath = resolve(rootDir, prompt.outputPath);
|
|
239
245
|
await writeText(promptPath, renderCharacterSheetPrompt(prompt));
|
|
@@ -42,10 +42,16 @@ function resolvePromptAdapter(model) {
|
|
|
42
42
|
}
|
|
43
43
|
return adapter;
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
const MAX_STORYBOARD_SHEET_PANELS = 12;
|
|
46
|
+
function getStoryboardSheetPanelCount(request, phaseBudget) {
|
|
47
|
+
const panelCount = request.storyboardPanelCountHint ?? phaseBudget.recommendedMaxPhases;
|
|
48
|
+
if (panelCount > MAX_STORYBOARD_SHEET_PANELS) {
|
|
49
|
+
throw new Error(`Invalid storyboardPanelCountHint. Expected 1-${MAX_STORYBOARD_SHEET_PANELS} panels for one GPT Image 2 storyboard sheet.`);
|
|
50
|
+
}
|
|
51
|
+
return panelCount;
|
|
52
|
+
}
|
|
53
|
+
function getVideoPhaseCount(request, phaseBudget) {
|
|
54
|
+
return request.shotCountHint ?? phaseBudget.recommendedMaxPhases;
|
|
49
55
|
}
|
|
50
56
|
function buildShotId(index) {
|
|
51
57
|
return `SHOT${String(index + 1).padStart(2, "0")}`;
|
|
@@ -172,37 +178,37 @@ function buildStoryboardImagePrompt(input) {
|
|
|
172
178
|
? `Use external storyboard guide tokens ${assets.storyboards.map(storyboard => storyboard.token).join(", ")} only for composition, blocking, camera direction, timing, and action rhythm.`
|
|
173
179
|
: "No external storyboard guide is required; infer the board from the screenplay brief, continuity notes, and visual world.";
|
|
174
180
|
const phaseDirection = interpretation.phases
|
|
175
|
-
.map(phase => `
|
|
181
|
+
.map(phase => `Phase ${phase.index}: ${phase.job}; ${phase.subjectAction}; camera behavior: ${phase.cameraBehavior}; background behavior: ${phase.backgroundBehavior}.`)
|
|
176
182
|
.join(" ");
|
|
177
183
|
const continuityStyle = interpretation.phases.length <= 1
|
|
178
184
|
? "Because this is a single uninterrupted beat, show one decisive action moment with a clear entry pose, motion direction, and final body intention inside the same panel."
|
|
179
|
-
:
|
|
185
|
+
: `Read panels left-to-right, top-to-bottom as a planned visual beat sequence. Create ${input.storyboardSheetPanelCount} distinct beat snapshot${input.storyboardSheetPanelCount === 1 ? "" : "s"} distributed across the video phases. Each panel must show a distinct body pose, camera size/angle, movement logic, and emotional escalation, not decorative micro-poses.`;
|
|
180
186
|
return {
|
|
181
187
|
shotId,
|
|
182
188
|
outputPath: `${request.outputDir}/storyboard-prompts/${shotId}-GPT-IMAGE-2-STORYBOARD.md`,
|
|
183
189
|
provider: "gpt-image-2",
|
|
184
190
|
aspectRatio: "16:9",
|
|
185
|
-
panelCount:
|
|
191
|
+
panelCount: input.storyboardSheetPanelCount,
|
|
186
192
|
style: "professional-production-storyboard",
|
|
187
193
|
characterSheetIds,
|
|
188
194
|
externalStoryboardGuideIds,
|
|
189
195
|
previousShotHandoff: input.previousShotHandoff,
|
|
190
196
|
nextShotHandoff: input.nextShotHandoff,
|
|
191
|
-
promptText: `REFERENCE LOCK: Use the generated character sheet reference${characterReferenceSheetPrompts.length === 1 ? "" : "s"} (${sheetRefs}) as the only source for character identity, face, hair, body proportions, wardrobe, accessories, material behavior, and visible props.
|
|
197
|
+
promptText: `REFERENCE LOCK: Use the generated character sheet reference${characterReferenceSheetPrompts.length === 1 ? "" : "s"} (${sheetRefs}) as the only source for character identity, face, hair, skin texture, body proportions, wardrobe, accessories, material behavior, and visible props.
|
|
192
198
|
|
|
193
199
|
Keep same: every character identity detail from the character sheet${characterReferenceSheetPrompts.length === 1 ? "" : "s"}, the declared visual world, screen direction, environmental continuity, lighting direction, prop continuity, and shot handoff logic. Storyboard text, arrows, labels, panel borders, watermarks, logos, and alternate character designs are never identity sources.
|
|
194
200
|
|
|
195
|
-
Change only: create a
|
|
201
|
+
Change only: create a raw cinematic storyboard sheet for ${shotId}. 16:9 storyboard sheet, exactly ${input.storyboardSheetPanelCount} cinematic panel${input.storyboardSheetPanelCount === 1 ? "" : "s"}. The storyboard controls composition, blocking, camera direction, timing, phase order, action rhythm, and emotional progression only. ${externalGuideText}
|
|
196
202
|
|
|
197
|
-
Storyboard drawing style: raw contemporary film storyboard
|
|
203
|
+
Storyboard drawing style: raw contemporary film storyboard with black-and-white rough pencil linework. The actual storyboard drawings must be black-and-white only: rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, lightweight unfinished choreography previs, not polished concept art or final render.
|
|
198
204
|
|
|
199
205
|
Panel direction: ${continuityStyle} The scene brief is: ${request.brief} Previous handoff: ${input.previousShotHandoff}. Next handoff: ${input.nextShotHandoff}. Planned panel actions: ${phaseDirection}
|
|
200
206
|
|
|
201
|
-
Camera and staging: show ${interpretation.cameraPlan.framing}, ${interpretation.cameraPlan.movement}, ${interpretation.cameraPlan.lens}; preserve ${interpretation.cameraPlan.screenDirection}. Use cinematic
|
|
207
|
+
Camera and staging: show ${interpretation.cameraPlan.framing}, ${interpretation.cameraPlan.movement}, ${interpretation.cameraPlan.lens}; preserve ${interpretation.cameraPlan.screenDirection}. Use cinematic arthouse camerawork with handheld energy, whip pans, orbit movement, overhead shots, low angles, side silhouettes, aggressive close-ups, long lens compression, inserts, and extreme negative space whenever motivated by the beat. Maintain the same environment, lighting, atmosphere, foreground, midground, and background continuity: ${interpretation.visualWorld.environment}; ${interpretation.visualWorld.lighting}; ${interpretation.visualWorld.foreground}; ${interpretation.visualWorld.midground}; ${interpretation.visualWorld.background}; ${interpretation.visualWorld.atmosphere}.
|
|
202
208
|
|
|
203
209
|
Annotation color system: red arrows for body movement, blue arrows for camera movement, green marks for framing/composition, orange marks for lighting direction, purple marks for vocal or emotional emphasis when relevant, black text only for very short lens notes and panel labels. No timestamps.
|
|
204
210
|
|
|
205
|
-
Every panel must contain visible momentum or clear behavioral change: gaze shift, breath, weight transfer, contact with ground/prop, fabric motion, hand tension, or a readable pose transition. Keep the location minimal and readable.
|
|
211
|
+
Every panel must contain visible momentum. Every panel must contain visible motion, strong body momentum, or clear behavioral change: gaze shift, breath, weight transfer, contact with ground/prop, fabric motion, hand tension, floor contact, hair or clothing motion, or a readable pose transition. Avoid static standing poses unless explicitly required by the beat. Keep the location minimal and readable. End with one overwhelming final readable movement pose or composition that preserves the shot's emotional endpoint.
|
|
206
212
|
|
|
207
213
|
Avoid: identity drift, face drift, hair drift, wardrobe drift, prop drift, material drift, alternate character design, static standing poses unless explicitly required by the beat, timestamps, long text notes, storyboard text becoming scene text, new characters, new locations, logos, watermarks, decorative borders, broken perspective, impossible contact or weight, inconsistent screen direction, inconsistent light direction, photorealistic final-render polish, cartoon style, anime style, CGI look, unsafe public-figure likeness, trademarked branding.`
|
|
208
214
|
};
|
|
@@ -291,6 +297,45 @@ function buildProviderReferenceTokens(providerAssetMapping) {
|
|
|
291
297
|
audioReference: "@audio1"
|
|
292
298
|
};
|
|
293
299
|
}
|
|
300
|
+
function buildStoryboardCreationMetadata(request, storyboardImagePrompt, providerAssetMapping) {
|
|
301
|
+
const storyboardEntry = Object.values(providerAssetMapping)
|
|
302
|
+
.find(entry => entry.role === "storyboard_plan");
|
|
303
|
+
return {
|
|
304
|
+
provider: "gpt-image-2",
|
|
305
|
+
prompt_path: storyboardImagePrompt.outputPath,
|
|
306
|
+
alias_path: `${request.outputDir}/storyboard-prompt.md`,
|
|
307
|
+
source_mode: storyboardImagePrompt.externalStoryboardGuideIds.length > 0
|
|
308
|
+
? "generated-with-external-guide"
|
|
309
|
+
: "generated",
|
|
310
|
+
panel_count: storyboardImagePrompt.panelCount,
|
|
311
|
+
reading_order: "left-to-right, top-to-bottom",
|
|
312
|
+
character_sheet_ids: storyboardImagePrompt.characterSheetIds,
|
|
313
|
+
external_storyboard_guide_ids: storyboardImagePrompt.externalStoryboardGuideIds,
|
|
314
|
+
seedance_token: storyboardEntry?.token ?? "@Image2",
|
|
315
|
+
annotation_policy: {
|
|
316
|
+
rendered_in_video: false,
|
|
317
|
+
color_system: {
|
|
318
|
+
red: "body movement",
|
|
319
|
+
blue: "camera movement",
|
|
320
|
+
green: "framing / composition",
|
|
321
|
+
orange: "lighting direction",
|
|
322
|
+
purple: "vocal / emotional emphasis",
|
|
323
|
+
black: "short lens notes and panel labels"
|
|
324
|
+
},
|
|
325
|
+
forbidden_in_video: [
|
|
326
|
+
"arrows",
|
|
327
|
+
"annotation marks",
|
|
328
|
+
"lens notes",
|
|
329
|
+
"panel labels",
|
|
330
|
+
"timestamps",
|
|
331
|
+
"panel borders",
|
|
332
|
+
"watermark",
|
|
333
|
+
"logo"
|
|
334
|
+
]
|
|
335
|
+
},
|
|
336
|
+
prompt_text: storyboardImagePrompt.promptText
|
|
337
|
+
};
|
|
338
|
+
}
|
|
294
339
|
function buildStoryboardReferencePolicy(request, phaseBudget, providerFileLimits, bundles, providerReferenceTokens, maxPhases, splitRequired) {
|
|
295
340
|
const continuityModes = Array.from(new Set(bundles.map(bundle => bundle.continuityMode)));
|
|
296
341
|
return {
|
|
@@ -325,9 +370,9 @@ function buildStoryboardReferencePolicy(request, phaseBudget, providerFileLimits
|
|
|
325
370
|
provider: "gpt-image-2",
|
|
326
371
|
generated_per_shot: true,
|
|
327
372
|
aspect_ratio: "16:9",
|
|
328
|
-
max_panels_per_shot:
|
|
373
|
+
max_panels_per_shot: MAX_STORYBOARD_SHEET_PANELS,
|
|
329
374
|
panel_budget: phaseBudget.policy,
|
|
330
|
-
professional_prompt_target_words: "
|
|
375
|
+
professional_prompt_target_words: "240-420 words per shot storyboard prompt"
|
|
331
376
|
},
|
|
332
377
|
role_separation: {
|
|
333
378
|
character_identity: `${providerReferenceTokens.characterIdentities.join(", ")} control identity, face, hair, body proportions, wardrobe, accessories, and visible props.`,
|
|
@@ -376,15 +421,16 @@ export function buildStoryboardReferencePromptBundles(input) {
|
|
|
376
421
|
const voiceCast = buildVoiceCast(request);
|
|
377
422
|
const phaseBudget = buildStoryboardPhaseBudget(request.durationSeconds, request.storyboardReferenceMode.maxStoryboardPhases);
|
|
378
423
|
const providerFileLimits = buildProviderFileLimitReport(request, characterReferenceSheetPrompts.length + 1);
|
|
379
|
-
const
|
|
424
|
+
const storyboardSheetPanelCount = getStoryboardSheetPanelCount(request, phaseBudget);
|
|
425
|
+
const videoPhaseCount = getVideoPhaseCount(request, phaseBudget);
|
|
380
426
|
const maxPhases = phaseBudget.effectiveMaxStoryboardPhases;
|
|
381
|
-
const splitRequired =
|
|
427
|
+
const splitRequired = videoPhaseCount > maxPhases;
|
|
382
428
|
if (splitRequired && !request.storyboardReferenceMode.splitStoryboardOverload) {
|
|
383
|
-
throw new Error(`Storyboard has ${
|
|
429
|
+
throw new Error(`Storyboard has ${videoPhaseCount} video phases, which exceeds maxStoryboardPhases=${maxPhases}. Enable splitStoryboardOverload or split the storyboard manually.`);
|
|
384
430
|
}
|
|
385
431
|
const phaseCounts = splitRequired && request.storyboardReferenceMode.splitStoryboardOverload
|
|
386
|
-
? getSplitPhaseCounts(
|
|
387
|
-
: [Math.min(
|
|
432
|
+
? getSplitPhaseCounts(videoPhaseCount, maxPhases)
|
|
433
|
+
: [Math.min(videoPhaseCount, maxPhases)];
|
|
388
434
|
const generatedAt = new Date().toISOString();
|
|
389
435
|
const bundles = [];
|
|
390
436
|
let previousShotHandoff = "Project opening: start from the screenplay's first visual beat.";
|
|
@@ -402,11 +448,13 @@ export function buildStoryboardReferencePromptBundles(input) {
|
|
|
402
448
|
assets,
|
|
403
449
|
shotId,
|
|
404
450
|
interpretation,
|
|
451
|
+
storyboardSheetPanelCount,
|
|
405
452
|
characterReferenceSheetPrompts,
|
|
406
453
|
previousShotHandoff,
|
|
407
454
|
nextShotHandoff: handoffNote.exitHandoff
|
|
408
455
|
});
|
|
409
456
|
const providerAssetMapping = buildProviderAssetMapping(assets, characterReferenceSheetPrompts, storyboardImagePrompt);
|
|
457
|
+
const storyboard_creation = buildStoryboardCreationMetadata(request, storyboardImagePrompt, providerAssetMapping);
|
|
410
458
|
const referenceAssetRequirements = buildReferenceAssetRequirements(providerAssetMapping);
|
|
411
459
|
const modelPrompts = buildModelPrompts(request, {
|
|
412
460
|
assets,
|
|
@@ -431,6 +479,7 @@ export function buildStoryboardReferencePromptBundles(input) {
|
|
|
431
479
|
providerFileLimits,
|
|
432
480
|
handoffNote,
|
|
433
481
|
storyboardImagePrompt,
|
|
482
|
+
storyboard_creation,
|
|
434
483
|
referenceAssetRequirements,
|
|
435
484
|
providerAssetMapping,
|
|
436
485
|
qa: { verdict: "pass", checks: {}, issues: [], splitRequired },
|
|
@@ -135,6 +135,30 @@ export interface StoryboardImagePrompt {
|
|
|
135
135
|
nextShotHandoff: string;
|
|
136
136
|
promptText: string;
|
|
137
137
|
}
|
|
138
|
+
export interface StoryboardCreationMetadata {
|
|
139
|
+
provider: "gpt-image-2";
|
|
140
|
+
prompt_path: string;
|
|
141
|
+
alias_path: string;
|
|
142
|
+
source_mode: "generated" | "generated-with-external-guide";
|
|
143
|
+
panel_count: number;
|
|
144
|
+
reading_order: "left-to-right, top-to-bottom";
|
|
145
|
+
character_sheet_ids: string[];
|
|
146
|
+
external_storyboard_guide_ids: string[];
|
|
147
|
+
seedance_token: string;
|
|
148
|
+
annotation_policy: {
|
|
149
|
+
rendered_in_video: false;
|
|
150
|
+
color_system: {
|
|
151
|
+
red: "body movement";
|
|
152
|
+
blue: "camera movement";
|
|
153
|
+
green: "framing / composition";
|
|
154
|
+
orange: "lighting direction";
|
|
155
|
+
purple: "vocal / emotional emphasis";
|
|
156
|
+
black: "short lens notes and panel labels";
|
|
157
|
+
};
|
|
158
|
+
forbidden_in_video: string[];
|
|
159
|
+
};
|
|
160
|
+
prompt_text: string;
|
|
161
|
+
}
|
|
138
162
|
export type ProviderAssetMappingRole = "character_identity" | "storyboard_plan" | "style_reference" | "camera_reference" | "action_reference" | "prop_reference";
|
|
139
163
|
export interface ProviderAssetMappingEntry {
|
|
140
164
|
token: string;
|
|
@@ -254,6 +278,7 @@ export interface PromptBundle {
|
|
|
254
278
|
providerFileLimits: ProviderFileLimitReport;
|
|
255
279
|
handoffNote: ShotHandoffNote;
|
|
256
280
|
storyboardImagePrompt: StoryboardImagePrompt;
|
|
281
|
+
storyboard_creation: StoryboardCreationMetadata;
|
|
257
282
|
referenceAssetRequirements: ReferenceAssetRequirement[];
|
|
258
283
|
providerAssetMapping: Record<string, ProviderAssetMappingEntry>;
|
|
259
284
|
qa: PromptBundleQa;
|
|
@@ -113,6 +113,10 @@ export function validatePromptBundle(bundle, assets, voiceCast = []) {
|
|
|
113
113
|
hasCharacterReference: assets.characters.length >= 1,
|
|
114
114
|
hasStoryboardReference: assets.storyboards.length >= 1 || Boolean(bundle.storyboardImagePrompt),
|
|
115
115
|
hasStoryboardImagePrompt: Boolean(bundle.storyboardImagePrompt?.promptText.trim()),
|
|
116
|
+
hasStoryboardCreationMetadata: Boolean(bundle.storyboard_creation?.prompt_text.trim())
|
|
117
|
+
&& bundle.storyboard_creation?.prompt_path === bundle.storyboardImagePrompt.outputPath
|
|
118
|
+
&& bundle.storyboard_creation?.panel_count === bundle.storyboardImagePrompt.panelCount
|
|
119
|
+
&& bundle.storyboard_creation?.annotation_policy.rendered_in_video === false,
|
|
116
120
|
storyboardPromptHasReferenceLockStructure: hasGptImageStillPromptContract(bundle.storyboardImagePrompt?.promptText ?? ""),
|
|
117
121
|
hasAvoidLineEverywhere: Object.values(bundle.modelPrompts).every(output => Boolean(output) && hasAvoidOrNegativePrompt(output.promptText)),
|
|
118
122
|
storyboardPromptHasAvoidLine: hasAvoidOrNegativePrompt(bundle.storyboardImagePrompt?.promptText ?? ""),
|
package/build/lib/templates.js
CHANGED
|
@@ -35,7 +35,7 @@ function buildStoryboardPlatformGuard(config) {
|
|
|
35
35
|
- Do not generate main-shot \`ILK FRAME\`, \`İLK FRAME\`, or \`SON FRAME\` sections.
|
|
36
36
|
- Do not use exact first-frame reuse instructions, \`SHOTNN_START\`, \`SHOTNN_END\`, or mandatory Start+End transition fields.
|
|
37
37
|
- If no character reference is available through the user, an in-context image, \`--character-ref\`, or \`refs/character.png\`, stop and request one.
|
|
38
|
-
- Required storyboard outputs: \`${config.outputDir}/storyboard-reference-plan.json\`, \`${config.outputDir}/reference-prep/\`, \`${config.outputDir}/storyboard-prompts/\`, \`${config.outputDir}/prompt-bundles/\`, \`${config.outputDir}/shots/SHOTNN.md\`, and \`${config.outputDir}/reports/STORYBOARD-REFERENCE-QA.md\`.
|
|
38
|
+
- Required storyboard outputs: \`${config.outputDir}/storyboard-reference-plan.json\`, \`${config.outputDir}/storyboard-prompt.md\`, \`${config.outputDir}/reference-prep/\`, \`${config.outputDir}/storyboard-prompts/\`, \`${config.outputDir}/prompt-bundles/\`, \`${config.outputDir}/shots/SHOTNN.md\`, and \`${config.outputDir}/reports/STORYBOARD-REFERENCE-QA.md\`.
|
|
39
39
|
`;
|
|
40
40
|
}
|
|
41
41
|
function buildSeedanceProfile(active, storyboardReferenceActive = false, maxStoryboardPhases = 4) {
|
|
@@ -13,7 +13,7 @@ Use this skill when the user provides:
|
|
|
13
13
|
- a video brief or scenario text
|
|
14
14
|
- optional external storyboard guide images
|
|
15
15
|
|
|
16
|
-
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
16
|
+
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. If no external storyboard image is supplied, this generated prompt is the mandatory storyboard bootstrap step. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
17
17
|
|
|
18
18
|
## Reference Prep
|
|
19
19
|
|
|
@@ -36,9 +36,10 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
36
36
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
|
-
- panel budget:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
39
|
+
- storyboard sheet panel budget: default follows the duration-aware phase budget, but an explicit storyboard panel hint may request 1-12 panels in one GPT Image 2 storyboard sheet
|
|
40
|
+
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
|
+
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
|
+
- split policy: 5+ distinct real video phases, scene changes, or location/action blocks must become separate chained `SHOTNN.md` files; 5-12 storyboard sheet panels alone do not force a split
|
|
42
43
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
43
44
|
- storyboard art grammar: black-and-white rough pencil drawings, minimal detail, rapid gesture energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
44
45
|
- annotation grammar: red arrows = body movement, blue arrows = camera movement, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
@@ -108,6 +109,7 @@ Each shot file contains:
|
|
|
108
109
|
- provider reference tokens
|
|
109
110
|
- GPT Image 2 storyboard prompt
|
|
110
111
|
- storyboard interpretation
|
|
112
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
111
113
|
- audio plan
|
|
112
114
|
- prompt bundle for requested models
|
|
113
115
|
- QA verdict
|
|
@@ -116,6 +118,7 @@ Generated files:
|
|
|
116
118
|
|
|
117
119
|
```text
|
|
118
120
|
$OUTPUT_DIR/storyboard-reference-plan.json
|
|
121
|
+
$OUTPUT_DIR/storyboard-prompt.md
|
|
119
122
|
$OUTPUT_DIR/reference-prep/CHARACTER-SHEET-*.md
|
|
120
123
|
$OUTPUT_DIR/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md
|
|
121
124
|
$OUTPUT_DIR/prompt-bundles/SHOTNN.bundle.json
|
|
@@ -33,11 +33,12 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
33
33
|
- exact identity, wardrobe, accessories, and visible props
|
|
34
34
|
- no labels, text, logos, watermarks, alternate designs, or extra characters
|
|
35
35
|
3. Confirm target models: `veo31`, `seedance-2.0`, `kling-3.0`, or a user-provided subset.
|
|
36
|
-
4. Select
|
|
37
|
-
- 4-6 seconds: 1-2
|
|
38
|
-
- 7-10 seconds: 2-3
|
|
39
|
-
- 11-15 seconds: 3-4
|
|
40
|
-
-
|
|
36
|
+
4. Select video phase budget and storyboard sheet panel count:
|
|
37
|
+
- 4-6 seconds: 1-2 video phases
|
|
38
|
+
- 7-10 seconds: 2-3 video phases
|
|
39
|
+
- 11-15 seconds: 3-4 video phases
|
|
40
|
+
- GPT Image 2 storyboard sheet may contain 1-12 panels
|
|
41
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
41
42
|
5. Build `visual_world`:
|
|
42
43
|
- environment
|
|
43
44
|
- lighting
|
|
@@ -89,7 +90,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
89
90
|
- Missing character reference: stop and request a valid reference.
|
|
90
91
|
- Empty brief: stop and request a brief.
|
|
91
92
|
- Public figure / real-person likeness / trademark risk: stop or safely anonymize before prompt generation.
|
|
92
|
-
- 5+
|
|
93
|
+
- 5+ real video phases: do not compress into one prompt; split shots. 5-12 storyboard sheet panels alone do not force a split.
|
|
93
94
|
- Missing GPT Image 2 character sheet prompt: output is invalid.
|
|
94
95
|
- Missing GPT Image 2 per-shot storyboard prompt: output is invalid.
|
|
95
96
|
- Missing `Avoid` / negative prompt: output is invalid.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milenyumai/film-kit",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.5",
|
|
4
4
|
"description": "Single-package Film-Kit distribution with preset-driven cinematic runtime setup for OpenAI Codex App, Claude Code, Cursor, Copilot, and Antigravity.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./build/index.js",
|
|
@@ -13,7 +13,7 @@ Use this skill when the user provides:
|
|
|
13
13
|
- a video brief or scenario text
|
|
14
14
|
- optional external storyboard guide images
|
|
15
15
|
|
|
16
|
-
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
16
|
+
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. If no external storyboard image is supplied, this generated prompt is the mandatory storyboard bootstrap step. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
17
17
|
|
|
18
18
|
## Reference Prep
|
|
19
19
|
|
|
@@ -36,9 +36,10 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
36
36
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
|
-
- panel budget:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
39
|
+
- storyboard sheet panel budget: default follows the duration-aware phase budget, but an explicit storyboard panel hint may request 1-12 panels in one GPT Image 2 storyboard sheet
|
|
40
|
+
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
|
+
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
|
+
- split policy: 5+ distinct real video phases, scene changes, or location/action blocks must become separate chained `SHOTNN.md` files; 5-12 storyboard sheet panels alone do not force a split
|
|
42
43
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
43
44
|
- storyboard art grammar: black-and-white rough pencil drawings, minimal detail, rapid gesture energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
44
45
|
- annotation grammar: red arrows = body movement, blue arrows = camera movement, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
@@ -108,6 +109,7 @@ Each shot file contains:
|
|
|
108
109
|
- provider reference tokens
|
|
109
110
|
- GPT Image 2 storyboard prompt
|
|
110
111
|
- storyboard interpretation
|
|
112
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
111
113
|
- audio plan
|
|
112
114
|
- prompt bundle for requested models
|
|
113
115
|
- QA verdict
|
|
@@ -116,6 +118,7 @@ Generated files:
|
|
|
116
118
|
|
|
117
119
|
```text
|
|
118
120
|
$OUTPUT_DIR/storyboard-reference-plan.json
|
|
121
|
+
$OUTPUT_DIR/storyboard-prompt.md
|
|
119
122
|
$OUTPUT_DIR/reference-prep/CHARACTER-SHEET-*.md
|
|
120
123
|
$OUTPUT_DIR/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md
|
|
121
124
|
$OUTPUT_DIR/prompt-bundles/SHOTNN.bundle.json
|
|
@@ -33,11 +33,12 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
33
33
|
- exact identity, wardrobe, accessories, and visible props
|
|
34
34
|
- no labels, text, logos, watermarks, alternate designs, or extra characters
|
|
35
35
|
3. Confirm target models: `veo31`, `seedance-2.0`, `kling-3.0`, or a user-provided subset.
|
|
36
|
-
4. Select
|
|
37
|
-
- 4-6 seconds: 1-2
|
|
38
|
-
- 7-10 seconds: 2-3
|
|
39
|
-
- 11-15 seconds: 3-4
|
|
40
|
-
-
|
|
36
|
+
4. Select video phase budget and storyboard sheet panel count:
|
|
37
|
+
- 4-6 seconds: 1-2 video phases
|
|
38
|
+
- 7-10 seconds: 2-3 video phases
|
|
39
|
+
- 11-15 seconds: 3-4 video phases
|
|
40
|
+
- GPT Image 2 storyboard sheet may contain 1-12 panels
|
|
41
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
41
42
|
5. Build `visual_world`:
|
|
42
43
|
- environment
|
|
43
44
|
- lighting
|
|
@@ -89,7 +90,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
89
90
|
- Missing character reference: stop and request a valid reference.
|
|
90
91
|
- Empty brief: stop and request a brief.
|
|
91
92
|
- Public figure / real-person likeness / trademark risk: stop or safely anonymize before prompt generation.
|
|
92
|
-
- 5+
|
|
93
|
+
- 5+ real video phases: do not compress into one prompt; split shots. 5-12 storyboard sheet panels alone do not force a split.
|
|
93
94
|
- Missing GPT Image 2 character sheet prompt: output is invalid.
|
|
94
95
|
- Missing GPT Image 2 per-shot storyboard prompt: output is invalid.
|
|
95
96
|
- Missing `Avoid` / negative prompt: output is invalid.
|
|
@@ -13,7 +13,7 @@ Use this skill when the user provides:
|
|
|
13
13
|
- a video brief or scenario text
|
|
14
14
|
- optional external storyboard guide images
|
|
15
15
|
|
|
16
|
-
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
16
|
+
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. If no external storyboard image is supplied, this generated prompt is the mandatory storyboard bootstrap step. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
17
17
|
|
|
18
18
|
## Reference Prep
|
|
19
19
|
|
|
@@ -36,9 +36,10 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
36
36
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
|
-
- panel budget:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
39
|
+
- storyboard sheet panel budget: default follows the duration-aware phase budget, but an explicit storyboard panel hint may request 1-12 panels in one GPT Image 2 storyboard sheet
|
|
40
|
+
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
|
+
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
|
+
- split policy: 5+ distinct real video phases, scene changes, or location/action blocks must become separate chained `SHOTNN.md` files; 5-12 storyboard sheet panels alone do not force a split
|
|
42
43
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
43
44
|
- storyboard art grammar: black-and-white rough pencil drawings, minimal detail, rapid gesture energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
44
45
|
- annotation grammar: red arrows = body movement, blue arrows = camera movement, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
@@ -108,6 +109,7 @@ Each shot file contains:
|
|
|
108
109
|
- provider reference tokens
|
|
109
110
|
- GPT Image 2 storyboard prompt
|
|
110
111
|
- storyboard interpretation
|
|
112
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
111
113
|
- audio plan
|
|
112
114
|
- prompt bundle for requested models
|
|
113
115
|
- QA verdict
|
|
@@ -116,6 +118,7 @@ Generated files:
|
|
|
116
118
|
|
|
117
119
|
```text
|
|
118
120
|
$OUTPUT_DIR/storyboard-reference-plan.json
|
|
121
|
+
$OUTPUT_DIR/storyboard-prompt.md
|
|
119
122
|
$OUTPUT_DIR/reference-prep/CHARACTER-SHEET-*.md
|
|
120
123
|
$OUTPUT_DIR/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md
|
|
121
124
|
$OUTPUT_DIR/prompt-bundles/SHOTNN.bundle.json
|
|
@@ -33,11 +33,12 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
33
33
|
- exact identity, wardrobe, accessories, and visible props
|
|
34
34
|
- no labels, text, logos, watermarks, alternate designs, or extra characters
|
|
35
35
|
3. Confirm target models: `veo31`, `seedance-2.0`, `kling-3.0`, or a user-provided subset.
|
|
36
|
-
4. Select
|
|
37
|
-
- 4-6 seconds: 1-2
|
|
38
|
-
- 7-10 seconds: 2-3
|
|
39
|
-
- 11-15 seconds: 3-4
|
|
40
|
-
-
|
|
36
|
+
4. Select video phase budget and storyboard sheet panel count:
|
|
37
|
+
- 4-6 seconds: 1-2 video phases
|
|
38
|
+
- 7-10 seconds: 2-3 video phases
|
|
39
|
+
- 11-15 seconds: 3-4 video phases
|
|
40
|
+
- GPT Image 2 storyboard sheet may contain 1-12 panels
|
|
41
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
41
42
|
5. Build `visual_world`:
|
|
42
43
|
- environment
|
|
43
44
|
- lighting
|
|
@@ -89,7 +90,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
89
90
|
- Missing character reference: stop and request a valid reference.
|
|
90
91
|
- Empty brief: stop and request a brief.
|
|
91
92
|
- Public figure / real-person likeness / trademark risk: stop or safely anonymize before prompt generation.
|
|
92
|
-
- 5+
|
|
93
|
+
- 5+ real video phases: do not compress into one prompt; split shots. 5-12 storyboard sheet panels alone do not force a split.
|
|
93
94
|
- Missing GPT Image 2 character sheet prompt: output is invalid.
|
|
94
95
|
- Missing GPT Image 2 per-shot storyboard prompt: output is invalid.
|
|
95
96
|
- Missing `Avoid` / negative prompt: output is invalid.
|
|
@@ -13,7 +13,7 @@ Use this skill when the user provides:
|
|
|
13
13
|
- a video brief or scenario text
|
|
14
14
|
- optional external storyboard guide images
|
|
15
15
|
|
|
16
|
-
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
16
|
+
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. If no external storyboard image is supplied, this generated prompt is the mandatory storyboard bootstrap step. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
17
17
|
|
|
18
18
|
## Reference Prep
|
|
19
19
|
|
|
@@ -36,9 +36,10 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
36
36
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
|
-
- panel budget:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
39
|
+
- storyboard sheet panel budget: default follows the duration-aware phase budget, but an explicit storyboard panel hint may request 1-12 panels in one GPT Image 2 storyboard sheet
|
|
40
|
+
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
|
+
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
|
+
- split policy: 5+ distinct real video phases, scene changes, or location/action blocks must become separate chained `SHOTNN.md` files; 5-12 storyboard sheet panels alone do not force a split
|
|
42
43
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
43
44
|
- storyboard art grammar: black-and-white rough pencil drawings, minimal detail, rapid gesture energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
44
45
|
- annotation grammar: red arrows = body movement, blue arrows = camera movement, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
@@ -108,6 +109,7 @@ Each shot file contains:
|
|
|
108
109
|
- provider reference tokens
|
|
109
110
|
- GPT Image 2 storyboard prompt
|
|
110
111
|
- storyboard interpretation
|
|
112
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
111
113
|
- audio plan
|
|
112
114
|
- prompt bundle for requested models
|
|
113
115
|
- QA verdict
|
|
@@ -116,6 +118,7 @@ Generated files:
|
|
|
116
118
|
|
|
117
119
|
```text
|
|
118
120
|
$OUTPUT_DIR/storyboard-reference-plan.json
|
|
121
|
+
$OUTPUT_DIR/storyboard-prompt.md
|
|
119
122
|
$OUTPUT_DIR/reference-prep/CHARACTER-SHEET-*.md
|
|
120
123
|
$OUTPUT_DIR/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md
|
|
121
124
|
$OUTPUT_DIR/prompt-bundles/SHOTNN.bundle.json
|
|
@@ -33,11 +33,12 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
33
33
|
- exact identity, wardrobe, accessories, and visible props
|
|
34
34
|
- no labels, text, logos, watermarks, alternate designs, or extra characters
|
|
35
35
|
3. Confirm target models: `veo31`, `seedance-2.0`, `kling-3.0`, or a user-provided subset.
|
|
36
|
-
4. Select
|
|
37
|
-
- 4-6 seconds: 1-2
|
|
38
|
-
- 7-10 seconds: 2-3
|
|
39
|
-
- 11-15 seconds: 3-4
|
|
40
|
-
-
|
|
36
|
+
4. Select video phase budget and storyboard sheet panel count:
|
|
37
|
+
- 4-6 seconds: 1-2 video phases
|
|
38
|
+
- 7-10 seconds: 2-3 video phases
|
|
39
|
+
- 11-15 seconds: 3-4 video phases
|
|
40
|
+
- GPT Image 2 storyboard sheet may contain 1-12 panels
|
|
41
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
41
42
|
5. Build `visual_world`:
|
|
42
43
|
- environment
|
|
43
44
|
- lighting
|
|
@@ -89,7 +90,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
89
90
|
- Missing character reference: stop and request a valid reference.
|
|
90
91
|
- Empty brief: stop and request a brief.
|
|
91
92
|
- Public figure / real-person likeness / trademark risk: stop or safely anonymize before prompt generation.
|
|
92
|
-
- 5+
|
|
93
|
+
- 5+ real video phases: do not compress into one prompt; split shots. 5-12 storyboard sheet panels alone do not force a split.
|
|
93
94
|
- Missing GPT Image 2 character sheet prompt: output is invalid.
|
|
94
95
|
- Missing GPT Image 2 per-shot storyboard prompt: output is invalid.
|
|
95
96
|
- Missing `Avoid` / negative prompt: output is invalid.
|
|
@@ -205,7 +205,7 @@ function buildStoryboardReferencePolicyJson(config) {
|
|
|
205
205
|
aspect_ratio: "16:9",
|
|
206
206
|
panel_budget: "4-6s: 1-2, 7-10s: 2-3, 11-15s: 3-4",
|
|
207
207
|
max_panels_per_shot: config.storyboardReferenceMode.maxStoryboardPhases,
|
|
208
|
-
target_words: "
|
|
208
|
+
target_words: "240-420 words per shot storyboard prompt"
|
|
209
209
|
},
|
|
210
210
|
material_roles: {
|
|
211
211
|
"character_sheet_tokens": "identity, face, body proportions, wardrobe, accessories, and visible props",
|
|
@@ -253,7 +253,7 @@ function buildShotFileOutputContract(config) {
|
|
|
253
253
|
return `1. main shot blocks: \`MODEL CONTROL\`, \`INPUT ASSET ROLES\`, \`REFERENCE ASSET REQUIREMENTS\`, \`GPT IMAGE 2 STORYBOARD PROMPT\`, \`STORYBOARD PLAN\`, \`AUDIO PLAN\`, \`SEEDANCE VIDEO PROMPT\`, and coverage
|
|
254
254
|
2. \`INPUT ASSET ROLES\` must declare generated character sheet tokens (\`@Image1...\`, legacy \`@image1...\`) as identity/wardrobe/props only
|
|
255
255
|
3. \`INPUT ASSET ROLES\` must declare the generated shot storyboard token (next \`@Image\` after character sheets, legacy lowercase alias such as \`@image2\` for one character) as composition/blocking/camera/timing only
|
|
256
|
-
4. \`GPT IMAGE 2 STORYBOARD PROMPT\` must be 16:9, professional production storyboard style,
|
|
256
|
+
4. \`GPT IMAGE 2 STORYBOARD PROMPT\` must be 16:9, professional production storyboard style, 240-420 words, use character sheets as the only identity source, and may use 1-12 storyboard sheet panels without forcing SHOT split
|
|
257
257
|
5. \`STORYBOARD PLAN\` must include timeline phases for this shot, capped at ${config.storyboardReferenceMode.maxStoryboardPhases} phases
|
|
258
258
|
6. every phase must derive from the shared \`team-plan.json -> visual_world\` and include its handoff from the previous shot and handoff to the next shot
|
|
259
259
|
7. 2-3 coverage sub-shots stay in the same file
|
|
@@ -285,9 +285,9 @@ function buildSeedanceStoryboardContract(config) {
|
|
|
285
285
|
- declare character sheet tokens (\`@Image1...\`, legacy \`@image1...\`) as identity, face, body proportions, wardrobe, accessories, and visible props
|
|
286
286
|
- declare the generated shot storyboard token (next \`@Image\` after character sheets, legacy lowercase alias such as \`@image2\` for one character) as composition, blocking, camera direction, timing, and action progression only
|
|
287
287
|
- never let storyboard text, panel borders, watermark, logo, alternate character design, or storyboard character design override the identity reference
|
|
288
|
-
- write one \`GPT IMAGE 2 STORYBOARD PROMPT\` per shot before the Seedance prompt; it must be 16:9, professional,
|
|
288
|
+
- write one \`GPT IMAGE 2 STORYBOARD PROMPT\` per shot before the Seedance prompt; it must be 16:9, professional, 240-420 words, continuity-aware, and written as the storyboard bootstrap prompt when no external storyboard image exists
|
|
289
289
|
- write per-shot timeline phases under \`STORYBOARD PLAN\`, capped at ${config.storyboardReferenceMode.maxStoryboardPhases} phases
|
|
290
|
-
- follow
|
|
290
|
+
- follow video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases; split 5+ real video phases, scene changes, or location/action blocks into separate \`SHOTNN.md\` files; 5-12 storyboard sheet panels alone do not force a split
|
|
291
291
|
- use \`No scene cuts throughout, one continuous shot.\` only when that shot's storyboard plan is a single uninterrupted camera move
|
|
292
292
|
- for multi-phase storyboard shots, describe the planned phase changes directly instead of forcing continuous-shot wording
|
|
293
293
|
- when continuing a source clip, use \`Extend @video1 by [N]s\` and still preserve storyboard handoff continuity`;
|
|
@@ -21,7 +21,7 @@ function buildReferenceModeSummary(config) {
|
|
|
21
21
|
return `- Reference mode: \`storyboard-reference\`
|
|
22
22
|
- Storyboard reference mode: enabled
|
|
23
23
|
- Max storyboard phases per shot: ${config.storyboardReferenceMode.maxStoryboardPhases}
|
|
24
|
-
- Recommended phase budget: 4-6s = 1-2, 7-10s = 2-3, 11-15s = 3-4; split 5+ phases
|
|
24
|
+
- Recommended video phase budget: 4-6s = 1-2, 7-10s = 2-3, 11-15s = 3-4; split 5+ real video phases, not 5-12 storyboard sheet panels
|
|
25
25
|
- Provider reference tokens: generated character sheet tokens first, generated shot storyboard token next
|
|
26
26
|
- Start/end frame chaining contract: disabled for Seedance storyboard-reference`;
|
|
27
27
|
}
|
|
@@ -58,7 +58,7 @@ Seedance 2.0 responds best when you assign **explicit multimodal control roles**
|
|
|
58
58
|
${storyboardReferenceActive
|
|
59
59
|
? `- Storyboard-reference mode is active: generate one 16:9 GPT Image 2 character sheet prompt per character first; those sheet images lock identity/wardrobe/props
|
|
60
60
|
- Each SHOTNN.md includes a GPT IMAGE 2 STORYBOARD PROMPT plus a per-shot STORYBOARD PLAN; the generated storyboard token controls only composition, blocking, camera direction, timing, and action progression
|
|
61
|
-
- Duration budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases; split 5+ phases into separate SHOTNN.md files
|
|
61
|
+
- Duration budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases; split 5+ real video phases into separate SHOTNN.md files, while 5-12 storyboard sheet panels may remain one shot
|
|
62
62
|
- Storyboard text, panel borders, watermark, logo, and alternate character design are never identity sources
|
|
63
63
|
- Do not require ILK FRAME / SON FRAME sections or exact first-frame reuse text in Seedance storyboard-reference mode
|
|
64
64
|
- Use "No scene cuts throughout, one continuous shot." only when the shot's storyboard plan is actually one uninterrupted camera move`
|
|
@@ -313,8 +313,8 @@ export function buildMultiProjectFiles(config) {
|
|
|
313
313
|
- \`storyboard_reference.enabled\`: ${storyboardReferenceActive ? "true" : "false"}
|
|
314
314
|
- \`storyboard_reference.max_storyboard_phases\`: ${config.storyboardReferenceMode.maxStoryboardPhases}
|
|
315
315
|
- \`storyboard_reference.character_reference_sheets\`: ${storyboardReferenceActive ? "GPT Image 2, 16:9, generated once per character" : "n/a"}
|
|
316
|
-
- \`storyboard_reference.storyboard_prompt_policy\`: ${storyboardReferenceActive ? "GPT Image 2, 16:9, generated per shot,
|
|
317
|
-
- \`storyboard_reference.recommended_phase_budget\`: ${storyboardReferenceActive ? "`4-6s: 1-2`, `7-10s: 2-3`, `11-15s: 3-4`, split 5+ phases" : "n/a"}
|
|
316
|
+
- \`storyboard_reference.storyboard_prompt_policy\`: ${storyboardReferenceActive ? "GPT Image 2, 16:9, generated per shot, 240-420 words, 1-12 sheet panels" : "n/a"}
|
|
317
|
+
- \`storyboard_reference.recommended_phase_budget\`: ${storyboardReferenceActive ? "`4-6s: 1-2`, `7-10s: 2-3`, `11-15s: 3-4`, split 5+ real video phases" : "n/a"}
|
|
318
318
|
- \`storyboard_reference.provider_reference_tokens\`: ${storyboardReferenceActive ? "generated character sheet tokens first; generated shot storyboard token next" : "n/a"}
|
|
319
319
|
- \`storyboard_reference.continuity_mode\`: ${storyboardReferenceActive ? "`continuous-shot` or `multi-shot-storyboard`" : "n/a"}
|
|
320
320
|
- \`storyboard_reference.provider_file_limits\`: ${storyboardReferenceActive ? "9 images, 3 videos, 3 audio, 12 total files, 4-15s duration" : "n/a"}
|
|
@@ -353,7 +353,7 @@ SPATIAL PRIORITY: [who looks at what, which plane dominates, shared light source
|
|
|
353
353
|
SEMANTIC WORLD: [camera height, lens family, horizon/vanishing logic, camera movement strategy, light source, shadow direction, scale map, reflection risk, physics constraints]
|
|
354
354
|
RESPECT LOCKED SHOT COUNT: Do not create any shot outside SHOT[X]-SHOT[Y]
|
|
355
355
|
KLING DEFAULT: single-transition first; custom storyboard only for 2-4 meaningful phases, max 4
|
|
356
|
-
${storyboardReferenceActive ? `SEEDANCE STORYBOARD-REFERENCE: Each SHOTNN.md includes INPUT ASSET ROLES, REFERENCE ASSET REQUIREMENTS, GPT IMAGE 2 STORYBOARD PROMPT, STORYBOARD PLAN, AUDIO PLAN, SEEDANCE VIDEO PROMPT, and coverage. Do not require ILK FRAME / SON FRAME. Max
|
|
356
|
+
${storyboardReferenceActive ? `SEEDANCE STORYBOARD-REFERENCE: Each SHOTNN.md includes INPUT ASSET ROLES, REFERENCE ASSET REQUIREMENTS, GPT IMAGE 2 STORYBOARD PROMPT, STORYBOARD PLAN, AUDIO PLAN, SEEDANCE VIDEO PROMPT, and coverage. Do not require ILK FRAME / SON FRAME. Max video phases per shot: ${config.storyboardReferenceMode.maxStoryboardPhases}. Character sheet tokens lock identity; generated shot storyboard token controls staging only and may contain up to 12 sheet panels.` : ""}
|
|
357
357
|
ONE FILE PER SHOT: Each SHOTNN.md contains main shot + all coverage.
|
|
358
358
|
FILE OWNERSHIP: Write only your assigned SHOT files and your own batch report.
|
|
359
359
|
VOICE CONTRACT: Reuse ${config.outputDir}/team-plan.json -> \`voiceCast\` and keep one active speaker per shot.
|
|
@@ -421,7 +421,7 @@ ${storyboardReferenceActive
|
|
|
421
421
|
? `- Main shot contains: \`MODEL CONTROL\`, \`INPUT ASSET ROLES\`, \`REFERENCE ASSET REQUIREMENTS\`, \`GPT IMAGE 2 STORYBOARD PROMPT\`, \`STORYBOARD PLAN\`, \`AUDIO PLAN\`, \`SEEDANCE VIDEO PROMPT\`, and coverage
|
|
422
422
|
- \`INPUT ASSET ROLES\` declares generated character sheet tokens (\`@Image1...\`, legacy \`@image1...\`) as identity/wardrobe/props
|
|
423
423
|
- \`INPUT ASSET ROLES\` declares generated shot storyboard token (next \`@Image\`, legacy lowercase alias such as \`@image2\` for one character) as composition/blocking/camera/timing only
|
|
424
|
-
- \`GPT IMAGE 2 STORYBOARD PROMPT\` is 16:9,
|
|
424
|
+
- \`GPT IMAGE 2 STORYBOARD PROMPT\` is 16:9, 240-420 words, professional storyboard style, supports 1-12 sheet panels, and uses character sheets as the only identity source
|
|
425
425
|
- \`STORYBOARD PLAN\` includes per-shot timeline phases capped at ${config.storyboardReferenceMode.maxStoryboardPhases}
|
|
426
426
|
- Shot storyboard plans must derive from one shared \`${config.outputDir}/team-plan.json -> visual_world\`
|
|
427
427
|
- Do not require \`ILK FRAME\` / \`SON FRAME\` assets or exact first-frame reuse text in this mode`
|
|
@@ -1004,8 +1004,8 @@ Run the Film-Kit Multi pipeline with maximum throughput while preserving ${isSee
|
|
|
1004
1004
|
- set \`storyboard_reference.enabled\` to ${isSeedanceStoryboardReference(config) ? "true" : "false"}
|
|
1005
1005
|
${isSeedanceStoryboardReference(config) ? ` - set \`storyboard_reference.max_storyboard_phases\` to ${config.storyboardReferenceMode.maxStoryboardPhases}
|
|
1006
1006
|
- set \`storyboard_reference.character_reference_sheets\` to GPT Image 2, 16:9, generated once per character
|
|
1007
|
-
- set \`storyboard_reference.storyboard_prompt_policy\` to GPT Image 2, 16:9, generated per shot,
|
|
1008
|
-
- set \`storyboard_reference.recommended_phase_budget\` to 4-6s=1-2, 7-10s=2-3, 11-15s=3-4, split 5+
|
|
1007
|
+
- set \`storyboard_reference.storyboard_prompt_policy\` to GPT Image 2, 16:9, generated per shot, 240-420 words, 1-12 sheet panels
|
|
1008
|
+
- set \`storyboard_reference.recommended_phase_budget\` to 4-6s=1-2, 7-10s=2-3, 11-15s=3-4, split 5+ real video phases
|
|
1009
1009
|
- set \`storyboard_reference.provider_reference_tokens\` to generated character sheet tokens first and generated shot storyboard token next
|
|
1010
1010
|
- set \`storyboard_reference.continuity_mode\` per shot as continuous-shot or multi-shot-storyboard
|
|
1011
1011
|
- set \`storyboard_reference.provider_file_limits\` to 9 images, 3 videos, 3 audio, 12 total files, 4-15s duration
|
|
@@ -1062,7 +1062,7 @@ OUTPUT DIR: ${config.outputDir}/shots/
|
|
|
1062
1062
|
REPORT FILE: ${config.outputDir}/reports/BATCH-REPORT-B[NN].md
|
|
1063
1063
|
SPATIAL PRIORITY: [who looks at what, which plane dominates, shared light source]
|
|
1064
1064
|
SEMANTIC WORLD: [camera height, lens family, horizon/vanishing logic, camera movement strategy, light source, shadow direction, scale map, reflection risk, physics constraints]
|
|
1065
|
-
${isSeedanceStoryboardReference(config) ? `SEEDANCE STORYBOARD-REFERENCE: Declare generated character sheet tokens (@Image1..., legacy @image1...) for identity and the generated shot storyboard token (next @Image, legacy lowercase alias such as @image2 for one character) for staging only. Include GPT IMAGE 2 STORYBOARD PROMPT and per-shot STORYBOARD PLAN phases, max ${config.storyboardReferenceMode.maxStoryboardPhases}. Do not require ILK FRAME / SON FRAME.` : ""}
|
|
1065
|
+
${isSeedanceStoryboardReference(config) ? `SEEDANCE STORYBOARD-REFERENCE: Declare generated character sheet tokens (@Image1..., legacy @image1...) for identity and the generated shot storyboard token (next @Image, legacy lowercase alias such as @image2 for one character) for staging only. Include GPT IMAGE 2 STORYBOARD PROMPT with 1-12 sheet panels and per-shot STORYBOARD PLAN phases, max ${config.storyboardReferenceMode.maxStoryboardPhases}. Do not require ILK FRAME / SON FRAME.` : ""}
|
|
1066
1066
|
RESPECT LOCKED SHOT COUNT: do not create extra shots outside the assigned range
|
|
1067
1067
|
|
|
1068
1068
|
Generate only assigned SHOT files.
|
|
@@ -13,7 +13,7 @@ Use this skill when the user provides:
|
|
|
13
13
|
- a video brief or scenario text
|
|
14
14
|
- optional external storyboard guide images
|
|
15
15
|
|
|
16
|
-
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
16
|
+
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. If no external storyboard image is supplied, this generated prompt is the mandatory storyboard bootstrap step. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
17
17
|
|
|
18
18
|
## Reference Prep
|
|
19
19
|
|
|
@@ -36,9 +36,10 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
36
36
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
|
-
- panel budget:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
39
|
+
- storyboard sheet panel budget: default follows the duration-aware phase budget, but an explicit storyboard panel hint may request 1-12 panels in one GPT Image 2 storyboard sheet
|
|
40
|
+
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
|
+
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
|
+
- split policy: 5+ distinct real video phases, scene changes, or location/action blocks must become separate chained `SHOTNN.md` files; 5-12 storyboard sheet panels alone do not force a split
|
|
42
43
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
43
44
|
- storyboard art grammar: black-and-white rough pencil drawings, minimal detail, rapid gesture energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
44
45
|
- annotation grammar: red arrows = body movement, blue arrows = camera movement, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
@@ -108,6 +109,7 @@ Each shot file contains:
|
|
|
108
109
|
- provider reference tokens
|
|
109
110
|
- GPT Image 2 storyboard prompt
|
|
110
111
|
- storyboard interpretation
|
|
112
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
111
113
|
- audio plan
|
|
112
114
|
- prompt bundle for requested models
|
|
113
115
|
- QA verdict
|
|
@@ -116,6 +118,7 @@ Generated files:
|
|
|
116
118
|
|
|
117
119
|
```text
|
|
118
120
|
$OUTPUT_DIR/storyboard-reference-plan.json
|
|
121
|
+
$OUTPUT_DIR/storyboard-prompt.md
|
|
119
122
|
$OUTPUT_DIR/reference-prep/CHARACTER-SHEET-*.md
|
|
120
123
|
$OUTPUT_DIR/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md
|
|
121
124
|
$OUTPUT_DIR/prompt-bundles/SHOTNN.bundle.json
|
|
@@ -33,11 +33,12 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
33
33
|
- exact identity, wardrobe, accessories, and visible props
|
|
34
34
|
- no labels, text, logos, watermarks, alternate designs, or extra characters
|
|
35
35
|
3. Confirm target models: `veo31`, `seedance-2.0`, `kling-3.0`, or a user-provided subset.
|
|
36
|
-
4. Select
|
|
37
|
-
- 4-6 seconds: 1-2
|
|
38
|
-
- 7-10 seconds: 2-3
|
|
39
|
-
- 11-15 seconds: 3-4
|
|
40
|
-
-
|
|
36
|
+
4. Select video phase budget and storyboard sheet panel count:
|
|
37
|
+
- 4-6 seconds: 1-2 video phases
|
|
38
|
+
- 7-10 seconds: 2-3 video phases
|
|
39
|
+
- 11-15 seconds: 3-4 video phases
|
|
40
|
+
- GPT Image 2 storyboard sheet may contain 1-12 panels
|
|
41
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
41
42
|
5. Build `visual_world`:
|
|
42
43
|
- environment
|
|
43
44
|
- lighting
|
|
@@ -89,7 +90,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
89
90
|
- Missing character reference: stop and request a valid reference.
|
|
90
91
|
- Empty brief: stop and request a brief.
|
|
91
92
|
- Public figure / real-person likeness / trademark risk: stop or safely anonymize before prompt generation.
|
|
92
|
-
- 5+
|
|
93
|
+
- 5+ real video phases: do not compress into one prompt; split shots. 5-12 storyboard sheet panels alone do not force a split.
|
|
93
94
|
- Missing GPT Image 2 character sheet prompt: output is invalid.
|
|
94
95
|
- Missing GPT Image 2 per-shot storyboard prompt: output is invalid.
|
|
95
96
|
- Missing `Avoid` / negative prompt: output is invalid.
|
|
@@ -13,7 +13,7 @@ Use this skill when the user provides:
|
|
|
13
13
|
- a video brief or scenario text
|
|
14
14
|
- optional external storyboard guide images
|
|
15
15
|
|
|
16
|
-
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
16
|
+
The output is a production workflow, not only a video prompt. First create one reusable GPT Image 2 character sheet prompt per reference character. Then create one GPT Image 2 storyboard prompt per `SHOTNN.md`. If no external storyboard image is supplied, this generated prompt is the mandatory storyboard bootstrap step. The generated shot storyboard is the staging reference for the final video model prompt.
|
|
17
17
|
|
|
18
18
|
## Reference Prep
|
|
19
19
|
|
|
@@ -36,9 +36,10 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
36
36
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
|
-
- panel budget:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
39
|
+
- storyboard sheet panel budget: default follows the duration-aware phase budget, but an explicit storyboard panel hint may request 1-12 panels in one GPT Image 2 storyboard sheet
|
|
40
|
+
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
|
+
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
|
+
- split policy: 5+ distinct real video phases, scene changes, or location/action blocks must become separate chained `SHOTNN.md` files; 5-12 storyboard sheet panels alone do not force a split
|
|
42
43
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
43
44
|
- storyboard art grammar: black-and-white rough pencil drawings, minimal detail, rapid gesture energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
44
45
|
- annotation grammar: red arrows = body movement, blue arrows = camera movement, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
@@ -108,6 +109,7 @@ Each shot file contains:
|
|
|
108
109
|
- provider reference tokens
|
|
109
110
|
- GPT Image 2 storyboard prompt
|
|
110
111
|
- storyboard interpretation
|
|
112
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
111
113
|
- audio plan
|
|
112
114
|
- prompt bundle for requested models
|
|
113
115
|
- QA verdict
|
|
@@ -116,6 +118,7 @@ Generated files:
|
|
|
116
118
|
|
|
117
119
|
```text
|
|
118
120
|
$OUTPUT_DIR/storyboard-reference-plan.json
|
|
121
|
+
$OUTPUT_DIR/storyboard-prompt.md
|
|
119
122
|
$OUTPUT_DIR/reference-prep/CHARACTER-SHEET-*.md
|
|
120
123
|
$OUTPUT_DIR/storyboard-prompts/SHOTNN-GPT-IMAGE-2-STORYBOARD.md
|
|
121
124
|
$OUTPUT_DIR/prompt-bundles/SHOTNN.bundle.json
|
|
@@ -33,11 +33,12 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
33
33
|
- exact identity, wardrobe, accessories, and visible props
|
|
34
34
|
- no labels, text, logos, watermarks, alternate designs, or extra characters
|
|
35
35
|
3. Confirm target models: `veo31`, `seedance-2.0`, `kling-3.0`, or a user-provided subset.
|
|
36
|
-
4. Select
|
|
37
|
-
- 4-6 seconds: 1-2
|
|
38
|
-
- 7-10 seconds: 2-3
|
|
39
|
-
- 11-15 seconds: 3-4
|
|
40
|
-
-
|
|
36
|
+
4. Select video phase budget and storyboard sheet panel count:
|
|
37
|
+
- 4-6 seconds: 1-2 video phases
|
|
38
|
+
- 7-10 seconds: 2-3 video phases
|
|
39
|
+
- 11-15 seconds: 3-4 video phases
|
|
40
|
+
- GPT Image 2 storyboard sheet may contain 1-12 panels
|
|
41
|
+
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
41
42
|
5. Build `visual_world`:
|
|
42
43
|
- environment
|
|
43
44
|
- lighting
|
|
@@ -89,7 +90,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
89
90
|
- Missing character reference: stop and request a valid reference.
|
|
90
91
|
- Empty brief: stop and request a brief.
|
|
91
92
|
- Public figure / real-person likeness / trademark risk: stop or safely anonymize before prompt generation.
|
|
92
|
-
- 5+
|
|
93
|
+
- 5+ real video phases: do not compress into one prompt; split shots. 5-12 storyboard sheet panels alone do not force a split.
|
|
93
94
|
- Missing GPT Image 2 character sheet prompt: output is invalid.
|
|
94
95
|
- Missing GPT Image 2 per-shot storyboard prompt: output is invalid.
|
|
95
96
|
- Missing `Avoid` / negative prompt: output is invalid.
|