@sogni-ai/sogni-intelligence-client 2.2.0 → 2.2.2
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/dist/public-skill-runtime/index.d.ts.map +1 -1
- package/dist/public-skill-runtime/index.js +138 -20
- package/dist/public-skill-runtime/index.js.map +1 -1
- package/dist/tools/shared/seedancePolicyErrors.d.ts +1 -0
- package/dist/tools/shared/seedancePolicyErrors.d.ts.map +1 -1
- package/dist/tools/shared/seedancePolicyErrors.js +14 -1
- package/dist/tools/shared/seedancePolicyErrors.js.map +1 -1
- package/dist-esm/public-skill-runtime/index.js +138 -20
- package/dist-esm/public-skill-runtime/index.js.map +1 -1
- package/dist-esm/tools/shared/seedancePolicyErrors.js +13 -0
- package/dist-esm/tools/shared/seedancePolicyErrors.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ export declare const SEEDANCE_INPUT_IMAGE_PRIVACY_POLICY_CODE = "InputImageSensi
|
|
|
3
3
|
export declare const SEEDANCE_REAL_PERSON_PRIVACY_MESSAGE = "Seedance rejected the input image because it may contain a real person. Seedance Video currently doesn't allow photographic depictions of real people. Please use a non-real-person or more stylized reference image, or switch to another video model.";
|
|
4
4
|
export declare const SEEDANCE_PROVIDER_CONTENT_POLICY_MESSAGE = "Seedance blocked this video because it did not pass the provider's content policy. No video was returned.";
|
|
5
5
|
export declare const SEEDANCE_VENDOR_GENERATION_FAILED_MESSAGE = "Seedance couldn't complete this video after it started, so no media was generated. The provider did not return a specific reason. Please retry once; if it fails again, report the issue from this message.";
|
|
6
|
+
export declare const SEEDANCE_VENDOR_TIMEOUT_MESSAGE = "Seedance timed out while rendering this video, so no media was generated. Please retry once; if it times out again, report the issue from this message.";
|
|
6
7
|
export declare const SEEDANCE_REFERENCE_AUDIO_TOO_LONG_MESSAGE = "Seedance rejected the reference audio because it is longer than this video mode allows. Use an audio clip at or below the provider limit, or retry with the audio trimmed to that length.";
|
|
7
8
|
export interface SeedanceTerminalPolicyPayload {
|
|
8
9
|
error: 'seedance_input_image_privacy_policy' | 'seedance_content_policy';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seedancePolicyErrors.d.ts","sourceRoot":"","sources":["../../../src/tools/shared/seedancePolicyErrors.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,wCAAwC,0DACI,CAAC;AAE1D,eAAO,MAAM,oCAAoC,4PAC0M,CAAC;AAE5P,eAAO,MAAM,wCAAwC,8GACwD,CAAC;AAE9G,eAAO,MAAM,yCAAyC,gNACyJ,CAAC;
|
|
1
|
+
{"version":3,"file":"seedancePolicyErrors.d.ts","sourceRoot":"","sources":["../../../src/tools/shared/seedancePolicyErrors.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,wCAAwC,0DACI,CAAC;AAE1D,eAAO,MAAM,oCAAoC,4PAC0M,CAAC;AAE5P,eAAO,MAAM,wCAAwC,8GACwD,CAAC;AAE9G,eAAO,MAAM,yCAAyC,gNACyJ,CAAC;AAChN,eAAO,MAAM,+BAA+B,4JAC+G,CAAC;AAE5J,eAAO,MAAM,yCAAyC,8LACuI,CAAC;AAE9L,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,qCAAqC,GAAG,yBAAyB,CAAC;IACzE,OAAO,EAAE,OAAO,oCAAoC,GAAG,OAAO,wCAAwC,CAAC;IACvG,WAAW,EAAE,0BAA0B,CAAC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,eAAe,EAAE,OAAO,wCAAwC,GAAG,MAAM,CAAC;CAC3E;AAED,MAAM,WAAW,wCAAwC;IACvD,KAAK,EAAE,4BAA4B,GAAG,mCAAmC,CAAC;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,0BAA0B,CAAC;IACxC,UAAU,EAAE,eAAe,CAAC;IAC5B,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;gBAEpC,OAAO,EAAE,6BAA6B;CAKnD;AA0JD,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,OAAO,GACb,6BAA6B,GAAG,IAAI,CAgCtC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,2BAA2B,GAAG,IAAI,CAGpC;AAED,wBAAgB,iDAAiD,CAC/D,KAAK,EAAE,OAAO,GACb,wCAAwC,GAAG,iCAAiC,GAAG,IAAI,CAwFrF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SeedanceTerminalPolicyError = exports.SEEDANCE_REFERENCE_AUDIO_TOO_LONG_MESSAGE = exports.SEEDANCE_VENDOR_GENERATION_FAILED_MESSAGE = exports.SEEDANCE_PROVIDER_CONTENT_POLICY_MESSAGE = exports.SEEDANCE_REAL_PERSON_PRIVACY_MESSAGE = exports.SEEDANCE_INPUT_IMAGE_PRIVACY_POLICY_CODE = void 0;
|
|
3
|
+
exports.SeedanceTerminalPolicyError = exports.SEEDANCE_REFERENCE_AUDIO_TOO_LONG_MESSAGE = exports.SEEDANCE_VENDOR_TIMEOUT_MESSAGE = exports.SEEDANCE_VENDOR_GENERATION_FAILED_MESSAGE = exports.SEEDANCE_PROVIDER_CONTENT_POLICY_MESSAGE = exports.SEEDANCE_REAL_PERSON_PRIVACY_MESSAGE = exports.SEEDANCE_INPUT_IMAGE_PRIVACY_POLICY_CODE = void 0;
|
|
4
4
|
exports.seedanceTerminalPolicyPayloadFromError = seedanceTerminalPolicyPayloadFromError;
|
|
5
5
|
exports.seedanceTerminalPolicyErrorFromError = seedanceTerminalPolicyErrorFromError;
|
|
6
6
|
exports.seedanceTerminalGenerationFailurePayloadFromError = seedanceTerminalGenerationFailurePayloadFromError;
|
|
@@ -9,6 +9,7 @@ exports.SEEDANCE_INPUT_IMAGE_PRIVACY_POLICY_CODE = 'InputImageSensitiveContentDe
|
|
|
9
9
|
exports.SEEDANCE_REAL_PERSON_PRIVACY_MESSAGE = "Seedance rejected the input image because it may contain a real person. Seedance Video currently doesn't allow photographic depictions of real people. Please use a non-real-person or more stylized reference image, or switch to another video model.";
|
|
10
10
|
exports.SEEDANCE_PROVIDER_CONTENT_POLICY_MESSAGE = "Seedance blocked this video because it did not pass the provider's content policy. No video was returned.";
|
|
11
11
|
exports.SEEDANCE_VENDOR_GENERATION_FAILED_MESSAGE = "Seedance couldn't complete this video after it started, so no media was generated. The provider did not return a specific reason. Please retry once; if it fails again, report the issue from this message.";
|
|
12
|
+
exports.SEEDANCE_VENDOR_TIMEOUT_MESSAGE = "Seedance timed out while rendering this video, so no media was generated. Please retry once; if it times out again, report the issue from this message.";
|
|
12
13
|
exports.SEEDANCE_REFERENCE_AUDIO_TOO_LONG_MESSAGE = 'Seedance rejected the reference audio because it is longer than this video mode allows. Use an audio clip at or below the provider limit, or retry with the audio trimmed to that length.';
|
|
13
14
|
class SeedanceTerminalPolicyError extends Error {
|
|
14
15
|
constructor(payload) {
|
|
@@ -226,6 +227,18 @@ function seedanceTerminalGenerationFailurePayloadFromError(error) {
|
|
|
226
227
|
vendorError: shaped.vendorMessage.slice(0, 500),
|
|
227
228
|
};
|
|
228
229
|
}
|
|
230
|
+
if (/\b(?:timed?\s*out|timeout|deadline\s+exceeded)\b/i.test(text)) {
|
|
231
|
+
return {
|
|
232
|
+
error: 'seedance_generation_failed',
|
|
233
|
+
message: exports.SEEDANCE_VENDOR_TIMEOUT_MESSAGE,
|
|
234
|
+
retryPolicy: 'manual_user_confirmation',
|
|
235
|
+
nextAction: 'wait_for_user',
|
|
236
|
+
reportIssue: true,
|
|
237
|
+
reportIssueReason: 'Seedance provider job timed out after starting.',
|
|
238
|
+
vendorErrorCode: 'PROVIDER_TIMEOUT',
|
|
239
|
+
...(text ? { vendorError: text.slice(0, 500) } : {}),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
229
242
|
return {
|
|
230
243
|
error: 'seedance_generation_failed',
|
|
231
244
|
message: exports.SEEDANCE_VENDOR_GENERATION_FAILED_MESSAGE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seedancePolicyErrors.js","sourceRoot":"","sources":["../../../src/tools/shared/seedancePolicyErrors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"seedancePolicyErrors.js","sourceRoot":"","sources":["../../../src/tools/shared/seedancePolicyErrors.ts"],"names":[],"mappings":"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"}
|
|
@@ -3006,8 +3006,13 @@ function applyStoryboardPlanningLayoutContract(fallback, contract, frameCount, u
|
|
|
3006
3006
|
?? cellAspectRatio
|
|
3007
3007
|
?? fallback.targetVideoAspectRatio;
|
|
3008
3008
|
const layout = describeStoryboardLayout(boardAspectRatio, cellAspectRatio, frameCount);
|
|
3009
|
-
const
|
|
3009
|
+
const contractBoardDimensions = contractOwnsCanvas
|
|
3010
3010
|
? normalizeStoryboardBoardDimensions(layoutContract.boardDimensions)
|
|
3011
|
+
: null;
|
|
3012
|
+
const boardDimensions = contractOwnsCanvas
|
|
3013
|
+
? (storyboardBoardDimensionsMatchAspect(contractBoardDimensions, boardAspectRatio)
|
|
3014
|
+
? contractBoardDimensions
|
|
3015
|
+
: null)
|
|
3011
3016
|
?? (userDefinedCanvas ? fallback.boardDimensions : undefined)
|
|
3012
3017
|
: fallback.boardDimensions;
|
|
3013
3018
|
return {
|
|
@@ -3018,6 +3023,27 @@ function applyStoryboardPlanningLayoutContract(fallback, contract, frameCount, u
|
|
|
3018
3023
|
...(boardDimensions ? { boardDimensions } : {}),
|
|
3019
3024
|
};
|
|
3020
3025
|
}
|
|
3026
|
+
function storyboardBoardDimensionsMatchAspect(boardDimensions, boardAspectRatio) {
|
|
3027
|
+
if (!boardDimensions)
|
|
3028
|
+
return false;
|
|
3029
|
+
const match = boardDimensions.match(/^(\d+)x(\d+)$/i);
|
|
3030
|
+
if (!match)
|
|
3031
|
+
return false;
|
|
3032
|
+
const width = Number(match[1]);
|
|
3033
|
+
const height = Number(match[2]);
|
|
3034
|
+
if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0)
|
|
3035
|
+
return false;
|
|
3036
|
+
const normalized = normalizeAspectRatio(boardAspectRatio);
|
|
3037
|
+
const targetPair = normalized ? parseAspectRatioPair(normalized) : null;
|
|
3038
|
+
if (!targetPair)
|
|
3039
|
+
return true;
|
|
3040
|
+
const targetRatio = targetPair.width / targetPair.height;
|
|
3041
|
+
const actualRatio = width / height;
|
|
3042
|
+
if (!Number.isFinite(targetRatio) || targetRatio <= 0)
|
|
3043
|
+
return true;
|
|
3044
|
+
const ratioError = Math.abs(actualRatio - targetRatio) / targetRatio;
|
|
3045
|
+
return ratioError <= 0.1;
|
|
3046
|
+
}
|
|
3021
3047
|
export function inferStoryboardLayoutSpec(userIntentText, frameCount, planningContract) {
|
|
3022
3048
|
const planningLayout = planningContract?.layout;
|
|
3023
3049
|
const userDefinedCanvas = typeof planningLayout?.storyboardCanvasSpecifiedByUser === 'boolean'
|
|
@@ -3461,6 +3487,7 @@ function extractStoryboardRequiredText(text) {
|
|
|
3461
3487
|
const inlineProductionLabelPattern = /\b(?:SFX|FX|Audio(?:\s*\/\s*SFX)?|Sound(?:s)?|Music|Foley|Camera(?:\s*\/\s*Motion)?|Motion|Lighting(?:\s*\/\s*Style)?|Style|Transition|Action(?:\s*\/\s*Motion)?|Performance|Beat)\s*:\s*[^a-z0-9]{0,4}$/i;
|
|
3462
3488
|
const visibleTextContextPattern = /\b(?:visible|on[-\s]?screen|in[-\s]?frame|text|copy|cta|tagline|headline|title\s+card|caption|subtitle|super|wordmark|spell(?:ed)?|read(?:s)?|slogan)\b/i;
|
|
3463
3489
|
const sceneHeadingPattern = /^\s*(?:[-*+]\s*)?(?:#{1,6}\s*)?(?:[*_]{1,3})?\s*(?:Scene|Shot|Beat|Panel|Frame)[\s_#-]*\d{1,2}\b/i;
|
|
3490
|
+
const visibleTextRestrictionPattern = /\b(?:only\s+(?:text|copy|words?)|no\s+(?:captions?|subtitles?|overlays?|watermarks?|added\s+logos?|extra\s+logos?|logos?|text|copy)|without\s+(?:captions?|subtitles?|overlays?|watermarks?|added\s+logos?|extra\s+logos?|logos?|text|copy)|do\s+not\s+(?:add|include|render|show|write)\s+(?:captions?|subtitles?|overlays?|watermarks?|logos?|text|copy|words?))\b/i;
|
|
3464
3491
|
const shouldIgnoreRequiredText = (value, matchIndex, precedingText) => {
|
|
3465
3492
|
const lineStart = text.lastIndexOf('\n', matchIndex) + 1;
|
|
3466
3493
|
const nextLineBreak = text.indexOf('\n', matchIndex);
|
|
@@ -3471,6 +3498,9 @@ function extractStoryboardRequiredText(text) {
|
|
|
3471
3498
|
const isProductionDirectionField = /\b(?:action|motion|camera|transition|audio|sfx|fx|foley|sound|music|lighting|style|performance|beat)\b/i.test(fieldLabel)
|
|
3472
3499
|
&& !visibleTextContextPattern.test(fieldLabel);
|
|
3473
3500
|
const hasExplicitVisibleTextContext = visibleTextContextPattern.test(line);
|
|
3501
|
+
const isRestrictionOnlyTextInstruction = visibleTextContextPattern.test(fieldLabel || line)
|
|
3502
|
+
&& visibleTextRestrictionPattern.test(value)
|
|
3503
|
+
&& !/["“”`]/.test(value);
|
|
3474
3504
|
const looksLikeActionOrSfxCallout = /^[a-z][a-z-]{1,24}[!?.]?$/i.test(value.trim())
|
|
3475
3505
|
&& /\b(?:action|motion|transition|audio|sfx|fx|foley|sound|music|camera|performance|beat|pop(?:s|ped|ping)?|snap(?:s|ped|ping)?|whoosh(?:es)?|thud(?:s|ded|ding)?|ding(?:s|ed|ing)?|boom(?:s|ed|ing)?|impact(?:s|ed|ing)?|hit(?:s|ting)?|slam(?:s|med|ming)?|wipe(?:s|d|ing)?|glitch(?:es|ed|ing)?|morph(?:s|ed|ing)?|bounce(?:s|d|ing)?|zoom(?:s|ed|ing)?)\b/i.test(line);
|
|
3476
3506
|
const precedingTail = (precedingText ?? '').slice(-80);
|
|
@@ -3490,6 +3520,9 @@ function extractStoryboardRequiredText(text) {
|
|
|
3490
3520
|
if (isNestedSceneHeadingField) {
|
|
3491
3521
|
return true;
|
|
3492
3522
|
}
|
|
3523
|
+
if (isRestrictionOnlyTextInstruction) {
|
|
3524
|
+
return true;
|
|
3525
|
+
}
|
|
3493
3526
|
if (hasInlineProductionLabel) {
|
|
3494
3527
|
return true;
|
|
3495
3528
|
}
|
|
@@ -3663,13 +3696,29 @@ function selectStoryboardSourceBrief(prompt, userIntentText) {
|
|
|
3663
3696
|
}
|
|
3664
3697
|
return promptCore || priorBrief || cleanUserIntentText.trim();
|
|
3665
3698
|
}
|
|
3699
|
+
function selectStoryboardSourceBriefForCompile(options, userIntentText) {
|
|
3700
|
+
const selectedBrief = selectStoryboardSourceBrief(options.prompt, userIntentText);
|
|
3701
|
+
if (options.promptAuthorship !== 'assistant')
|
|
3702
|
+
return selectedBrief;
|
|
3703
|
+
const cleanUserIntentText = cleanStoryboardNarrativeSourceText(userIntentText);
|
|
3704
|
+
const selectedSectionCount = splitStoryboardSections(selectedBrief).length;
|
|
3705
|
+
const userSectionCount = splitStoryboardSections(cleanUserIntentText).length;
|
|
3706
|
+
const userBriefHasRequestedSceneCount = options.frameCount
|
|
3707
|
+
? userSectionCount === options.frameCount
|
|
3708
|
+
: userSectionCount > 0;
|
|
3709
|
+
if (userBriefHasRequestedSceneCount
|
|
3710
|
+
&& userSectionCount > selectedSectionCount) {
|
|
3711
|
+
return cleanUserIntentText;
|
|
3712
|
+
}
|
|
3713
|
+
return selectedBrief;
|
|
3714
|
+
}
|
|
3666
3715
|
function storyboardBriefContains(haystack, needle) {
|
|
3667
3716
|
const haystackKey = normalizeStoryboardBriefKey(haystack);
|
|
3668
3717
|
const needleKey = normalizeStoryboardBriefKey(needle);
|
|
3669
3718
|
return !!needleKey && haystackKey.includes(needleKey);
|
|
3670
3719
|
}
|
|
3671
3720
|
function buildStoryboardSourceBriefForPrompt(prompt, userIntentText, approvedScriptContext, promptAuthorship) {
|
|
3672
|
-
const selectedBrief =
|
|
3721
|
+
const selectedBrief = selectStoryboardSourceBriefForCompile({ prompt, promptAuthorship, frameCount: undefined }, userIntentText);
|
|
3673
3722
|
const originalBrief = latestSubstantiveStoryboardUserBrief(userIntentText, selectedBrief);
|
|
3674
3723
|
const canonicalApprovedScriptContext = canonicalStoryboardScriptContext(approvedScriptContext);
|
|
3675
3724
|
const includeSelectedBrief = selectedBrief && !(promptAuthorship === 'assistant' && canonicalApprovedScriptContext);
|
|
@@ -3731,7 +3780,8 @@ function extractStoryboardField(section, labels) {
|
|
|
3731
3780
|
function removeStoryboardTimingText(value) {
|
|
3732
3781
|
return value
|
|
3733
3782
|
.replace(/\b\d{1,2}:\d{2}(?:\.\d+)?\s*(?:-|to|\u2013|\u2014)\s*\d{1,2}:\d{2}(?:\.\d+)?\b/gi, ' ')
|
|
3734
|
-
.replace(/\b\d{1,3}(?:\.\d+)?\s*(?:s|sec|secs|seconds?)
|
|
3783
|
+
.replace(/\b\d{1,3}(?:\.\d+)?\s*(?:s|sec|secs|seconds?)\s*(?:-|to|\u2013|\u2014)\s*\d{1,3}(?:\.\d+)?\s*(?:s|sec|secs|seconds?)\b/gi, ' ')
|
|
3784
|
+
.replace(/\b\d{1,3}(?:\.\d+)?(?:-|\u2013|\u2014)\d{1,3}(?:\.\d+)?\s*(?:s|sec|secs|seconds?)\b/gi, ' ')
|
|
3735
3785
|
.replace(/\(\s*\)|\[\s*\]/g, ' ')
|
|
3736
3786
|
.replace(/\s*[|]\s*/g, ' ')
|
|
3737
3787
|
.replace(/^[-:.\s|]+|[-:.\s|]+$/g, ' ')
|
|
@@ -3805,20 +3855,29 @@ function parseStoryboardTimeValue(value) {
|
|
|
3805
3855
|
return Number.isFinite(numeric) ? numeric : null;
|
|
3806
3856
|
}
|
|
3807
3857
|
function extractStoryboardTiming(text) {
|
|
3808
|
-
const
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
startSec
|
|
3819
|
-
endSec
|
|
3820
|
-
|
|
3821
|
-
|
|
3858
|
+
const patterns = [
|
|
3859
|
+
/(\d{1,2}:\d{1,2}(?:\.\d+)?)\s*(?:-|to|\u2013|\u2014)\s*(\d{1,2}:\d{1,2}(?:\.\d+)?)/i,
|
|
3860
|
+
/(\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)\s*(?:-|to|\u2013|\u2014)\s*(\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)/i,
|
|
3861
|
+
/(\d{1,3}(?:\.\d+)?)(?:-|\u2013|\u2014)(\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)/i,
|
|
3862
|
+
/(\d{1,2}:\d{1,2}(?:\.\d+)?|\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)?\s*(?:-|to|\u2013|\u2014)\s*(\d{1,2}:\d{1,2}(?:\.\d+)?|\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)?/i,
|
|
3863
|
+
];
|
|
3864
|
+
for (const pattern of patterns) {
|
|
3865
|
+
const match = text.match(pattern);
|
|
3866
|
+
if (!match)
|
|
3867
|
+
continue;
|
|
3868
|
+
const startSec = parseStoryboardTimeValue(match[1]);
|
|
3869
|
+
const endSec = parseStoryboardTimeValue(match[2]);
|
|
3870
|
+
if (startSec === null || endSec === null)
|
|
3871
|
+
continue;
|
|
3872
|
+
if (!Number.isFinite(startSec) || !Number.isFinite(endSec) || endSec <= startSec)
|
|
3873
|
+
continue;
|
|
3874
|
+
return {
|
|
3875
|
+
startSec,
|
|
3876
|
+
endSec,
|
|
3877
|
+
durationSec: Math.round((endSec - startSec) * 100) / 100,
|
|
3878
|
+
};
|
|
3879
|
+
}
|
|
3880
|
+
return null;
|
|
3822
3881
|
}
|
|
3823
3882
|
function extractStoryboardTimingMarker(text) {
|
|
3824
3883
|
const match = text.match(/(\d{1,2}:\d{1,2}(?:\.\d+)?|\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)?\s*(?:-|to|\u2013|\u2014)\s*(\d{1,2}:\d{1,2}(?:\.\d+)?|\d{1,3}(?:\.\d+)?)\s*(?:s|sec|secs|seconds?)?/i);
|
|
@@ -4165,6 +4224,58 @@ function splitStoryboardSceneSections(text) {
|
|
|
4165
4224
|
};
|
|
4166
4225
|
}).filter(section => Number.isInteger(section.number) && section.number > 0);
|
|
4167
4226
|
}
|
|
4227
|
+
function splitStoryboardNumberedListSceneSections(text) {
|
|
4228
|
+
const headerPattern = /^[ \t]*(?:#{1,6}[ \t]*)?(?:[*_]{1,3})?(?:SCENES?|SHOTS?|BEATS?|PANELS?|FRAMES?|SHOT\s+LIST|SCENE\s+LIST)[ \t]*:[ \t]*(?:[*_]{1,3})?[ \t]*$/gim;
|
|
4229
|
+
const headerMatches = Array.from(text.matchAll(headerPattern));
|
|
4230
|
+
if (headerMatches.length === 0)
|
|
4231
|
+
return [];
|
|
4232
|
+
for (const headerMatch of headerMatches) {
|
|
4233
|
+
const blockStart = (headerMatch.index ?? 0) + headerMatch[0].length;
|
|
4234
|
+
const block = text.slice(blockStart);
|
|
4235
|
+
if (!block)
|
|
4236
|
+
continue;
|
|
4237
|
+
const allMatches = Array.from(block.matchAll(/^[ \t]*(\d{1,2})[ \t]*[.)][ \t]*([^\n]{0,220})/gim)).filter(match => {
|
|
4238
|
+
const value = Number(match[1]);
|
|
4239
|
+
return Number.isInteger(value) && value > 0;
|
|
4240
|
+
});
|
|
4241
|
+
const firstSceneIndex = allMatches.findIndex(match => Number(match[1]) === 1);
|
|
4242
|
+
const matches = [];
|
|
4243
|
+
for (let index = firstSceneIndex; index >= 0 && index < allMatches.length; index += 1) {
|
|
4244
|
+
const expected = matches.length + 1;
|
|
4245
|
+
if (Number(allMatches[index][1]) !== expected)
|
|
4246
|
+
break;
|
|
4247
|
+
matches.push(allMatches[index]);
|
|
4248
|
+
}
|
|
4249
|
+
if (matches.length < 2)
|
|
4250
|
+
continue;
|
|
4251
|
+
const sections = matches.map((match, index) => {
|
|
4252
|
+
const number = Number(match[1]);
|
|
4253
|
+
const lineStart = match.index ?? 0;
|
|
4254
|
+
const lineEnd = block.indexOf('\n', lineStart);
|
|
4255
|
+
const firstLineEnd = lineEnd >= 0 ? lineEnd : block.length;
|
|
4256
|
+
const firstLineRemainder = compactStoryboardLine(match[2]);
|
|
4257
|
+
const globalTailStart = firstLineEnd;
|
|
4258
|
+
const globalTailSection = block.slice(globalTailStart).search(/^\s{0,2}(?:CONSISTENCY|NEGATIVE(?:\s*\/\s*AVOID)?|AVOID|CRITICAL\s+REQUIREMENTS|REQUIREMENTS|NOTES|OUTPUT|REFERENCE\s+IMAGES|CANVAS\s*\/\s*LAYOUT)\s*:/im);
|
|
4259
|
+
const finalSceneEnd = globalTailSection >= 0
|
|
4260
|
+
? globalTailStart + globalTailSection
|
|
4261
|
+
: block.length;
|
|
4262
|
+
const nextStart = index + 1 < matches.length ? matches[index + 1].index ?? block.length : finalSceneEnd;
|
|
4263
|
+
const trailingBody = block.slice(firstLineEnd, nextStart).trim();
|
|
4264
|
+
const titleDescription = firstLineRemainder.match(/^(.{1,80}?)(?:\s+[–—-]\s+|\s*:\s+)([\s\S]{12,})$/);
|
|
4265
|
+
const title = compactStoryboardLine(titleDescription?.[1] || firstLineRemainder, `Scene ${String(number).padStart(2, '0')}`);
|
|
4266
|
+
const firstBodyLine = compactStoryboardLine(titleDescription?.[2] || firstLineRemainder);
|
|
4267
|
+
const body = [firstBodyLine, trailingBody].filter(Boolean).join('\n').trim();
|
|
4268
|
+
return {
|
|
4269
|
+
number,
|
|
4270
|
+
heading: `Scene ${number} - ${title}`,
|
|
4271
|
+
body,
|
|
4272
|
+
};
|
|
4273
|
+
}).filter(section => section.body.length >= 24);
|
|
4274
|
+
if (sections.length >= 2)
|
|
4275
|
+
return sections;
|
|
4276
|
+
}
|
|
4277
|
+
return [];
|
|
4278
|
+
}
|
|
4168
4279
|
function splitStoryboardInlineSceneSections(text) {
|
|
4169
4280
|
const markerPattern = /(^|[\s.;])((?:Scene|Shot|Beat|Panel|Frame)\s*(\d{1,2})(?:\s*,\s*(?:Scene|Shot|Beat|Panel|Frame)\s*\d{1,2})?\s*(?:\([^)]{0,120}\))?\s*(?:[:\-–—]\s*)?)/gi;
|
|
4170
4281
|
const matches = Array.from(text.matchAll(markerPattern))
|
|
@@ -4197,16 +4308,23 @@ function splitStoryboardInlineSceneSections(text) {
|
|
|
4197
4308
|
function splitStoryboardSections(text) {
|
|
4198
4309
|
const sectionHeadings = splitStoryboardSceneSections(text);
|
|
4199
4310
|
const tableSections = splitStoryboardTableSections(text);
|
|
4200
|
-
const
|
|
4311
|
+
const numberedListSections = splitStoryboardNumberedListSceneSections(text);
|
|
4312
|
+
const inlineSections = sectionHeadings.length === 0 && tableSections.length === 0 && numberedListSections.length === 0
|
|
4201
4313
|
? splitStoryboardInlineSceneSections(text)
|
|
4202
4314
|
: [];
|
|
4203
4315
|
const explicitFrameCount = inferExplicitStoryboardFrameCountFromText(text);
|
|
4204
4316
|
if (tableSections.length > 0 && explicitFrameCount !== null && tableSections.length === explicitFrameCount) {
|
|
4205
4317
|
return tableSections;
|
|
4206
4318
|
}
|
|
4319
|
+
if (numberedListSections.length > 0 && explicitFrameCount !== null && numberedListSections.length === explicitFrameCount) {
|
|
4320
|
+
return numberedListSections;
|
|
4321
|
+
}
|
|
4207
4322
|
if (tableSections.length > 0 && tableSections.length >= sectionHeadings.length) {
|
|
4208
4323
|
return tableSections;
|
|
4209
4324
|
}
|
|
4325
|
+
if (numberedListSections.length > 0 && numberedListSections.length >= sectionHeadings.length) {
|
|
4326
|
+
return numberedListSections;
|
|
4327
|
+
}
|
|
4210
4328
|
if (inlineSections.length > 0)
|
|
4211
4329
|
return inlineSections;
|
|
4212
4330
|
return sectionHeadings.length > 0 ? sectionHeadings : tableSections;
|
|
@@ -4942,7 +5060,7 @@ export function buildStoryboardProject(options) {
|
|
|
4942
5060
|
const userIntentText = canonicalStoryboardScriptContext(rawUserIntentText) || rawUserIntentText;
|
|
4943
5061
|
const narrativeUserIntentText = cleanStoryboardNarrativeSourceText(userIntentText);
|
|
4944
5062
|
const approvedScriptContext = cleanStoryboardNarrativeSourceText(canonicalStoryboardScriptContext(options.approvedScriptContext));
|
|
4945
|
-
const primarySourceBrief =
|
|
5063
|
+
const primarySourceBrief = selectStoryboardSourceBriefForCompile(options, userIntentText);
|
|
4946
5064
|
const sourceText = stripGenericStoryboardVisibleTextMetadata(sanitizeStoryboardExternalAudioReferences([
|
|
4947
5065
|
cleanStoryboardNarrativeSourceText(primarySourceBrief),
|
|
4948
5066
|
approvedScriptContext
|
|
@@ -5428,7 +5546,7 @@ export function compileVideoStoryboardImagePrompt(options) {
|
|
|
5428
5546
|
const project = buildStoryboardProject(options);
|
|
5429
5547
|
const compiledFrameCount = Math.max(1, options.frameCount || project.scenes.length);
|
|
5430
5548
|
const layout = storyboardLayoutSpecFromProject(project, compiledFrameCount);
|
|
5431
|
-
const selectedBrief =
|
|
5549
|
+
const selectedBrief = selectStoryboardSourceBriefForCompile(options, userIntentText);
|
|
5432
5550
|
const avoidSource = buildStoryboardUserConstraintSource(cleanStoryboardNarrativeSourceText(userIntentText), cleanStoryboardNarrativeSourceText(selectedBrief), options);
|
|
5433
5551
|
const boardSizeLine = layout.boardDimensions
|
|
5434
5552
|
? `Overall storyboard canvas: ${layout.boardDimensions} pixels (${layout.boardAspectRatio}).`
|