@milenyumai/film-kit 2.3.7 → 2.3.8
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 +7 -6
- package/build/lib/storyboard-reference/adapters/seedance20.d.ts +1 -0
- package/build/lib/storyboard-reference/adapters/seedance20.js +20 -3
- package/build/lib/storyboard-reference/index.d.ts +1 -1
- package/build/lib/storyboard-reference/prompt-bundle-builder.js +237 -7
- package/build/lib/storyboard-reference/types.d.ts +13 -2
- package/build/lib/storyboard-reference/validators.js +4 -0
- package/content/skills/storyboard-reference/SKILL.md +10 -3
- package/content/workflows/generate-storyboard.md +7 -1
- package/package.json +1 -1
- package/packages/gpt-image-smart/content/skills/storyboard-reference/SKILL.md +10 -3
- package/packages/gpt-image-smart/content/workflows/generate-storyboard.md +7 -1
- package/packages/hybrid/content/skills/storyboard-reference/SKILL.md +10 -3
- package/packages/hybrid/content/workflows/generate-storyboard.md +7 -1
- package/packages/hybrid-smart/content/skills/storyboard-reference/SKILL.md +10 -3
- package/packages/hybrid-smart/content/workflows/generate-storyboard.md +7 -1
- package/packages/multi/content/skills/storyboard-reference/SKILL.md +10 -3
- package/packages/multi/content/workflows/generate-storyboard.md +7 -1
- package/packages/studio/content/skills/storyboard-reference/SKILL.md +10 -3
- package/packages/studio/content/workflows/generate-storyboard.md +7 -1
package/README.md
CHANGED
|
@@ -196,7 +196,7 @@ Aspect ratio: 16:9.
|
|
|
196
196
|
|
|
197
197
|
Generate the storyboard-reference package only:
|
|
198
198
|
- one GPT Image 2 character sheet prompt
|
|
199
|
-
- one 12-
|
|
199
|
+
- one professional 12-frame GPT Image 2 storyboard sheet prompt
|
|
200
200
|
- one Seedance 2.0 video prompt that uses the generated storyboard as @Image2
|
|
201
201
|
- outputs/storyboard-prompt.md
|
|
202
202
|
- outputs/storyboard-prompts/SHOT01-GPT-IMAGE-2-STORYBOARD.md
|
|
@@ -212,7 +212,7 @@ If your tool supports slash-style workflow prompts, this shorter first prompt is
|
|
|
212
212
|
|
|
213
213
|
```text
|
|
214
214
|
/generate
|
|
215
|
-
Storyboard-reference mode. Character reference: refs/character.png. Brief: scenario.md. Model: seedance-2.0. Duration: 15s. Aspect: 16:9. Generate the 12-
|
|
215
|
+
Storyboard-reference mode. Character reference: refs/character.png. Brief: scenario.md. Model: seedance-2.0. Duration: 15s. Aspect: 16:9. Generate the professional 12-frame graphite storyboard sheet prompt and Seedance video prompt package only. No ILK/SON frames. No rendering yet.
|
|
216
216
|
```
|
|
217
217
|
|
|
218
218
|
Terminal-only generation is available when you want the package files without opening an agent tool:
|
|
@@ -227,7 +227,7 @@ npx @milenyumai/film-kit generate-storyboard \
|
|
|
227
227
|
--output-dir ./outputs
|
|
228
228
|
```
|
|
229
229
|
|
|
230
|
-
After the command finishes, start with `outputs/storyboard-prompt.md`. It is the ready-to-use GPT Image 2 storyboard image prompt. Then use `outputs/shots/SHOT01.md` or `outputs/prompt-bundles/SHOT01.bundle.json` for the Seedance 2.0 prompt.
|
|
230
|
+
After the command finishes, start with `outputs/storyboard-prompt.md`. It is the ready-to-use GPT Image 2 storyboard image prompt. The default sheet is a 4x3 grid of 12 labeled pencil panels (`Frame 001` through `Frame 012`) on cream/off-white paper, with a short title, action line, and `CAM:` line in every panel. Then use `outputs/shots/SHOT01.md` or `outputs/prompt-bundles/SHOT01.bundle.json` for the Seedance 2.0 prompt.
|
|
231
231
|
|
|
232
232
|
Initialize a Seedance storyboard-reference runtime:
|
|
233
233
|
|
|
@@ -301,10 +301,11 @@ Rules:
|
|
|
301
301
|
- 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.
|
|
302
302
|
- 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.
|
|
303
303
|
- 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`.
|
|
304
|
-
- Storyboard prompts default to a 12-panel 16:9 production-board sheet: white paper, rough black-and-white
|
|
305
|
-
-
|
|
304
|
+
- Storyboard prompts default to a 12-panel 16:9 production-board sheet: 4x3 grid, `Frames 001-012`, cream/off-white paper, bold black frame borders, rough black-and-white graphite drawings, strong silhouettes, visible body/camera momentum, cinematic camera variety, and annotation colors only. Red movement arrows and blue notes are allowed for planning; full-color rendered panels remain forbidden. Hard negatives block photorealistic stills, full-color rendered panels, concept-art strips, CGI, anime, and polished illustration.
|
|
305
|
+
- If the brief includes an explicit 1-12 numbered frame list, Film-Kit preserves those panel titles/actions/camera cues in the storyboard prompt. Otherwise it deterministically generates a 12-beat plan from start pose through final pose.
|
|
306
|
+
- Seedance treats the generated storyboard token as the complete visual/action/camera/choreography source, follows all beats left-to-right/top-to-bottom, and ignores arrows, labels, notes, page headers, timestamps, panel borders, and other annotations in the rendered video. Multi-shot Seedance prompts include `[STORYBOARD 12-BEAT ORDER]`, render the sheet as distinct fast micro-shots, and use quick cuts, match cuts, whip transitions, or motivated camera jumps between beats. Continuous-shot mode keeps `No scene cuts throughout` only when a true single uninterrupted shot is requested.
|
|
306
307
|
- 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.
|
|
307
|
-
- `SHOTNN.bundle.json` includes `storyboard_creation` metadata with provider, prompt path, alias path, style contract, default panel count, reading order, panel count, forbidden visual modes, Seedance token, annotation policy, and prompt text.
|
|
308
|
+
- `SHOTNN.bundle.json` includes `storyboard_creation` metadata with provider, prompt path, alias path, style contract, default panel count, reading order, panel count, `panel_beats`, forbidden visual modes, Seedance token, annotation policy, and prompt text.
|
|
308
309
|
- Speaking shots must bind `Audio Plan.activeSpeakerKey` back to project-level `voiceCast`; broken voice bindings fail QA.
|
|
309
310
|
- Public-figure, celebrity, likeness, logo, trademark, or brand references in the brief, dialogue metadata, or reference metadata are blocked unless safely anonymized first.
|
|
310
311
|
- Phase budget: 4-6s uses 1-2 phases, 7-10s uses 2-3 phases, and 11-15s uses 3-4 phases.
|
|
@@ -11,6 +11,7 @@ export declare class Seedance20PromptAdapter extends BaseVideoModelPromptAdapter
|
|
|
11
11
|
private formatCharacterRoleLine;
|
|
12
12
|
private formatStoryboardRoleLine;
|
|
13
13
|
private hasDanceOrSingingIntent;
|
|
14
|
+
private formatStoryboardBeatOrder;
|
|
14
15
|
buildPrompt(input: AdapterInput): ModelPromptOutput;
|
|
15
16
|
validate(output: ModelPromptOutput): ModelPromptQa;
|
|
16
17
|
}
|
|
@@ -51,13 +51,22 @@ export class Seedance20PromptAdapter extends BaseVideoModelPromptAdapter {
|
|
|
51
51
|
].join(" ").toLowerCase();
|
|
52
52
|
return /dance|dancing|choreograph|sing|singing|song|vocal|sarki|sark|soyl|dans/.test(combined);
|
|
53
53
|
}
|
|
54
|
+
formatStoryboardBeatOrder(input) {
|
|
55
|
+
return input.storyboardImagePrompt.panelBeats
|
|
56
|
+
.map(beat => `Frame ${beat.frameId} | Phase ${beat.phaseIndex} | ${beat.title}: ${beat.action} CAM: ${beat.camera}. Annotation cue is planning-only and must not render: ${beat.annotationCue}.`)
|
|
57
|
+
.join("\n");
|
|
58
|
+
}
|
|
54
59
|
buildPrompt(input) {
|
|
55
60
|
const audioPlan = buildAudioPlan(input);
|
|
56
61
|
const storyboardEntry = this.getMappingEntries(input, "storyboard_plan")[0];
|
|
57
62
|
const storyboardToken = storyboardEntry?.token ?? "@Image2";
|
|
63
|
+
const beatCount = input.storyboardImagePrompt.panelBeats.length || input.storyboardImagePrompt.panelCount;
|
|
64
|
+
const beatOrderHeader = `[STORYBOARD ${beatCount}-BEAT ORDER]`;
|
|
65
|
+
const finalBeatHoldSeconds = input.request.durationSeconds >= 8 ? "1.0" : "0.5";
|
|
66
|
+
const storyboardBeatOrder = this.formatStoryboardBeatOrder(input);
|
|
58
67
|
const continuityInstruction = input.continuityMode === "continuous-shot"
|
|
59
|
-
? `Use the generated storyboard reference ${storyboardToken} as the complete visual/action/camera/choreography source for this ${input.request.durationSeconds}-second video. Follow all ${
|
|
60
|
-
: `Use the generated storyboard reference ${storyboardToken} as the complete visual/action/camera/choreography source for this ${input.request.durationSeconds}-second video. Follow all ${
|
|
68
|
+
? `Use the generated storyboard reference ${storyboardToken} as the complete visual/action/camera/choreography source for this ${input.request.durationSeconds}-second video. Follow all ${beatCount} beats sequentially from left-to-right, top-to-bottom as the exact visual beat order within one uninterrupted camera move. Render the beats as sequential pose snapshots inside one continuous camera move; each beat must visibly change pose, framing pressure, or movement state without becoming a separate scene cut. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose. Compress the full ${beatCount}-beat sequence into the requested duration as fast readable motion snapshots, not full-length actions. No scene cuts throughout, one continuous shot.`
|
|
69
|
+
: `Use the generated storyboard reference ${storyboardToken} as the complete visual/action/camera/choreography source for this ${input.request.durationSeconds}-second video. Follow all ${beatCount} beats sequentially from left-to-right, top-to-bottom as the exact visual beat order. Render as ${beatCount} distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose. Compress the full ${beatCount}-beat sequence into the requested duration as fast readable motion snapshots, not full-length actions. Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. Final beat holds for the last ${finalBeatHoldSeconds} seconds. Do not add unplanned cuts, extra scene jumps, duplicate performers, or new locations.`;
|
|
61
70
|
const characterEntries = this.getMappingEntries(input, "character_identity");
|
|
62
71
|
const characterTokenText = characterEntries.map(entry => entry.token).join(", ") || "@Image1";
|
|
63
72
|
const performanceEmphasis = this.hasDanceOrSingingIntent(input)
|
|
@@ -81,6 +90,9 @@ ${input.request.brief}
|
|
|
81
90
|
[STORYBOARD PHASES]
|
|
82
91
|
${formatPhaseLines(input.interpretation.phases)}
|
|
83
92
|
|
|
93
|
+
${beatOrderHeader}
|
|
94
|
+
${storyboardBeatOrder}
|
|
95
|
+
|
|
84
96
|
[GPT IMAGE 2 STORYBOARD SOURCE]
|
|
85
97
|
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, framing marks, and page headers as planning annotations only; never render storyboard annotations, arrows, labels, notes, timestamps, page headers, panel borders, or storyboard text into the video.
|
|
86
98
|
|
|
@@ -139,6 +151,8 @@ Avoid: identity drift, face drift, outfit drift, duplicated performer, storyboar
|
|
|
139
151
|
&& /Follow all \d+ beats sequentially from left-to-right, top-to-bottom/i.test(output.promptText)
|
|
140
152
|
&& /Do not reinterpret pose, action, camera angle, emotional progression/i.test(output.promptText)
|
|
141
153
|
: /left-to-right, top-to-bottom/i.test(output.promptText)
|
|
154
|
+
&& /Render as \d+ distinct micro-shots \/ fast motion snapshots/i.test(output.promptText)
|
|
155
|
+
&& /Do not smooth the storyboard into one continuous generic action/i.test(output.promptText)
|
|
142
156
|
&& /Do not reinterpret pose, action, camera angle, emotional progression/i.test(output.promptText),
|
|
143
157
|
separatesReferenceRoles: /Identity reference:/i.test(output.promptText)
|
|
144
158
|
&& /Storyboard reference image:/i.test(output.promptText)
|
|
@@ -148,7 +162,10 @@ Avoid: identity drift, face drift, outfit drift, duplicated performer, storyboar
|
|
|
148
162
|
blocksStoryboardIdentitySources: /Storyboard text, panel borders, arrows, colored marks, lens notes, page headers, watermark, logo, and alternate character design are never identity sources/i.test(output.promptText),
|
|
149
163
|
continuityMode: continuityMode === "continuous-shot"
|
|
150
164
|
? hasNoCutsRule
|
|
151
|
-
: !hasNoCutsRule
|
|
165
|
+
: !hasNoCutsRule
|
|
166
|
+
&& /quick cuts/i.test(output.promptText)
|
|
167
|
+
&& /match cuts/i.test(output.promptText)
|
|
168
|
+
&& /whip transitions/i.test(output.promptText),
|
|
152
169
|
musicNone: /Music: NONE/i.test(output.promptText)
|
|
153
170
|
};
|
|
154
171
|
const issues = [
|
|
@@ -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, StoryboardCreationMetadata, 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, StoryboardPanelBeat, StoryboardPhase, StoryboardPhaseBudget, StoryboardReferenceBuildResult, StoryboardReferencePlan, StoryboardReferencePolicy, StoryboardReferenceWriteResult, VideoModelPromptAdapter, VideoPromptRequest, VisualWorld, VoiceCastEntry } from "./types.js";
|
|
@@ -168,8 +168,221 @@ Avoid: text, labels, arrows, captions, panel numbers, watermarks, logos, extra c
|
|
|
168
168
|
};
|
|
169
169
|
});
|
|
170
170
|
}
|
|
171
|
+
const FALLBACK_PANEL_BEATS = [
|
|
172
|
+
{
|
|
173
|
+
title: "Start Pose",
|
|
174
|
+
action: "Open on the character's first readable body shape, eyeline, and weight before the action begins.",
|
|
175
|
+
camera: "wide or medium-wide establishing frame with clear screen direction",
|
|
176
|
+
annotationCue: "blue note marks entry tempo; red arrow marks first weight direction"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
title: "Shared Intent",
|
|
180
|
+
action: "Clarify the emotional objective, gaze target, and relationship to the room or prop.",
|
|
181
|
+
camera: "medium frame that keeps face, hands, and target geography readable",
|
|
182
|
+
annotationCue: "blue note marks breath or pause; red arrow marks gaze or hand intention"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
title: "First Motion",
|
|
186
|
+
action: "Begin the first visible movement from the brief with grounded foot, hand, or torso mechanics.",
|
|
187
|
+
camera: "low or side angle that shows the first physical push clearly",
|
|
188
|
+
annotationCue: "red movement arrows show direction and contact"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
title: "Build Action",
|
|
192
|
+
action: "Escalate the central action with stronger body momentum and visible cause-and-effect.",
|
|
193
|
+
camera: "tracking medium shot or motivated push-in following the action",
|
|
194
|
+
annotationCue: "red arrows mark acceleration; blue note marks camera tempo"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
title: "Camera Shift",
|
|
198
|
+
action: "Change framing to reveal a new angle on the same action without changing identity or location.",
|
|
199
|
+
camera: "motivated angle jump, whip pan, overhead, or tighter close-up",
|
|
200
|
+
annotationCue: "blue notes mark camera jump and lens emphasis"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
title: "Flow / Contact",
|
|
204
|
+
action: "Show fabric, hair, floor, prop, or environmental contact proving the motion is physical.",
|
|
205
|
+
camera: "close side frame that keeps contact point and body force visible",
|
|
206
|
+
annotationCue: "red arrows mark contact force; blue note marks rhythm"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
title: "Insert Detail",
|
|
210
|
+
action: "Cut to a concrete detail: hand tension, foot pressure, reflection, prop movement, or breath.",
|
|
211
|
+
camera: "tight insert or extreme close-up with shallow but readable focus",
|
|
212
|
+
annotationCue: "blue note names the detail; red arrow marks micro-motion"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
title: "Peak Motion",
|
|
216
|
+
action: "Hit the most forceful movement shape from the brief with maximum readable silhouette.",
|
|
217
|
+
camera: "dynamic low angle, overhead, or long-lens compression at peak energy",
|
|
218
|
+
annotationCue: "red movement arrows mark peak direction and body line"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
title: "Breath Reaction",
|
|
222
|
+
action: "Let the character's breath, face, gaze, or shoulders register the consequence of the peak.",
|
|
223
|
+
camera: "close-up or tight medium on face, hands, and breath",
|
|
224
|
+
annotationCue: "blue notes mark breath and emotional tempo"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
title: "Final Approach",
|
|
228
|
+
action: "Drive toward the resolved composition while preserving screen direction and continuity.",
|
|
229
|
+
camera: "motivated push, lateral track, or controlled handheld move into final pose",
|
|
230
|
+
annotationCue: "red arrows show final approach; blue note marks camera settle"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
title: "Resolved Emotion",
|
|
234
|
+
action: "Hold the emotional endpoint in posture, gaze, facial tension, and body balance.",
|
|
235
|
+
camera: "stable medium or close composition with the resolved eyeline",
|
|
236
|
+
annotationCue: "blue note marks hold duration and breath"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
title: "Success / Final Pose",
|
|
240
|
+
action: "End on the strongest final readable pose or composition promised by the brief.",
|
|
241
|
+
camera: "final composed frame with clean silhouette and no new action",
|
|
242
|
+
annotationCue: "blue note marks final hold; red arrows taper off"
|
|
243
|
+
}
|
|
244
|
+
];
|
|
245
|
+
function frameIdForIndex(index) {
|
|
246
|
+
return String(index).padStart(3, "0");
|
|
247
|
+
}
|
|
248
|
+
function normalizePanelText(value, fallback) {
|
|
249
|
+
const normalized = (value ?? "")
|
|
250
|
+
.replace(/[*_`#>]+/g, "")
|
|
251
|
+
.replace(/\s+/g, " ")
|
|
252
|
+
.replace(/^[\s:;,.|\-–—]+|[\s:;,.|\-–—]+$/g, "")
|
|
253
|
+
.trim();
|
|
254
|
+
return normalized || fallback;
|
|
255
|
+
}
|
|
256
|
+
function briefAnchor(brief) {
|
|
257
|
+
const normalized = brief.replace(/\s+/g, " ").trim();
|
|
258
|
+
return normalized.length > 220 ? `${normalized.slice(0, 217).trim()}...` : normalized;
|
|
259
|
+
}
|
|
260
|
+
function phaseIndexForPanel(panelIndex, panelCount, phaseCount) {
|
|
261
|
+
return Math.min(phaseCount, Math.floor((panelIndex * phaseCount) / Math.max(1, panelCount)) + 1);
|
|
262
|
+
}
|
|
263
|
+
function extractStoryboardTitle(brief, shotId, lastFrameId) {
|
|
264
|
+
const titleMatch = brief.match(/^\s*Title:\s*(.+?)\s*$/im);
|
|
265
|
+
const explicitTitle = normalizePanelText(titleMatch?.[1], "");
|
|
266
|
+
return explicitTitle || `${shotId} STORYBOARD (Frames 001-${lastFrameId})`;
|
|
267
|
+
}
|
|
268
|
+
function parseNumberedFrameLine(line) {
|
|
269
|
+
const match = line.match(/^\s*(?:[-*]\s*)?(?:(?:frame|panel)\s*)?0*(1[0-2]|[1-9])(?:\s*[\).:-]|\s+[-–—]\s+|\s+)/i);
|
|
270
|
+
if (!match)
|
|
271
|
+
return undefined;
|
|
272
|
+
const index = Number(match[1]);
|
|
273
|
+
const text = line.slice(match[0].length).trim();
|
|
274
|
+
if (!text)
|
|
275
|
+
return undefined;
|
|
276
|
+
return { index, text };
|
|
277
|
+
}
|
|
278
|
+
function splitExplicitFrameText(text, fallbackCamera) {
|
|
279
|
+
let body = text;
|
|
280
|
+
let camera = fallbackCamera;
|
|
281
|
+
const cameraMatch = body.match(/\b(?:CAM|Camera)\s*:\s*(.+)$/i);
|
|
282
|
+
if (cameraMatch) {
|
|
283
|
+
camera = normalizePanelText(cameraMatch[1], fallbackCamera);
|
|
284
|
+
body = body.slice(0, cameraMatch.index).trim();
|
|
285
|
+
}
|
|
286
|
+
const delimiterMatch = body.match(/\s[-–—]\s|:\s/);
|
|
287
|
+
if (!delimiterMatch || delimiterMatch.index === undefined) {
|
|
288
|
+
return {
|
|
289
|
+
title: normalizePanelText(body.split(/\s+/).slice(0, 5).join(" "), "Storyboard Beat"),
|
|
290
|
+
action: normalizePanelText(body, "Continue the storyboard action from the brief."),
|
|
291
|
+
camera
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
const delimiterStart = delimiterMatch.index;
|
|
295
|
+
const delimiterEnd = delimiterStart + delimiterMatch[0].length;
|
|
296
|
+
const title = normalizePanelText(body.slice(0, delimiterStart), "Storyboard Beat");
|
|
297
|
+
const action = normalizePanelText(body.slice(delimiterEnd), body);
|
|
298
|
+
return { title, action, camera };
|
|
299
|
+
}
|
|
300
|
+
function parseExplicitStoryboardPanelBeats(input) {
|
|
301
|
+
const parsedLines = input.brief
|
|
302
|
+
.split(/\r?\n/)
|
|
303
|
+
.map(parseNumberedFrameLine)
|
|
304
|
+
.filter((line) => Boolean(line));
|
|
305
|
+
if (parsedLines.length < input.panelCount) {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
const byIndex = new Map(parsedLines.map(line => [line.index, line.text]));
|
|
309
|
+
const hasRequiredFrames = Array.from({ length: input.panelCount }, (_, index) => index + 1)
|
|
310
|
+
.every(index => byIndex.has(index));
|
|
311
|
+
if (!hasRequiredFrames) {
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
return Array.from({ length: input.panelCount }, (_, index) => {
|
|
315
|
+
const panelIndex = index + 1;
|
|
316
|
+
const parsed = splitExplicitFrameText(byIndex.get(panelIndex) ?? "", input.cameraFallback);
|
|
317
|
+
return {
|
|
318
|
+
index: panelIndex,
|
|
319
|
+
frameId: frameIdForIndex(panelIndex),
|
|
320
|
+
title: parsed.title,
|
|
321
|
+
action: parsed.action,
|
|
322
|
+
camera: parsed.camera,
|
|
323
|
+
annotationCue: "preserve user-specified beat; red movement arrows and blue camera/breath notes only",
|
|
324
|
+
phaseIndex: phaseIndexForPanel(index, input.panelCount, input.phaseCount)
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
function buildFallbackStoryboardPanelBeats(input) {
|
|
329
|
+
const brief = briefAnchor(input.request.brief);
|
|
330
|
+
const cameraFallbacks = [
|
|
331
|
+
`${input.interpretation.cameraPlan.framing}; ${input.interpretation.cameraPlan.screenDirection}`,
|
|
332
|
+
"medium framing with readable eyeline, hands, and posture",
|
|
333
|
+
"low or side angle emphasizing grounded first movement",
|
|
334
|
+
`${input.interpretation.cameraPlan.movement} while preserving screen direction`,
|
|
335
|
+
"motivated camera jump, whip pan, overhead, or tighter close-up",
|
|
336
|
+
"close side frame on body force, floor contact, fabric, hair, or prop response",
|
|
337
|
+
"tight insert or extreme close-up on physical detail",
|
|
338
|
+
"dynamic peak-energy frame with the strongest silhouette",
|
|
339
|
+
"close-up or tight medium on breath, gaze, and consequence",
|
|
340
|
+
"motivated push, track, or handheld move into the ending composition",
|
|
341
|
+
"stable medium or close frame holding the emotional resolution",
|
|
342
|
+
"final composed frame with clean silhouette and no new action"
|
|
343
|
+
];
|
|
344
|
+
return Array.from({ length: input.panelCount }, (_, index) => {
|
|
345
|
+
const templateIndex = input.panelCount >= FALLBACK_PANEL_BEATS.length
|
|
346
|
+
? Math.min(index, FALLBACK_PANEL_BEATS.length - 1)
|
|
347
|
+
: Math.round((index * (FALLBACK_PANEL_BEATS.length - 1)) / Math.max(1, input.panelCount - 1));
|
|
348
|
+
const template = FALLBACK_PANEL_BEATS[templateIndex] ?? FALLBACK_PANEL_BEATS.at(-1);
|
|
349
|
+
const phase = input.interpretation.phases[phaseIndexForPanel(index, input.panelCount, input.interpretation.phases.length) - 1];
|
|
350
|
+
return {
|
|
351
|
+
index: index + 1,
|
|
352
|
+
frameId: frameIdForIndex(index + 1),
|
|
353
|
+
title: template.title,
|
|
354
|
+
action: `${template.action} Brief anchor: ${brief}. Phase cue: ${phase?.subjectAction ?? "continue the shot action."}`,
|
|
355
|
+
camera: cameraFallbacks[templateIndex] ?? template.camera,
|
|
356
|
+
annotationCue: template.annotationCue,
|
|
357
|
+
phaseIndex: phaseIndexForPanel(index, input.panelCount, input.interpretation.phases.length)
|
|
358
|
+
};
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function buildStoryboardPanelBeats(input) {
|
|
362
|
+
const cameraFallback = `${input.interpretation.cameraPlan.framing}, ${input.interpretation.cameraPlan.movement}, ${input.interpretation.cameraPlan.lens}`;
|
|
363
|
+
return parseExplicitStoryboardPanelBeats({
|
|
364
|
+
brief: input.request.brief,
|
|
365
|
+
panelCount: input.panelCount,
|
|
366
|
+
phaseCount: input.interpretation.phases.length,
|
|
367
|
+
cameraFallback
|
|
368
|
+
}) ?? buildFallbackStoryboardPanelBeats(input);
|
|
369
|
+
}
|
|
370
|
+
function formatPanelBeatPlan(panelBeats) {
|
|
371
|
+
return panelBeats
|
|
372
|
+
.map(beat => `Frame ${beat.frameId} | ${beat.title}
|
|
373
|
+
Action: ${beat.action}
|
|
374
|
+
CAM: ${beat.camera}
|
|
375
|
+
NOTE: ${beat.annotationCue}
|
|
376
|
+
Phase: ${beat.phaseIndex}`)
|
|
377
|
+
.join("\n\n");
|
|
378
|
+
}
|
|
171
379
|
function buildStoryboardImagePrompt(input) {
|
|
172
380
|
const { request, assets, shotId, interpretation, characterReferenceSheetPrompts } = input;
|
|
381
|
+
const panelBeats = buildStoryboardPanelBeats({
|
|
382
|
+
request,
|
|
383
|
+
interpretation,
|
|
384
|
+
panelCount: input.storyboardSheetPanelCount
|
|
385
|
+
});
|
|
173
386
|
const characterSheetIds = characterReferenceSheetPrompts.map(prompt => prompt.id);
|
|
174
387
|
const externalStoryboardGuideIds = assets.storyboards.map(storyboard => storyboard.asset.id);
|
|
175
388
|
const sheetRefs = characterReferenceSheetPrompts
|
|
@@ -184,6 +397,13 @@ function buildStoryboardImagePrompt(input) {
|
|
|
184
397
|
const panelLabel = input.storyboardSheetPanelCount === 1
|
|
185
398
|
? "1 cinematic panel"
|
|
186
399
|
: `${input.storyboardSheetPanelCount} cinematic panels`;
|
|
400
|
+
const panelGrid = input.storyboardSheetPanelCount === 12
|
|
401
|
+
? "4x3 grid of 12 pencil-sketched panels"
|
|
402
|
+
: `${input.storyboardSheetPanelCount} pencil-sketched panel${input.storyboardSheetPanelCount === 1 ? "" : "s"} in a clean production storyboard sheet`;
|
|
403
|
+
const lastFrameId = panelBeats.at(-1)?.frameId ?? frameIdForIndex(input.storyboardSheetPanelCount);
|
|
404
|
+
const frameRange = `Frames 001-${lastFrameId}`;
|
|
405
|
+
const storyboardTitle = extractStoryboardTitle(request.brief, shotId, lastFrameId);
|
|
406
|
+
const panelBeatPlan = formatPanelBeatPlan(panelBeats);
|
|
187
407
|
const continuityStyle = interpretation.phases.length <= 1
|
|
188
408
|
? `Because this is a single uninterrupted beat, still create ${panelLabel} as sequential motion snapshots of one continuous camera move. Each panel must clarify entry pose, motion direction, body mechanics, camera shift, and final body intention without implying separate scenes.`
|
|
189
409
|
: `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.`;
|
|
@@ -193,6 +413,7 @@ function buildStoryboardImagePrompt(input) {
|
|
|
193
413
|
provider: "gpt-image-2",
|
|
194
414
|
aspectRatio: "16:9",
|
|
195
415
|
panelCount: input.storyboardSheetPanelCount,
|
|
416
|
+
panelBeats,
|
|
196
417
|
style: "raw-pencil-production-storyboard",
|
|
197
418
|
characterSheetIds,
|
|
198
419
|
externalStoryboardGuideIds,
|
|
@@ -202,21 +423,29 @@ function buildStoryboardImagePrompt(input) {
|
|
|
202
423
|
Do not create photorealistic cinematic stills.
|
|
203
424
|
Do not create full-color rendered panels.
|
|
204
425
|
Do not create concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration.
|
|
205
|
-
Only annotation arrows/marks may use color; all storyboard artwork remains black pencil on white paper.
|
|
426
|
+
Only annotation arrows/marks/notes may use color; all storyboard artwork remains black graphite pencil on cream/off-white paper.
|
|
206
427
|
|
|
207
428
|
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.
|
|
208
429
|
|
|
209
430
|
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.
|
|
210
431
|
|
|
211
|
-
Change only: Create a raw ${shotId} storyboard focused on intense physical movement and clear cinematic action from this scene: ${request.brief}.
|
|
432
|
+
Change only: Create a raw ${shotId} storyboard focused on intense physical movement and clear cinematic action from this scene: ${request.brief}. Title: ${storyboardTitle}. Layout: ${panelGrid}, ${frameRange}, cream/off-white paper, bold black frame borders, readable storyboard margins, and no rendered color artwork. Use exactly ${panelLabel}. The storyboard controls composition, blocking, camera direction, timing, phase order, action rhythm, and emotional progression only. ${externalGuideText}
|
|
433
|
+
|
|
434
|
+
Storyboard drawing style: raw contemporary production storyboard with black-and-white rough pencil linework on cream/off-white paper. Actual storyboard drawings must be black and white only. Use 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.
|
|
435
|
+
|
|
436
|
+
Visible panel labeling requirements: every panel must visibly include its Frame 001-style frame ID, the short panel title, one concise action line, and a CAM: line. Use these exact beats, preserving titles and order:
|
|
437
|
+
|
|
438
|
+
${panelBeatPlan}
|
|
439
|
+
|
|
440
|
+
NOTES: Add compact blue notes for breath, camera, and tempo cues only where useful. Keep notes short and outside the image action area.
|
|
212
441
|
|
|
213
|
-
|
|
442
|
+
LEGEND: red movement arrows = movement; blue notes = breath/camera/tempo cue; green marks = framing/composition; orange marks = lighting direction; purple marks = vocal/emotional emphasis. No timestamps.
|
|
214
443
|
|
|
215
|
-
Panel direction: ${continuityStyle} The scene brief is: ${request.brief} Previous handoff: ${input.previousShotHandoff}. Next handoff: ${input.nextShotHandoff}. Planned
|
|
444
|
+
Panel direction: ${continuityStyle} The scene brief is: ${request.brief} Previous handoff: ${input.previousShotHandoff}. Next handoff: ${input.nextShotHandoff}. Planned video phase actions: ${phaseDirection}
|
|
216
445
|
|
|
217
446
|
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}.
|
|
218
447
|
|
|
219
|
-
Annotation color system: red arrows for body movement, blue
|
|
448
|
+
Annotation color system: red movement arrows for body movement, blue notes for camera movement, breath, and tempo, green marks for framing/composition, orange marks for lighting direction, purple marks for vocal or emotional emphasis when relevant, black text only for short lens notes and panel labels. No timestamps.
|
|
220
449
|
|
|
221
450
|
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.
|
|
222
451
|
|
|
@@ -328,14 +557,15 @@ function buildStoryboardCreationMetadata(request, storyboardImagePrompt, provide
|
|
|
328
557
|
],
|
|
329
558
|
annotation_colors_allowed: true,
|
|
330
559
|
reading_order: "left-to-right, top-to-bottom",
|
|
560
|
+
panel_beats: storyboardImagePrompt.panelBeats,
|
|
331
561
|
character_sheet_ids: storyboardImagePrompt.characterSheetIds,
|
|
332
562
|
external_storyboard_guide_ids: storyboardImagePrompt.externalStoryboardGuideIds,
|
|
333
563
|
seedance_token: storyboardEntry?.token ?? "@Image2",
|
|
334
564
|
annotation_policy: {
|
|
335
565
|
rendered_in_video: false,
|
|
336
566
|
color_system: {
|
|
337
|
-
red: "
|
|
338
|
-
blue: "camera
|
|
567
|
+
red: "movement arrows",
|
|
568
|
+
blue: "breath / camera / tempo notes",
|
|
339
569
|
green: "framing / composition",
|
|
340
570
|
orange: "lighting direction",
|
|
341
571
|
purple: "vocal / emotional emphasis",
|
|
@@ -128,6 +128,7 @@ export interface StoryboardImagePrompt {
|
|
|
128
128
|
provider: "gpt-image-2";
|
|
129
129
|
aspectRatio: "16:9";
|
|
130
130
|
panelCount: number;
|
|
131
|
+
panelBeats: StoryboardPanelBeat[];
|
|
131
132
|
style: "raw-pencil-production-storyboard";
|
|
132
133
|
characterSheetIds: string[];
|
|
133
134
|
externalStoryboardGuideIds: string[];
|
|
@@ -135,6 +136,15 @@ export interface StoryboardImagePrompt {
|
|
|
135
136
|
nextShotHandoff: string;
|
|
136
137
|
promptText: string;
|
|
137
138
|
}
|
|
139
|
+
export interface StoryboardPanelBeat {
|
|
140
|
+
index: number;
|
|
141
|
+
frameId: string;
|
|
142
|
+
title: string;
|
|
143
|
+
action: string;
|
|
144
|
+
camera: string;
|
|
145
|
+
annotationCue: string;
|
|
146
|
+
phaseIndex: number;
|
|
147
|
+
}
|
|
138
148
|
export interface StoryboardCreationMetadata {
|
|
139
149
|
provider: "gpt-image-2";
|
|
140
150
|
prompt_path: string;
|
|
@@ -151,14 +161,15 @@ export interface StoryboardCreationMetadata {
|
|
|
151
161
|
];
|
|
152
162
|
annotation_colors_allowed: true;
|
|
153
163
|
reading_order: "left-to-right, top-to-bottom";
|
|
164
|
+
panel_beats: StoryboardPanelBeat[];
|
|
154
165
|
character_sheet_ids: string[];
|
|
155
166
|
external_storyboard_guide_ids: string[];
|
|
156
167
|
seedance_token: string;
|
|
157
168
|
annotation_policy: {
|
|
158
169
|
rendered_in_video: false;
|
|
159
170
|
color_system: {
|
|
160
|
-
red: "
|
|
161
|
-
blue: "camera
|
|
171
|
+
red: "movement arrows";
|
|
172
|
+
blue: "breath / camera / tempo notes";
|
|
162
173
|
green: "framing / composition";
|
|
163
174
|
orange: "lighting direction";
|
|
164
175
|
purple: "vocal / emotional emphasis";
|
|
@@ -121,6 +121,10 @@ export function validatePromptBundle(bundle, assets, voiceCast = []) {
|
|
|
121
121
|
&& bundle.storyboard_creation?.style_contract === "raw-pencil-production-storyboard"
|
|
122
122
|
&& bundle.storyboard_creation?.forbidden_visual_modes.includes("photorealistic stills")
|
|
123
123
|
&& bundle.storyboard_creation?.annotation_colors_allowed === true
|
|
124
|
+
&& Array.isArray(bundle.storyboard_creation?.panel_beats)
|
|
125
|
+
&& bundle.storyboard_creation.panel_beats.length === bundle.storyboardImagePrompt.panelCount
|
|
126
|
+
&& Array.isArray(bundle.storyboardImagePrompt.panelBeats)
|
|
127
|
+
&& bundle.storyboardImagePrompt.panelBeats.length === bundle.storyboardImagePrompt.panelCount
|
|
124
128
|
&& bundle.storyboard_creation?.annotation_policy.rendered_in_video === false,
|
|
125
129
|
storyboardPromptHasReferenceLockStructure: hasGptImageStillPromptContract(bundle.storyboardImagePrompt?.promptText ?? ""),
|
|
126
130
|
hasAvoidLineEverywhere: Object.values(bundle.modelPrompts).every(output => Boolean(output) && hasAvoidOrNegativePrompt(output.promptText)),
|
|
@@ -37,13 +37,15 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
39
|
- storyboard sheet panel budget: default is 12 cinematic panels in one GPT Image 2 storyboard sheet; an explicit storyboard panel hint may request 1-12 panels
|
|
40
|
+
- structured panel beats: every storyboard prompt must carry a numbered panel beat plan with `Frame 001`-style IDs, short titles, action lines, `CAM:` lines, annotation cues, and phase mapping
|
|
40
41
|
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
42
|
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
43
|
- 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
|
|
43
44
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
44
|
-
- storyboard art grammar: white paper 16:9 production storyboard sheet, actual drawings black and white only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
|
+
- storyboard art grammar: cream/off-white paper 16:9 production storyboard sheet, 4x3 grid when using the default 12 panels, bold black frame borders, actual drawings black and white graphite only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
46
|
- hard negative style lock: do not create photorealistic cinematic stills, full-color rendered panels, concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration
|
|
46
|
-
- annotation grammar: red arrows =
|
|
47
|
+
- annotation grammar: annotations only may use color; red movement arrows = movement, blue notes = breath/camera/tempo cue, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
48
|
+
- visible sheet text: panel labels, short titles, one action line, `CAM:` line, `NOTES`, and `LEGEND` are allowed on the storyboard sheet; timestamps are forbidden
|
|
47
49
|
- continuity: include previous shot handoff, next shot handoff, shared `visual_world`, screen direction, lighting, and action rhythm
|
|
48
50
|
|
|
49
51
|
The shot storyboard prompt must use the character sheet reference as the only identity source. Optional external storyboard guide images may inform composition and timing only.
|
|
@@ -62,6 +64,8 @@ Use it for composition, blocking, camera angle, action progression, visual rhyth
|
|
|
62
64
|
|
|
63
65
|
- Character identity always wins over storyboard character design.
|
|
64
66
|
- Storyboard text, labels, watermarks, logos, and panel borders are never copied into the video.
|
|
67
|
+
- If the brief contains a complete 1-12 numbered frame list, preserve the user's panel titles, action beats, and camera cues in the storyboard prompt.
|
|
68
|
+
- If the brief does not contain a complete frame list, generate a deterministic 12-beat sheet: start pose, shared intent, first motion, build action, camera shift, flow/contact, insert/detail, peak motion, breath/reaction, final approach, resolved emotion, success/final pose.
|
|
65
69
|
- One prompt may contain at most 4 storyboard phases by default.
|
|
66
70
|
- 5+ distinct storyboard phases must be split into multiple `SHOTNN.md` files.
|
|
67
71
|
- Do not assume start/end frame assets exist in `storyboard-reference` mode.
|
|
@@ -80,6 +84,9 @@ Seedance 2.0:
|
|
|
80
84
|
- The storyboard token is the complete visual/action/camera/choreography source and controls composition, blocking, camera direction, timing, action rhythm, framing variety, final pose, and phase order only.
|
|
81
85
|
- Follow all storyboard beats left-to-right, top-to-bottom. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose.
|
|
82
86
|
- Compress the full 12-beat default storyboard sheet into the requested duration as readable motion snapshots while preserving the duration-aware video phase budget.
|
|
87
|
+
- Include `[STORYBOARD 12-BEAT ORDER]` for default sheets and list Frame 001-012 with title, action, camera, and phase mapping.
|
|
88
|
+
- In multi-shot storyboard mode, render as 12 distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state.
|
|
89
|
+
- Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. For 8s+ videos, hold the final beat for the last 1.0 seconds; for shorter videos, hold it for the last 0.5 seconds.
|
|
83
90
|
- Treat storyboard arrows, labels, notes, lens notes, page headers, panel borders, and colored marks as planning annotations only; never render them into the video.
|
|
84
91
|
- Use explicit timeline phases when the storyboard has multiple beats.
|
|
85
92
|
- Use `No scene cuts throughout, one continuous shot` only for a true single uninterrupted camera move.
|
|
@@ -111,7 +118,7 @@ Each shot file contains:
|
|
|
111
118
|
- provider reference tokens
|
|
112
119
|
- GPT Image 2 storyboard prompt
|
|
113
120
|
- storyboard interpretation
|
|
114
|
-
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
121
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`, including `panel_beats`
|
|
115
122
|
- audio plan
|
|
116
123
|
- prompt bundle for requested models
|
|
117
124
|
- QA verdict
|
|
@@ -38,6 +38,9 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
38
38
|
- 7-10 seconds: 2-3 video phases
|
|
39
39
|
- 11-15 seconds: 3-4 video phases
|
|
40
40
|
- GPT Image 2 storyboard sheet defaults to 12 panels; explicit panel hints may request 1-12 panels
|
|
41
|
+
- default storyboard sheet uses `Frames 001-012` in a 4x3 grid
|
|
42
|
+
- every panel must have a visible frame label, short title, one action line, and `CAM:` line
|
|
43
|
+
- if the brief includes a full 1-12 frame list, preserve those titles/actions/camera cues; otherwise generate deterministic start-pose-to-final-pose beats
|
|
41
44
|
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
42
45
|
5. Build `visual_world`:
|
|
43
46
|
- environment
|
|
@@ -48,11 +51,14 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
48
51
|
6. Generate one GPT Image 2 storyboard prompt per shot:
|
|
49
52
|
- use character sheets as the only identity source
|
|
50
53
|
- use optional storyboard guide only for composition, blocking, camera, timing, and rhythm
|
|
51
|
-
- enforce white
|
|
54
|
+
- enforce cream/off-white paper, black-and-white rough graphite production storyboard artwork, and bold black frame borders; only annotation arrows/marks/notes may use color
|
|
55
|
+
- include `NOTES` and `LEGEND`; red movement arrows and blue notes are allowed as planning annotations only; no timestamps
|
|
52
56
|
- include previous shot handoff and next shot handoff
|
|
53
57
|
- preserve shared location, lighting, screen direction, action rhythm, and scene continuity
|
|
54
58
|
7. Build model prompt bundle:
|
|
55
59
|
- Seedance dynamic image mapping: character sheets first, generated shot storyboard next
|
|
60
|
+
- Seedance multi-shot prompts include `[STORYBOARD 12-BEAT ORDER]`, render 12 distinct micro-shots / fast motion snapshots, avoid smoothing into one generic action, and use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats
|
|
61
|
+
- Seedance continuous-shot prompts keep the same beat order inside one uninterrupted camera move and reserve `No scene cuts throughout` for true single-shot mode only
|
|
56
62
|
- Veo visual-planning prompt with full audio direction
|
|
57
63
|
- Kling block-structured storyboard route
|
|
58
64
|
8. Run QA gates:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milenyumai/film-kit",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
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",
|
|
@@ -37,13 +37,15 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
39
|
- storyboard sheet panel budget: default is 12 cinematic panels in one GPT Image 2 storyboard sheet; an explicit storyboard panel hint may request 1-12 panels
|
|
40
|
+
- structured panel beats: every storyboard prompt must carry a numbered panel beat plan with `Frame 001`-style IDs, short titles, action lines, `CAM:` lines, annotation cues, and phase mapping
|
|
40
41
|
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
42
|
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
43
|
- 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
|
|
43
44
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
44
|
-
- storyboard art grammar: white paper 16:9 production storyboard sheet, actual drawings black and white only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
|
+
- storyboard art grammar: cream/off-white paper 16:9 production storyboard sheet, 4x3 grid when using the default 12 panels, bold black frame borders, actual drawings black and white graphite only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
46
|
- hard negative style lock: do not create photorealistic cinematic stills, full-color rendered panels, concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration
|
|
46
|
-
- annotation grammar: red arrows =
|
|
47
|
+
- annotation grammar: annotations only may use color; red movement arrows = movement, blue notes = breath/camera/tempo cue, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
48
|
+
- visible sheet text: panel labels, short titles, one action line, `CAM:` line, `NOTES`, and `LEGEND` are allowed on the storyboard sheet; timestamps are forbidden
|
|
47
49
|
- continuity: include previous shot handoff, next shot handoff, shared `visual_world`, screen direction, lighting, and action rhythm
|
|
48
50
|
|
|
49
51
|
The shot storyboard prompt must use the character sheet reference as the only identity source. Optional external storyboard guide images may inform composition and timing only.
|
|
@@ -62,6 +64,8 @@ Use it for composition, blocking, camera angle, action progression, visual rhyth
|
|
|
62
64
|
|
|
63
65
|
- Character identity always wins over storyboard character design.
|
|
64
66
|
- Storyboard text, labels, watermarks, logos, and panel borders are never copied into the video.
|
|
67
|
+
- If the brief contains a complete 1-12 numbered frame list, preserve the user's panel titles, action beats, and camera cues in the storyboard prompt.
|
|
68
|
+
- If the brief does not contain a complete frame list, generate a deterministic 12-beat sheet: start pose, shared intent, first motion, build action, camera shift, flow/contact, insert/detail, peak motion, breath/reaction, final approach, resolved emotion, success/final pose.
|
|
65
69
|
- One prompt may contain at most 4 storyboard phases by default.
|
|
66
70
|
- 5+ distinct storyboard phases must be split into multiple `SHOTNN.md` files.
|
|
67
71
|
- Do not assume start/end frame assets exist in `storyboard-reference` mode.
|
|
@@ -80,6 +84,9 @@ Seedance 2.0:
|
|
|
80
84
|
- The storyboard token is the complete visual/action/camera/choreography source and controls composition, blocking, camera direction, timing, action rhythm, framing variety, final pose, and phase order only.
|
|
81
85
|
- Follow all storyboard beats left-to-right, top-to-bottom. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose.
|
|
82
86
|
- Compress the full 12-beat default storyboard sheet into the requested duration as readable motion snapshots while preserving the duration-aware video phase budget.
|
|
87
|
+
- Include `[STORYBOARD 12-BEAT ORDER]` for default sheets and list Frame 001-012 with title, action, camera, and phase mapping.
|
|
88
|
+
- In multi-shot storyboard mode, render as 12 distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state.
|
|
89
|
+
- Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. For 8s+ videos, hold the final beat for the last 1.0 seconds; for shorter videos, hold it for the last 0.5 seconds.
|
|
83
90
|
- Treat storyboard arrows, labels, notes, lens notes, page headers, panel borders, and colored marks as planning annotations only; never render them into the video.
|
|
84
91
|
- Use explicit timeline phases when the storyboard has multiple beats.
|
|
85
92
|
- Use `No scene cuts throughout, one continuous shot` only for a true single uninterrupted camera move.
|
|
@@ -111,7 +118,7 @@ Each shot file contains:
|
|
|
111
118
|
- provider reference tokens
|
|
112
119
|
- GPT Image 2 storyboard prompt
|
|
113
120
|
- storyboard interpretation
|
|
114
|
-
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
121
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`, including `panel_beats`
|
|
115
122
|
- audio plan
|
|
116
123
|
- prompt bundle for requested models
|
|
117
124
|
- QA verdict
|
|
@@ -38,6 +38,9 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
38
38
|
- 7-10 seconds: 2-3 video phases
|
|
39
39
|
- 11-15 seconds: 3-4 video phases
|
|
40
40
|
- GPT Image 2 storyboard sheet defaults to 12 panels; explicit panel hints may request 1-12 panels
|
|
41
|
+
- default storyboard sheet uses `Frames 001-012` in a 4x3 grid
|
|
42
|
+
- every panel must have a visible frame label, short title, one action line, and `CAM:` line
|
|
43
|
+
- if the brief includes a full 1-12 frame list, preserve those titles/actions/camera cues; otherwise generate deterministic start-pose-to-final-pose beats
|
|
41
44
|
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
42
45
|
5. Build `visual_world`:
|
|
43
46
|
- environment
|
|
@@ -48,11 +51,14 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
48
51
|
6. Generate one GPT Image 2 storyboard prompt per shot:
|
|
49
52
|
- use character sheets as the only identity source
|
|
50
53
|
- use optional storyboard guide only for composition, blocking, camera, timing, and rhythm
|
|
51
|
-
- enforce white
|
|
54
|
+
- enforce cream/off-white paper, black-and-white rough graphite production storyboard artwork, and bold black frame borders; only annotation arrows/marks/notes may use color
|
|
55
|
+
- include `NOTES` and `LEGEND`; red movement arrows and blue notes are allowed as planning annotations only; no timestamps
|
|
52
56
|
- include previous shot handoff and next shot handoff
|
|
53
57
|
- preserve shared location, lighting, screen direction, action rhythm, and scene continuity
|
|
54
58
|
7. Build model prompt bundle:
|
|
55
59
|
- Seedance dynamic image mapping: character sheets first, generated shot storyboard next
|
|
60
|
+
- Seedance multi-shot prompts include `[STORYBOARD 12-BEAT ORDER]`, render 12 distinct micro-shots / fast motion snapshots, avoid smoothing into one generic action, and use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats
|
|
61
|
+
- Seedance continuous-shot prompts keep the same beat order inside one uninterrupted camera move and reserve `No scene cuts throughout` for true single-shot mode only
|
|
56
62
|
- Veo visual-planning prompt with full audio direction
|
|
57
63
|
- Kling block-structured storyboard route
|
|
58
64
|
8. Run QA gates:
|
|
@@ -37,13 +37,15 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
39
|
- storyboard sheet panel budget: default is 12 cinematic panels in one GPT Image 2 storyboard sheet; an explicit storyboard panel hint may request 1-12 panels
|
|
40
|
+
- structured panel beats: every storyboard prompt must carry a numbered panel beat plan with `Frame 001`-style IDs, short titles, action lines, `CAM:` lines, annotation cues, and phase mapping
|
|
40
41
|
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
42
|
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
43
|
- 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
|
|
43
44
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
44
|
-
- storyboard art grammar: white paper 16:9 production storyboard sheet, actual drawings black and white only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
|
+
- storyboard art grammar: cream/off-white paper 16:9 production storyboard sheet, 4x3 grid when using the default 12 panels, bold black frame borders, actual drawings black and white graphite only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
46
|
- hard negative style lock: do not create photorealistic cinematic stills, full-color rendered panels, concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration
|
|
46
|
-
- annotation grammar: red arrows =
|
|
47
|
+
- annotation grammar: annotations only may use color; red movement arrows = movement, blue notes = breath/camera/tempo cue, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
48
|
+
- visible sheet text: panel labels, short titles, one action line, `CAM:` line, `NOTES`, and `LEGEND` are allowed on the storyboard sheet; timestamps are forbidden
|
|
47
49
|
- continuity: include previous shot handoff, next shot handoff, shared `visual_world`, screen direction, lighting, and action rhythm
|
|
48
50
|
|
|
49
51
|
The shot storyboard prompt must use the character sheet reference as the only identity source. Optional external storyboard guide images may inform composition and timing only.
|
|
@@ -62,6 +64,8 @@ Use it for composition, blocking, camera angle, action progression, visual rhyth
|
|
|
62
64
|
|
|
63
65
|
- Character identity always wins over storyboard character design.
|
|
64
66
|
- Storyboard text, labels, watermarks, logos, and panel borders are never copied into the video.
|
|
67
|
+
- If the brief contains a complete 1-12 numbered frame list, preserve the user's panel titles, action beats, and camera cues in the storyboard prompt.
|
|
68
|
+
- If the brief does not contain a complete frame list, generate a deterministic 12-beat sheet: start pose, shared intent, first motion, build action, camera shift, flow/contact, insert/detail, peak motion, breath/reaction, final approach, resolved emotion, success/final pose.
|
|
65
69
|
- One prompt may contain at most 4 storyboard phases by default.
|
|
66
70
|
- 5+ distinct storyboard phases must be split into multiple `SHOTNN.md` files.
|
|
67
71
|
- Do not assume start/end frame assets exist in `storyboard-reference` mode.
|
|
@@ -80,6 +84,9 @@ Seedance 2.0:
|
|
|
80
84
|
- The storyboard token is the complete visual/action/camera/choreography source and controls composition, blocking, camera direction, timing, action rhythm, framing variety, final pose, and phase order only.
|
|
81
85
|
- Follow all storyboard beats left-to-right, top-to-bottom. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose.
|
|
82
86
|
- Compress the full 12-beat default storyboard sheet into the requested duration as readable motion snapshots while preserving the duration-aware video phase budget.
|
|
87
|
+
- Include `[STORYBOARD 12-BEAT ORDER]` for default sheets and list Frame 001-012 with title, action, camera, and phase mapping.
|
|
88
|
+
- In multi-shot storyboard mode, render as 12 distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state.
|
|
89
|
+
- Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. For 8s+ videos, hold the final beat for the last 1.0 seconds; for shorter videos, hold it for the last 0.5 seconds.
|
|
83
90
|
- Treat storyboard arrows, labels, notes, lens notes, page headers, panel borders, and colored marks as planning annotations only; never render them into the video.
|
|
84
91
|
- Use explicit timeline phases when the storyboard has multiple beats.
|
|
85
92
|
- Use `No scene cuts throughout, one continuous shot` only for a true single uninterrupted camera move.
|
|
@@ -111,7 +118,7 @@ Each shot file contains:
|
|
|
111
118
|
- provider reference tokens
|
|
112
119
|
- GPT Image 2 storyboard prompt
|
|
113
120
|
- storyboard interpretation
|
|
114
|
-
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
121
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`, including `panel_beats`
|
|
115
122
|
- audio plan
|
|
116
123
|
- prompt bundle for requested models
|
|
117
124
|
- QA verdict
|
|
@@ -38,6 +38,9 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
38
38
|
- 7-10 seconds: 2-3 video phases
|
|
39
39
|
- 11-15 seconds: 3-4 video phases
|
|
40
40
|
- GPT Image 2 storyboard sheet defaults to 12 panels; explicit panel hints may request 1-12 panels
|
|
41
|
+
- default storyboard sheet uses `Frames 001-012` in a 4x3 grid
|
|
42
|
+
- every panel must have a visible frame label, short title, one action line, and `CAM:` line
|
|
43
|
+
- if the brief includes a full 1-12 frame list, preserve those titles/actions/camera cues; otherwise generate deterministic start-pose-to-final-pose beats
|
|
41
44
|
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
42
45
|
5. Build `visual_world`:
|
|
43
46
|
- environment
|
|
@@ -48,11 +51,14 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
48
51
|
6. Generate one GPT Image 2 storyboard prompt per shot:
|
|
49
52
|
- use character sheets as the only identity source
|
|
50
53
|
- use optional storyboard guide only for composition, blocking, camera, timing, and rhythm
|
|
51
|
-
- enforce white
|
|
54
|
+
- enforce cream/off-white paper, black-and-white rough graphite production storyboard artwork, and bold black frame borders; only annotation arrows/marks/notes may use color
|
|
55
|
+
- include `NOTES` and `LEGEND`; red movement arrows and blue notes are allowed as planning annotations only; no timestamps
|
|
52
56
|
- include previous shot handoff and next shot handoff
|
|
53
57
|
- preserve shared location, lighting, screen direction, action rhythm, and scene continuity
|
|
54
58
|
7. Build model prompt bundle:
|
|
55
59
|
- Seedance dynamic image mapping: character sheets first, generated shot storyboard next
|
|
60
|
+
- Seedance multi-shot prompts include `[STORYBOARD 12-BEAT ORDER]`, render 12 distinct micro-shots / fast motion snapshots, avoid smoothing into one generic action, and use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats
|
|
61
|
+
- Seedance continuous-shot prompts keep the same beat order inside one uninterrupted camera move and reserve `No scene cuts throughout` for true single-shot mode only
|
|
56
62
|
- Veo visual-planning prompt with full audio direction
|
|
57
63
|
- Kling block-structured storyboard route
|
|
58
64
|
8. Run QA gates:
|
|
@@ -37,13 +37,15 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
39
|
- storyboard sheet panel budget: default is 12 cinematic panels in one GPT Image 2 storyboard sheet; an explicit storyboard panel hint may request 1-12 panels
|
|
40
|
+
- structured panel beats: every storyboard prompt must carry a numbered panel beat plan with `Frame 001`-style IDs, short titles, action lines, `CAM:` lines, annotation cues, and phase mapping
|
|
40
41
|
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
42
|
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
43
|
- 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
|
|
43
44
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
44
|
-
- storyboard art grammar: white paper 16:9 production storyboard sheet, actual drawings black and white only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
|
+
- storyboard art grammar: cream/off-white paper 16:9 production storyboard sheet, 4x3 grid when using the default 12 panels, bold black frame borders, actual drawings black and white graphite only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
46
|
- hard negative style lock: do not create photorealistic cinematic stills, full-color rendered panels, concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration
|
|
46
|
-
- annotation grammar: red arrows =
|
|
47
|
+
- annotation grammar: annotations only may use color; red movement arrows = movement, blue notes = breath/camera/tempo cue, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
48
|
+
- visible sheet text: panel labels, short titles, one action line, `CAM:` line, `NOTES`, and `LEGEND` are allowed on the storyboard sheet; timestamps are forbidden
|
|
47
49
|
- continuity: include previous shot handoff, next shot handoff, shared `visual_world`, screen direction, lighting, and action rhythm
|
|
48
50
|
|
|
49
51
|
The shot storyboard prompt must use the character sheet reference as the only identity source. Optional external storyboard guide images may inform composition and timing only.
|
|
@@ -62,6 +64,8 @@ Use it for composition, blocking, camera angle, action progression, visual rhyth
|
|
|
62
64
|
|
|
63
65
|
- Character identity always wins over storyboard character design.
|
|
64
66
|
- Storyboard text, labels, watermarks, logos, and panel borders are never copied into the video.
|
|
67
|
+
- If the brief contains a complete 1-12 numbered frame list, preserve the user's panel titles, action beats, and camera cues in the storyboard prompt.
|
|
68
|
+
- If the brief does not contain a complete frame list, generate a deterministic 12-beat sheet: start pose, shared intent, first motion, build action, camera shift, flow/contact, insert/detail, peak motion, breath/reaction, final approach, resolved emotion, success/final pose.
|
|
65
69
|
- One prompt may contain at most 4 storyboard phases by default.
|
|
66
70
|
- 5+ distinct storyboard phases must be split into multiple `SHOTNN.md` files.
|
|
67
71
|
- Do not assume start/end frame assets exist in `storyboard-reference` mode.
|
|
@@ -80,6 +84,9 @@ Seedance 2.0:
|
|
|
80
84
|
- The storyboard token is the complete visual/action/camera/choreography source and controls composition, blocking, camera direction, timing, action rhythm, framing variety, final pose, and phase order only.
|
|
81
85
|
- Follow all storyboard beats left-to-right, top-to-bottom. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose.
|
|
82
86
|
- Compress the full 12-beat default storyboard sheet into the requested duration as readable motion snapshots while preserving the duration-aware video phase budget.
|
|
87
|
+
- Include `[STORYBOARD 12-BEAT ORDER]` for default sheets and list Frame 001-012 with title, action, camera, and phase mapping.
|
|
88
|
+
- In multi-shot storyboard mode, render as 12 distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state.
|
|
89
|
+
- Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. For 8s+ videos, hold the final beat for the last 1.0 seconds; for shorter videos, hold it for the last 0.5 seconds.
|
|
83
90
|
- Treat storyboard arrows, labels, notes, lens notes, page headers, panel borders, and colored marks as planning annotations only; never render them into the video.
|
|
84
91
|
- Use explicit timeline phases when the storyboard has multiple beats.
|
|
85
92
|
- Use `No scene cuts throughout, one continuous shot` only for a true single uninterrupted camera move.
|
|
@@ -111,7 +118,7 @@ Each shot file contains:
|
|
|
111
118
|
- provider reference tokens
|
|
112
119
|
- GPT Image 2 storyboard prompt
|
|
113
120
|
- storyboard interpretation
|
|
114
|
-
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
121
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`, including `panel_beats`
|
|
115
122
|
- audio plan
|
|
116
123
|
- prompt bundle for requested models
|
|
117
124
|
- QA verdict
|
|
@@ -38,6 +38,9 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
38
38
|
- 7-10 seconds: 2-3 video phases
|
|
39
39
|
- 11-15 seconds: 3-4 video phases
|
|
40
40
|
- GPT Image 2 storyboard sheet defaults to 12 panels; explicit panel hints may request 1-12 panels
|
|
41
|
+
- default storyboard sheet uses `Frames 001-012` in a 4x3 grid
|
|
42
|
+
- every panel must have a visible frame label, short title, one action line, and `CAM:` line
|
|
43
|
+
- if the brief includes a full 1-12 frame list, preserve those titles/actions/camera cues; otherwise generate deterministic start-pose-to-final-pose beats
|
|
41
44
|
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
42
45
|
5. Build `visual_world`:
|
|
43
46
|
- environment
|
|
@@ -48,11 +51,14 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
48
51
|
6. Generate one GPT Image 2 storyboard prompt per shot:
|
|
49
52
|
- use character sheets as the only identity source
|
|
50
53
|
- use optional storyboard guide only for composition, blocking, camera, timing, and rhythm
|
|
51
|
-
- enforce white
|
|
54
|
+
- enforce cream/off-white paper, black-and-white rough graphite production storyboard artwork, and bold black frame borders; only annotation arrows/marks/notes may use color
|
|
55
|
+
- include `NOTES` and `LEGEND`; red movement arrows and blue notes are allowed as planning annotations only; no timestamps
|
|
52
56
|
- include previous shot handoff and next shot handoff
|
|
53
57
|
- preserve shared location, lighting, screen direction, action rhythm, and scene continuity
|
|
54
58
|
7. Build model prompt bundle:
|
|
55
59
|
- Seedance dynamic image mapping: character sheets first, generated shot storyboard next
|
|
60
|
+
- Seedance multi-shot prompts include `[STORYBOARD 12-BEAT ORDER]`, render 12 distinct micro-shots / fast motion snapshots, avoid smoothing into one generic action, and use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats
|
|
61
|
+
- Seedance continuous-shot prompts keep the same beat order inside one uninterrupted camera move and reserve `No scene cuts throughout` for true single-shot mode only
|
|
56
62
|
- Veo visual-planning prompt with full audio direction
|
|
57
63
|
- Kling block-structured storyboard route
|
|
58
64
|
8. Run QA gates:
|
|
@@ -37,13 +37,15 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
39
|
- storyboard sheet panel budget: default is 12 cinematic panels in one GPT Image 2 storyboard sheet; an explicit storyboard panel hint may request 1-12 panels
|
|
40
|
+
- structured panel beats: every storyboard prompt must carry a numbered panel beat plan with `Frame 001`-style IDs, short titles, action lines, `CAM:` lines, annotation cues, and phase mapping
|
|
40
41
|
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
42
|
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
43
|
- 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
|
|
43
44
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
44
|
-
- storyboard art grammar: white paper 16:9 production storyboard sheet, actual drawings black and white only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
|
+
- storyboard art grammar: cream/off-white paper 16:9 production storyboard sheet, 4x3 grid when using the default 12 panels, bold black frame borders, actual drawings black and white graphite only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
46
|
- hard negative style lock: do not create photorealistic cinematic stills, full-color rendered panels, concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration
|
|
46
|
-
- annotation grammar: red arrows =
|
|
47
|
+
- annotation grammar: annotations only may use color; red movement arrows = movement, blue notes = breath/camera/tempo cue, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
48
|
+
- visible sheet text: panel labels, short titles, one action line, `CAM:` line, `NOTES`, and `LEGEND` are allowed on the storyboard sheet; timestamps are forbidden
|
|
47
49
|
- continuity: include previous shot handoff, next shot handoff, shared `visual_world`, screen direction, lighting, and action rhythm
|
|
48
50
|
|
|
49
51
|
The shot storyboard prompt must use the character sheet reference as the only identity source. Optional external storyboard guide images may inform composition and timing only.
|
|
@@ -62,6 +64,8 @@ Use it for composition, blocking, camera angle, action progression, visual rhyth
|
|
|
62
64
|
|
|
63
65
|
- Character identity always wins over storyboard character design.
|
|
64
66
|
- Storyboard text, labels, watermarks, logos, and panel borders are never copied into the video.
|
|
67
|
+
- If the brief contains a complete 1-12 numbered frame list, preserve the user's panel titles, action beats, and camera cues in the storyboard prompt.
|
|
68
|
+
- If the brief does not contain a complete frame list, generate a deterministic 12-beat sheet: start pose, shared intent, first motion, build action, camera shift, flow/contact, insert/detail, peak motion, breath/reaction, final approach, resolved emotion, success/final pose.
|
|
65
69
|
- One prompt may contain at most 4 storyboard phases by default.
|
|
66
70
|
- 5+ distinct storyboard phases must be split into multiple `SHOTNN.md` files.
|
|
67
71
|
- Do not assume start/end frame assets exist in `storyboard-reference` mode.
|
|
@@ -80,6 +84,9 @@ Seedance 2.0:
|
|
|
80
84
|
- The storyboard token is the complete visual/action/camera/choreography source and controls composition, blocking, camera direction, timing, action rhythm, framing variety, final pose, and phase order only.
|
|
81
85
|
- Follow all storyboard beats left-to-right, top-to-bottom. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose.
|
|
82
86
|
- Compress the full 12-beat default storyboard sheet into the requested duration as readable motion snapshots while preserving the duration-aware video phase budget.
|
|
87
|
+
- Include `[STORYBOARD 12-BEAT ORDER]` for default sheets and list Frame 001-012 with title, action, camera, and phase mapping.
|
|
88
|
+
- In multi-shot storyboard mode, render as 12 distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state.
|
|
89
|
+
- Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. For 8s+ videos, hold the final beat for the last 1.0 seconds; for shorter videos, hold it for the last 0.5 seconds.
|
|
83
90
|
- Treat storyboard arrows, labels, notes, lens notes, page headers, panel borders, and colored marks as planning annotations only; never render them into the video.
|
|
84
91
|
- Use explicit timeline phases when the storyboard has multiple beats.
|
|
85
92
|
- Use `No scene cuts throughout, one continuous shot` only for a true single uninterrupted camera move.
|
|
@@ -111,7 +118,7 @@ Each shot file contains:
|
|
|
111
118
|
- provider reference tokens
|
|
112
119
|
- GPT Image 2 storyboard prompt
|
|
113
120
|
- storyboard interpretation
|
|
114
|
-
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
121
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`, including `panel_beats`
|
|
115
122
|
- audio plan
|
|
116
123
|
- prompt bundle for requested models
|
|
117
124
|
- QA verdict
|
|
@@ -38,6 +38,9 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
38
38
|
- 7-10 seconds: 2-3 video phases
|
|
39
39
|
- 11-15 seconds: 3-4 video phases
|
|
40
40
|
- GPT Image 2 storyboard sheet defaults to 12 panels; explicit panel hints may request 1-12 panels
|
|
41
|
+
- default storyboard sheet uses `Frames 001-012` in a 4x3 grid
|
|
42
|
+
- every panel must have a visible frame label, short title, one action line, and `CAM:` line
|
|
43
|
+
- if the brief includes a full 1-12 frame list, preserve those titles/actions/camera cues; otherwise generate deterministic start-pose-to-final-pose beats
|
|
41
44
|
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
42
45
|
5. Build `visual_world`:
|
|
43
46
|
- environment
|
|
@@ -48,11 +51,14 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
48
51
|
6. Generate one GPT Image 2 storyboard prompt per shot:
|
|
49
52
|
- use character sheets as the only identity source
|
|
50
53
|
- use optional storyboard guide only for composition, blocking, camera, timing, and rhythm
|
|
51
|
-
- enforce white
|
|
54
|
+
- enforce cream/off-white paper, black-and-white rough graphite production storyboard artwork, and bold black frame borders; only annotation arrows/marks/notes may use color
|
|
55
|
+
- include `NOTES` and `LEGEND`; red movement arrows and blue notes are allowed as planning annotations only; no timestamps
|
|
52
56
|
- include previous shot handoff and next shot handoff
|
|
53
57
|
- preserve shared location, lighting, screen direction, action rhythm, and scene continuity
|
|
54
58
|
7. Build model prompt bundle:
|
|
55
59
|
- Seedance dynamic image mapping: character sheets first, generated shot storyboard next
|
|
60
|
+
- Seedance multi-shot prompts include `[STORYBOARD 12-BEAT ORDER]`, render 12 distinct micro-shots / fast motion snapshots, avoid smoothing into one generic action, and use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats
|
|
61
|
+
- Seedance continuous-shot prompts keep the same beat order inside one uninterrupted camera move and reserve `No scene cuts throughout` for true single-shot mode only
|
|
56
62
|
- Veo visual-planning prompt with full audio direction
|
|
57
63
|
- Kling block-structured storyboard route
|
|
58
64
|
8. Run QA gates:
|
|
@@ -37,13 +37,15 @@ For each shot, generate a professional GPT Image 2 storyboard prompt:
|
|
|
37
37
|
- provider: `gpt-image-2`
|
|
38
38
|
- aspect ratio: `16:9`
|
|
39
39
|
- storyboard sheet panel budget: default is 12 cinematic panels in one GPT Image 2 storyboard sheet; an explicit storyboard panel hint may request 1-12 panels
|
|
40
|
+
- structured panel beats: every storyboard prompt must carry a numbered panel beat plan with `Frame 001`-style IDs, short titles, action lines, `CAM:` lines, annotation cues, and phase mapping
|
|
40
41
|
- video phase budget: 4-6s = 1-2 phases, 7-10s = 2-3 phases, 11-15s = 3-4 phases
|
|
41
42
|
- hard cap: max 4 video phases per shot unless the configured project cap is lower
|
|
42
43
|
- 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
|
|
43
44
|
- target detail: dense professional storyboard direction, concrete blocking and camera language, no decorative prose
|
|
44
|
-
- storyboard art grammar: white paper 16:9 production storyboard sheet, actual drawings black and white only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
|
+
- storyboard art grammar: cream/off-white paper 16:9 production storyboard sheet, 4x3 grid when using the default 12 panels, bold black frame borders, actual drawings black and white graphite only, rough pencil lines, minimal detail, fast gesture drawing energy, simple anatomy construction, strong silhouette readability, unfinished previsualization feel
|
|
45
46
|
- hard negative style lock: do not create photorealistic cinematic stills, full-color rendered panels, concept art, movie frames, underwater/color-grade panels, 3D render, anime, CGI, or polished illustration
|
|
46
|
-
- annotation grammar: red arrows =
|
|
47
|
+
- annotation grammar: annotations only may use color; red movement arrows = movement, blue notes = breath/camera/tempo cue, green marks = framing/composition, orange marks = lighting direction, purple marks = vocal/emotional emphasis, black text = very short lens notes and panel labels
|
|
48
|
+
- visible sheet text: panel labels, short titles, one action line, `CAM:` line, `NOTES`, and `LEGEND` are allowed on the storyboard sheet; timestamps are forbidden
|
|
47
49
|
- continuity: include previous shot handoff, next shot handoff, shared `visual_world`, screen direction, lighting, and action rhythm
|
|
48
50
|
|
|
49
51
|
The shot storyboard prompt must use the character sheet reference as the only identity source. Optional external storyboard guide images may inform composition and timing only.
|
|
@@ -62,6 +64,8 @@ Use it for composition, blocking, camera angle, action progression, visual rhyth
|
|
|
62
64
|
|
|
63
65
|
- Character identity always wins over storyboard character design.
|
|
64
66
|
- Storyboard text, labels, watermarks, logos, and panel borders are never copied into the video.
|
|
67
|
+
- If the brief contains a complete 1-12 numbered frame list, preserve the user's panel titles, action beats, and camera cues in the storyboard prompt.
|
|
68
|
+
- If the brief does not contain a complete frame list, generate a deterministic 12-beat sheet: start pose, shared intent, first motion, build action, camera shift, flow/contact, insert/detail, peak motion, breath/reaction, final approach, resolved emotion, success/final pose.
|
|
65
69
|
- One prompt may contain at most 4 storyboard phases by default.
|
|
66
70
|
- 5+ distinct storyboard phases must be split into multiple `SHOTNN.md` files.
|
|
67
71
|
- Do not assume start/end frame assets exist in `storyboard-reference` mode.
|
|
@@ -80,6 +84,9 @@ Seedance 2.0:
|
|
|
80
84
|
- The storyboard token is the complete visual/action/camera/choreography source and controls composition, blocking, camera direction, timing, action rhythm, framing variety, final pose, and phase order only.
|
|
81
85
|
- Follow all storyboard beats left-to-right, top-to-bottom. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose.
|
|
82
86
|
- Compress the full 12-beat default storyboard sheet into the requested duration as readable motion snapshots while preserving the duration-aware video phase budget.
|
|
87
|
+
- Include `[STORYBOARD 12-BEAT ORDER]` for default sheets and list Frame 001-012 with title, action, camera, and phase mapping.
|
|
88
|
+
- In multi-shot storyboard mode, render as 12 distinct micro-shots / fast motion snapshots. Do not smooth the storyboard into one continuous generic action. Each beat must visibly change pose, camera framing, and movement state.
|
|
89
|
+
- Use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats. For 8s+ videos, hold the final beat for the last 1.0 seconds; for shorter videos, hold it for the last 0.5 seconds.
|
|
83
90
|
- Treat storyboard arrows, labels, notes, lens notes, page headers, panel borders, and colored marks as planning annotations only; never render them into the video.
|
|
84
91
|
- Use explicit timeline phases when the storyboard has multiple beats.
|
|
85
92
|
- Use `No scene cuts throughout, one continuous shot` only for a true single uninterrupted camera move.
|
|
@@ -111,7 +118,7 @@ Each shot file contains:
|
|
|
111
118
|
- provider reference tokens
|
|
112
119
|
- GPT Image 2 storyboard prompt
|
|
113
120
|
- storyboard interpretation
|
|
114
|
-
- storyboard_creation metadata in `SHOTNN.bundle.json`
|
|
121
|
+
- storyboard_creation metadata in `SHOTNN.bundle.json`, including `panel_beats`
|
|
115
122
|
- audio plan
|
|
116
123
|
- prompt bundle for requested models
|
|
117
124
|
- QA verdict
|
|
@@ -38,6 +38,9 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
38
38
|
- 7-10 seconds: 2-3 video phases
|
|
39
39
|
- 11-15 seconds: 3-4 video phases
|
|
40
40
|
- GPT Image 2 storyboard sheet defaults to 12 panels; explicit panel hints may request 1-12 panels
|
|
41
|
+
- default storyboard sheet uses `Frames 001-012` in a 4x3 grid
|
|
42
|
+
- every panel must have a visible frame label, short title, one action line, and `CAM:` line
|
|
43
|
+
- if the brief includes a full 1-12 frame list, preserve those titles/actions/camera cues; otherwise generate deterministic start-pose-to-final-pose beats
|
|
41
44
|
- 5+ distinct real video phases, scene changes, or location/action blocks: split into multiple `SHOTNN.md` files
|
|
42
45
|
5. Build `visual_world`:
|
|
43
46
|
- environment
|
|
@@ -48,11 +51,14 @@ description: Generate character sheet prompts, per-shot GPT Image 2 storyboard p
|
|
|
48
51
|
6. Generate one GPT Image 2 storyboard prompt per shot:
|
|
49
52
|
- use character sheets as the only identity source
|
|
50
53
|
- use optional storyboard guide only for composition, blocking, camera, timing, and rhythm
|
|
51
|
-
- enforce white
|
|
54
|
+
- enforce cream/off-white paper, black-and-white rough graphite production storyboard artwork, and bold black frame borders; only annotation arrows/marks/notes may use color
|
|
55
|
+
- include `NOTES` and `LEGEND`; red movement arrows and blue notes are allowed as planning annotations only; no timestamps
|
|
52
56
|
- include previous shot handoff and next shot handoff
|
|
53
57
|
- preserve shared location, lighting, screen direction, action rhythm, and scene continuity
|
|
54
58
|
7. Build model prompt bundle:
|
|
55
59
|
- Seedance dynamic image mapping: character sheets first, generated shot storyboard next
|
|
60
|
+
- Seedance multi-shot prompts include `[STORYBOARD 12-BEAT ORDER]`, render 12 distinct micro-shots / fast motion snapshots, avoid smoothing into one generic action, and use quick cuts, match cuts, whip transitions, and motivated camera jumps between beats
|
|
61
|
+
- Seedance continuous-shot prompts keep the same beat order inside one uninterrupted camera move and reserve `No scene cuts throughout` for true single-shot mode only
|
|
56
62
|
- Veo visual-planning prompt with full audio direction
|
|
57
63
|
- Kling block-structured storyboard route
|
|
58
64
|
8. Run QA gates:
|