@nodaro/prompts 1.12.0 → 1.13.0
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/index.cjs +303 -187
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +233 -28
- package/dist/index.d.ts +233 -28
- package/dist/index.js +290 -188
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/assemble-image-input-cap.test.ts +37 -13
- package/src/__tests__/assemble-image-input.test.ts +100 -19
- package/src/__tests__/assemble-video-input-cap.test.ts +101 -15
- package/src/__tests__/assemble-video-input.test.ts +167 -33
- package/src/__tests__/direction-hint-token-safety.test.ts +21 -0
- package/src/__tests__/prompt-style-section.test.ts +345 -0
- package/src/__tests__/style-section-boundary.test.ts +179 -0
- package/src/__tests__/subject-fold.test.ts +32 -13
- package/src/assemble-image-input.ts +51 -26
- package/src/assemble-video-input.ts +54 -34
- package/src/direction-registry.ts +108 -37
- package/src/hint-shedding.ts +23 -4
- package/src/index.ts +1 -0
- package/src/prompt-builder.ts +84 -27
- package/src/prompt-hint-join.ts +9 -0
- package/src/prompt-style-section.ts +256 -0
- package/src/video-reference-resolver.ts +5 -2
package/dist/index.js
CHANGED
|
@@ -10215,6 +10215,218 @@ function applyTemplate(template, vars) {
|
|
|
10215
10215
|
template
|
|
10216
10216
|
);
|
|
10217
10217
|
}
|
|
10218
|
+
|
|
10219
|
+
// src/prompt-hint-join.ts
|
|
10220
|
+
var PROMPT_HINT_SEPARATOR = ". ";
|
|
10221
|
+
function joinPromptHints(userPrompt, hints) {
|
|
10222
|
+
if (hints.length === 0) return userPrompt;
|
|
10223
|
+
return [userPrompt.trim(), ...hints].filter((p) => p.length > 0).join(PROMPT_HINT_SEPARATOR);
|
|
10224
|
+
}
|
|
10225
|
+
|
|
10226
|
+
// src/direction-registry.ts
|
|
10227
|
+
var perId = (full, compact) => (ids, mode) => {
|
|
10228
|
+
const out = [];
|
|
10229
|
+
for (const id of ids) {
|
|
10230
|
+
const frag = mode === "compact" ? compact(id) : full(id);
|
|
10231
|
+
if (frag.length > 0) out.push(frag);
|
|
10232
|
+
}
|
|
10233
|
+
return out;
|
|
10234
|
+
};
|
|
10235
|
+
var viaListBuilder = (build) => (ids, mode) => build(ids.length === 1 ? ids[0] : [...ids], mode).filter((s) => s.length > 0);
|
|
10236
|
+
var viaStringBuilder = (build) => (ids, mode) => {
|
|
10237
|
+
const s = build(ids.length === 1 ? ids[0] : [...ids], mode);
|
|
10238
|
+
return s.length > 0 ? [s] : [];
|
|
10239
|
+
};
|
|
10240
|
+
var viaMood = (ids, mode) => buildMoodHints({ mood: ids.length === 1 ? ids[0] : [...ids] }, mode).filter(
|
|
10241
|
+
(s) => s.length > 0
|
|
10242
|
+
);
|
|
10243
|
+
var framing = perId(getFramingPromptHint, getFramingTerm);
|
|
10244
|
+
var lighting = perId(getLightingPromptHint, getLightingTerm);
|
|
10245
|
+
var exposure = perId(getExposurePromptHint, getExposureTerm);
|
|
10246
|
+
var temporal = perId(getTemporalPromptHint, getTemporalTerm);
|
|
10247
|
+
var DIRECTION_FIELDS = [
|
|
10248
|
+
{ key: "cameraMotion", surface: "video", family: "motion", maxPicks: 1, render: perId(getCameraMotionPromptHint, getCameraMotionTerm) },
|
|
10249
|
+
// Composition (the Framing catalog, one row per category).
|
|
10250
|
+
{ key: "shotSize", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
10251
|
+
{ key: "angle", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
10252
|
+
{ key: "coverage", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
10253
|
+
{ key: "composition", surface: "both", family: "look", maxPicks: 2, render: framing },
|
|
10254
|
+
{ key: "vantage", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
10255
|
+
{ key: "pose", surface: "both", family: "look", maxPicks: 1, render: perId(getPosePromptHint, getPoseTerm) },
|
|
10256
|
+
{ key: "compositionEffect", surface: "both", family: "look", maxPicks: 1, render: perId(getCompositionEffectPromptHint, getCompositionEffectTerm) },
|
|
10257
|
+
// Camera.
|
|
10258
|
+
{ key: "cameraFormat", surface: "both", family: "look", styleGroup: "film", maxPicks: 1, render: perId(getCameraFormatPromptHint, getCameraFormatTerm) },
|
|
10259
|
+
{ key: "lens", surface: "both", family: "look", maxPicks: 1, render: perId(getLensPromptHint, getLensTerm) },
|
|
10260
|
+
// Exposure (stills only — a video's exposure rides its own temporal levers).
|
|
10261
|
+
{ key: "aperture", surface: "image", family: "look", maxPicks: 1, render: exposure },
|
|
10262
|
+
{ key: "shutterSpeed", surface: "image", family: "look", maxPicks: 1, render: exposure },
|
|
10263
|
+
{ key: "isoValue", surface: "image", family: "look", maxPicks: 1, render: exposure },
|
|
10264
|
+
// Light (the Lighting catalog, one row per category).
|
|
10265
|
+
{ key: "timeOfDay", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
10266
|
+
{ key: "lightingStyle", surface: "both", family: "look", maxPicks: 2, render: lighting },
|
|
10267
|
+
{ key: "lightingDirection", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
10268
|
+
{ key: "lightingRatio", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
10269
|
+
{ key: "colorTemperature", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
10270
|
+
{ key: "colorLook", surface: "both", family: "look", styleGroup: "film", maxPicks: 1, render: perId(getColorLookPromptHint, getColorLookTerm) },
|
|
10271
|
+
{ key: "atmosphere", surface: "both", family: "look", maxPicks: 2, render: viaListBuilder(buildAtmosphereHints) },
|
|
10272
|
+
{ key: "postProcess", surface: "image", family: "look", maxPicks: 2, render: viaListBuilder(buildPostProcessHints) },
|
|
10273
|
+
// Style.
|
|
10274
|
+
{ key: "style", surface: "both", family: "look", styleGroup: "film", maxPicks: 1, render: perId(getStylePromptHint, getStyleTerm) },
|
|
10275
|
+
{ key: "mood", surface: "both", family: "look", maxPicks: 2, render: viaMood },
|
|
10276
|
+
{ key: "aesthetic", surface: "both", family: "look", maxPicks: 2, render: viaStringBuilder(buildAestheticHints) },
|
|
10277
|
+
{ key: "photoGenre", surface: "image", family: "look", maxPicks: 1, render: perId(getPhotoGenrePromptHint, getPhotoGenreTerm) },
|
|
10278
|
+
{ key: "photographer", surface: "image", family: "look", maxPicks: 2, render: viaStringBuilder(buildPhotographerHints) },
|
|
10279
|
+
{ key: "renderQuality", surface: "image", family: "look", maxPicks: 1, render: perId(getRenderQualityPromptHint, getRenderQualityTerm) },
|
|
10280
|
+
// Scene.
|
|
10281
|
+
{ key: "setting", surface: "both", family: "look", maxPicks: 1, render: perId(getSettingPromptHint, getSettingTerm) },
|
|
10282
|
+
{ key: "era", surface: "both", family: "look", styleGroup: "film", maxPicks: 1, render: perId(getEraPromptHint, getEraTerm) },
|
|
10283
|
+
{ key: "backdrop", surface: "both", family: "look", maxPicks: 1, render: perId(getBackdropPromptHint, getBackdropTerm) },
|
|
10284
|
+
// Motion & time.
|
|
10285
|
+
{ key: "actionFx", surface: "video", family: "motion", maxPicks: 2, render: viaListBuilder(buildActionFxHints) },
|
|
10286
|
+
{ key: "temporalSpeed", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
10287
|
+
{ key: "temporalFreeze", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
10288
|
+
{ key: "temporalDirection", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
10289
|
+
{ key: "temporalShutter", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
10290
|
+
{ key: "transition", surface: "video", family: "motion", maxPicks: 2, render: perId(getTransitionPromptHint, getTransitionTerm) },
|
|
10291
|
+
{ key: "loopSubject", surface: "video", family: "motion", maxPicks: 1, render: perId(getLoopSubjectPromptHint, getLoopSubjectTerm) },
|
|
10292
|
+
// ── LEGACY BLOCK — see the table doc above. Placed LAST, in today's exact
|
|
10293
|
+
// `composePromptText` order, so every pre-registry caller is byte-identical.
|
|
10294
|
+
{ key: "framingId", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
10295
|
+
{ key: "framingAngleId", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
10296
|
+
{ key: "lightingId", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
10297
|
+
{ key: "lensId", surface: "both", family: "look", maxPicks: 1, render: perId(getLensPromptHint, getLensTerm) },
|
|
10298
|
+
{ key: "cameraFormatId", surface: "both", family: "look", styleGroup: "film", maxPicks: 1, render: perId(getCameraFormatPromptHint, getCameraFormatTerm) }
|
|
10299
|
+
];
|
|
10300
|
+
var DIRECTION_SPECS = DIRECTION_FIELDS;
|
|
10301
|
+
var DIRECTION_KEYS = DIRECTION_FIELDS.map((f) => f.key);
|
|
10302
|
+
var FILM_STYLE_KEYS = DIRECTION_SPECS.filter(
|
|
10303
|
+
(f) => f.styleGroup === "film"
|
|
10304
|
+
).map((f) => f.key);
|
|
10305
|
+
var IMAGE_HINT_MODE_DEFAULT = "full";
|
|
10306
|
+
var VIDEO_HINT_MODE_DEFAULT = { look: "full", motion: "compact" };
|
|
10307
|
+
function modeForFamily(mode, family) {
|
|
10308
|
+
return typeof mode === "string" ? mode : family === "motion" ? mode.motion : mode.look;
|
|
10309
|
+
}
|
|
10310
|
+
var DIRECTION_ARRAY_CEILING = 8;
|
|
10311
|
+
var DIRECTION_ID_MAX_CHARS = 100;
|
|
10312
|
+
function normalizeDirectionIds(value, maxPicks) {
|
|
10313
|
+
const ids = [];
|
|
10314
|
+
if (typeof value === "string") {
|
|
10315
|
+
if (value) ids.push(value);
|
|
10316
|
+
} else if (Array.isArray(value)) {
|
|
10317
|
+
for (const v of value) {
|
|
10318
|
+
if (ids.length >= maxPicks) break;
|
|
10319
|
+
if (typeof v === "string" && v && !ids.includes(v)) ids.push(v);
|
|
10320
|
+
}
|
|
10321
|
+
}
|
|
10322
|
+
return ids.slice(0, maxPicks);
|
|
10323
|
+
}
|
|
10324
|
+
function directionFieldsForSurface(surface) {
|
|
10325
|
+
return DIRECTION_SPECS.filter((f) => f.surface === "both" || f.surface === surface);
|
|
10326
|
+
}
|
|
10327
|
+
function renderDirectionHintClauses(direction, opts) {
|
|
10328
|
+
if (!direction) return [];
|
|
10329
|
+
const mode = opts.mode ?? "full";
|
|
10330
|
+
const out = [];
|
|
10331
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10332
|
+
for (const spec of DIRECTION_SPECS) {
|
|
10333
|
+
if (spec.surface !== "both" && spec.surface !== opts.surface) continue;
|
|
10334
|
+
const ids = normalizeDirectionIds(
|
|
10335
|
+
direction[spec.key],
|
|
10336
|
+
spec.maxPicks
|
|
10337
|
+
);
|
|
10338
|
+
if (ids.length === 0) continue;
|
|
10339
|
+
for (const hint of spec.render(ids, modeForFamily(mode, spec.family))) {
|
|
10340
|
+
if (hint.length > 0 && !seen.has(hint)) {
|
|
10341
|
+
seen.add(hint);
|
|
10342
|
+
out.push({
|
|
10343
|
+
key: spec.key,
|
|
10344
|
+
family: spec.family,
|
|
10345
|
+
...spec.styleGroup !== void 0 ? { styleGroup: spec.styleGroup } : {},
|
|
10346
|
+
text: hint
|
|
10347
|
+
});
|
|
10348
|
+
}
|
|
10349
|
+
}
|
|
10350
|
+
}
|
|
10351
|
+
return out;
|
|
10352
|
+
}
|
|
10353
|
+
function renderDirectionHints(direction, opts) {
|
|
10354
|
+
return renderDirectionHintClauses(direction, opts).map((c) => c.text);
|
|
10355
|
+
}
|
|
10356
|
+
|
|
10357
|
+
// src/prompt-style-section.ts
|
|
10358
|
+
var STYLE_SECTION_HEADER = "[style]:";
|
|
10359
|
+
var STYLE_SECTION_GAP = "\n\n";
|
|
10360
|
+
var STYLE_SECTION_OPENING = `${STYLE_SECTION_GAP}${STYLE_SECTION_HEADER}
|
|
10361
|
+
`;
|
|
10362
|
+
function splitStyleSection(prompt) {
|
|
10363
|
+
const at = prompt.lastIndexOf(STYLE_SECTION_OPENING);
|
|
10364
|
+
if (at >= 0) {
|
|
10365
|
+
return { body: prompt.slice(0, at), section: prompt.slice(at + STYLE_SECTION_GAP.length) };
|
|
10366
|
+
}
|
|
10367
|
+
return prompt.startsWith(`${STYLE_SECTION_HEADER}
|
|
10368
|
+
`) ? { body: "", section: prompt } : { body: prompt, section: "" };
|
|
10369
|
+
}
|
|
10370
|
+
function insertBeforeStyleSection(prompt, lines) {
|
|
10371
|
+
if (lines.length === 0) return prompt;
|
|
10372
|
+
const block = lines.join("\n");
|
|
10373
|
+
const { body, section } = splitStyleSection(prompt);
|
|
10374
|
+
if (section.length === 0) return `${prompt}
|
|
10375
|
+
${block}`;
|
|
10376
|
+
return `${body.length > 0 ? `${body}
|
|
10377
|
+
${block}` : block}${STYLE_SECTION_GAP}${section}`;
|
|
10378
|
+
}
|
|
10379
|
+
function endsInsideStyleSection(prompt) {
|
|
10380
|
+
const at = prompt.lastIndexOf(STYLE_SECTION_GAP);
|
|
10381
|
+
const lastBlock = at >= 0 ? prompt.slice(at + STYLE_SECTION_GAP.length) : prompt;
|
|
10382
|
+
return lastBlock.startsWith(`${STYLE_SECTION_HEADER}
|
|
10383
|
+
`);
|
|
10384
|
+
}
|
|
10385
|
+
function styleSlotFor(row) {
|
|
10386
|
+
if (row.family === "motion") return "body";
|
|
10387
|
+
return row.styleGroup === "film" ? "film" : "scene";
|
|
10388
|
+
}
|
|
10389
|
+
function asBodyClauses(texts) {
|
|
10390
|
+
return texts.map((text) => ({ text, slot: "body" }));
|
|
10391
|
+
}
|
|
10392
|
+
function partitionStyleClauses(direction, opts) {
|
|
10393
|
+
return renderDirectionHintClauses(direction, opts).map((clause) => ({
|
|
10394
|
+
text: clause.text,
|
|
10395
|
+
slot: styleSlotFor(clause)
|
|
10396
|
+
}));
|
|
10397
|
+
}
|
|
10398
|
+
function styleSectionFromClauses(clauses) {
|
|
10399
|
+
const line = (slot) => clauses.filter((c) => c.slot === slot).map((c) => c.text).join(PROMPT_HINT_SEPARATOR);
|
|
10400
|
+
const lines = [line("film"), line("scene")].filter((l) => l.length > 0);
|
|
10401
|
+
return lines.length === 0 ? "" : `${STYLE_SECTION_HEADER}
|
|
10402
|
+
${lines.join("\n")}`;
|
|
10403
|
+
}
|
|
10404
|
+
function renderStyleSection(direction, opts) {
|
|
10405
|
+
return styleSectionFromClauses(partitionStyleClauses(direction, opts));
|
|
10406
|
+
}
|
|
10407
|
+
function composeSectionedPrompt(userPrompt, clauses, structuredFragment) {
|
|
10408
|
+
const bodyHints = [
|
|
10409
|
+
...clauses.filter((c) => c.slot === "body").map((c) => c.text),
|
|
10410
|
+
structuredFragment
|
|
10411
|
+
].filter((p) => p.length > 0);
|
|
10412
|
+
const section = styleSectionFromClauses(clauses);
|
|
10413
|
+
if (section.length === 0) {
|
|
10414
|
+
return bodyHints.length === 0 ? userPrompt : joinPromptHints(userPrompt ?? "", bodyHints);
|
|
10415
|
+
}
|
|
10416
|
+
const body = bodyHints.length > 0 ? joinPromptHints(userPrompt ?? "", bodyHints) : (userPrompt ?? "").trim();
|
|
10417
|
+
return body.length > 0 ? `${body}${STYLE_SECTION_GAP}${section}` : section;
|
|
10418
|
+
}
|
|
10419
|
+
function sectionedClauseCosts(userPrompt, clauses, structuredFragment) {
|
|
10420
|
+
const lengthAt = (kept) => composeSectionedPrompt(userPrompt, clauses.slice(0, kept), structuredFragment)?.length ?? 0;
|
|
10421
|
+
const costs = [];
|
|
10422
|
+
let below = lengthAt(0);
|
|
10423
|
+
for (let i = 0; i < clauses.length; i++) {
|
|
10424
|
+
const at = lengthAt(i + 1);
|
|
10425
|
+
costs.push(at - below);
|
|
10426
|
+
below = at;
|
|
10427
|
+
}
|
|
10428
|
+
return costs;
|
|
10429
|
+
}
|
|
10218
10430
|
function composeIdentityDescPart(subject, canonicalDesc, elementInjection) {
|
|
10219
10431
|
const parts = [];
|
|
10220
10432
|
const c = canonicalDesc?.trim();
|
|
@@ -10904,6 +11116,12 @@ function reconcileBodySegments(body, bodySegments) {
|
|
|
10904
11116
|
}
|
|
10905
11117
|
return [{ text: body, origin: "user" }];
|
|
10906
11118
|
}
|
|
11119
|
+
function controlSuffixes(body, styleLine, avoidLine) {
|
|
11120
|
+
const separator = (text) => endsInsideStyleSection(text) ? STYLE_SECTION_GAP : "\n";
|
|
11121
|
+
const styleSuffix = styleLine ? `${separator(body)}${styleLine}` : "";
|
|
11122
|
+
const avoidSuffix = avoidLine ? `${separator(body + styleSuffix)}${avoidLine}` : "";
|
|
11123
|
+
return { styleSuffix, avoidSuffix };
|
|
11124
|
+
}
|
|
10907
11125
|
function buildImagePrompt(config2) {
|
|
10908
11126
|
return buildImagePromptInternal(config2);
|
|
10909
11127
|
}
|
|
@@ -11180,9 +11398,7 @@ ${promptForNext}`;
|
|
|
11180
11398
|
const lockBlock = allLockLines.length > 0 ? `${allLockLines.join("\n")}
|
|
11181
11399
|
|
|
11182
11400
|
` : "";
|
|
11183
|
-
|
|
11184
|
-
${trailingLines.join("\n")}` : "";
|
|
11185
|
-
promptForNext = `${lockBlock}${promptForNext}${trailingBlock}`;
|
|
11401
|
+
promptForNext = `${lockBlock}${insertBeforeStyleSection(promptForNext, trailingLines)}`;
|
|
11186
11402
|
}
|
|
11187
11403
|
config2 = {
|
|
11188
11404
|
...config2,
|
|
@@ -11230,9 +11446,7 @@ ${trailingLines.join("\n")}` : "";
|
|
|
11230
11446
|
...locCanon.elementDirectives,
|
|
11231
11447
|
...objCanon.elementDirectives
|
|
11232
11448
|
];
|
|
11233
|
-
const
|
|
11234
|
-
${canonTrailingLines.join("\n")}` : "";
|
|
11235
|
-
const composedScene = `${canonLockBlock}${scene}${canonTrailingBlock}`;
|
|
11449
|
+
const composedScene = `${canonLockBlock}${insertBeforeStyleSection(scene, canonTrailingLines)}`;
|
|
11236
11450
|
prompt2 = config2.referenceLockSnippet ? `${config2.referenceLockSnippet}
|
|
11237
11451
|
${composedScene}` : composedScene;
|
|
11238
11452
|
if (marks) marks.directivesPrefix = "";
|
|
@@ -11258,29 +11472,29 @@ ${directives}`;
|
|
|
11258
11472
|
}
|
|
11259
11473
|
}
|
|
11260
11474
|
const styleText2 = style?.trim();
|
|
11261
|
-
const
|
|
11262
|
-
Style: ${getStylePromptHint(styleText2) || styleText2}` : "";
|
|
11475
|
+
const styleLine2 = styleText2 ? `Style: ${getStylePromptHint(styleText2) || styleText2}` : "";
|
|
11263
11476
|
const negPrompt2 = negativePrompt?.trim();
|
|
11264
11477
|
let nativeNegativePrompt2;
|
|
11265
|
-
let
|
|
11478
|
+
let avoidLine2 = "";
|
|
11266
11479
|
if (negPrompt2) {
|
|
11267
11480
|
if (NATIVE_NEGATIVE_PROMPT_MODELS.has(provider)) {
|
|
11268
11481
|
nativeNegativePrompt2 = negPrompt2.slice(0, getMaxNegativePromptChars(provider));
|
|
11269
11482
|
} else {
|
|
11270
|
-
|
|
11271
|
-
Avoid: ${negPrompt2}`;
|
|
11483
|
+
avoidLine2 = `Avoid: ${negPrompt2}`;
|
|
11272
11484
|
}
|
|
11273
11485
|
}
|
|
11274
|
-
if (marks) {
|
|
11275
|
-
marks.styleSuffix = styleSuffix2;
|
|
11276
|
-
marks.avoidSuffix = avoidSuffix2;
|
|
11277
|
-
}
|
|
11278
11486
|
const maxLen2 = getMaxImagePromptChars(provider);
|
|
11279
|
-
const
|
|
11487
|
+
const preCut2 = controlSuffixes(prompt2, styleLine2, avoidLine2);
|
|
11488
|
+
const reserved2 = preCut2.styleSuffix.length + preCut2.avoidSuffix.length;
|
|
11280
11489
|
if (prompt2.length + reserved2 > maxLen2) {
|
|
11281
11490
|
if (marks) marks.overflowChars += prompt2.length + reserved2 - maxLen2;
|
|
11282
11491
|
prompt2 = prompt2.slice(0, Math.max(0, maxLen2 - reserved2 - 3)) + "...";
|
|
11283
11492
|
}
|
|
11493
|
+
const { styleSuffix: styleSuffix2, avoidSuffix: avoidSuffix2 } = controlSuffixes(prompt2, styleLine2, avoidLine2);
|
|
11494
|
+
if (marks) {
|
|
11495
|
+
marks.styleSuffix = styleSuffix2;
|
|
11496
|
+
marks.avoidSuffix = avoidSuffix2;
|
|
11497
|
+
}
|
|
11284
11498
|
if (marks) marks.bodyBeforeSuffixes = prompt2.slice(marks.directivesPrefix.length);
|
|
11285
11499
|
prompt2 = prompt2 + styleSuffix2 + avoidSuffix2;
|
|
11286
11500
|
if (prompt2.length > maxLen2) {
|
|
@@ -11332,35 +11546,37 @@ Avoid: ${negPrompt2}`;
|
|
|
11332
11546
|
let prompt = config2.prompt;
|
|
11333
11547
|
if (charDescs.length > 0) {
|
|
11334
11548
|
const wrapperTemplate = resolveTemplate("generate-image-wrapper", userTemplates, flowTemplates);
|
|
11335
|
-
|
|
11336
|
-
|
|
11549
|
+
const { body, section } = splitStyleSection(prompt);
|
|
11550
|
+
const wrapped = applyTemplate(wrapperTemplate, {
|
|
11551
|
+
userPrompt: body,
|
|
11337
11552
|
assetDescriptions: charDescs.join(" ")
|
|
11338
11553
|
});
|
|
11554
|
+
prompt = section.length > 0 ? `${wrapped}${STYLE_SECTION_GAP}${section}` : wrapped;
|
|
11339
11555
|
}
|
|
11340
11556
|
const styleText = style?.trim();
|
|
11341
|
-
const
|
|
11342
|
-
Style: ${getStylePromptHint(styleText) || styleText}` : "";
|
|
11557
|
+
const styleLine = styleText ? `Style: ${getStylePromptHint(styleText) || styleText}` : "";
|
|
11343
11558
|
const negPrompt = negativePrompt?.trim();
|
|
11344
11559
|
let nativeNegativePrompt;
|
|
11345
|
-
let
|
|
11560
|
+
let avoidLine = "";
|
|
11346
11561
|
if (negPrompt) {
|
|
11347
11562
|
if (NATIVE_NEGATIVE_PROMPT_MODELS.has(provider)) {
|
|
11348
11563
|
nativeNegativePrompt = negPrompt.slice(0, getMaxNegativePromptChars(provider));
|
|
11349
11564
|
} else {
|
|
11350
|
-
|
|
11351
|
-
Avoid: ${negPrompt}`;
|
|
11565
|
+
avoidLine = `Avoid: ${negPrompt}`;
|
|
11352
11566
|
}
|
|
11353
11567
|
}
|
|
11354
|
-
if (marks) {
|
|
11355
|
-
marks.styleSuffix = styleSuffix;
|
|
11356
|
-
marks.avoidSuffix = avoidSuffix;
|
|
11357
|
-
}
|
|
11358
11568
|
const maxLen = getMaxImagePromptChars(provider);
|
|
11359
|
-
const
|
|
11569
|
+
const preCut = controlSuffixes(prompt, styleLine, avoidLine);
|
|
11570
|
+
const reserved = preCut.styleSuffix.length + preCut.avoidSuffix.length;
|
|
11360
11571
|
if (prompt.length + reserved > maxLen) {
|
|
11361
11572
|
if (marks) marks.overflowChars += prompt.length + reserved - maxLen;
|
|
11362
11573
|
prompt = prompt.slice(0, Math.max(0, maxLen - reserved - 3)) + "...";
|
|
11363
11574
|
}
|
|
11575
|
+
const { styleSuffix, avoidSuffix } = controlSuffixes(prompt, styleLine, avoidLine);
|
|
11576
|
+
if (marks) {
|
|
11577
|
+
marks.styleSuffix = styleSuffix;
|
|
11578
|
+
marks.avoidSuffix = avoidSuffix;
|
|
11579
|
+
}
|
|
11364
11580
|
if (marks) marks.bodyBeforeSuffixes = prompt;
|
|
11365
11581
|
prompt = prompt + styleSuffix + avoidSuffix;
|
|
11366
11582
|
if (prompt.length > maxLen) {
|
|
@@ -11587,7 +11803,12 @@ function capitalizeLineInitial(line) {
|
|
|
11587
11803
|
return line.replace(/[a-zA-Z]/, (c) => c.toUpperCase());
|
|
11588
11804
|
}
|
|
11589
11805
|
function buildHybridScene(prompt, refs, finalIndexByUrl) {
|
|
11590
|
-
|
|
11806
|
+
const lines = prompt.split("\n");
|
|
11807
|
+
const sectionAt = lines.indexOf(STYLE_SECTION_HEADER);
|
|
11808
|
+
return lines.map((line, i) => {
|
|
11809
|
+
const expanded = expandImageRefTokensHybrid(line, refs, finalIndexByUrl);
|
|
11810
|
+
return sectionAt >= 0 && i >= sectionAt ? expanded : capitalizeLineInitial(expanded);
|
|
11811
|
+
}).join("\n");
|
|
11591
11812
|
}
|
|
11592
11813
|
function buildIdentityDirectives(prompt, refs, meta3 = [], suppressedCanonicalLocationIds) {
|
|
11593
11814
|
return collectIdentities(prompt, refs, meta3).map((id) => buildIdentityDirective(id, suppressedCanonicalLocationIds)).filter((s) => s.length > 0).join("\n");
|
|
@@ -11805,125 +12026,6 @@ function renderLens(l) {
|
|
|
11805
12026
|
if (l.aperture) bits.push(`f/${l.aperture}`);
|
|
11806
12027
|
return bits.length > 0 ? `Lens: ${bits.join(", ")}.` : "";
|
|
11807
12028
|
}
|
|
11808
|
-
|
|
11809
|
-
// src/direction-registry.ts
|
|
11810
|
-
var perId = (full, compact) => (ids, mode) => {
|
|
11811
|
-
const out = [];
|
|
11812
|
-
for (const id of ids) {
|
|
11813
|
-
const frag = mode === "compact" ? compact(id) : full(id);
|
|
11814
|
-
if (frag.length > 0) out.push(frag);
|
|
11815
|
-
}
|
|
11816
|
-
return out;
|
|
11817
|
-
};
|
|
11818
|
-
var viaListBuilder = (build) => (ids, mode) => build(ids.length === 1 ? ids[0] : [...ids], mode).filter((s) => s.length > 0);
|
|
11819
|
-
var viaStringBuilder = (build) => (ids, mode) => {
|
|
11820
|
-
const s = build(ids.length === 1 ? ids[0] : [...ids], mode);
|
|
11821
|
-
return s.length > 0 ? [s] : [];
|
|
11822
|
-
};
|
|
11823
|
-
var viaMood = (ids, mode) => buildMoodHints({ mood: ids.length === 1 ? ids[0] : [...ids] }, mode).filter(
|
|
11824
|
-
(s) => s.length > 0
|
|
11825
|
-
);
|
|
11826
|
-
var framing = perId(getFramingPromptHint, getFramingTerm);
|
|
11827
|
-
var lighting = perId(getLightingPromptHint, getLightingTerm);
|
|
11828
|
-
var exposure = perId(getExposurePromptHint, getExposureTerm);
|
|
11829
|
-
var temporal = perId(getTemporalPromptHint, getTemporalTerm);
|
|
11830
|
-
var DIRECTION_FIELDS = [
|
|
11831
|
-
{ key: "cameraMotion", surface: "video", family: "motion", maxPicks: 1, render: perId(getCameraMotionPromptHint, getCameraMotionTerm) },
|
|
11832
|
-
// Composition (the Framing catalog, one row per category).
|
|
11833
|
-
{ key: "shotSize", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
11834
|
-
{ key: "angle", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
11835
|
-
{ key: "coverage", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
11836
|
-
{ key: "composition", surface: "both", family: "look", maxPicks: 2, render: framing },
|
|
11837
|
-
{ key: "vantage", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
11838
|
-
{ key: "pose", surface: "both", family: "look", maxPicks: 1, render: perId(getPosePromptHint, getPoseTerm) },
|
|
11839
|
-
{ key: "compositionEffect", surface: "both", family: "look", maxPicks: 1, render: perId(getCompositionEffectPromptHint, getCompositionEffectTerm) },
|
|
11840
|
-
// Camera.
|
|
11841
|
-
{ key: "cameraFormat", surface: "both", family: "look", maxPicks: 1, render: perId(getCameraFormatPromptHint, getCameraFormatTerm) },
|
|
11842
|
-
{ key: "lens", surface: "both", family: "look", maxPicks: 1, render: perId(getLensPromptHint, getLensTerm) },
|
|
11843
|
-
// Exposure (stills only — a video's exposure rides its own temporal levers).
|
|
11844
|
-
{ key: "aperture", surface: "image", family: "look", maxPicks: 1, render: exposure },
|
|
11845
|
-
{ key: "shutterSpeed", surface: "image", family: "look", maxPicks: 1, render: exposure },
|
|
11846
|
-
{ key: "isoValue", surface: "image", family: "look", maxPicks: 1, render: exposure },
|
|
11847
|
-
// Light (the Lighting catalog, one row per category).
|
|
11848
|
-
{ key: "timeOfDay", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
11849
|
-
{ key: "lightingStyle", surface: "both", family: "look", maxPicks: 2, render: lighting },
|
|
11850
|
-
{ key: "lightingDirection", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
11851
|
-
{ key: "lightingRatio", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
11852
|
-
{ key: "colorTemperature", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
11853
|
-
{ key: "colorLook", surface: "both", family: "look", maxPicks: 1, render: perId(getColorLookPromptHint, getColorLookTerm) },
|
|
11854
|
-
{ key: "atmosphere", surface: "both", family: "look", maxPicks: 2, render: viaListBuilder(buildAtmosphereHints) },
|
|
11855
|
-
{ key: "postProcess", surface: "image", family: "look", maxPicks: 2, render: viaListBuilder(buildPostProcessHints) },
|
|
11856
|
-
// Style.
|
|
11857
|
-
{ key: "style", surface: "both", family: "look", maxPicks: 1, render: perId(getStylePromptHint, getStyleTerm) },
|
|
11858
|
-
{ key: "mood", surface: "both", family: "look", maxPicks: 2, render: viaMood },
|
|
11859
|
-
{ key: "aesthetic", surface: "both", family: "look", maxPicks: 2, render: viaStringBuilder(buildAestheticHints) },
|
|
11860
|
-
{ key: "photoGenre", surface: "image", family: "look", maxPicks: 1, render: perId(getPhotoGenrePromptHint, getPhotoGenreTerm) },
|
|
11861
|
-
{ key: "photographer", surface: "image", family: "look", maxPicks: 2, render: viaStringBuilder(buildPhotographerHints) },
|
|
11862
|
-
{ key: "renderQuality", surface: "image", family: "look", maxPicks: 1, render: perId(getRenderQualityPromptHint, getRenderQualityTerm) },
|
|
11863
|
-
// Scene.
|
|
11864
|
-
{ key: "setting", surface: "both", family: "look", maxPicks: 1, render: perId(getSettingPromptHint, getSettingTerm) },
|
|
11865
|
-
{ key: "era", surface: "both", family: "look", maxPicks: 1, render: perId(getEraPromptHint, getEraTerm) },
|
|
11866
|
-
{ key: "backdrop", surface: "both", family: "look", maxPicks: 1, render: perId(getBackdropPromptHint, getBackdropTerm) },
|
|
11867
|
-
// Motion & time.
|
|
11868
|
-
{ key: "actionFx", surface: "video", family: "motion", maxPicks: 2, render: viaListBuilder(buildActionFxHints) },
|
|
11869
|
-
{ key: "temporalSpeed", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
11870
|
-
{ key: "temporalFreeze", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
11871
|
-
{ key: "temporalDirection", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
11872
|
-
{ key: "temporalShutter", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
11873
|
-
{ key: "transition", surface: "video", family: "motion", maxPicks: 2, render: perId(getTransitionPromptHint, getTransitionTerm) },
|
|
11874
|
-
{ key: "loopSubject", surface: "video", family: "motion", maxPicks: 1, render: perId(getLoopSubjectPromptHint, getLoopSubjectTerm) },
|
|
11875
|
-
// ── LEGACY BLOCK — see the table doc above. Placed LAST, in today's exact
|
|
11876
|
-
// `composePromptText` order, so every pre-registry caller is byte-identical.
|
|
11877
|
-
{ key: "framingId", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
11878
|
-
{ key: "framingAngleId", surface: "both", family: "look", maxPicks: 1, render: framing },
|
|
11879
|
-
{ key: "lightingId", surface: "both", family: "look", maxPicks: 1, render: lighting },
|
|
11880
|
-
{ key: "lensId", surface: "both", family: "look", maxPicks: 1, render: perId(getLensPromptHint, getLensTerm) },
|
|
11881
|
-
{ key: "cameraFormatId", surface: "both", family: "look", maxPicks: 1, render: perId(getCameraFormatPromptHint, getCameraFormatTerm) }
|
|
11882
|
-
];
|
|
11883
|
-
var DIRECTION_KEYS = DIRECTION_FIELDS.map((f) => f.key);
|
|
11884
|
-
var IMAGE_HINT_MODE_DEFAULT = "full";
|
|
11885
|
-
var VIDEO_HINT_MODE_DEFAULT = { look: "full", motion: "compact" };
|
|
11886
|
-
function modeForFamily(mode, family) {
|
|
11887
|
-
return typeof mode === "string" ? mode : family === "motion" ? mode.motion : mode.look;
|
|
11888
|
-
}
|
|
11889
|
-
var DIRECTION_ARRAY_CEILING = 8;
|
|
11890
|
-
var DIRECTION_ID_MAX_CHARS = 100;
|
|
11891
|
-
function normalizeDirectionIds(value, maxPicks) {
|
|
11892
|
-
const ids = [];
|
|
11893
|
-
if (typeof value === "string") {
|
|
11894
|
-
if (value) ids.push(value);
|
|
11895
|
-
} else if (Array.isArray(value)) {
|
|
11896
|
-
for (const v of value) {
|
|
11897
|
-
if (ids.length >= maxPicks) break;
|
|
11898
|
-
if (typeof v === "string" && v && !ids.includes(v)) ids.push(v);
|
|
11899
|
-
}
|
|
11900
|
-
}
|
|
11901
|
-
return ids.slice(0, maxPicks);
|
|
11902
|
-
}
|
|
11903
|
-
function directionFieldsForSurface(surface) {
|
|
11904
|
-
return DIRECTION_FIELDS.filter((f) => f.surface === "both" || f.surface === surface);
|
|
11905
|
-
}
|
|
11906
|
-
function renderDirectionHints(direction, opts) {
|
|
11907
|
-
if (!direction) return [];
|
|
11908
|
-
const mode = opts.mode ?? "full";
|
|
11909
|
-
const out = [];
|
|
11910
|
-
const seen = /* @__PURE__ */ new Set();
|
|
11911
|
-
for (const spec of DIRECTION_FIELDS) {
|
|
11912
|
-
if (spec.surface !== "both" && spec.surface !== opts.surface) continue;
|
|
11913
|
-
const ids = normalizeDirectionIds(
|
|
11914
|
-
direction[spec.key],
|
|
11915
|
-
spec.maxPicks
|
|
11916
|
-
);
|
|
11917
|
-
if (ids.length === 0) continue;
|
|
11918
|
-
for (const hint of spec.render(ids, modeForFamily(mode, spec.family))) {
|
|
11919
|
-
if (hint.length > 0 && !seen.has(hint)) {
|
|
11920
|
-
seen.add(hint);
|
|
11921
|
-
out.push(hint);
|
|
11922
|
-
}
|
|
11923
|
-
}
|
|
11924
|
-
}
|
|
11925
|
-
return out;
|
|
11926
|
-
}
|
|
11927
12029
|
var viaFragmentBuilder = (build) => (subject, mode) => {
|
|
11928
12030
|
const clause = build(subject, mode).filter((s) => s.length > 0).join(", ");
|
|
11929
12031
|
return clause.length > 0 ? [clause] : [];
|
|
@@ -12048,20 +12150,13 @@ function renderSubjectHints(subject, opts) {
|
|
|
12048
12150
|
return out;
|
|
12049
12151
|
}
|
|
12050
12152
|
|
|
12051
|
-
// src/prompt-hint-join.ts
|
|
12052
|
-
var PROMPT_HINT_SEPARATOR = ". ";
|
|
12053
|
-
function joinPromptHints(userPrompt, hints) {
|
|
12054
|
-
if (hints.length === 0) return userPrompt;
|
|
12055
|
-
return [userPrompt.trim(), ...hints].filter((p) => p.length > 0).join(PROMPT_HINT_SEPARATOR);
|
|
12056
|
-
}
|
|
12057
|
-
|
|
12058
12153
|
// src/hint-shedding.ts
|
|
12059
|
-
function keepableDirectionHints(hintClauses, kept, deficit) {
|
|
12154
|
+
function keepableDirectionHints(hintClauses, kept, deficit, clauseCosts) {
|
|
12060
12155
|
let remaining = deficit;
|
|
12061
12156
|
let next = kept;
|
|
12062
12157
|
while (next > 0 && remaining > 0) {
|
|
12063
12158
|
next -= 1;
|
|
12064
|
-
remaining -= hintClauses[next].length + PROMPT_HINT_SEPARATOR.length;
|
|
12159
|
+
remaining -= clauseCosts?.[next] ?? hintClauses[next].length + PROMPT_HINT_SEPARATOR.length;
|
|
12065
12160
|
}
|
|
12066
12161
|
return next;
|
|
12067
12162
|
}
|
|
@@ -12415,9 +12510,7 @@ function resolveVideoReferenceCore(args) {
|
|
|
12415
12510
|
const lockBlock = lockLines.length > 0 ? `${lockLines.join("\n")}
|
|
12416
12511
|
|
|
12417
12512
|
` : "";
|
|
12418
|
-
|
|
12419
|
-
${trailingLines.join("\n")}` : "";
|
|
12420
|
-
finalPrompt = `${lockBlock}${finalPrompt}${trailingBlock}`;
|
|
12513
|
+
finalPrompt = `${lockBlock}${insertBeforeStyleSection(finalPrompt, trailingLines)}`;
|
|
12421
12514
|
} else {
|
|
12422
12515
|
const allFallbackLines = [...fallbackDirectiveLines, ...extraDirectiveLines];
|
|
12423
12516
|
if (allFallbackLines.length > 0) {
|
|
@@ -12654,24 +12747,26 @@ function assembleSunoInput(input) {
|
|
|
12654
12747
|
function renderImageHintPieces(subject, direction, structured) {
|
|
12655
12748
|
return {
|
|
12656
12749
|
hintClauses: [
|
|
12657
|
-
...
|
|
12658
|
-
|
|
12659
|
-
|
|
12660
|
-
|
|
12661
|
-
|
|
12750
|
+
...asBodyClauses(
|
|
12751
|
+
renderSubjectHints(subject, {
|
|
12752
|
+
surface: "image",
|
|
12753
|
+
mode: SUBJECT_IMAGE_HINT_MODE_DEFAULT
|
|
12754
|
+
})
|
|
12755
|
+
),
|
|
12756
|
+
...partitionStyleClauses(direction, {
|
|
12662
12757
|
surface: "image",
|
|
12663
12758
|
mode: IMAGE_HINT_MODE_DEFAULT
|
|
12664
12759
|
})
|
|
12665
|
-
].filter((
|
|
12760
|
+
].filter((c) => c.text.length > 0),
|
|
12666
12761
|
structuredFragment: structured ? renderStructuredFields(structured) : ""
|
|
12667
12762
|
};
|
|
12668
12763
|
}
|
|
12669
12764
|
function composePromptText(userPrompt, pieces, keptHintClauses) {
|
|
12670
|
-
|
|
12671
|
-
|
|
12765
|
+
return composeSectionedPrompt(
|
|
12766
|
+
userPrompt,
|
|
12767
|
+
pieces.hintClauses.slice(0, keptHintClauses),
|
|
12672
12768
|
pieces.structuredFragment
|
|
12673
|
-
|
|
12674
|
-
return joinPromptHints(userPrompt, hints);
|
|
12769
|
+
);
|
|
12675
12770
|
}
|
|
12676
12771
|
function assembleImageInput(input) {
|
|
12677
12772
|
const pieces = renderImageHintPieces(input.subject, input.direction, input.structured);
|
|
@@ -12701,9 +12796,17 @@ function assembleImageInput(input) {
|
|
|
12701
12796
|
});
|
|
12702
12797
|
let kept = pieces.hintClauses.length;
|
|
12703
12798
|
let fitted = assembleWith(kept);
|
|
12704
|
-
|
|
12705
|
-
|
|
12706
|
-
|
|
12799
|
+
if (fitted.overflowChars > 0) {
|
|
12800
|
+
const costs = sectionedClauseCosts(
|
|
12801
|
+
input.userPrompt,
|
|
12802
|
+
pieces.hintClauses,
|
|
12803
|
+
pieces.structuredFragment
|
|
12804
|
+
);
|
|
12805
|
+
const texts = pieces.hintClauses.map((c) => c.text);
|
|
12806
|
+
while (fitted.overflowChars > 0 && kept > 0) {
|
|
12807
|
+
kept = keepableDirectionHints(texts, kept, fitted.overflowChars, costs);
|
|
12808
|
+
fitted = assembleWith(kept);
|
|
12809
|
+
}
|
|
12707
12810
|
}
|
|
12708
12811
|
const { overflowChars, ...result } = fitted;
|
|
12709
12812
|
if (input.throwOnEmpty && !result.prompt.trim()) {
|
|
@@ -12717,31 +12820,30 @@ function assembleImageInput(input) {
|
|
|
12717
12820
|
// src/assemble-video-input.ts
|
|
12718
12821
|
function composeVideoPromptText(userPrompt, direction, structured, opts) {
|
|
12719
12822
|
const hintClauses = [
|
|
12720
|
-
...
|
|
12721
|
-
|
|
12722
|
-
|
|
12723
|
-
|
|
12724
|
-
|
|
12823
|
+
...asBodyClauses(
|
|
12824
|
+
renderSubjectHints(opts?.subject, {
|
|
12825
|
+
surface: "video",
|
|
12826
|
+
mode: opts?.subjectHintMode ?? SUBJECT_VIDEO_HINT_MODE_DEFAULT
|
|
12827
|
+
})
|
|
12828
|
+
),
|
|
12829
|
+
...partitionStyleClauses(direction, {
|
|
12725
12830
|
surface: "video",
|
|
12726
12831
|
mode: opts?.hintMode ?? VIDEO_HINT_MODE_DEFAULT
|
|
12727
12832
|
})
|
|
12728
|
-
].filter((
|
|
12833
|
+
].filter((c) => c.text.length > 0);
|
|
12729
12834
|
const structuredFragment = structured ? renderStructuredFields(structured) : "";
|
|
12730
|
-
const composeWith = (kept2) =>
|
|
12731
|
-
const hints = [...hintClauses.slice(0, kept2), structuredFragment].filter(
|
|
12732
|
-
(p) => p.length > 0
|
|
12733
|
-
);
|
|
12734
|
-
if (hints.length === 0) return userPrompt;
|
|
12735
|
-
return joinPromptHints(userPrompt ?? "", hints);
|
|
12736
|
-
};
|
|
12835
|
+
const composeWith = (kept2) => composeSectionedPrompt(userPrompt, hintClauses.slice(0, kept2), structuredFragment);
|
|
12737
12836
|
const cap = opts?.cap;
|
|
12738
12837
|
if (cap === void 0) return composeWith(hintClauses.length);
|
|
12739
12838
|
const frame = opts?.frame ?? ((body2) => body2);
|
|
12740
12839
|
let kept = hintClauses.length;
|
|
12741
12840
|
let body = composeWith(kept);
|
|
12742
12841
|
let framedLength = frame(body)?.length ?? 0;
|
|
12842
|
+
if (framedLength <= cap) return body;
|
|
12843
|
+
const costs = sectionedClauseCosts(userPrompt, hintClauses, structuredFragment);
|
|
12844
|
+
const texts = hintClauses.map((c) => c.text);
|
|
12743
12845
|
while (framedLength > cap && kept > 0) {
|
|
12744
|
-
kept = keepableDirectionHints(
|
|
12846
|
+
kept = keepableDirectionHints(texts, kept, framedLength - cap, costs);
|
|
12745
12847
|
body = composeWith(kept);
|
|
12746
12848
|
framedLength = frame(body)?.length ?? 0;
|
|
12747
12849
|
}
|
|
@@ -34059,6 +34161,6 @@ function buildSurroundFillPrompt(direction, userPrompt) {
|
|
|
34059
34161
|
return `${scene}This is a partial frame: the ${carried} portion contains real, finished pixels and the ${painted} portion is flat gray that MUST be painted in. Paint ONLY the ${painted} gray region as a natural, seamless continuation of the ${carried} portion \u2014 same scene, same perspective, continuing the horizon, geometry, and content across the boundary with no break. Keep the ${carried} portion completely unchanged. CRITICAL: do NOT change the lighting, exposure, white balance, or time of day. Match the ${carried} portion's EXACT light, color temperature, and contrast across the whole frame \u2014 if it is flat overcast daylight, keep flat overcast daylight. No golden hour, no sunset, no warm relight, no cinematic regrade. The seam between the ${carried} and ${painted} portions must be invisible. No people, no text, no labels, no watermarks.`;
|
|
34060
34162
|
}
|
|
34061
34163
|
|
|
34062
|
-
export { ACTION_FX, ACTION_FX_CATEGORY_LABELS, ACTION_FX_CATEGORY_ORDER, ACTION_FX_IDS, AESTHETICS, AESTHETIC_CATEGORY_LABELS, AESTHETIC_CATEGORY_ORDER, AESTHETIC_IDS, ALL_PICKER_WIRING, ANALYZABLE_PICKER_TYPES, ANGLE_LABELS, ASPECT_RATIO_LABELS, ATMOSPHERES, ATMOSPHERE_IDS, AUDIO_WIZARD_CATEGORIES, BACKDROPS, BACKDROP_CATEGORY_LABELS, BACKDROP_CATEGORY_ORDER, BACKDROP_IDS, BRAND_PRESETS, BRAND_PRESET_IDS, BRAND_PRESET_META, CAMERA_FORMATS, CAMERA_FORMAT_IDS, CAMERA_MOTIONS, CAMERA_MOTION_CATEGORY_LABELS, CAMERA_MOTION_CATEGORY_ORDER, CAMERA_MOTION_IDS, CHARACTER_FX, CHARACTER_FX_CATEGORY_LABELS, CHARACTER_FX_CATEGORY_ORDER, CHARACTER_FX_DURATIONS, CHARACTER_FX_IDS, CHARACTER_FX_INTENSITIES, CHARACTER_FX_POSITIONS, CINEMATIC_LOOK_TAIL, COLOR_LOOKS, COLOR_LOOK_CATEGORY_LABELS, COLOR_LOOK_CATEGORY_ORDER, COLOR_LOOK_IDS, COMPOSITION_EFFECTS, COMPOSITION_EFFECT_IDS, DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, DIRECTION_ARRAY_CEILING, DIRECTION_FIELDS, DIRECTION_ID_MAX_CHARS, DIRECTION_KEYS, ERAS, ERA_CATEGORY_LABELS, ERA_CATEGORY_ORDER, ERA_IDS, EXPOSURE_CATEGORY_LABELS, EXPOSURE_CATEGORY_ORDER, EXPOSURE_FIELD_BY_CATEGORY, EXPOSURE_IDS, EXPOSURE_SETTINGS, FACTORY_PRESETS, FACTORY_SNIPPETS, FILM_STILL_PREFIX, FRAMINGS, FRAMING_CATEGORY_LABELS, FRAMING_CATEGORY_ORDER, FRAMING_FIELD_BY_CATEGORY, FRAMING_IDS, GAPS_SCHEMA, HELD_PROPS, HELD_PROP_CATEGORY_LABELS, HELD_PROP_CATEGORY_ORDER, HELD_PROP_IDS, IMAGE_HINT_MODE_DEFAULT, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, LENSES, LENS_IDS, LIGHTINGS, LIGHTING_CATEGORY_LABELS, LIGHTING_CATEGORY_ORDER, LIGHTING_FIELD_BY_CATEGORY, LIGHTING_IDS, LLM_CHAT_WIZARD_CATEGORIES, LOOP_SUBJECTS, LOOP_SUBJECT_CATEGORY_LABELS, LOOP_SUBJECT_CATEGORY_ORDER, MATERIALS, MATERIAL_CATEGORY_LABELS, MATERIAL_CATEGORY_ORDER, MATERIAL_IDS, MAX_SELECTED_BY_DIMENSION, MAX_SELECTED_BY_FRAMING_CATEGORY, MAX_SELECTED_BY_STYLING_DIMENSION, MAX_SUBJECT_KEYS, MOODS, MOOD_CATEGORY_LABELS, MOOD_CATEGORY_ORDER, MOOD_IDS, MOVEMENT_LABELS, MULTI_PICKER_WIRING, MUSIC_EMOTIONS, MUSIC_ENERGIES, MUSIC_ERAS, MUSIC_GENRES, MUSIC_GENRE_CATEGORY_LABELS, MUSIC_GENRE_CATEGORY_ORDER, MUSIC_GENRE_DEFAULT_DATA, MUSIC_MOOD_DEFAULT_DATA, MUSIC_VIBES, MUSIC_WIZARD_CATEGORIES, NODE_PROMPT_CANDIDATE_FIELDS, NODE_PROMPT_FIELDS, OBJECT_ANGLE_PRESETS, OBJECT_ANGLE_PROMPTS, OBJECT_ASSET_PRESETS, OBJECT_ASSET_PROMPTS, OBJECT_MATERIAL_PRESETS, OBJECT_MATERIAL_PROMPTS, OBJECT_VARIATION_PRESETS, OBJECT_VARIATION_PROMPTS, PEOPLE, PERSON_DIMENSION_LABELS, PERSON_DIMENSION_ORDER, PERSON_DIMENSION_SECTIONS, PERSON_FIELD_BY_DIMENSION, PERSON_IDS, PHOTOGRAPHERS, PHOTOGRAPHER_CATEGORY_LABELS, PHOTOGRAPHER_CATEGORY_ORDER, PHOTOGRAPHER_IDS, PHOTO_GENRES, PHOTO_GENRE_CATEGORY_LABELS, PHOTO_GENRE_CATEGORY_ORDER, PHOTO_GENRE_IDS, PICKER_ANALYZER_FAMILIES, PICKER_ANALYZER_REGISTRY, PICKER_CATALOGS, PICKER_TYPES, POSES, POSE_CATEGORY_LABELS, POSE_CATEGORY_ORDER, POSE_IDS, POST_PROCESS_EFFECTS, POST_PROCESS_EFFECT_IDS, PRODUCTION_STYLES, PROMPT_AFFIX_CORE_FIELD_OVERRIDES, PROMPT_AFFIX_NODE_TYPES, PROMPT_HINT_SEPARATOR, PROVIDER_CAPABILITIES, PROVIDER_PROMPT_DOCTRINES, REFERENCE_IMAGE_ROLES, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, REF_BINDING, RENDER_QUALITIES, RENDER_QUALITY_IDS, SCENE_FRAME_RULE, SCENE_PROMPT_MAX_LENGTH, SETTINGS, SETTING_CATEGORY_LABELS, SETTING_IDS, SHOT_LABELS, SINGING_STYLES, SINGLE_PICKER_WIRING, SNIPPET_MEDIA_VALUES, STYLES, STYLE_IDS, STYLE_PRESETS, STYLINGS, STYLING_DIMENSION_LABELS, STYLING_DIMENSION_ORDER, STYLING_FIELD_BY_DIMENSION, STYLING_IDS, SUBJECT_ARRAY_CEILING, SUBJECT_CUSTOM_AGE_KEY, SUBJECT_FIELDS, SUBJECT_FOLD_KEYS, SUBJECT_ID_MAX_CHARS, SUBJECT_IMAGE_HINT_MODE_DEFAULT, SUBJECT_KEYS, SUBJECT_KEY_MAX_CHARS, SUBJECT_VIDEO_HINT_MODE_DEFAULT, TEMPORALS, TEMPORAL_CATEGORY_LABELS, TEMPORAL_CATEGORY_ORDER, TEMPORAL_FIELD_BY_CATEGORY, TEMPORAL_IDS, TERM_MAX_CHARS, TEXT_WIZARD_CATEGORIES, TRANSITIONS, TRANSITION_CATEGORY_LABELS, TRANSITION_CATEGORY_ORDER, TRANSITION_DURATIONS, TRANSITION_IDS, TRANSITION_INTENSITIES, TRANSITION_POSITIONS, VIDEO_HINT_MODE_DEFAULT, VIDEO_WIZARD_CATEGORIES, VOCAL_PRESENCE, VOCAL_PRESENCE_INSTRUMENTAL_ID, VOICE_ACCENTS, VOICE_AGES, VOICE_ARCHETYPES, VOICE_CHARACTER_DEFAULT_DATA, VOICE_DELIVERY_DEFAULT_DATA, VOICE_EMOTIONS, VOICE_GENDERS, VOICE_LANGUAGES, VOICE_PACES, VOICE_TIMBRES, WARDROBE, WARDROBE_CATEGORY_LABELS, WARDROBE_DIMENSION_ORDER, WARDROBE_FIELD_BY_DIMENSION, appendField, appendMusicMeta, applyPickerJson, applyPromptAffixes, applyReferenceOrderToVideo, applyTemplate, assembleImageInput, assembleSunoInput, buildActionFxHints, buildActionFxTerms, buildAestheticHints, buildAestheticTerms, buildAgeHint, buildAtmosphereHints, buildAtmosphereTerms, buildCharacterPrompt, buildCreaturePrompt, buildExposureHints, buildExposureTerms, buildFaceTemplateInputs, buildFramingHints, buildFramingTerms, buildHeldPropHints, buildHeldPropTerms, buildIdentityDirectives, buildIdentityLockLine, buildImagePrompt, buildImagePromptSegments, buildImagePromptWithOverflow, buildInstrumentationHints, buildInstrumentationTerms, buildLightingHints, buildLightingTerms, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMaterialHints, buildMaterialTerms, buildMoodHints, buildMoodTerms, buildMotionPrompt, buildMultiPickerAnalyzerSpec, buildMusicGenreHints, buildMusicGenreTerms, buildMusicMoodHints, buildMusicMoodTerms, buildObjectMotionPrompt, buildObjectPrompt, buildPersonHints, buildPersonTerms, buildPhotographerHints, buildPhotographerTerms, buildPickerAnalyzerSpec, buildPickerLegend, buildPickerZodSchema, buildPoseHints, buildPoseTerms, buildPostProcessHints, buildPostProcessTerms, buildReferenceBlocks, buildScenePrompt, buildStylingHints, buildStylingTerms, buildSurroundFillPrompt, buildTemporalHints, buildTemporalTerms, buildVoiceCharacterHints, buildVoiceCharacterTerms, buildVoiceDeliveryHints, buildVoiceDeliveryTerms, buildWardrobeHints, catalogPacksVersion, characterLockToRefLock, collectIdentityLockClause, composeCameraMotionHintFromConnections, composeCameraMotionTermFromConnections, composeCharacterFxHintFromConnections, composeNegative, composePickerCatalogs, composeSoundHintFromConnections, composeTransitionHintFromConnections, composeVideoPromptText, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, deriveTerm, directionFieldsForSurface, expandImagePositionRefs, expandImageRefTokens, filmStillPrefix, getActionFx, getActionFxLabel, getActionFxPromptHint, getActionFxTerm, getAesthetic, getAestheticLabel, getAestheticPromptHint, getAestheticTerm, getAtmosphere, getAtmosphereLabel, getAtmospherePromptHint, getAtmosphereTerm, getBackdrop, getBackdropLabel, getBackdropPromptHint, getBackdropTerm, getCameraFormat, getCameraFormatLabel, getCameraFormatPromptHint, getCameraFormatTerm, getCameraMotion, getCameraMotionLabel, getCameraMotionPromptHint, getCameraMotionTerm, getCategoriesForNodeType, getCharacterFx, getCharacterFxLabel, getCharacterFxPromptHint, getCharacterFxTerm, getColorLook, getColorLookLabel, getColorLookPromptHint, getColorLookTerm, getCompositionEffect, getCompositionEffectLabel, getCompositionEffectPromptHint, getCompositionEffectTerm, getEffectiveSunoCustomMode, getEra, getEraLabel, getEraPromptHint, getEraTerm, getExposure, getExposureLabel, getExposurePromptHint, getExposureTerm, getFactoryPresets, getFactorySnippets, getFraming, getFramingCategoryLimit, getFramingLabel, getFramingPromptHint, getFramingTerm, getHeldProp, getHeldPropLabel, getHeldPropPromptHint, getHeldPropTerm, getIdentityLockClause, getInstrument, getInstrumentTerm, getLens, getLensLabel, getLensPromptHint, getLensTerm, getLighting, getLightingLabel, getLightingPromptHint, getLightingTerm, getLoopSubject, getLoopSubjectLabel, getLoopSubjectPromptHint, getLoopSubjectTerm, getMaterial, getMaterialLabel, getMaterialPromptHint, getMaterialTerm, getMood, getMoodLabel, getMoodPromptHint, getMoodTerm, getMusicEmotion, getMusicEmotionTerm, getMusicEnergy, getMusicEnergyTerm, getMusicEra, getMusicEraTerm, getMusicGenre, getMusicGenreLabel, getMusicGenreTerm, getMusicSubgenre, getMusicSubgenreTerm, getMusicVibe, getMusicVibeTerm, getParameterPromptHint, getPerson, getPersonDimensionLimit, getPersonLabel, getPersonPromptHint, getPersonTerm, getPhotoGenre, getPhotoGenreLabel, getPhotoGenrePromptHint, getPhotoGenreTerm, getPhotographer, getPhotographerLabel, getPhotographerPromptHint, getPhotographerTerm, getPickerAnalyzer, getPickerCatalog, getPickerWiring, getPose, getPoseLabel, getPosePromptHint, getPoseTerm, getPostProcessEffect, getPostProcessEffectLabel, getPostProcessEffectPromptHint, getPostProcessEffectTerm, getProductionStyle, getProductionStyleTerm, getPromptDoctrine, getPromptFields, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRegisteredSubjectKeys, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, getSnippetMedia, getStyle, getStyleLabel, getStylePreset, getStylePromptHint, getStyleTerm, getStyling, getStylingDimensionLimit, getStylingLabel, getStylingPromptHint, getStylingTerm, getTemporal, getTemporalLabel, getTemporalPromptHint, getTemporalTerm, getTransition, getTransitionLabel, getTransitionPromptHint, getTransitionTerm, getVocalPresence, getVocalPresenceTerm, getVoiceAccent, getVoiceAccentTerm, getVoiceAge, getVoiceAgeTerm, getVoiceArchetype, getVoiceArchetypeTerm, getVoiceEmotion, getVoiceEmotionTerm, getVoiceGender, getVoiceGenderTerm, getVoiceLanguage, getVoiceLanguageTerm, getVoicePace, getVoicePaceTerm, getVoiceTimbre, getVoiceTimbreTerm, getWardrobeEntriesByDimension, getWardrobeEntry, getWardrobePromptHint, groupFactoryPresets, hasUpstreamCharacter, identityRefsSentence, isAnalyzablePicker, isInstrumentalVocal, isSuspiciousDerivedTerm, isVantageFraming, isWizardSupported, joinPromptHints, joinPromptParts, keepableDirectionHints, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, normalizeSubjectFields, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, readSubjectFields, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDirectionHints, renderStructuredFields, renderSubjectHints, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, subjectFieldsForSurface, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|
|
34164
|
+
export { ACTION_FX, ACTION_FX_CATEGORY_LABELS, ACTION_FX_CATEGORY_ORDER, ACTION_FX_IDS, AESTHETICS, AESTHETIC_CATEGORY_LABELS, AESTHETIC_CATEGORY_ORDER, AESTHETIC_IDS, ALL_PICKER_WIRING, ANALYZABLE_PICKER_TYPES, ANGLE_LABELS, ASPECT_RATIO_LABELS, ATMOSPHERES, ATMOSPHERE_IDS, AUDIO_WIZARD_CATEGORIES, BACKDROPS, BACKDROP_CATEGORY_LABELS, BACKDROP_CATEGORY_ORDER, BACKDROP_IDS, BRAND_PRESETS, BRAND_PRESET_IDS, BRAND_PRESET_META, CAMERA_FORMATS, CAMERA_FORMAT_IDS, CAMERA_MOTIONS, CAMERA_MOTION_CATEGORY_LABELS, CAMERA_MOTION_CATEGORY_ORDER, CAMERA_MOTION_IDS, CHARACTER_FX, CHARACTER_FX_CATEGORY_LABELS, CHARACTER_FX_CATEGORY_ORDER, CHARACTER_FX_DURATIONS, CHARACTER_FX_IDS, CHARACTER_FX_INTENSITIES, CHARACTER_FX_POSITIONS, CINEMATIC_LOOK_TAIL, COLOR_LOOKS, COLOR_LOOK_CATEGORY_LABELS, COLOR_LOOK_CATEGORY_ORDER, COLOR_LOOK_IDS, COMPOSITION_EFFECTS, COMPOSITION_EFFECT_IDS, DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, DIRECTION_ARRAY_CEILING, DIRECTION_FIELDS, DIRECTION_ID_MAX_CHARS, DIRECTION_KEYS, ERAS, ERA_CATEGORY_LABELS, ERA_CATEGORY_ORDER, ERA_IDS, EXPOSURE_CATEGORY_LABELS, EXPOSURE_CATEGORY_ORDER, EXPOSURE_FIELD_BY_CATEGORY, EXPOSURE_IDS, EXPOSURE_SETTINGS, FACTORY_PRESETS, FACTORY_SNIPPETS, FILM_STILL_PREFIX, FILM_STYLE_KEYS, FRAMINGS, FRAMING_CATEGORY_LABELS, FRAMING_CATEGORY_ORDER, FRAMING_FIELD_BY_CATEGORY, FRAMING_IDS, GAPS_SCHEMA, HELD_PROPS, HELD_PROP_CATEGORY_LABELS, HELD_PROP_CATEGORY_ORDER, HELD_PROP_IDS, IMAGE_HINT_MODE_DEFAULT, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, LENSES, LENS_IDS, LIGHTINGS, LIGHTING_CATEGORY_LABELS, LIGHTING_CATEGORY_ORDER, LIGHTING_FIELD_BY_CATEGORY, LIGHTING_IDS, LLM_CHAT_WIZARD_CATEGORIES, LOOP_SUBJECTS, LOOP_SUBJECT_CATEGORY_LABELS, LOOP_SUBJECT_CATEGORY_ORDER, MATERIALS, MATERIAL_CATEGORY_LABELS, MATERIAL_CATEGORY_ORDER, MATERIAL_IDS, MAX_SELECTED_BY_DIMENSION, MAX_SELECTED_BY_FRAMING_CATEGORY, MAX_SELECTED_BY_STYLING_DIMENSION, MAX_SUBJECT_KEYS, MOODS, MOOD_CATEGORY_LABELS, MOOD_CATEGORY_ORDER, MOOD_IDS, MOVEMENT_LABELS, MULTI_PICKER_WIRING, MUSIC_EMOTIONS, MUSIC_ENERGIES, MUSIC_ERAS, MUSIC_GENRES, MUSIC_GENRE_CATEGORY_LABELS, MUSIC_GENRE_CATEGORY_ORDER, MUSIC_GENRE_DEFAULT_DATA, MUSIC_MOOD_DEFAULT_DATA, MUSIC_VIBES, MUSIC_WIZARD_CATEGORIES, NODE_PROMPT_CANDIDATE_FIELDS, NODE_PROMPT_FIELDS, OBJECT_ANGLE_PRESETS, OBJECT_ANGLE_PROMPTS, OBJECT_ASSET_PRESETS, OBJECT_ASSET_PROMPTS, OBJECT_MATERIAL_PRESETS, OBJECT_MATERIAL_PROMPTS, OBJECT_VARIATION_PRESETS, OBJECT_VARIATION_PROMPTS, PEOPLE, PERSON_DIMENSION_LABELS, PERSON_DIMENSION_ORDER, PERSON_DIMENSION_SECTIONS, PERSON_FIELD_BY_DIMENSION, PERSON_IDS, PHOTOGRAPHERS, PHOTOGRAPHER_CATEGORY_LABELS, PHOTOGRAPHER_CATEGORY_ORDER, PHOTOGRAPHER_IDS, PHOTO_GENRES, PHOTO_GENRE_CATEGORY_LABELS, PHOTO_GENRE_CATEGORY_ORDER, PHOTO_GENRE_IDS, PICKER_ANALYZER_FAMILIES, PICKER_ANALYZER_REGISTRY, PICKER_CATALOGS, PICKER_TYPES, POSES, POSE_CATEGORY_LABELS, POSE_CATEGORY_ORDER, POSE_IDS, POST_PROCESS_EFFECTS, POST_PROCESS_EFFECT_IDS, PRODUCTION_STYLES, PROMPT_AFFIX_CORE_FIELD_OVERRIDES, PROMPT_AFFIX_NODE_TYPES, PROMPT_HINT_SEPARATOR, PROVIDER_CAPABILITIES, PROVIDER_PROMPT_DOCTRINES, REFERENCE_IMAGE_ROLES, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, REF_BINDING, RENDER_QUALITIES, RENDER_QUALITY_IDS, SCENE_FRAME_RULE, SCENE_PROMPT_MAX_LENGTH, SETTINGS, SETTING_CATEGORY_LABELS, SETTING_IDS, SHOT_LABELS, SINGING_STYLES, SINGLE_PICKER_WIRING, SNIPPET_MEDIA_VALUES, STYLES, STYLE_IDS, STYLE_PRESETS, STYLE_SECTION_GAP, STYLE_SECTION_HEADER, STYLINGS, STYLING_DIMENSION_LABELS, STYLING_DIMENSION_ORDER, STYLING_FIELD_BY_DIMENSION, STYLING_IDS, SUBJECT_ARRAY_CEILING, SUBJECT_CUSTOM_AGE_KEY, SUBJECT_FIELDS, SUBJECT_FOLD_KEYS, SUBJECT_ID_MAX_CHARS, SUBJECT_IMAGE_HINT_MODE_DEFAULT, SUBJECT_KEYS, SUBJECT_KEY_MAX_CHARS, SUBJECT_VIDEO_HINT_MODE_DEFAULT, TEMPORALS, TEMPORAL_CATEGORY_LABELS, TEMPORAL_CATEGORY_ORDER, TEMPORAL_FIELD_BY_CATEGORY, TEMPORAL_IDS, TERM_MAX_CHARS, TEXT_WIZARD_CATEGORIES, TRANSITIONS, TRANSITION_CATEGORY_LABELS, TRANSITION_CATEGORY_ORDER, TRANSITION_DURATIONS, TRANSITION_IDS, TRANSITION_INTENSITIES, TRANSITION_POSITIONS, VIDEO_HINT_MODE_DEFAULT, VIDEO_WIZARD_CATEGORIES, VOCAL_PRESENCE, VOCAL_PRESENCE_INSTRUMENTAL_ID, VOICE_ACCENTS, VOICE_AGES, VOICE_ARCHETYPES, VOICE_CHARACTER_DEFAULT_DATA, VOICE_DELIVERY_DEFAULT_DATA, VOICE_EMOTIONS, VOICE_GENDERS, VOICE_LANGUAGES, VOICE_PACES, VOICE_TIMBRES, WARDROBE, WARDROBE_CATEGORY_LABELS, WARDROBE_DIMENSION_ORDER, WARDROBE_FIELD_BY_DIMENSION, appendField, appendMusicMeta, applyPickerJson, applyPromptAffixes, applyReferenceOrderToVideo, applyTemplate, asBodyClauses, assembleImageInput, assembleSunoInput, buildActionFxHints, buildActionFxTerms, buildAestheticHints, buildAestheticTerms, buildAgeHint, buildAtmosphereHints, buildAtmosphereTerms, buildCharacterPrompt, buildCreaturePrompt, buildExposureHints, buildExposureTerms, buildFaceTemplateInputs, buildFramingHints, buildFramingTerms, buildHeldPropHints, buildHeldPropTerms, buildIdentityDirectives, buildIdentityLockLine, buildImagePrompt, buildImagePromptSegments, buildImagePromptWithOverflow, buildInstrumentationHints, buildInstrumentationTerms, buildLightingHints, buildLightingTerms, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMaterialHints, buildMaterialTerms, buildMoodHints, buildMoodTerms, buildMotionPrompt, buildMultiPickerAnalyzerSpec, buildMusicGenreHints, buildMusicGenreTerms, buildMusicMoodHints, buildMusicMoodTerms, buildObjectMotionPrompt, buildObjectPrompt, buildPersonHints, buildPersonTerms, buildPhotographerHints, buildPhotographerTerms, buildPickerAnalyzerSpec, buildPickerLegend, buildPickerZodSchema, buildPoseHints, buildPoseTerms, buildPostProcessHints, buildPostProcessTerms, buildReferenceBlocks, buildScenePrompt, buildStylingHints, buildStylingTerms, buildSurroundFillPrompt, buildTemporalHints, buildTemporalTerms, buildVoiceCharacterHints, buildVoiceCharacterTerms, buildVoiceDeliveryHints, buildVoiceDeliveryTerms, buildWardrobeHints, catalogPacksVersion, characterLockToRefLock, collectIdentityLockClause, composeCameraMotionHintFromConnections, composeCameraMotionTermFromConnections, composeCharacterFxHintFromConnections, composeNegative, composePickerCatalogs, composeSectionedPrompt, composeSoundHintFromConnections, composeTransitionHintFromConnections, composeVideoPromptText, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, deriveTerm, directionFieldsForSurface, endsInsideStyleSection, expandImagePositionRefs, expandImageRefTokens, filmStillPrefix, getActionFx, getActionFxLabel, getActionFxPromptHint, getActionFxTerm, getAesthetic, getAestheticLabel, getAestheticPromptHint, getAestheticTerm, getAtmosphere, getAtmosphereLabel, getAtmospherePromptHint, getAtmosphereTerm, getBackdrop, getBackdropLabel, getBackdropPromptHint, getBackdropTerm, getCameraFormat, getCameraFormatLabel, getCameraFormatPromptHint, getCameraFormatTerm, getCameraMotion, getCameraMotionLabel, getCameraMotionPromptHint, getCameraMotionTerm, getCategoriesForNodeType, getCharacterFx, getCharacterFxLabel, getCharacterFxPromptHint, getCharacterFxTerm, getColorLook, getColorLookLabel, getColorLookPromptHint, getColorLookTerm, getCompositionEffect, getCompositionEffectLabel, getCompositionEffectPromptHint, getCompositionEffectTerm, getEffectiveSunoCustomMode, getEra, getEraLabel, getEraPromptHint, getEraTerm, getExposure, getExposureLabel, getExposurePromptHint, getExposureTerm, getFactoryPresets, getFactorySnippets, getFraming, getFramingCategoryLimit, getFramingLabel, getFramingPromptHint, getFramingTerm, getHeldProp, getHeldPropLabel, getHeldPropPromptHint, getHeldPropTerm, getIdentityLockClause, getInstrument, getInstrumentTerm, getLens, getLensLabel, getLensPromptHint, getLensTerm, getLighting, getLightingLabel, getLightingPromptHint, getLightingTerm, getLoopSubject, getLoopSubjectLabel, getLoopSubjectPromptHint, getLoopSubjectTerm, getMaterial, getMaterialLabel, getMaterialPromptHint, getMaterialTerm, getMood, getMoodLabel, getMoodPromptHint, getMoodTerm, getMusicEmotion, getMusicEmotionTerm, getMusicEnergy, getMusicEnergyTerm, getMusicEra, getMusicEraTerm, getMusicGenre, getMusicGenreLabel, getMusicGenreTerm, getMusicSubgenre, getMusicSubgenreTerm, getMusicVibe, getMusicVibeTerm, getParameterPromptHint, getPerson, getPersonDimensionLimit, getPersonLabel, getPersonPromptHint, getPersonTerm, getPhotoGenre, getPhotoGenreLabel, getPhotoGenrePromptHint, getPhotoGenreTerm, getPhotographer, getPhotographerLabel, getPhotographerPromptHint, getPhotographerTerm, getPickerAnalyzer, getPickerCatalog, getPickerWiring, getPose, getPoseLabel, getPosePromptHint, getPoseTerm, getPostProcessEffect, getPostProcessEffectLabel, getPostProcessEffectPromptHint, getPostProcessEffectTerm, getProductionStyle, getProductionStyleTerm, getPromptDoctrine, getPromptFields, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRegisteredSubjectKeys, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, getSnippetMedia, getStyle, getStyleLabel, getStylePreset, getStylePromptHint, getStyleTerm, getStyling, getStylingDimensionLimit, getStylingLabel, getStylingPromptHint, getStylingTerm, getTemporal, getTemporalLabel, getTemporalPromptHint, getTemporalTerm, getTransition, getTransitionLabel, getTransitionPromptHint, getTransitionTerm, getVocalPresence, getVocalPresenceTerm, getVoiceAccent, getVoiceAccentTerm, getVoiceAge, getVoiceAgeTerm, getVoiceArchetype, getVoiceArchetypeTerm, getVoiceEmotion, getVoiceEmotionTerm, getVoiceGender, getVoiceGenderTerm, getVoiceLanguage, getVoiceLanguageTerm, getVoicePace, getVoicePaceTerm, getVoiceTimbre, getVoiceTimbreTerm, getWardrobeEntriesByDimension, getWardrobeEntry, getWardrobePromptHint, groupFactoryPresets, hasUpstreamCharacter, identityRefsSentence, insertBeforeStyleSection, isAnalyzablePicker, isInstrumentalVocal, isSuspiciousDerivedTerm, isVantageFraming, isWizardSupported, joinPromptHints, joinPromptParts, keepableDirectionHints, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, normalizeSubjectFields, partitionStyleClauses, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, readSubjectFields, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDirectionHintClauses, renderDirectionHints, renderStructuredFields, renderStyleSection, renderSubjectHints, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, sectionedClauseCosts, splitStyleSection, styleSectionFromClauses, styleSlotFor, subjectFieldsForSurface, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|
|
34063
34165
|
//# sourceMappingURL=index.js.map
|
|
34064
34166
|
//# sourceMappingURL=index.js.map
|