@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 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-panel raw-pencil GPT Image 2 storyboard prompt
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-panel raw-pencil storyboard prompt and Seedance video prompt package only. No ILK/SON frames. No rendering yet.
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 pencil drawings, strong silhouettes, visible body/camera momentum, cinematic camera variety, and color-coded planning annotations only. Hard negatives block photorealistic stills, full-color rendered panels, concept-art strips, CGI, anime, and polished illustration.
305
- - 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.
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 ${input.storyboardImagePrompt.panelCount} beats sequentially from left-to-right, top-to-bottom as the exact visual beat order within one uninterrupted camera move. Do not reinterpret pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose. Compress the full ${input.storyboardImagePrompt.panelCount}-beat sequence into the requested duration as fast readable motion snapshots, not full-length actions. No scene cuts throughout, one continuous shot.`
60
- : `Use the generated storyboard reference ${storyboardToken} as the complete visual/action/camera/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 pose, action, camera angle, emotional progression, framing variety, movement logic, shot order, or final pose. Compress the full ${input.storyboardImagePrompt.panelCount}-beat sequence into the requested 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.`;
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 && /storyboard-motivated cuts/i.test(output.promptText),
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}. White paper production layout. 16:9 storyboard sheet, ${panelLabel}. Use exactly ${panelLabel}. The storyboard controls composition, blocking, camera direction, timing, phase order, action rhythm, and emotional progression only. ${externalGuideText}
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
- Storyboard drawing style: raw contemporary production storyboard with black-and-white rough pencil linework. 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.
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 panel actions: ${phaseDirection}
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 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.
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: "body movement",
338
- blue: "camera movement",
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: "body movement";
161
- blue: "camera movement";
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 = 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
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-paper, black-and-white rough pencil production storyboard artwork; only annotation arrows/marks may use color
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.7",
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 = 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
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-paper, black-and-white rough pencil production storyboard artwork; only annotation arrows/marks may use color
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 = 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
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-paper, black-and-white rough pencil production storyboard artwork; only annotation arrows/marks may use color
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 = 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
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-paper, black-and-white rough pencil production storyboard artwork; only annotation arrows/marks may use color
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 = 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
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-paper, black-and-white rough pencil production storyboard artwork; only annotation arrows/marks may use color
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 = 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
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-paper, black-and-white rough pencil production storyboard artwork; only annotation arrows/marks may use color
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: