@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.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, getAnimal, DEFAULT_USAGE_MODE, usageModeDirective, DEFAULT_LOCATION_USAGE_MODE, imageReferenceLimit, knownImageSlugsFromRefs, findImageMentionTokens, findCharacterMentionTokens, findLocationMentionTokens, NATIVE_NEGATIVE_PROMPT_MODELS, getMaxNegativePromptChars, getMaxImagePromptChars, MODELS_WITH_REFERENCE_IMAGE_SUPPORT, roleToPhrase, resolveDefaultRole, SEEDANCE_2_REF_LIMITS, NON_EN_LOCALE_IDS, readPromptAffixes, setRegisteredPersonPackFields, PLACEHOLDER_CHARACTER_NAME, REFERENCE_ROLE_PRESETS, normalizeRoleSlug, imageMentionSlugForRef, defaultRoleForSource, locationReferencePhotoKindLabel, resolveNodeRefs } from '@nodaro/shared';
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.label.toLowerCase(), e.description),
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, (label, description) => `featuring a ${label}, ${description}`)
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, (label, description) => `featuring a ${label}, ${description}`)
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, (label, description) => `with a ${label}, ${description}`)
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, (label, description) => `including a ${label}, ${description}`)
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
- case "animal": {
9976
- const animal = getAnimal(asStr(data.animal));
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
- animal ? byMode(mode, `featuring a ${animal.label.toLowerCase()}, ${animal.description}`, objectEntityTerm(animal)) : ""
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.slice(0, m.offset) + phrase + resolvedPrompt.slice(m.offset + m.token.length);
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
- switch (mode) {
10355
- case "identical":
10356
- return "background";
10357
- case "style":
10358
- return "style";
10359
- case "layout":
10360
- return "layout";
10361
- default:
10362
- return defaultRoleForSource("wired-location");
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 mode = t.usageMode ?? match.defaultUsageMode ?? DEFAULT_LOCATION_USAGE_MODE;
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.slice(0, m.offset) + phrase + resolvedPrompt.slice(m.offset + m.token.length);
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.slice(0, m.offset) + phrase + resolvedPrompt.slice(m.offset + m.token.length);
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(locationModeToRole(r.defaultUsageMode), binding));
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
- if (knownCharacterSlugs.length > 0 || hasExtraRefs || knownLocationSlugs.length > 0 || hasImageMentionTokens) {
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 objCanon = renderObjectCreatureCanonicalHybrid(nonCharacterRefs, finalIndexByUrl, tokenCoveredUrls);
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
- return prompt.replace(IMAGE_TOKEN_PATTERN, (match, num, label) => {
11464
- const n = parseInt(num, 10);
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) return match;
11468
- return hybridRolePhrase((label ?? "").trim(), slotToLetter(finalIdx));
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 composePromptText(userPrompt, direction, structured) {
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
- ...renderDirectionHints(direction, { surface: "image", mode: IMAGE_HINT_MODE_DEFAULT }),
12408
- structured ? renderStructuredFields(structured) : ""
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 prompt = composePromptText(input.userPrompt, input.direction, input.structured);
12414
- const result = buildImagePrompt({
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 hints = [
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
- if (hints.length === 0) return userPrompt;
12456
- return joinPromptHints(userPrompt ?? "", hints);
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