@nodaro/prompts 1.11.0 → 1.12.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 +383 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +516 -28
- package/dist/index.d.ts +516 -28
- package/dist/index.js +368 -51
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/__snapshots__/entity-convergence-image.test.ts.snap +19 -0
- package/src/__tests__/animal-getters-parity.test.ts +82 -0
- package/src/__tests__/assemble-image-input-cap.test.ts +212 -0
- package/src/__tests__/assemble-video-input-cap.test.ts +356 -0
- package/src/__tests__/entity-convergence-image.test.ts +374 -0
- package/src/__tests__/location-convergence-image.test.ts +29 -1
- package/src/__tests__/location-default-role-image.test.ts +166 -0
- package/src/__tests__/mention-splice-spacing.test.ts +257 -0
- package/src/__tests__/read-node-subject.test.ts +140 -0
- package/src/__tests__/subject-fold.test.ts +232 -0
- package/src/__tests__/subject-registry.test.ts +312 -0
- package/src/assemble-image-input.ts +133 -30
- package/src/assemble-video-input.ts +173 -18
- package/src/direction-registry.ts +18 -1
- package/src/hint-shedding.ts +68 -0
- package/src/index.ts +2 -0
- package/src/parameter-prompt-hint.ts +8 -7
- package/src/picker-catalogs.ts +14 -7
- package/src/prompt-builder.ts +544 -61
- package/src/read-node-direction.ts +60 -1
- package/src/subject-registry.ts +464 -0
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ANIMAL_SUBCATEGORY_LABELS, ANIMAL_SUBCATEGORY_ORDER, VEHICLE_SUBCATEGORY_LABELS, VEHICLE_SUBCATEGORY_ORDER, WEAPON_SUBCATEGORY_LABELS, WEAPON_SUBCATEGORY_ORDER, FURNITURE_SUBCATEGORY_LABELS, FURNITURE_SUBCATEGORY_ORDER, VIDEO_REF_LIMITS_BY_PROVIDER, SOCIAL_POST_NODE_TYPES, FURNITURE, WEAPONS, VEHICLES, ANIMALS, PASSTHROUGH_TYPES, registerCatalogSidecars, resetCatalogSidecars, pickIds, getFurniture, getWeapon, getVehicle,
|
|
1
|
+
import { ANIMAL_SUBCATEGORY_LABELS, ANIMAL_SUBCATEGORY_ORDER, VEHICLE_SUBCATEGORY_LABELS, VEHICLE_SUBCATEGORY_ORDER, WEAPON_SUBCATEGORY_LABELS, WEAPON_SUBCATEGORY_ORDER, FURNITURE_SUBCATEGORY_LABELS, FURNITURE_SUBCATEGORY_ORDER, VIDEO_REF_LIMITS_BY_PROVIDER, SOCIAL_POST_NODE_TYPES, FURNITURE, WEAPONS, VEHICLES, ANIMALS, PASSTHROUGH_TYPES, registerCatalogSidecars, resetCatalogSidecars, pickIds, getAnimalPromptHint, getFurniture, getWeapon, getVehicle, DEFAULT_USAGE_MODE, usageModeDirective, DEFAULT_LOCATION_USAGE_MODE, imageReferenceLimit, knownImageSlugsFromRefs, findImageMentionTokens, knownEntitySlugsFromRefs, findEntityMentionTokens, findCharacterMentionTokens, findLocationMentionTokens, NATIVE_NEGATIVE_PROMPT_MODELS, getMaxNegativePromptChars, getMaxImagePromptChars, MODELS_WITH_REFERENCE_IMAGE_SUPPORT, getAnimalTerm, roleToPhrase, resolveDefaultRole, SEEDANCE_2_REF_LIMITS, NON_EN_LOCALE_IDS, readPromptAffixes, setRegisteredPersonPackFields, PLACEHOLDER_CHARACTER_NAME, REFERENCE_ROLE_PRESETS, imageMentionSlugForRef, entityMentionSlugForRef, defaultRoleForSource, locationReferencePhotoKindLabel, resolveNodeRefs, normalizeRoleSlug } from '@nodaro/shared';
|
|
2
2
|
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __export = (target, all) => {
|
|
@@ -9239,7 +9239,7 @@ function objectOptions(arr, phrase) {
|
|
|
9239
9239
|
label: e.label,
|
|
9240
9240
|
description: e.description,
|
|
9241
9241
|
category: e.subcategory,
|
|
9242
|
-
promptHint: phrase(e
|
|
9242
|
+
promptHint: phrase(e),
|
|
9243
9243
|
// Object entities have no `promptHint` field of their own (it is
|
|
9244
9244
|
// synthesized above), so the term cannot come from `resolveTerm`'s
|
|
9245
9245
|
// empty-hint rule: an authored `term` wins, and otherwise the label IS the
|
|
@@ -9571,7 +9571,7 @@ var SINGLE_CATALOGS = [
|
|
|
9571
9571
|
defaultValue: "dog-golden-retriever",
|
|
9572
9572
|
categoryOrder: ANIMAL_SUBCATEGORY_ORDER,
|
|
9573
9573
|
categoryLabels: ANIMAL_SUBCATEGORY_LABELS,
|
|
9574
|
-
options: objectOptions(ANIMALS, (
|
|
9574
|
+
options: objectOptions(ANIMALS, (e) => getAnimalPromptHint(e.id))
|
|
9575
9575
|
},
|
|
9576
9576
|
{
|
|
9577
9577
|
nodeType: "vehicle",
|
|
@@ -9582,7 +9582,7 @@ var SINGLE_CATALOGS = [
|
|
|
9582
9582
|
defaultValue: "sedan",
|
|
9583
9583
|
categoryOrder: VEHICLE_SUBCATEGORY_ORDER,
|
|
9584
9584
|
categoryLabels: VEHICLE_SUBCATEGORY_LABELS,
|
|
9585
|
-
options: objectOptions(VEHICLES, (
|
|
9585
|
+
options: objectOptions(VEHICLES, (e) => `featuring a ${e.label.toLowerCase()}, ${e.description}`)
|
|
9586
9586
|
},
|
|
9587
9587
|
{
|
|
9588
9588
|
nodeType: "weapon",
|
|
@@ -9593,7 +9593,7 @@ var SINGLE_CATALOGS = [
|
|
|
9593
9593
|
defaultValue: "katana",
|
|
9594
9594
|
categoryOrder: WEAPON_SUBCATEGORY_ORDER,
|
|
9595
9595
|
categoryLabels: WEAPON_SUBCATEGORY_LABELS,
|
|
9596
|
-
options: objectOptions(WEAPONS, (
|
|
9596
|
+
options: objectOptions(WEAPONS, (e) => `with a ${e.label.toLowerCase()}, ${e.description}`)
|
|
9597
9597
|
},
|
|
9598
9598
|
{
|
|
9599
9599
|
nodeType: "furniture",
|
|
@@ -9604,7 +9604,7 @@ var SINGLE_CATALOGS = [
|
|
|
9604
9604
|
defaultValue: "sofa",
|
|
9605
9605
|
categoryOrder: FURNITURE_SUBCATEGORY_ORDER,
|
|
9606
9606
|
categoryLabels: FURNITURE_SUBCATEGORY_LABELS,
|
|
9607
|
-
options: objectOptions(FURNITURE, (
|
|
9607
|
+
options: objectOptions(FURNITURE, (e) => `including a ${e.label.toLowerCase()}, ${e.description}`)
|
|
9608
9608
|
},
|
|
9609
9609
|
{
|
|
9610
9610
|
nodeType: "held-prop",
|
|
@@ -9972,13 +9972,16 @@ function resolveBaseHint(type, data, mode = "full") {
|
|
|
9972
9972
|
return withCustomText(data, byMode(mode, getLoopSubjectPromptHint, getLoopSubjectTerm)(asStr(data.loopSubject)));
|
|
9973
9973
|
case "material":
|
|
9974
9974
|
return withCustomText(data, buildMaterialHints(data.material, mode));
|
|
9975
|
-
|
|
9976
|
-
|
|
9975
|
+
// Animal is the one Object-entity catalog whose phrasing has a single
|
|
9976
|
+
// owner: `@nodaro/shared`'s `getAnimalPromptHint` / `getAnimalTerm`, which
|
|
9977
|
+
// the picker-catalog funnel calls too. Both getters already return "" on a
|
|
9978
|
+
// miss, so the entry lookup and the `animal ? … : ""` guard are the
|
|
9979
|
+
// getters' job now, not this switch's.
|
|
9980
|
+
case "animal":
|
|
9977
9981
|
return withCustomText(
|
|
9978
9982
|
data,
|
|
9979
|
-
|
|
9983
|
+
byMode(mode, getAnimalPromptHint, getAnimalTerm)(asStr(data.animal))
|
|
9980
9984
|
);
|
|
9981
|
-
}
|
|
9982
9985
|
case "vehicle": {
|
|
9983
9986
|
const vehicle = getVehicle(asStr(data.vehicle));
|
|
9984
9987
|
return withCustomText(
|
|
@@ -10282,6 +10285,11 @@ ${resolvedPrompt}`;
|
|
|
10282
10285
|
}
|
|
10283
10286
|
return { prompt: resolvedPrompt, additionalUrls, mentionedCharacterSlugs };
|
|
10284
10287
|
}
|
|
10288
|
+
function spliceMentionPhrase(prompt, offset, tokenLength, phrase) {
|
|
10289
|
+
const before = prompt.slice(0, offset).replace(/(?<=\S)[^\S\r\n]{2,}$/, " ");
|
|
10290
|
+
const after = prompt.slice(offset + tokenLength).replace(/^[^\S\r\n]{2,}/, " ");
|
|
10291
|
+
return before + phrase + after;
|
|
10292
|
+
}
|
|
10285
10293
|
function resolveCharacterMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
10286
10294
|
const bySlug = /* @__PURE__ */ new Map();
|
|
10287
10295
|
const byVariant = /* @__PURE__ */ new Map();
|
|
@@ -10320,7 +10328,7 @@ function resolveCharacterMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
|
10320
10328
|
let resolvedPrompt = prompt;
|
|
10321
10329
|
for (const m of [...matched].sort((a, b) => b.offset - a.offset)) {
|
|
10322
10330
|
const phrase = roleToPhrase(m.role, bindingFor(m.url));
|
|
10323
|
-
resolvedPrompt = resolvedPrompt
|
|
10331
|
+
resolvedPrompt = spliceMentionPhrase(resolvedPrompt, m.offset, m.token.length, phrase);
|
|
10324
10332
|
}
|
|
10325
10333
|
const lockLines = [];
|
|
10326
10334
|
const elementDirectives = [];
|
|
@@ -10351,16 +10359,21 @@ function locationModeDirective(mode) {
|
|
|
10351
10359
|
}
|
|
10352
10360
|
}
|
|
10353
10361
|
function locationModeToRole(mode) {
|
|
10354
|
-
|
|
10355
|
-
|
|
10356
|
-
|
|
10357
|
-
|
|
10358
|
-
|
|
10359
|
-
|
|
10360
|
-
|
|
10361
|
-
|
|
10362
|
-
|
|
10363
|
-
|
|
10362
|
+
return roleBearingLocationMode(mode) ?? defaultRoleForSource("wired-location");
|
|
10363
|
+
}
|
|
10364
|
+
function roleBearingLocationMode(mode) {
|
|
10365
|
+
const m = mode?.trim();
|
|
10366
|
+
if (!m) return null;
|
|
10367
|
+
return REFERENCE_ROLE_PRESETS["wired-location"].includes(m) ? m : null;
|
|
10368
|
+
}
|
|
10369
|
+
function resolveLocationRole(tokenRole, tokenUsageMode, ref) {
|
|
10370
|
+
const explicitRole = tokenRole?.trim();
|
|
10371
|
+
if (explicitRole) return normalizeRoleSlug(explicitRole);
|
|
10372
|
+
const modeRole = roleBearingLocationMode(tokenUsageMode);
|
|
10373
|
+
if (modeRole) return modeRole;
|
|
10374
|
+
const nodeRole = ref.defaultRole?.trim();
|
|
10375
|
+
if (nodeRole) return normalizeRoleSlug(nodeRole);
|
|
10376
|
+
return locationModeToRole(ref.defaultUsageMode ?? DEFAULT_LOCATION_USAGE_MODE);
|
|
10364
10377
|
}
|
|
10365
10378
|
function resolveLocationMentions(prompt, tokens, refs) {
|
|
10366
10379
|
const bySlug = /* @__PURE__ */ new Map();
|
|
@@ -10442,8 +10455,7 @@ function resolveLocationMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
|
10442
10455
|
mentionedLocationSlugs.add(t.locationSlug);
|
|
10443
10456
|
refByUrl.set(match.url, match);
|
|
10444
10457
|
if (t.lock !== void 0) lockOverrideByUrl.set(match.url, t.lock);
|
|
10445
|
-
const
|
|
10446
|
-
const role = t.role ? normalizeRoleSlug(t.role) : locationModeToRole(mode);
|
|
10458
|
+
const role = resolveLocationRole(t.role, t.usageMode, match);
|
|
10447
10459
|
matched.push({ token: t.token, offset: t.offset, url: match.url, role });
|
|
10448
10460
|
}
|
|
10449
10461
|
const slotByUrl = /* @__PURE__ */ new Map();
|
|
@@ -10457,7 +10469,7 @@ function resolveLocationMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
|
10457
10469
|
let resolvedPrompt = prompt;
|
|
10458
10470
|
for (const m of [...matched].sort((a, b) => b.offset - a.offset)) {
|
|
10459
10471
|
const phrase = roleToPhrase(m.role, bindingFor(m.url));
|
|
10460
|
-
resolvedPrompt = resolvedPrompt
|
|
10472
|
+
resolvedPrompt = spliceMentionPhrase(resolvedPrompt, m.offset, m.token.length, phrase);
|
|
10461
10473
|
}
|
|
10462
10474
|
const lockLines = [];
|
|
10463
10475
|
const elementDirectives = [];
|
|
@@ -10506,7 +10518,7 @@ function resolveImageMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
|
10506
10518
|
let resolvedPrompt = prompt;
|
|
10507
10519
|
for (const m of [...matched].sort((a, b) => b.offset - a.offset)) {
|
|
10508
10520
|
const phrase = roleToPhrase(m.role, bindingFor(m.url));
|
|
10509
|
-
resolvedPrompt = resolvedPrompt
|
|
10521
|
+
resolvedPrompt = spliceMentionPhrase(resolvedPrompt, m.offset, m.token.length, phrase);
|
|
10510
10522
|
}
|
|
10511
10523
|
const lockLines = [];
|
|
10512
10524
|
const elementDirectives = [];
|
|
@@ -10524,6 +10536,60 @@ function resolveImageMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
|
10524
10536
|
}
|
|
10525
10537
|
return { prompt: resolvedPrompt, additionalUrls, lockLines, elementDirectives };
|
|
10526
10538
|
}
|
|
10539
|
+
function resolveEntityMentionsHybrid(prompt, tokens, refs, existingUrls) {
|
|
10540
|
+
const bySlug = /* @__PURE__ */ new Map();
|
|
10541
|
+
for (const source of ["wired-creature", "wired-object"]) {
|
|
10542
|
+
for (const r of refs) {
|
|
10543
|
+
if (r.source !== source) continue;
|
|
10544
|
+
const slug = entityMentionSlugForRef(r);
|
|
10545
|
+
if (!slug) continue;
|
|
10546
|
+
if (!bySlug.has(slug)) bySlug.set(slug, r);
|
|
10547
|
+
}
|
|
10548
|
+
}
|
|
10549
|
+
const additionalUrls = [];
|
|
10550
|
+
const mentionedUrls = /* @__PURE__ */ new Set();
|
|
10551
|
+
const refByUrl = /* @__PURE__ */ new Map();
|
|
10552
|
+
const lockOverrideByUrl = /* @__PURE__ */ new Map();
|
|
10553
|
+
const matched = [];
|
|
10554
|
+
for (const t of tokens) {
|
|
10555
|
+
const match = bySlug.get(t.entitySlug);
|
|
10556
|
+
if (!match || !match.url) continue;
|
|
10557
|
+
additionalUrls.push(match.url);
|
|
10558
|
+
mentionedUrls.add(match.url);
|
|
10559
|
+
refByUrl.set(match.url, match);
|
|
10560
|
+
if (t.lock !== void 0) lockOverrideByUrl.set(match.url, t.lock);
|
|
10561
|
+
const role = (t.role ?? "").trim() || resolveDefaultRole(match.defaultRole, match.defaultUsageMode, match.source);
|
|
10562
|
+
matched.push({ token: t.token, offset: t.offset, url: match.url, role });
|
|
10563
|
+
}
|
|
10564
|
+
const slotByUrl = /* @__PURE__ */ new Map();
|
|
10565
|
+
for (const u of [...existingUrls, ...additionalUrls]) {
|
|
10566
|
+
if (!slotByUrl.has(u)) slotByUrl.set(u, slotByUrl.size + 1);
|
|
10567
|
+
}
|
|
10568
|
+
const bindingFor = (url2) => {
|
|
10569
|
+
const slot = slotByUrl.get(url2);
|
|
10570
|
+
return slot ? `reference image ${slotToLetter(slot)}` : "the reference image";
|
|
10571
|
+
};
|
|
10572
|
+
let resolvedPrompt = prompt;
|
|
10573
|
+
for (const m of [...matched].sort((a, b) => b.offset - a.offset)) {
|
|
10574
|
+
const phrase = roleToPhrase(m.role, bindingFor(m.url));
|
|
10575
|
+
resolvedPrompt = spliceMentionPhrase(resolvedPrompt, m.offset, m.token.length, phrase);
|
|
10576
|
+
}
|
|
10577
|
+
const lockLines = [];
|
|
10578
|
+
const elementDirectives = [];
|
|
10579
|
+
const seenUrls = /* @__PURE__ */ new Set();
|
|
10580
|
+
for (const m of matched) {
|
|
10581
|
+
if (seenUrls.has(m.url)) continue;
|
|
10582
|
+
seenUrls.add(m.url);
|
|
10583
|
+
const ref = refByUrl.get(m.url);
|
|
10584
|
+
if (!ref) continue;
|
|
10585
|
+
const binding = bindingFor(m.url);
|
|
10586
|
+
const lock = buildIdentityLockLine(withForcedIdentityLock(ref, lockOverrideByUrl.get(m.url)), binding);
|
|
10587
|
+
if (lock) lockLines.push(lock);
|
|
10588
|
+
const inject = ref.elementInjection?.trim();
|
|
10589
|
+
if (inject) elementDirectives.push(inject);
|
|
10590
|
+
}
|
|
10591
|
+
return { prompt: resolvedPrompt, additionalUrls, mentionedUrls, lockLines, elementDirectives };
|
|
10592
|
+
}
|
|
10527
10593
|
function buildCanonicalFallback(refs, mentionedSlugs, startIndex) {
|
|
10528
10594
|
const directiveLines = [];
|
|
10529
10595
|
const urls = [];
|
|
@@ -10682,7 +10748,7 @@ function renderLocationCanonicalHybrid(nonCharacterRefs, finalIndexByUrl, covere
|
|
|
10682
10748
|
if (!slot) continue;
|
|
10683
10749
|
seenUrls.add(r.url);
|
|
10684
10750
|
const binding = `reference image ${slotToLetter(slot)}`;
|
|
10685
|
-
phrases.push(roleToPhrase(
|
|
10751
|
+
phrases.push(roleToPhrase(resolveLocationRole(null, null, r), binding));
|
|
10686
10752
|
const lock = buildIdentityLockLine(r, binding);
|
|
10687
10753
|
if (lock) lockLines.push(lock);
|
|
10688
10754
|
const inject = r.elementInjection?.trim();
|
|
@@ -10841,6 +10907,20 @@ function reconcileBodySegments(body, bodySegments) {
|
|
|
10841
10907
|
function buildImagePrompt(config2) {
|
|
10842
10908
|
return buildImagePromptInternal(config2);
|
|
10843
10909
|
}
|
|
10910
|
+
function buildImagePromptWithOverflow(config2) {
|
|
10911
|
+
const marks = newAssemblyMarks();
|
|
10912
|
+
const result = buildImagePromptInternal(config2, marks);
|
|
10913
|
+
return { ...result, overflowChars: marks.overflowChars };
|
|
10914
|
+
}
|
|
10915
|
+
function newAssemblyMarks() {
|
|
10916
|
+
return {
|
|
10917
|
+
directivesPrefix: "",
|
|
10918
|
+
bodyBeforeSuffixes: "",
|
|
10919
|
+
styleSuffix: "",
|
|
10920
|
+
avoidSuffix: "",
|
|
10921
|
+
overflowChars: 0
|
|
10922
|
+
};
|
|
10923
|
+
}
|
|
10844
10924
|
function buildImagePromptInternal(config2, marks) {
|
|
10845
10925
|
let {
|
|
10846
10926
|
provider,
|
|
@@ -10862,6 +10942,7 @@ function buildImagePromptInternal(config2, marks) {
|
|
|
10862
10942
|
const suppressedCanonicalLocationIds = config2.suppressedCanonicalLocationIds ?? [];
|
|
10863
10943
|
const isHybrid = config2.referenceFormat === "hybrid";
|
|
10864
10944
|
let hybridBodyConverged = false;
|
|
10945
|
+
const mentionedEntityUrls = /* @__PURE__ */ new Set();
|
|
10865
10946
|
if (config2.skipCharacterMentions) {
|
|
10866
10947
|
config2 = {
|
|
10867
10948
|
...config2,
|
|
@@ -10908,7 +10989,9 @@ function buildImagePromptInternal(config2, marks) {
|
|
|
10908
10989
|
);
|
|
10909
10990
|
const knownImageSlugs = knownImageSlugsFromRefs(connectedReferences);
|
|
10910
10991
|
const hasImageMentionTokens = isHybrid && knownImageSlugs.length > 0 && findImageMentionTokens(config2.prompt, knownImageSlugs).length > 0;
|
|
10911
|
-
|
|
10992
|
+
const knownEntitySlugs = knownEntitySlugsFromRefs(connectedReferences);
|
|
10993
|
+
const hasEntityMentionTokens = isHybrid && knownEntitySlugs.length > 0 && findEntityMentionTokens(config2.prompt, knownEntitySlugs).length > 0;
|
|
10994
|
+
if (knownCharacterSlugs.length > 0 || hasExtraRefs || knownLocationSlugs.length > 0 || hasImageMentionTokens || hasEntityMentionTokens) {
|
|
10912
10995
|
const mentionTokens = knownCharacterSlugs.length > 0 ? findCharacterMentionTokens(config2.prompt, knownCharacterSlugs) : [];
|
|
10913
10996
|
let hybridLockLines = [];
|
|
10914
10997
|
let hybridElementDirectives = [];
|
|
@@ -10980,6 +11063,25 @@ function buildImagePromptInternal(config2, marks) {
|
|
|
10980
11063
|
if (hi.additionalUrls.length > 0) hybridBodyConverged = true;
|
|
10981
11064
|
}
|
|
10982
11065
|
}
|
|
11066
|
+
let hybridEntityLockLines = [];
|
|
11067
|
+
let hybridEntityElementDirectives = [];
|
|
11068
|
+
if (hasEntityMentionTokens) {
|
|
11069
|
+
const entityTokens = findEntityMentionTokens(resolved.prompt, knownEntitySlugs);
|
|
11070
|
+
if (entityTokens.length > 0) {
|
|
11071
|
+
const he = resolveEntityMentionsHybrid(
|
|
11072
|
+
resolved.prompt,
|
|
11073
|
+
entityTokens,
|
|
11074
|
+
connectedReferences,
|
|
11075
|
+
[...referenceImageUrls || [], ...resolved.additionalUrls]
|
|
11076
|
+
);
|
|
11077
|
+
resolved.prompt = he.prompt;
|
|
11078
|
+
resolved.additionalUrls = [...resolved.additionalUrls, ...he.additionalUrls];
|
|
11079
|
+
hybridEntityLockLines = he.lockLines;
|
|
11080
|
+
hybridEntityElementDirectives = he.elementDirectives;
|
|
11081
|
+
for (const u of he.mentionedUrls) mentionedEntityUrls.add(u);
|
|
11082
|
+
if (he.additionalUrls.length > 0) hybridBodyConverged = true;
|
|
11083
|
+
}
|
|
11084
|
+
}
|
|
10983
11085
|
const prefixDedupedLength = [
|
|
10984
11086
|
...referenceImageUrls || [],
|
|
10985
11087
|
...resolved.additionalUrls
|
|
@@ -11061,6 +11163,7 @@ ${promptForNext}`;
|
|
|
11061
11163
|
...hybridLockLines,
|
|
11062
11164
|
...hybridLocationLockLines,
|
|
11063
11165
|
...hybridImageLockLines,
|
|
11166
|
+
...hybridEntityLockLines,
|
|
11064
11167
|
...canonical.lockLines,
|
|
11065
11168
|
...extrasRendered.lockLines
|
|
11066
11169
|
])];
|
|
@@ -11068,6 +11171,7 @@ ${promptForNext}`;
|
|
|
11068
11171
|
...hybridElementDirectives,
|
|
11069
11172
|
...hybridLocationElementDirectives,
|
|
11070
11173
|
...hybridImageElementDirectives,
|
|
11174
|
+
...hybridEntityElementDirectives,
|
|
11071
11175
|
...canonical.phrases,
|
|
11072
11176
|
...canonical.elementDirectives,
|
|
11073
11177
|
...extrasRendered.bodyLines,
|
|
@@ -11114,7 +11218,8 @@ ${trailingLines.join("\n")}` : "";
|
|
|
11114
11218
|
if (coveredUrl) tokenCoveredUrls.add(coveredUrl);
|
|
11115
11219
|
}
|
|
11116
11220
|
const locCanon = renderLocationCanonicalHybrid(nonCharacterRefs, finalIndexByUrl, tokenCoveredUrls);
|
|
11117
|
-
const
|
|
11221
|
+
const objCoveredUrls = mentionedEntityUrls.size > 0 ? /* @__PURE__ */ new Set([...tokenCoveredUrls, ...mentionedEntityUrls]) : tokenCoveredUrls;
|
|
11222
|
+
const objCanon = renderObjectCreatureCanonicalHybrid(nonCharacterRefs, finalIndexByUrl, objCoveredUrls);
|
|
11118
11223
|
const canonLockLines = [...locCanon.lockLines, ...objCanon.lockLines];
|
|
11119
11224
|
const canonLockBlock = canonLockLines.length > 0 ? `${canonLockLines.join("\n")}
|
|
11120
11225
|
|
|
@@ -11173,11 +11278,13 @@ Avoid: ${negPrompt2}`;
|
|
|
11173
11278
|
const maxLen2 = getMaxImagePromptChars(provider);
|
|
11174
11279
|
const reserved2 = styleSuffix2.length + avoidSuffix2.length;
|
|
11175
11280
|
if (prompt2.length + reserved2 > maxLen2) {
|
|
11281
|
+
if (marks) marks.overflowChars += prompt2.length + reserved2 - maxLen2;
|
|
11176
11282
|
prompt2 = prompt2.slice(0, Math.max(0, maxLen2 - reserved2 - 3)) + "...";
|
|
11177
11283
|
}
|
|
11178
11284
|
if (marks) marks.bodyBeforeSuffixes = prompt2.slice(marks.directivesPrefix.length);
|
|
11179
11285
|
prompt2 = prompt2 + styleSuffix2 + avoidSuffix2;
|
|
11180
11286
|
if (prompt2.length > maxLen2) {
|
|
11287
|
+
if (marks) marks.overflowChars += prompt2.length - maxLen2;
|
|
11181
11288
|
prompt2 = prompt2.slice(0, maxLen2 - 3) + "...";
|
|
11182
11289
|
}
|
|
11183
11290
|
if (!isHybrid) {
|
|
@@ -11251,11 +11358,13 @@ Avoid: ${negPrompt}`;
|
|
|
11251
11358
|
const maxLen = getMaxImagePromptChars(provider);
|
|
11252
11359
|
const reserved = styleSuffix.length + avoidSuffix.length;
|
|
11253
11360
|
if (prompt.length + reserved > maxLen) {
|
|
11361
|
+
if (marks) marks.overflowChars += prompt.length + reserved - maxLen;
|
|
11254
11362
|
prompt = prompt.slice(0, Math.max(0, maxLen - reserved - 3)) + "...";
|
|
11255
11363
|
}
|
|
11256
11364
|
if (marks) marks.bodyBeforeSuffixes = prompt;
|
|
11257
11365
|
prompt = prompt + styleSuffix + avoidSuffix;
|
|
11258
11366
|
if (prompt.length > maxLen) {
|
|
11367
|
+
if (marks) marks.overflowChars += prompt.length - maxLen;
|
|
11259
11368
|
prompt = prompt.slice(0, maxLen - 3) + "...";
|
|
11260
11369
|
}
|
|
11261
11370
|
const allRefs = referenceImageUrls.length > 0 ? referenceImageUrls : ancestorRefs;
|
|
@@ -11265,12 +11374,7 @@ Avoid: ${negPrompt}`;
|
|
|
11265
11374
|
return { prompt, nativeNegativePrompt, referenceImageUrls: refsToSend };
|
|
11266
11375
|
}
|
|
11267
11376
|
function buildImagePromptSegments(config2, bodySegments) {
|
|
11268
|
-
const marks =
|
|
11269
|
-
directivesPrefix: "",
|
|
11270
|
-
bodyBeforeSuffixes: "",
|
|
11271
|
-
styleSuffix: "",
|
|
11272
|
-
avoidSuffix: ""
|
|
11273
|
-
};
|
|
11377
|
+
const marks = newAssemblyMarks();
|
|
11274
11378
|
const result = buildImagePromptInternal(config2, marks);
|
|
11275
11379
|
let segments = [
|
|
11276
11380
|
...marks.directivesPrefix ? [{ text: marks.directivesPrefix, origin: "mention" }] : [],
|
|
@@ -11460,13 +11564,24 @@ function hybridRolePhrase(label, letter) {
|
|
|
11460
11564
|
return `the ${label} from reference image ${letter}`;
|
|
11461
11565
|
}
|
|
11462
11566
|
function expandImageRefTokensHybrid(prompt, refs, finalIndexByUrl) {
|
|
11463
|
-
|
|
11464
|
-
|
|
11567
|
+
const splices = [];
|
|
11568
|
+
for (const m of prompt.matchAll(IMAGE_TOKEN_PATTERN)) {
|
|
11569
|
+
const n = parseInt(m[1], 10);
|
|
11465
11570
|
const ref = refs[n - 1];
|
|
11466
11571
|
const finalIdx = ref?.url ? finalIndexByUrl.get(ref.url) : void 0;
|
|
11467
|
-
if (!finalIdx)
|
|
11468
|
-
|
|
11469
|
-
|
|
11572
|
+
if (!finalIdx) continue;
|
|
11573
|
+
splices.push({
|
|
11574
|
+
offset: m.index ?? 0,
|
|
11575
|
+
length: m[0].length,
|
|
11576
|
+
phrase: hybridRolePhrase((m[2] ?? "").trim(), slotToLetter(finalIdx))
|
|
11577
|
+
});
|
|
11578
|
+
}
|
|
11579
|
+
let resolved = prompt;
|
|
11580
|
+
for (let i = splices.length - 1; i >= 0; i--) {
|
|
11581
|
+
const s = splices[i];
|
|
11582
|
+
resolved = spliceMentionPhrase(resolved, s.offset, s.length, s.phrase);
|
|
11583
|
+
}
|
|
11584
|
+
return resolved;
|
|
11470
11585
|
}
|
|
11471
11586
|
function capitalizeLineInitial(line) {
|
|
11472
11587
|
return line.replace(/[a-zA-Z]/, (c) => c.toUpperCase());
|
|
@@ -11809,6 +11924,129 @@ function renderDirectionHints(direction, opts) {
|
|
|
11809
11924
|
}
|
|
11810
11925
|
return out;
|
|
11811
11926
|
}
|
|
11927
|
+
var viaFragmentBuilder = (build) => (subject, mode) => {
|
|
11928
|
+
const clause = build(subject, mode).filter((s) => s.length > 0).join(", ");
|
|
11929
|
+
return clause.length > 0 ? [clause] : [];
|
|
11930
|
+
};
|
|
11931
|
+
var viaListBuilder2 = (build) => (ids, mode) => build(ids.length === 1 ? ids[0] : [...ids], mode).filter((s) => s.length > 0);
|
|
11932
|
+
var viaStringBuilder2 = (build) => (ids, mode) => {
|
|
11933
|
+
const s = build(ids.length === 1 ? ids[0] : [...ids], mode);
|
|
11934
|
+
return s.length > 0 ? [s] : [];
|
|
11935
|
+
};
|
|
11936
|
+
var perId2 = (full, compact) => (ids, mode) => {
|
|
11937
|
+
const out = [];
|
|
11938
|
+
for (const id of ids) {
|
|
11939
|
+
const frag = mode === "compact" ? compact(id) : full(id);
|
|
11940
|
+
if (frag.length > 0) out.push(frag);
|
|
11941
|
+
}
|
|
11942
|
+
return out;
|
|
11943
|
+
};
|
|
11944
|
+
var SUBJECT_FIELDS = [
|
|
11945
|
+
{ key: "person", kind: "group", surface: "both", render: viaFragmentBuilder(buildPersonHints) },
|
|
11946
|
+
{ key: "styling", kind: "group", surface: "both", render: viaFragmentBuilder(buildStylingHints) },
|
|
11947
|
+
{ key: "heldProp", kind: "ids", surface: "both", maxPicks: 2, render: viaListBuilder2(buildHeldPropHints) },
|
|
11948
|
+
{ key: "material", kind: "ids", surface: "both", maxPicks: 2, render: viaStringBuilder2(buildMaterialHints) },
|
|
11949
|
+
{ key: "animal", kind: "ids", surface: "both", maxPicks: 1, render: perId2(getAnimalPromptHint, getAnimalTerm) }
|
|
11950
|
+
];
|
|
11951
|
+
var SUBJECT_FOLD_KEYS = SUBJECT_FIELDS.map((f) => f.key);
|
|
11952
|
+
var IDS_ROWS = SUBJECT_FIELDS.filter((f) => f.kind === "ids");
|
|
11953
|
+
var SUBJECT_CUSTOM_AGE_KEY = "customAge";
|
|
11954
|
+
var CUSTOM_AGE_MIN = 0;
|
|
11955
|
+
var CUSTOM_AGE_MAX = 120;
|
|
11956
|
+
var SUBJECT_KEYS = [
|
|
11957
|
+
...PERSON_DIMENSION_ORDER.map((d) => PERSON_FIELD_BY_DIMENSION[d]),
|
|
11958
|
+
SUBJECT_CUSTOM_AGE_KEY,
|
|
11959
|
+
...STYLING_DIMENSION_ORDER.map((d) => STYLING_FIELD_BY_DIMENSION[d]),
|
|
11960
|
+
...IDS_ROWS.map((f) => f.key)
|
|
11961
|
+
];
|
|
11962
|
+
function getRegisteredSubjectKeys() {
|
|
11963
|
+
const fieldByDimension = getRegisteredPersonFieldByDimension();
|
|
11964
|
+
const personFields = [];
|
|
11965
|
+
for (const dimension of getRegisteredPersonDimensionOrder()) {
|
|
11966
|
+
const field = fieldByDimension[dimension];
|
|
11967
|
+
if (field) personFields.push(field);
|
|
11968
|
+
}
|
|
11969
|
+
return [
|
|
11970
|
+
...personFields,
|
|
11971
|
+
SUBJECT_CUSTOM_AGE_KEY,
|
|
11972
|
+
...STYLING_DIMENSION_ORDER.map((d) => STYLING_FIELD_BY_DIMENSION[d]),
|
|
11973
|
+
...IDS_ROWS.map((f) => f.key)
|
|
11974
|
+
];
|
|
11975
|
+
}
|
|
11976
|
+
var SUBJECT_IMAGE_HINT_MODE_DEFAULT = "full";
|
|
11977
|
+
var SUBJECT_VIDEO_HINT_MODE_DEFAULT = "compact";
|
|
11978
|
+
var SUBJECT_ARRAY_CEILING = DIRECTION_ARRAY_CEILING;
|
|
11979
|
+
var SUBJECT_ID_MAX_CHARS = DIRECTION_ID_MAX_CHARS;
|
|
11980
|
+
var MAX_SUBJECT_KEYS = 128;
|
|
11981
|
+
var SUBJECT_KEY_MAX_CHARS = 64;
|
|
11982
|
+
function normalizeIds(value, maxPicks) {
|
|
11983
|
+
const ids = [];
|
|
11984
|
+
if (typeof value === "string") {
|
|
11985
|
+
if (value) ids.push(value);
|
|
11986
|
+
} else if (Array.isArray(value)) {
|
|
11987
|
+
for (const v of value) {
|
|
11988
|
+
if (ids.length >= maxPicks) break;
|
|
11989
|
+
if (typeof v === "string" && v && !ids.includes(v)) ids.push(v);
|
|
11990
|
+
}
|
|
11991
|
+
}
|
|
11992
|
+
return ids.slice(0, maxPicks);
|
|
11993
|
+
}
|
|
11994
|
+
function limitByField() {
|
|
11995
|
+
const out = /* @__PURE__ */ new Map();
|
|
11996
|
+
const personFieldByDimension = getRegisteredPersonFieldByDimension();
|
|
11997
|
+
for (const dimension of getRegisteredPersonDimensionOrder()) {
|
|
11998
|
+
const field = personFieldByDimension[dimension];
|
|
11999
|
+
if (field) out.set(field, getPersonDimensionLimit(dimension));
|
|
12000
|
+
}
|
|
12001
|
+
for (const dimension of STYLING_DIMENSION_ORDER) {
|
|
12002
|
+
out.set(
|
|
12003
|
+
STYLING_FIELD_BY_DIMENSION[dimension],
|
|
12004
|
+
getStylingDimensionLimit(dimension)
|
|
12005
|
+
);
|
|
12006
|
+
}
|
|
12007
|
+
for (const row of IDS_ROWS) out.set(row.key, row.maxPicks);
|
|
12008
|
+
return out;
|
|
12009
|
+
}
|
|
12010
|
+
function normalizeSubjectFields(subject) {
|
|
12011
|
+
if (!subject || typeof subject !== "object" || Array.isArray(subject)) return void 0;
|
|
12012
|
+
const src = subject;
|
|
12013
|
+
const limits = limitByField();
|
|
12014
|
+
const out = {};
|
|
12015
|
+
const rawAge = src[SUBJECT_CUSTOM_AGE_KEY];
|
|
12016
|
+
if (typeof rawAge === "number" && Number.isFinite(rawAge)) {
|
|
12017
|
+
out[SUBJECT_CUSTOM_AGE_KEY] = Math.max(
|
|
12018
|
+
CUSTOM_AGE_MIN,
|
|
12019
|
+
Math.min(CUSTOM_AGE_MAX, Math.round(rawAge))
|
|
12020
|
+
);
|
|
12021
|
+
}
|
|
12022
|
+
for (const [field, limit] of limits) {
|
|
12023
|
+
const ids = normalizeIds(src[field], limit);
|
|
12024
|
+
if (ids.length === 0) continue;
|
|
12025
|
+
out[field] = ids.length === 1 ? ids[0] : ids;
|
|
12026
|
+
}
|
|
12027
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
12028
|
+
}
|
|
12029
|
+
function subjectFieldsForSurface(surface) {
|
|
12030
|
+
return SUBJECT_FIELDS.filter((f) => f.surface === "both" || f.surface === surface);
|
|
12031
|
+
}
|
|
12032
|
+
function renderSubjectHints(subject, opts) {
|
|
12033
|
+
const bag = normalizeSubjectFields(subject);
|
|
12034
|
+
if (!bag) return [];
|
|
12035
|
+
const mode = opts.mode ?? "full";
|
|
12036
|
+
const out = [];
|
|
12037
|
+
const seen = /* @__PURE__ */ new Set();
|
|
12038
|
+
for (const spec of SUBJECT_FIELDS) {
|
|
12039
|
+
if (spec.surface !== "both" && spec.surface !== opts.surface) continue;
|
|
12040
|
+
const hints = spec.kind === "group" ? spec.render(bag, mode) : spec.render(normalizeIds(bag[spec.key], spec.maxPicks), mode);
|
|
12041
|
+
for (const hint of hints) {
|
|
12042
|
+
if (hint.length > 0 && !seen.has(hint)) {
|
|
12043
|
+
seen.add(hint);
|
|
12044
|
+
out.push(hint);
|
|
12045
|
+
}
|
|
12046
|
+
}
|
|
12047
|
+
}
|
|
12048
|
+
return out;
|
|
12049
|
+
}
|
|
11812
12050
|
|
|
11813
12051
|
// src/prompt-hint-join.ts
|
|
11814
12052
|
var PROMPT_HINT_SEPARATOR = ". ";
|
|
@@ -11817,6 +12055,17 @@ function joinPromptHints(userPrompt, hints) {
|
|
|
11817
12055
|
return [userPrompt.trim(), ...hints].filter((p) => p.length > 0).join(PROMPT_HINT_SEPARATOR);
|
|
11818
12056
|
}
|
|
11819
12057
|
|
|
12058
|
+
// src/hint-shedding.ts
|
|
12059
|
+
function keepableDirectionHints(hintClauses, kept, deficit) {
|
|
12060
|
+
let remaining = deficit;
|
|
12061
|
+
let next = kept;
|
|
12062
|
+
while (next > 0 && remaining > 0) {
|
|
12063
|
+
next -= 1;
|
|
12064
|
+
remaining -= hintClauses[next].length + PROMPT_HINT_SEPARATOR.length;
|
|
12065
|
+
}
|
|
12066
|
+
return next;
|
|
12067
|
+
}
|
|
12068
|
+
|
|
11820
12069
|
// src/ref-binding.ts
|
|
11821
12070
|
function identityRefsSentence(firstOrdinal, lastOrdinal) {
|
|
11822
12071
|
return firstOrdinal === lastOrdinal ? `${REF_BINDING.ordinal(firstOrdinal)} is an identity reference for this shot's subjects \u2014 match its subject's exact appearance; it is not a frame.` : `${REF_BINDING.ordinal(firstOrdinal)} through ${REF_BINDING.ordinal(lastOrdinal)} are identity references for this shot's subjects \u2014 match each subject's exact appearance; they are not frames.`;
|
|
@@ -12402,17 +12651,32 @@ function assembleSunoInput(input) {
|
|
|
12402
12651
|
}
|
|
12403
12652
|
|
|
12404
12653
|
// src/assemble-image-input.ts
|
|
12405
|
-
function
|
|
12654
|
+
function renderImageHintPieces(subject, direction, structured) {
|
|
12655
|
+
return {
|
|
12656
|
+
hintClauses: [
|
|
12657
|
+
...renderSubjectHints(subject, {
|
|
12658
|
+
surface: "image",
|
|
12659
|
+
mode: SUBJECT_IMAGE_HINT_MODE_DEFAULT
|
|
12660
|
+
}),
|
|
12661
|
+
...renderDirectionHints(direction, {
|
|
12662
|
+
surface: "image",
|
|
12663
|
+
mode: IMAGE_HINT_MODE_DEFAULT
|
|
12664
|
+
})
|
|
12665
|
+
].filter((p) => p.length > 0),
|
|
12666
|
+
structuredFragment: structured ? renderStructuredFields(structured) : ""
|
|
12667
|
+
};
|
|
12668
|
+
}
|
|
12669
|
+
function composePromptText(userPrompt, pieces, keptHintClauses) {
|
|
12406
12670
|
const hints = [
|
|
12407
|
-
...
|
|
12408
|
-
|
|
12671
|
+
...pieces.hintClauses.slice(0, keptHintClauses),
|
|
12672
|
+
pieces.structuredFragment
|
|
12409
12673
|
].filter((p) => p.length > 0);
|
|
12410
12674
|
return joinPromptHints(userPrompt, hints);
|
|
12411
12675
|
}
|
|
12412
12676
|
function assembleImageInput(input) {
|
|
12413
|
-
const
|
|
12414
|
-
const
|
|
12415
|
-
prompt,
|
|
12677
|
+
const pieces = renderImageHintPieces(input.subject, input.direction, input.structured);
|
|
12678
|
+
const assembleWith = (keptHintClauses) => buildImagePromptWithOverflow({
|
|
12679
|
+
prompt: composePromptText(input.userPrompt, pieces, keptHintClauses),
|
|
12416
12680
|
provider: input.provider,
|
|
12417
12681
|
...input.connectedReferences !== void 0 ? { connectedReferences: input.connectedReferences } : {},
|
|
12418
12682
|
// Manual uploads / direct refs ride the builder's reference-URL channel so
|
|
@@ -12435,6 +12699,13 @@ function assembleImageInput(input) {
|
|
|
12435
12699
|
...input.sourceNodeIdById !== void 0 ? { sourceNodeIdById: input.sourceNodeIdById } : {},
|
|
12436
12700
|
...input.skipCharacterMentions !== void 0 ? { skipCharacterMentions: input.skipCharacterMentions } : {}
|
|
12437
12701
|
});
|
|
12702
|
+
let kept = pieces.hintClauses.length;
|
|
12703
|
+
let fitted = assembleWith(kept);
|
|
12704
|
+
while (fitted.overflowChars > 0 && kept > 0) {
|
|
12705
|
+
kept = keepableDirectionHints(pieces.hintClauses, kept, fitted.overflowChars);
|
|
12706
|
+
fitted = assembleWith(kept);
|
|
12707
|
+
}
|
|
12708
|
+
const { overflowChars, ...result } = fitted;
|
|
12438
12709
|
if (input.throwOnEmpty && !result.prompt.trim()) {
|
|
12439
12710
|
throw new Error(
|
|
12440
12711
|
"No prompt \u2014 type one, bind a character, or pick a cinematography direction"
|
|
@@ -12445,15 +12716,36 @@ function assembleImageInput(input) {
|
|
|
12445
12716
|
|
|
12446
12717
|
// src/assemble-video-input.ts
|
|
12447
12718
|
function composeVideoPromptText(userPrompt, direction, structured, opts) {
|
|
12448
|
-
const
|
|
12719
|
+
const hintClauses = [
|
|
12720
|
+
...renderSubjectHints(opts?.subject, {
|
|
12721
|
+
surface: "video",
|
|
12722
|
+
mode: opts?.subjectHintMode ?? SUBJECT_VIDEO_HINT_MODE_DEFAULT
|
|
12723
|
+
}),
|
|
12449
12724
|
...renderDirectionHints(direction, {
|
|
12450
12725
|
surface: "video",
|
|
12451
12726
|
mode: opts?.hintMode ?? VIDEO_HINT_MODE_DEFAULT
|
|
12452
|
-
})
|
|
12453
|
-
structured ? renderStructuredFields(structured) : ""
|
|
12727
|
+
})
|
|
12454
12728
|
].filter((p) => p.length > 0);
|
|
12455
|
-
|
|
12456
|
-
|
|
12729
|
+
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
|
+
};
|
|
12737
|
+
const cap = opts?.cap;
|
|
12738
|
+
if (cap === void 0) return composeWith(hintClauses.length);
|
|
12739
|
+
const frame = opts?.frame ?? ((body2) => body2);
|
|
12740
|
+
let kept = hintClauses.length;
|
|
12741
|
+
let body = composeWith(kept);
|
|
12742
|
+
let framedLength = frame(body)?.length ?? 0;
|
|
12743
|
+
while (framedLength > cap && kept > 0) {
|
|
12744
|
+
kept = keepableDirectionHints(hintClauses, kept, framedLength - cap);
|
|
12745
|
+
body = composeWith(kept);
|
|
12746
|
+
framedLength = frame(body)?.length ?? 0;
|
|
12747
|
+
}
|
|
12748
|
+
return body;
|
|
12457
12749
|
}
|
|
12458
12750
|
|
|
12459
12751
|
// src/read-node-direction.ts
|
|
@@ -12478,6 +12770,31 @@ function readDirectionFields(value) {
|
|
|
12478
12770
|
}
|
|
12479
12771
|
return Object.keys(out).length > 0 ? out : void 0;
|
|
12480
12772
|
}
|
|
12773
|
+
function readSubjectFields(value) {
|
|
12774
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
12775
|
+
const src = value;
|
|
12776
|
+
const out = {};
|
|
12777
|
+
for (const key of getRegisteredSubjectKeys()) {
|
|
12778
|
+
const v = src[key];
|
|
12779
|
+
if (key === SUBJECT_CUSTOM_AGE_KEY) {
|
|
12780
|
+
if (typeof v === "number" && Number.isFinite(v)) out[key] = v;
|
|
12781
|
+
continue;
|
|
12782
|
+
}
|
|
12783
|
+
if (typeof v === "string") {
|
|
12784
|
+
if (v.length > 0 && v.length <= SUBJECT_ID_MAX_CHARS) out[key] = v;
|
|
12785
|
+
} else if (Array.isArray(v)) {
|
|
12786
|
+
const kept = [];
|
|
12787
|
+
for (const x of v) {
|
|
12788
|
+
if (kept.length >= SUBJECT_ARRAY_CEILING) break;
|
|
12789
|
+
if (typeof x === "string" && x.length > 0 && x.length <= SUBJECT_ID_MAX_CHARS) {
|
|
12790
|
+
kept.push(x);
|
|
12791
|
+
}
|
|
12792
|
+
}
|
|
12793
|
+
if (kept.length > 0) out[key] = kept;
|
|
12794
|
+
}
|
|
12795
|
+
}
|
|
12796
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
12797
|
+
}
|
|
12481
12798
|
var GENDERS = ["man", "woman", "child", "non-binary"];
|
|
12482
12799
|
var MAX_STRUCTURED_VALUE_CHARS = 200;
|
|
12483
12800
|
var PERSON_FIELDS2 = {
|
|
@@ -33742,6 +34059,6 @@ function buildSurroundFillPrompt(direction, userPrompt) {
|
|
|
33742
34059
|
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.`;
|
|
33743
34060
|
}
|
|
33744
34061
|
|
|
33745
|
-
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, 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, 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, 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, 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, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDirectionHints, renderStructuredFields, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|
|
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 };
|
|
33746
34063
|
//# sourceMappingURL=index.js.map
|
|
33747
34064
|
//# sourceMappingURL=index.js.map
|