@nodaro/prompts 1.8.1 → 1.10.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, findCharacterMentionTokens, findLocationMentionTokens, NATIVE_NEGATIVE_PROMPT_MODELS, getMaxNegativePromptChars, getMaxImagePromptChars, MODELS_WITH_REFERENCE_IMAGE_SUPPORT, roleToPhrase, resolveDefaultRole, SEEDANCE_2_REF_LIMITS, NON_EN_LOCALE_IDS, setRegisteredPersonPackFields, PLACEHOLDER_CHARACTER_NAME, REFERENCE_ROLE_PRESETS, normalizeRoleSlug, 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, getFurniture, getWeapon, getVehicle, getAnimal, DEFAULT_USAGE_MODE, usageModeDirective, DEFAULT_LOCATION_USAGE_MODE, imageReferenceLimit, 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, defaultRoleForSource, locationReferencePhotoKindLabel, resolveNodeRefs } from '@nodaro/shared';
2
2
 
3
3
  var __defProp = Object.defineProperty;
4
4
  var __export = (target, all) => {
@@ -5363,24 +5363,35 @@ function getTransitionTerm(id) {
5363
5363
  return resolveTerm(getTransition(id));
5364
5364
  }
5365
5365
  var TRANSITION_IDS = TRANSITIONS.map((t) => t.id);
5366
- var POSITION_CLAUSES = {
5367
- start: "the transition occurs at the opening of the clip",
5368
- middle: "the transition occurs in the middle of the clip",
5369
- end: "the transition occurs at the end of the clip",
5370
- full: "the transition spans the entire clip"
5371
- };
5372
- var DURATION_CLAUSES = {
5373
- instant: "occurring instantaneously",
5374
- short: "lasting approximately 1 second",
5375
- medium: "lasting approximately 2 seconds",
5376
- long: "lasting approximately 3 seconds"
5377
- };
5378
- var INTENSITY_CLAUSES = {
5379
- subtle: "with subtle restrained energy and minimal flourish",
5380
- natural: "with natural unhurried timing",
5381
- dynamic: "with dynamic energy and assertive flourish",
5382
- crazy: "with extreme exaggerated energy, wild flourishes, and dramatic distortion"
5383
- };
5366
+ var TRANSITION_POSITIONS = [
5367
+ { id: "auto", label: "Auto", description: "Let the model place it", promptHint: "", term: "" },
5368
+ { id: "start", label: "Start", description: "At the opening of the clip", promptHint: "the transition occurs at the opening of the clip", term: "at the opening of the clip" },
5369
+ { id: "middle", label: "Middle", description: "In the middle of the clip", promptHint: "the transition occurs in the middle of the clip", term: "mid-clip" },
5370
+ { id: "end", label: "End", description: "At the end of the clip", promptHint: "the transition occurs at the end of the clip", term: "at the end of the clip" },
5371
+ { id: "full", label: "Full", description: "Spans the entire clip", promptHint: "the transition spans the entire clip", term: "across the whole clip" }
5372
+ ];
5373
+ var TRANSITION_DURATIONS = [
5374
+ { id: "auto", label: "Auto", description: "Let the model time it", promptHint: "", term: "" },
5375
+ { id: "instant", label: "Instant", description: "No perceptible duration", promptHint: "occurring instantaneously", term: "instantaneous" },
5376
+ { id: "short", label: "Short (~1s)", description: "Approximately 1 second", promptHint: "lasting approximately 1 second", term: "about 1 second" },
5377
+ { id: "medium", label: "Medium (~2s)", description: "Approximately 2 seconds", promptHint: "lasting approximately 2 seconds", term: "about 2 seconds" },
5378
+ { id: "long", label: "Long (~3s)", description: "Approximately 3 seconds", promptHint: "lasting approximately 3 seconds", term: "about 3 seconds" }
5379
+ ];
5380
+ var TRANSITION_INTENSITIES = [
5381
+ { id: "auto", label: "Auto", description: "Let the model judge it", promptHint: "", term: "" },
5382
+ { id: "subtle", label: "Subtle", description: "Restrained, minimal flourish", promptHint: "with subtle restrained energy and minimal flourish", term: "subtly" },
5383
+ { id: "natural", label: "Natural", description: "Unhurried, unforced timing", promptHint: "with natural unhurried timing", term: "at a natural pace" },
5384
+ { id: "dynamic", label: "Dynamic", description: "Assertive, energetic", promptHint: "with dynamic energy and assertive flourish", term: "energetically" },
5385
+ { id: "crazy", label: "Crazy", description: "Extreme, wild, distorted", promptHint: "with extreme exaggerated energy, wild flourishes, and dramatic distortion", term: "wildly exaggerated" }
5386
+ ];
5387
+ function clausesOf(options) {
5388
+ return Object.fromEntries(
5389
+ options.filter((o) => o.id !== "auto").map((o) => [o.id, o.promptHint])
5390
+ );
5391
+ }
5392
+ var POSITION_CLAUSES = clausesOf(TRANSITION_POSITIONS);
5393
+ var DURATION_CLAUSES = clausesOf(TRANSITION_DURATIONS);
5394
+ var INTENSITY_CLAUSES = clausesOf(TRANSITION_INTENSITIES);
5384
5395
  function composeTransitionHintFromConnections(transitionId, startHints, endHints, timing, mode = "full") {
5385
5396
  const ids = Array.isArray(transitionId) ? Array.from(new Set(transitionId)).slice(0, 2) : transitionId ? [transitionId] : [];
5386
5397
  const resolveBase = mode === "compact" ? getTransitionTerm : getTransitionPromptHint;
@@ -5879,24 +5890,35 @@ function getCharacterFxTerm(id) {
5879
5890
  return resolveTerm(getCharacterFx(id));
5880
5891
  }
5881
5892
  var CHARACTER_FX_IDS = CHARACTER_FX.map((c) => c.id);
5882
- var POSITION_CLAUSES2 = {
5883
- start: "the effect occurs at the opening of the clip",
5884
- middle: "the effect occurs in the middle of the clip",
5885
- end: "the effect occurs at the end of the clip",
5886
- full: "the effect persists for the entire clip"
5887
- };
5888
- var DURATION_CLAUSES2 = {
5889
- instant: "manifesting instantaneously",
5890
- short: "manifesting over approximately 1 second",
5891
- medium: "manifesting over approximately 2 seconds",
5892
- long: "manifesting over approximately 3 seconds"
5893
- };
5894
- var INTENSITY_CLAUSES2 = {
5895
- subtle: "with subtle restrained energy and minimal flourish",
5896
- natural: "with natural unhurried timing",
5897
- dynamic: "with dynamic energy and assertive flourish",
5898
- crazy: "with extreme exaggerated energy, wild flourishes, and dramatic distortion"
5899
- };
5893
+ var CHARACTER_FX_POSITIONS = [
5894
+ { id: "auto", label: "Auto", description: "Let the model place the effect", promptHint: "", term: "" },
5895
+ { id: "start", label: "Start", description: "Occurs at the opening of the clip", promptHint: "the effect occurs at the opening of the clip", term: "at the opening of the clip" },
5896
+ { id: "middle", label: "Middle", description: "Occurs in the middle of the clip", promptHint: "the effect occurs in the middle of the clip", term: "mid-clip" },
5897
+ { id: "end", label: "End", description: "Occurs at the end of the clip", promptHint: "the effect occurs at the end of the clip", term: "at the end of the clip" },
5898
+ { id: "full", label: "Full", description: "Persists for the entire clip", promptHint: "the effect persists for the entire clip", term: "persisting for the whole clip" }
5899
+ ];
5900
+ var CHARACTER_FX_DURATIONS = [
5901
+ { id: "auto", label: "Auto", description: "Let the model time the effect", promptHint: "", term: "" },
5902
+ { id: "instant", label: "Instant", description: "Manifests instantaneously", promptHint: "manifesting instantaneously", term: "manifesting instantly" },
5903
+ { id: "short", label: "Short (~1s)", description: "Manifests over approximately 1 second", promptHint: "manifesting over approximately 1 second", term: "manifesting over about 1 second" },
5904
+ { id: "medium", label: "Medium (~2s)", description: "Manifests over approximately 2 seconds", promptHint: "manifesting over approximately 2 seconds", term: "manifesting over about 2 seconds" },
5905
+ { id: "long", label: "Long (~3s)", description: "Manifests over approximately 3 seconds", promptHint: "manifesting over approximately 3 seconds", term: "manifesting over about 3 seconds" }
5906
+ ];
5907
+ var CHARACTER_FX_INTENSITIES = [
5908
+ { id: "auto", label: "Auto", description: "Let the model judge the effect's energy", promptHint: "", term: "" },
5909
+ { id: "subtle", label: "Subtle", description: "Restrained, minimal flourish", promptHint: "with subtle restrained energy and minimal flourish", term: "subtly" },
5910
+ { id: "natural", label: "Natural", description: "Unhurried, unforced timing", promptHint: "with natural unhurried timing", term: "at a natural pace" },
5911
+ { id: "dynamic", label: "Dynamic", description: "Assertive, energetic", promptHint: "with dynamic energy and assertive flourish", term: "energetically" },
5912
+ { id: "crazy", label: "Crazy", description: "Extreme, wild, distorted", promptHint: "with extreme exaggerated energy, wild flourishes, and dramatic distortion", term: "wildly exaggerated" }
5913
+ ];
5914
+ function clausesOf2(options) {
5915
+ return Object.fromEntries(
5916
+ options.filter((o) => o.id !== "auto").map((o) => [o.id, o.promptHint])
5917
+ );
5918
+ }
5919
+ var POSITION_CLAUSES2 = clausesOf2(CHARACTER_FX_POSITIONS);
5920
+ var DURATION_CLAUSES2 = clausesOf2(CHARACTER_FX_DURATIONS);
5921
+ var INTENSITY_CLAUSES2 = clausesOf2(CHARACTER_FX_INTENSITIES);
5900
5922
  function composeCharacterFxHintFromConnections(effectId, targetHints, timing, mode = "full") {
5901
5923
  const ids = Array.isArray(effectId) ? Array.from(new Set(effectId)).slice(0, 2) : effectId ? [effectId] : [];
5902
5924
  const resolveBase = mode === "compact" ? getCharacterFxTerm : getCharacterFxPromptHint;
@@ -7702,6 +7724,12 @@ var RENDER_QUALITY_IDS = RENDER_QUALITIES.map((r) => r.id);
7702
7724
 
7703
7725
  // src/composition-effects.ts
7704
7726
  var COMPOSITION_EFFECTS = [
7727
+ // The neutral default. Every other entry is a dramatic subject transform, so
7728
+ // an unconfigured node must inject nothing — the same no-op-entry convention
7729
+ // `transitions`/`character-fx` use for their "auto" default, which keeps the
7730
+ // default a real catalog id (see the `defaultValue` contract in
7731
+ // picker-catalogs.ts) instead of a value absent from the option list.
7732
+ { id: "none", label: "None", description: "No composition effect", promptHint: "", term: "" },
7705
7733
  { id: "bursting-through-frame", label: "Bursting Through Frame", description: "3D paper-tear breaking the frame", promptHint: "the subject bursting forward through a torn paper frame in a 3D paper-tear effect, head and shoulders breaking the plane of the canvas with ragged paper edges curling outward", term: "3d pop-out through a torn paper frame" },
7706
7734
  { id: "breaking-out-of-frame", label: "Breaking Out of Frame", description: "Limb extends past canvas border", promptHint: "the subject's hand or limb extending past the canvas border, breaking the fourth wall and reaching beyond the frame's edge into the viewer's space", term: "out-of-bounds effect, limb past the frame" },
7707
7735
  { id: "pixel-disintegration", label: "Pixel Disintegration", description: "Subject dissolving into particles", promptHint: "the subject pixelating and dissolving into floating geometric particles drifting outward, ordered chaos with crisp pixel-cube fragments scattering away from the silhouette" },
@@ -7715,7 +7743,6 @@ var COMPOSITION_EFFECTS = [
7715
7743
  { id: "floating-fragments", label: "Floating Fragments", description: "Body partially drifting away", promptHint: "the subject's body partially floating away in fragments, broken pieces of the figure detaching and drifting upward like windborne paper, leaving a partially dissolved silhouette", term: "body fragmenting into drifting pieces" },
7716
7744
  { id: "silhouette-outline", label: "Silhouette Outline", description: "Clean black silhouette on flat BG", promptHint: "the subject reduced to a clean black silhouette outline against a flat single-color background, no internal detail, pure shape language", term: "flat black silhouette on a solid background" },
7717
7745
  { id: "exploding-particles", label: "Exploding Particles", description: "Outline scattering into particles", promptHint: "the subject's outline exploding outward into a cloud of fine particles, dust and motes scattering radially around a partially intact core figure" },
7718
- { id: "3x3-grid-collage", label: "3x3 Grid Collage", description: "Contact-sheet 9-pose montage", promptHint: "the subject shown in a 3x3 grid of varied poses and expressions arranged as a contact-sheet collage, nine clean panels with consistent lighting and slight pose variation in each cell" },
7719
7746
  { id: "matte-painting", label: "Matte Painting", description: "Composite matte-painted background blended with live action, classic VFX", promptHint: "the subject composited against a matte-painted background blended seamlessly with live action, classic VFX matte-painting integration with hand-painted environment extension behind the figure" },
7720
7747
  { id: "double-exposure", label: "Double Exposure", description: "Two layered photographic exposures fused into one image", promptHint: "two layered photographic exposures fused into one image, the subject's silhouette filled with a secondary scene and translucent overlapping forms in classic darkroom double-exposure technique" },
7721
7748
  { id: "multiple-exposure", label: "Multiple Exposure", description: "Three or more exposures stacked, kaleidoscopic layering", promptHint: "three or more photographic exposures stacked into a single frame, kaleidoscopic layering of repeated subject positions with translucent overlapping silhouettes echoing across the canvas" },
@@ -9402,7 +9429,10 @@ var SINGLE_CATALOGS = [
9402
9429
  catalogId: "composition-effects",
9403
9430
  kind: "single",
9404
9431
  valueField: "compositionEffect",
9405
- defaultValue: "bursting-through-frame",
9432
+ // No default effect — composition effects are dramatic subject transforms,
9433
+ // so an unset node injects nothing until the user picks one (matches the
9434
+ // "unset folds nothing" behaviour every consumer already honours).
9435
+ defaultValue: "none",
9406
9436
  options: toOptions(COMPOSITION_EFFECTS)
9407
9437
  },
9408
9438
  {
@@ -9475,7 +9505,18 @@ var SINGLE_CATALOGS = [
9475
9505
  defaultValue: "auto",
9476
9506
  categoryOrder: TRANSITION_CATEGORY_ORDER,
9477
9507
  categoryLabels: TRANSITION_CATEGORY_LABELS,
9478
- options: toOptions(TRANSITIONS, "category")
9508
+ options: toOptions(TRANSITIONS, "category"),
9509
+ // The node's three timing parameters, alongside the transition itself.
9510
+ // `dimensions` on a single-dim catalog carries exactly what it says on a
9511
+ // multi-dim one — extra value fields with their own option lists — so a
9512
+ // consumer that only sends ids can offer Position/Duration/Intensity
9513
+ // without composing the clauses itself. The rich picker UI still renders
9514
+ // only `options`; these fields are secondary controls beside it.
9515
+ dimensions: perFieldDims([
9516
+ ["position", TRANSITION_POSITIONS],
9517
+ ["duration", TRANSITION_DURATIONS],
9518
+ ["intensity", TRANSITION_INTENSITIES]
9519
+ ])
9479
9520
  },
9480
9521
  {
9481
9522
  nodeType: "character-fx",
@@ -9486,7 +9527,17 @@ var SINGLE_CATALOGS = [
9486
9527
  defaultValue: "auto",
9487
9528
  categoryOrder: CHARACTER_FX_CATEGORY_ORDER,
9488
9529
  categoryLabels: CHARACTER_FX_CATEGORY_LABELS,
9489
- options: toOptions(CHARACTER_FX, "category")
9530
+ options: toOptions(CHARACTER_FX, "category"),
9531
+ // The node's three timing parameters, alongside the effect itself — the
9532
+ // same shape `transition` carries above, but the character-fx scales, not
9533
+ // the transition ones: the wording is deliberately different (an effect
9534
+ // manifests and persists; a transition occurs and spans), so an id-only
9535
+ // consumer must read these rows, never reuse the transition rows.
9536
+ dimensions: perFieldDims([
9537
+ ["position", CHARACTER_FX_POSITIONS],
9538
+ ["duration", CHARACTER_FX_DURATIONS],
9539
+ ["intensity", CHARACTER_FX_INTENSITIES]
9540
+ ])
9490
9541
  },
9491
9542
  // -------- "Subject / Object" family --------
9492
9543
  {
@@ -9715,7 +9766,9 @@ function summarizePickerCatalogs() {
9715
9766
  kind: c.kind,
9716
9767
  valueField: c.valueField,
9717
9768
  fields: c.fields,
9718
- optionCount: c.kind === "single" ? c.options?.length ?? 0 : c.dimensions?.reduce((n, d) => n + d.options.length, 0) ?? 0
9769
+ // Every option the detail call will return, whichever kind — a single-dim
9770
+ // catalog with secondary dimensions carries both.
9771
+ optionCount: (c.options?.length ?? 0) + (c.dimensions?.reduce((n, d) => n + d.options.length, 0) ?? 0)
9719
9772
  }));
9720
9773
  }
9721
9774
  function projectOption(o, detail) {
@@ -9742,22 +9795,23 @@ function projectPickerCatalog(c, opts = {}) {
9742
9795
  categoryLabels: c.categoryLabels,
9743
9796
  detail
9744
9797
  };
9798
+ const projectDims = (dims2) => dims2.map((d) => ({
9799
+ field: d.field,
9800
+ label: d.label,
9801
+ options: d.options.map((o) => projectOption(o, detail))
9802
+ }));
9745
9803
  if (c.kind === "single") {
9746
9804
  let options = c.options ?? [];
9747
9805
  if (opts.category) options = options.filter((o) => o.category === opts.category);
9748
- return { ...base, options: options.map((o) => projectOption(o, detail)) };
9806
+ const projected = { ...base, options: options.map((o) => projectOption(o, detail)) };
9807
+ if (!c.dimensions) return projected;
9808
+ let dims2 = c.dimensions;
9809
+ if (opts.field) dims2 = dims2.filter((d) => d.field === opts.field);
9810
+ return { ...projected, dimensions: projectDims(dims2) };
9749
9811
  }
9750
9812
  let dims = c.dimensions ?? [];
9751
9813
  if (opts.field) dims = dims.filter((d) => d.field === opts.field);
9752
- return {
9753
- ...base,
9754
- fields: c.fields,
9755
- dimensions: dims.map((d) => ({
9756
- field: d.field,
9757
- label: d.label,
9758
- options: d.options.map((o) => projectOption(o, detail))
9759
- }))
9760
- };
9814
+ return { ...base, fields: c.fields, dimensions: projectDims(dims) };
9761
9815
  }
9762
9816
  function projectAllCatalogs(opts = {}) {
9763
9817
  return getRegisteredPickerCatalogs().map((c) => projectPickerCatalog(c, { detail: opts.detail }));
@@ -11565,6 +11619,8 @@ function renderLens(l) {
11565
11619
  if (l.aperture) bits.push(`f/${l.aperture}`);
11566
11620
  return bits.length > 0 ? `Lens: ${bits.join(", ")}.` : "";
11567
11621
  }
11622
+
11623
+ // src/ref-binding.ts
11568
11624
  function identityRefsSentence(firstOrdinal, lastOrdinal) {
11569
11625
  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.`;
11570
11626
  }
@@ -11576,6 +11632,38 @@ var REF_BINDING = {
11576
11632
  ordinal: (n) => `@image_${n}`,
11577
11633
  frame: (n, role) => `Use @image_${n} as the ${role} (${role === "opening" ? "first" : "last"}) frame of the video.`
11578
11634
  };
11635
+
11636
+ // src/ref-id-tokens.ts
11637
+ var REF_TOKEN_LABEL_RE = /^[a-zA-Z0-9_ -]+$/;
11638
+ var HAS_REF_ID_TOKEN_RE = /\{ref:/i;
11639
+ var REF_ID_TOKEN_RE = /\{[rR][eE][fF]:([^{}]*)\}/g;
11640
+ var MALFORMED_REF_ID_TOKEN_RE = /\{[rR][eE][fF]:[^\s{}]*\}?/g;
11641
+ function splitLabel(content) {
11642
+ const at = content.lastIndexOf(":");
11643
+ if (at === -1) return { id: content };
11644
+ const tail = content.slice(at + 1);
11645
+ if (!REF_TOKEN_LABEL_RE.test(tail)) return { id: content };
11646
+ return { id: content.slice(0, at), label: tail };
11647
+ }
11648
+ function resolveRefIdTokens(prompt, ctx) {
11649
+ if (!prompt || !HAS_REF_ID_TOKEN_RE.test(prompt)) return prompt;
11650
+ const known = (id) => id.length > 0 && (ctx.slotById.has(id) || ctx.nameById.has(id));
11651
+ const bind = (id, label) => {
11652
+ const slot = ctx.slotById.get(id);
11653
+ if (slot !== void 0 && slot >= 1 && slot <= ctx.imageCount) {
11654
+ return label ? REF_BINDING.image(label, slot) : REF_BINDING.ordinal(slot);
11655
+ }
11656
+ return label ?? ctx.nameById.get(id) ?? "";
11657
+ };
11658
+ return prompt.replace(REF_ID_TOKEN_RE, (_match, content) => {
11659
+ if (known(content)) return bind(content, void 0);
11660
+ const { id, label } = splitLabel(content);
11661
+ if (known(id)) return bind(id, label);
11662
+ return label ?? "";
11663
+ }).replace(MALFORMED_REF_ID_TOKEN_RE, "");
11664
+ }
11665
+
11666
+ // src/video-reference-resolver.ts
11579
11667
  var REFERENCE_TOKEN_RE = /\{(image|video|audio):(\d+)(?::([a-zA-Z0-9_ -]+))?\}/gi;
11580
11668
  function resolveReferenceTokens(prompt, counts) {
11581
11669
  if (!prompt) return prompt;
@@ -11676,12 +11764,27 @@ function resolveVideoReferenceCore(args) {
11676
11764
  });
11677
11765
  }
11678
11766
  const hasExtras = (args.extraRefs?.length ?? 0) > 0;
11767
+ const nameByRefId = /* @__PURE__ */ new Map();
11768
+ for (const r of args.wiredCharRefs) {
11769
+ if (r.id && !nameByRefId.has(r.id)) nameByRefId.set(r.id, r.defaultName || r.characterSlug || "");
11770
+ }
11771
+ for (const ex of args.extraRefs ?? []) {
11772
+ if (ex.id && !nameByRefId.has(ex.id)) nameByRefId.set(ex.id, "");
11773
+ }
11774
+ for (const [id, name] of args.refNamesById ?? []) {
11775
+ if (id) nameByRefId.set(id, name);
11776
+ }
11777
+ const slotByRefId = /* @__PURE__ */ new Map();
11679
11778
  if (wiredCharRefs.length === 0 && !hasExtras) {
11779
+ const counts = tokenCounts(leadingRefUrls.length);
11680
11780
  return {
11681
11781
  // tokenCounts(leadingRefUrls.length) → image count == offset (no assets here):
11682
11782
  // leadingRefUrls mode counts the leading refs; ordinalOffset mode counts the
11683
11783
  // caller-owned leading refs the offset stands in for.
11684
- prompt: resolveReferenceTokens(args.prompt, tokenCounts(leadingRefUrls.length)),
11784
+ prompt: resolveReferenceTokens(
11785
+ resolveRefIdTokens(args.prompt, { slotById: slotByRefId, nameById: nameByRefId, imageCount: counts.image }),
11786
+ counts
11787
+ ),
11685
11788
  additionalUrls: [...leadingRefUrls]
11686
11789
  };
11687
11790
  }
@@ -11714,9 +11817,13 @@ function resolveVideoReferenceCore(args) {
11714
11817
  let position = offset;
11715
11818
  for (let i = 0; i < resolved.additionalUrls.length; i++) {
11716
11819
  position += 1;
11717
- const ref = wiredCharRefs.find((r) => r.url === resolved.additionalUrls[i]);
11820
+ const url2 = resolved.additionalUrls[i];
11821
+ const ref = wiredCharRefs.find((r) => r.url === url2);
11718
11822
  const slug = ref?.characterSlug;
11719
11823
  if (slug && !positionsByChar.has(slug)) positionsByChar.set(slug, position);
11824
+ for (const r of wiredCharRefs) {
11825
+ if (r.url === url2 && r.id && !slotByRefId.has(r.id)) slotByRefId.set(r.id, position);
11826
+ }
11720
11827
  }
11721
11828
  for (const r of wiredCharRefs) {
11722
11829
  if (r.source !== "wired-character") continue;
@@ -11729,6 +11836,7 @@ function resolveVideoReferenceCore(args) {
11729
11836
  fallbackUrls.push(r.url);
11730
11837
  position += 1;
11731
11838
  if (!positionsByChar.has(r.characterSlug)) positionsByChar.set(r.characterSlug, position);
11839
+ if (r.id && !slotByRefId.has(r.id)) slotByRefId.set(r.id, position);
11732
11840
  if (hybrid) {
11733
11841
  const binding = REF_BINDING.ordinal(position);
11734
11842
  canonicalPhrases.push(roleToPhrase(resolveDefaultRole(r.defaultRole, r.defaultUsageMode, r.source), binding));
@@ -11766,6 +11874,7 @@ function resolveVideoReferenceCore(args) {
11766
11874
  for (const ex of args.extraRefs) {
11767
11875
  if (!ex.url) continue;
11768
11876
  position += 1;
11877
+ if (ex.id && !slotByRefId.has(ex.id)) slotByRefId.set(ex.id, position);
11769
11878
  const desc = (ex.description ?? "").trim();
11770
11879
  if (ex.characterSlug) {
11771
11880
  const meta3 = args.lookupCharacterBySlug?.(ex.characterSlug);
@@ -11912,6 +12021,11 @@ ${finalPrompt}` : block;
11912
12021
  merged.push(u);
11913
12022
  }
11914
12023
  }
12024
+ finalPrompt = resolveRefIdTokens(finalPrompt, {
12025
+ slotById: slotByRefId,
12026
+ nameById: nameByRefId,
12027
+ imageCount: tokenCounts(merged.length).image
12028
+ }) ?? finalPrompt;
11915
12029
  const referenceOrder = args.referenceOrder;
11916
12030
  const assetUrls = merged.slice(leadingRefUrls.length);
11917
12031
  if (referenceOrder && referenceOrder.length > 0 && assetUrls.length > 1) {
@@ -27298,7 +27412,7 @@ precise subject \u2192 action details \u2192 scene/environment \u2192 lighting &
27298
27412
  - Transitions and camera terms on 2.5: state a transition's trigger point AND method in one sentence \u2014 "At the 5-second mark, the camera quickly transitions leftward using a left wipe combined with a natural dissolve." Basic shot and camera terms are written directly (push in / pull out / pan / track / orbit / dolly zoom / whip pan / hard cut / dissolve / one-shot / speed ramp); only niche terms need [term + descriptive explanation] \u2014 which is exactly what the pickers' compact hint mode emits versus their long hints.
27299
27413
 
27300
27414
  **References (when reference media is attached)**
27301
- - Refer to assets by ordinal in attachment order: "@Image 1", "Video 2", "Audio 1". Asset ORDER is priority \u2014 put the most identity-critical asset first. (In the editor, the \`{image:N:label}\` / \`{video:N}\` / \`{audio:N}\` prompt tokens auto-emit this binding \u2014 \`{image:1:person}\` resolves to "the person from @image_1" \u2014 so a wired reference and its mention stay in sync.)
27415
+ - Refer to assets by ordinal in attachment order: "@Image 1", "Video 2", "Audio 1". Asset ORDER is priority \u2014 put the most identity-critical asset first. (In the editor, the \`{image:N:label}\` / \`{video:N}\` / \`{audio:N}\` prompt tokens auto-emit this binding \u2014 \`{image:1:person}\` resolves to "the person from @image_1" \u2014 so a wired reference and its mention stay in sync. An API caller that passes \`connectedReferences\` can instead name a reference by its own id \u2014 \`{ref:<id>}\` / \`{ref:<id>:label}\` \u2014 and the platform substitutes the \`@image_N\` seat after it has numbered the references, so the client never computes N; a token whose reference was not attached drops to its label or name.)
27302
27416
  - Define each subject once, then reuse the label consistently: 'Define the woman in the red dress in Image 1 as the courier' \u2026 'the courier opens the door'. In multi-character scenes bind every character to its image ("the man from Image 1 hands the box to the woman from Image 2") and append: "do not generate duplicate copies of the same character".
27303
27417
  - Character identity: ONE close-up headshot + ONE full-body image is ideal. On the 2.0 SKUs do NOT attach multi-view/three-view character sheets \u2014 the model reads the views as separate people, causing identity drift and twin duplicates; 2.5 accepts multi-view images (see "Generation differences").
27304
27418
  - 4-5 assets total works best (1-2 character images + 1 scene image + 1 camera-movement video + 1 audio clip). Maxing out the 9-image/3-video/3-audio limits degrades feature priority and adherence.
@@ -27400,7 +27514,7 @@ precise subject \u2192 action details \u2192 scene/environment \u2192 lighting &
27400
27514
  - Nothing visual connected \u2192 text-to-video. A concrete aspect ratio is required (21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 \u2014 no adaptive); Nodaro renders 16:9 unless one is picked.
27401
27515
 
27402
27516
  **References (when reference media is attached)**
27403
- - Refer to assets by ordinal in attachment order: "@Image 1", "Video 1", "Audio 1". Put the identity-critical asset first. (In the editor, the \`{image:N:label}\` / \`{video:N}\` / \`{audio:N}\` prompt tokens auto-emit this binding, so a wired reference and its mention stay in sync.)
27517
+ - Refer to assets by ordinal in attachment order: "@Image 1", "Video 1", "Audio 1". Put the identity-critical asset first. (In the editor, the \`{image:N:label}\` / \`{video:N}\` / \`{audio:N}\` prompt tokens auto-emit this binding, so a wired reference and its mention stay in sync. An API caller that passes \`connectedReferences\` can instead write \`{ref:<id>}\` / \`{ref:<id>:label}\` with the reference's own id \u2014 the platform substitutes the \`@image_N\` seat after numbering.)
27404
27518
  - Caps: 9 reference images; 3 reference videos, each 2-15s and \u226415s combined; 3 reference audio clips, \u226415s combined. Reference audio cannot be used alone \u2014 it must accompany an image or video reference.
27405
27519
  - Define each subject once, then reuse the label consistently ("the woman from @Image 1 \u2026 the woman opens the door"). A focused set of 4-5 assets beats maxing every cap.
27406
27520
  - Billing note: generated seconds AND reference-video input seconds bill at the same per-second rate; the first 5 input images are free and each extra image adds a small surcharge; audio input is free.
@@ -27916,7 +28030,31 @@ var REFERENCE_IMAGE_ROLES = [
27916
28030
  ];
27917
28031
  var present = (s) => typeof s === "string" && s.trim().length > 0;
27918
28032
  var rr = (s, m) => m.size > 0 ? resolveNodeRefs(s, m) : s;
27919
- function resolvePrompt({ override, typed = [], wired, refMap, appendWired }) {
28033
+ var GLUE_PUNCTUATION = /* @__PURE__ */ new Set([",", ".", ";", ":", "!", "?", ")"]);
28034
+ function promptPartSeparator(left, right) {
28035
+ if (left.length === 0 || right.length === 0) return "";
28036
+ if (/\s$/.test(left) || /^\s/.test(right)) return "";
28037
+ if (GLUE_PUNCTUATION.has(right[0])) return "";
28038
+ return " ";
28039
+ }
28040
+ function joinPromptParts(parts) {
28041
+ let out = "";
28042
+ for (const part of parts) {
28043
+ if (!present(part)) continue;
28044
+ out = out.length === 0 ? part : out + promptPartSeparator(out, part) + part;
28045
+ }
28046
+ return out;
28047
+ }
28048
+ function applyPromptAffixes(core, affixes, refMap) {
28049
+ const prefix = present(affixes?.prefix) ? rr(affixes.prefix, refMap) : void 0;
28050
+ const suffix = present(affixes?.suffix) ? rr(affixes.suffix, refMap) : void 0;
28051
+ if (prefix === void 0 && suffix === void 0) return core;
28052
+ return joinPromptParts([prefix, core, suffix]);
28053
+ }
28054
+ function resolvePrompt({ override, typed = [], wired, refMap, appendWired, affixes }) {
28055
+ return applyPromptAffixes(resolveCore({ override, typed, wired, refMap, appendWired }), affixes, refMap);
28056
+ }
28057
+ function resolveCore({ override, typed = [], wired, refMap, appendWired }) {
27920
28058
  if (appendWired && !present(override)) {
27921
28059
  const base = typed.find(present);
27922
28060
  return [base, wired].filter(present).map((s) => rr(s, refMap)).join(". ");
@@ -27964,15 +28102,110 @@ function computeNodePrompt(nodeType, data, { override, wired, refMap, appendWire
27964
28102
  const fields = NODE_PROMPT_CANDIDATE_FIELDS[nodeType] ?? ["prompt"];
27965
28103
  typed = fields.map((f) => data[f]);
27966
28104
  }
27967
- return resolvePrompt({ override, typed, wired, refMap, appendWired });
28105
+ return resolvePrompt({ override, typed, wired, refMap, appendWired, affixes: readPromptAffixes(data) });
27968
28106
  }
27969
28107
  function computeLlmChatFields(data, { override, wiredUserInput, wiredSystemPrompt, refMap }) {
27970
28108
  return {
27971
- userInput: resolvePrompt({ override, typed: [data.userInput], wired: wiredUserInput, refMap }),
28109
+ userInput: resolvePrompt({ override, typed: [data.userInput], wired: wiredUserInput, refMap, affixes: readPromptAffixes(data) }),
27972
28110
  systemPrompt: resolvePrompt({ typed: [data.systemPrompt], wired: wiredSystemPrompt, refMap })
27973
28111
  };
27974
28112
  }
27975
28113
 
28114
+ // src/node-prompt-fields.ts
28115
+ var NODE_PROMPT_FIELDS = {
28116
+ // ── Image ──
28117
+ // (`edit-image` / `image-to-image` are legacy types consolidated into
28118
+ // `modify-image`; they're not in the creatable node set, so a node of that
28119
+ // type never mounts and needs no entry here. The guard test enforces that.)
28120
+ "generate-image": { prompt: "prompt", negative: "negativePrompt", media: "image", inline: true },
28121
+ "modify-image": { prompt: "prompt", negative: "negativePrompt", icon: "paintbrush", media: "image", inline: true },
28122
+ "generate-mask": { prompt: "prompt", promptLabel: "What to mask", media: "image", inline: true },
28123
+ // ── Video ──
28124
+ "generate-video": { prompt: "prompt", negative: "negativePrompt", media: "video", inline: true },
28125
+ // Trimmed multi-segment stitch sibling of generate-video — no negativePrompt field.
28126
+ "generate-video-pro": { prompt: "prompt", media: "video", inline: true },
28127
+ // Span-replace sibling of generate-video-pro — no negativePrompt field.
28128
+ "edit-video-pro": { prompt: "prompt", media: "video", inline: true },
28129
+ "text-to-video": { prompt: "prompt", negative: "negativePrompt", media: "video", inline: true },
28130
+ "image-to-video": { prompt: "prompt", negative: "negativePrompt", promptLabel: "Motion prompt", media: "video", inline: true },
28131
+ "video-to-video": { prompt: "prompt", negative: "negativePrompt", media: "video", inline: true },
28132
+ "switchx": { prompt: "prompt", promptLabel: "Look prompt", media: "video", inline: true },
28133
+ "extend-video": { prompt: "prompt", negative: "negativePrompt", media: "video", inline: true },
28134
+ "speech-to-video": { prompt: "prompt", negative: "negativePrompt", media: "video", inline: true },
28135
+ "motion-transfer": { prompt: "prompt", negative: "negativePrompt", media: "video", inline: true },
28136
+ // Cinematic Avatar (HeyGen) — generative prompt (NOT a verbatim script),
28137
+ // so it participates in the quick-edit Prompt modal like other AI video nodes.
28138
+ "cinematic-avatar": { prompt: "prompt", media: "video", inline: true },
28139
+ "video-sfx": { prompt: "prompt", negative: "negativePrompt", promptLabel: "Sound prompt", media: "audio", inline: true },
28140
+ "video-retake": { prompt: "prompt", promptLabel: "Retake prompt", media: "video", inline: true },
28141
+ // ── Audio / music ──
28142
+ "generate-music": { prompt: "prompt", media: "audio", inline: true },
28143
+ "suno-generate": { prompt: "prompt", media: "audio", inline: true },
28144
+ "text-to-audio": { prompt: "prompt", media: "audio", inline: true },
28145
+ // ── Text / LLM (no media-result preview body → no inline editor) ──
28146
+ "text-prompt": { prompt: "text", promptLabel: "Text", media: "text", inline: false, affixes: false },
28147
+ "image-to-text": { prompt: "customPrompt", promptLabel: "Question", media: "text", inline: false },
28148
+ "llm-chat": { prompt: "userInput", promptLabel: "Prompt", media: "text", inline: false },
28149
+ // ── Speech / voice ──
28150
+ "text-to-speech": { prompt: "directText", promptLabel: "Text", media: "audio", inline: true, promptGate: { field: "textSource", value: "direct" } },
28151
+ "voice-design": { prompt: "voiceDescription", promptLabel: "Voice description", media: "audio", inline: true },
28152
+ "voice-remix": { prompt: "voiceDescription", promptLabel: "Voice description", media: "audio", inline: true },
28153
+ "lip-sync": { prompt: "prompt", media: "audio", inline: true },
28154
+ // ── Suno (music) ──
28155
+ "suno-cover": { prompt: "prompt", media: "audio", inline: true },
28156
+ "suno-extend": { prompt: "prompt", media: "audio", inline: true },
28157
+ "suno-replace-section": { prompt: "prompt", media: "audio", inline: true },
28158
+ "suno-upload-extend": { prompt: "prompt", media: "audio", inline: true },
28159
+ // NOTE: `suno-add-vocals` is intentionally absent — its node has no
28160
+ // user-editable prompt (SunoAddVocalsData declares only `model`; the config
28161
+ // panel + backend route take taskId/audioId/model, never a prompt). A stale
28162
+ // entry here rendered a phantom Prompt editor in the quick-edit modal that
28163
+ // wrote to a `data.prompt` key nothing ever reads (the dead-field class the
28164
+ // guard test now catches via defaultData ownership).
28165
+ "suno-lyrics": { prompt: "prompt", media: "audio", inline: false },
28166
+ "suno-style-boost": { prompt: "content", promptLabel: "Style", media: "audio", inline: false },
28167
+ // ── Composition / FX (compact, no media-result preview → no inline editor) ──
28168
+ "image-critic": { prompt: "prompt", promptLabel: "Criteria", media: "image", inline: false },
28169
+ "motion-graphics": { prompt: "motionPrompt", promptLabel: "Motion prompt", media: "video", inline: false },
28170
+ "3d-title": { prompt: "titlePrompt", promptLabel: "Title", media: "text", inline: false },
28171
+ // ── Script / alignment (their primary text field) ──
28172
+ "generate-script": { prompt: "styleGuide", promptLabel: "Style guide", media: "text", inline: false },
28173
+ "forced-alignment": { prompt: "transcript", promptLabel: "Transcript", media: "audio", inline: false },
28174
+ // Video Analysis — its focus hint is the editable prompt (renders a JSON scene
28175
+ // table, not a media preview → no inline editor).
28176
+ "video-analysis": { prompt: "analysisFocus", promptLabel: "Analysis focus", media: "video", inline: false }
28177
+ };
28178
+ function getPromptFields(nodeType) {
28179
+ return nodeType ? NODE_PROMPT_FIELDS[nodeType] : void 0;
28180
+ }
28181
+ function nodeHasPromptField(nodeType) {
28182
+ return getPromptFields(nodeType) !== void 0;
28183
+ }
28184
+ function getSnippetMedia(nodeType) {
28185
+ return getPromptFields(nodeType)?.media;
28186
+ }
28187
+ function nodeHasInlinePrompt(nodeType) {
28188
+ return getPromptFields(nodeType)?.inline === true;
28189
+ }
28190
+ function nodeSupportsPromptAffixes(nodeType) {
28191
+ const spec = getPromptFields(nodeType);
28192
+ return spec !== void 0 && spec.affixes !== false;
28193
+ }
28194
+ var PROMPT_AFFIX_CORE_FIELD_OVERRIDES = { "generate-script": "prompt" };
28195
+ function promptAffixCoreField(nodeType) {
28196
+ if (!nodeSupportsPromptAffixes(nodeType)) return void 0;
28197
+ return PROMPT_AFFIX_CORE_FIELD_OVERRIDES[nodeType] ?? getPromptFields(nodeType).prompt;
28198
+ }
28199
+ function promptFieldCarriesAffixes(nodeType, promptField) {
28200
+ const core = promptAffixCoreField(nodeType);
28201
+ if (core === void 0) return false;
28202
+ if (promptField === void 0) return getPromptFields(nodeType).prompt === core;
28203
+ return promptField === core || (NODE_PROMPT_CANDIDATE_FIELDS[nodeType] ?? []).includes(promptField);
28204
+ }
28205
+ var PROMPT_AFFIX_NODE_TYPES = new Set(
28206
+ Object.entries(NODE_PROMPT_FIELDS).filter(([, s]) => s.affixes !== false).map(([t]) => t)
28207
+ );
28208
+
27976
28209
  // src/factory-presets/shared-image.ts
27977
28210
  var STYLIZED_SUBJECT = [
27978
28211
  {
@@ -27981,7 +28214,7 @@ var STYLIZED_SUBJECT = [
27981
28214
  description: "Subject \u2192 3D cartoon, rest stays photoreal.",
27982
28215
  data: {
27983
28216
  provider: "nano-banana-pro",
27984
- prompt: "Restyle ONLY the person in the reference image into a polished 3D animated character \u2014 Pixar/Disney sensibility: soft subsurface skin shading, expressive oversized eyes, smoothly stylized hair, clean rounded forms. Preserve their identity, exact pose, expression, and framing. Everything else stays untouched and fully photorealistic: keep the original background, props, clothing fabric and texture, and the scene's real lighting, shadows, and color grade. Composite the stylized figure into the real plate so it sits naturally \u2014 matched light direction, contact shadows, and depth.",
28217
+ promptPrefix: "Restyle ONLY the person in the reference image into a polished 3D animated character \u2014 Pixar/Disney sensibility: soft subsurface skin shading, expressive oversized eyes, smoothly stylized hair, clean rounded forms. Preserve their identity, exact pose, expression, and framing. Everything else stays untouched and fully photorealistic: keep the original background, props, clothing fabric and texture, and the scene's real lighting, shadows, and color grade. Composite the stylized figure into the real plate so it sits naturally \u2014 matched light direction, contact shadows, and depth.",
27985
28218
  negativePrompt: "changing the background, altering the unstylized parts, restyling clothing fabric or props, relighting the scene, distorting the subject, changing identity or pose, flat 2D look, extra limbs, deformed hands, warped face"
27986
28219
  }
27987
28220
  },
@@ -27991,7 +28224,7 @@ var STYLIZED_SUBJECT = [
27991
28224
  description: "Exaggerated cartoon head on a real scene.",
27992
28225
  data: {
27993
28226
  provider: "nano-banana-pro",
27994
- prompt: "Turn ONLY the person into a playful hand-illustrated caricature: enlarge the head, exaggerate their most recognizable features, and amplify expression with bold, confident linework and clean cel-style shading \u2014 while keeping them clearly identifiable. Leave everything else exactly as shot and photorealistic: the body proportions below the neck, the clothing, the background, props, and the scene's real lighting and shadows remain unchanged. Blend the caricature head onto the real photo seamlessly with matched lighting and a believable neckline.",
28227
+ promptPrefix: "Turn ONLY the person into a playful hand-illustrated caricature: enlarge the head, exaggerate their most recognizable features, and amplify expression with bold, confident linework and clean cel-style shading \u2014 while keeping them clearly identifiable. Leave everything else exactly as shot and photorealistic: the body proportions below the neck, the clothing, the background, props, and the scene's real lighting and shadows remain unchanged. Blend the caricature head onto the real photo seamlessly with matched lighting and a believable neckline.",
27995
28228
  negativePrompt: "changing the background, altering the unstylized parts, restyling the body or clothing, relighting the scene, distorting the subject beyond intent, losing likeness, photorealistic head, harsh seam at the neck, deformed features"
27996
28229
  }
27997
28230
  },
@@ -28001,7 +28234,7 @@ var STYLIZED_SUBJECT = [
28001
28234
  description: "Subject \u2192 2D anime, real environment.",
28002
28235
  data: {
28003
28236
  provider: "nano-banana-pro",
28004
- prompt: "Restyle ONLY the person as a crisp 2D anime character \u2014 clean ink outlines, flat cel shading with sharp shadow shapes, glossy stylized hair, and expressive anime eyes \u2014 while preserving their identity, pose, expression, and framing. Keep the real-world background, environment, props, and the original photographic lighting, shadows, and color completely untouched and photorealistic. Integrate the 2D figure into the live-action plate so the light direction and contact shadows read naturally.",
28237
+ promptPrefix: "Restyle ONLY the person as a crisp 2D anime character \u2014 clean ink outlines, flat cel shading with sharp shadow shapes, glossy stylized hair, and expressive anime eyes \u2014 while preserving their identity, pose, expression, and framing. Keep the real-world background, environment, props, and the original photographic lighting, shadows, and color completely untouched and photorealistic. Integrate the 2D figure into the live-action plate so the light direction and contact shadows read naturally.",
28005
28238
  negativePrompt: "changing the background, altering the unstylized parts, restyling the environment or props, relighting the scene, distorting the subject, 3D render look, photorealistic skin on the subject, extra fingers, warped anatomy, broken outlines"
28006
28239
  }
28007
28240
  },
@@ -28011,7 +28244,7 @@ var STYLIZED_SUBJECT = [
28011
28244
  description: "Inverse \u2014 real subject, stylized world.",
28012
28245
  data: {
28013
28246
  provider: "nano-banana-pro",
28014
- prompt: "Inverse stylization: keep the PERSON completely photorealistic and unchanged \u2014 real skin, hair, clothing, identity, pose, and framing all preserved exactly. Restyle ONLY the surrounding world into a vibrant, hand-crafted cartoon environment: simplified painterly shapes, bold saturated colors, soft graphic shading, and whimsical stylized props and scenery. Light the real person to match the cartoon world's color and direction so they sit convincingly inside it, with believable contact shadows.",
28247
+ promptPrefix: "Inverse stylization: keep the PERSON completely photorealistic and unchanged \u2014 real skin, hair, clothing, identity, pose, and framing all preserved exactly. Restyle ONLY the surrounding world into a vibrant, hand-crafted cartoon environment: simplified painterly shapes, bold saturated colors, soft graphic shading, and whimsical stylized props and scenery. Light the real person to match the cartoon world's color and direction so they sit convincingly inside it, with believable contact shadows.",
28015
28248
  negativePrompt: "stylizing or cartoonifying the person, altering the subject's skin, face, hair or clothing, distorting the subject, changing the subject's pose, photorealistic background, flat lifeless scene, harsh cut-out edges around the person"
28016
28249
  }
28017
28250
  },
@@ -28021,7 +28254,7 @@ var STYLIZED_SUBJECT = [
28021
28254
  description: "Subject \u2192 clay figure, real surroundings.",
28022
28255
  data: {
28023
28256
  provider: "nano-banana-pro",
28024
- prompt: "Restyle ONLY the person into a tactile stop-motion claymation figure \u2014 molded plasticine surface with visible fingerprints, tool marks, subtle seams, and a soft matte sheen, in the handmade spirit of Aardman puppets \u2014 while keeping their identity, pose, expression, and framing. Everything else stays exactly as shot and photorealistic: the real background, set, props, and the scene's natural lighting and shadows are unchanged. Seat the clay figure into the real plate with matched light direction and grounded contact shadows.",
28257
+ promptPrefix: "Restyle ONLY the person into a tactile stop-motion claymation figure \u2014 molded plasticine surface with visible fingerprints, tool marks, subtle seams, and a soft matte sheen, in the handmade spirit of Aardman puppets \u2014 while keeping their identity, pose, expression, and framing. Everything else stays exactly as shot and photorealistic: the real background, set, props, and the scene's natural lighting and shadows are unchanged. Seat the clay figure into the real plate with matched light direction and grounded contact shadows.",
28025
28258
  negativePrompt: "changing the background or set, altering the unstylized parts, restyling props, relighting the scene, distorting the subject, smooth plastic toy look, glossy CGI surface, melted or deformed figure, missing fingerprints, extra limbs"
28026
28259
  }
28027
28260
  }
@@ -28042,7 +28275,7 @@ var IMAGE_EDITS = [
28042
28275
  description: "Cut out the subject on white.",
28043
28276
  data: {
28044
28277
  provider: "nano-banana-pro",
28045
- prompt: "Cleanly cut the main subject out of the reference image and place it on a pure, solid white background. Trace a crisp, accurate edge \u2014 preserve fine detail like hair strands, fur, and translucent or wispy edges \u2014 with no leftover background pixels and no color fringing. Keep the subject itself completely unchanged: same pose, lighting, color, and full silhouette, nothing cropped.",
28278
+ promptPrefix: "Cleanly cut the main subject out of the reference image and place it on a pure, solid white background. Trace a crisp, accurate edge \u2014 preserve fine detail like hair strands, fur, and translucent or wispy edges \u2014 with no leftover background pixels and no color fringing. Keep the subject itself completely unchanged: same pose, lighting, color, and full silhouette, nothing cropped.",
28046
28279
  negativePrompt: "fringing, color halo, cut-off subject, leftover background, jagged or rough edges, missing hair detail, semi-transparent matte, drop shadow, gray or off-white background, altering the subject"
28047
28280
  }
28048
28281
  },
@@ -28062,7 +28295,7 @@ var IMAGE_EDITS = [
28062
28295
  description: "Natural color from grayscale.",
28063
28296
  data: {
28064
28297
  provider: "nano-banana-pro",
28065
- prompt: "Colorize this black-and-white photograph with natural, historically plausible color. Give skin realistic, even tones, and assign believable hues to clothing, foliage, sky, and materials. Preserve every original detail, grain, contrast, and the exact composition \u2014 add color only, never invent or remove content.",
28298
+ promptPrefix: "Colorize this black-and-white photograph with natural, historically plausible color. Give skin realistic, even tones, and assign believable hues to clothing, foliage, sky, and materials. Preserve every original detail, grain, contrast, and the exact composition \u2014 add color only, never invent or remove content.",
28066
28299
  negativePrompt: "oversaturated, anachronistic colors, neon or cartoon tones, color bleeding outside edges, blotchy or uneven skin, lost detail, altered composition, added or hallucinated objects, washed-out contrast"
28067
28300
  }
28068
28301
  },
@@ -28072,7 +28305,7 @@ var IMAGE_EDITS = [
28072
28305
  description: "Repair scratches, denoise, sharpen.",
28073
28306
  data: {
28074
28307
  provider: "nano-banana-pro",
28075
- prompt: "Restore this old, damaged photograph: remove scratches, dust, creases, stains, and noise, repair torn or missing areas by reconstructing what is plainly there, and gently recover sharpness and tonal detail. Keep the result authentic and true to the original \u2014 preserve identity, era, natural film grain, and composition. Repair only; do not beautify, restyle, or invent new features.",
28308
+ promptPrefix: "Restore this old, damaged photograph: remove scratches, dust, creases, stains, and noise, repair torn or missing areas by reconstructing what is plainly there, and gently recover sharpness and tonal detail. Keep the result authentic and true to the original \u2014 preserve identity, era, natural film grain, and composition. Repair only; do not beautify, restyle, or invent new features.",
28076
28309
  negativePrompt: "over-smoothed, plastic skin, waxy or airbrushed look, hallucinated details, invented faces or objects, changing identity or age, removing authentic grain, modern restyling, oversharpening halos, altered composition"
28077
28310
  }
28078
28311
  },
@@ -28102,7 +28335,7 @@ var IMAGE_EDITS = [
28102
28335
  description: "Hand-drawn marker doodles on top \u2014 photo stays untouched.",
28103
28336
  data: {
28104
28337
  provider: "nano-banana-pro",
28105
- prompt: "Layer playful hand-drawn doodles ON TOP of the reference photo while keeping every pixel of the underlying photograph completely unchanged \u2014 same people, same colors, same lighting, same crop. Doodle style: wobbly hand-drawn felt-tip marker lines in white with a few yellow accents, like quick sketches on a printed photo. Add: loose outline traces hugging one or two key shapes, small sparkles and stars, a hand-drawn thought cloud or speech bubble with a short witty handwritten phrase that reacts to what is actually happening in the photo, and simple arrows or underlines pointing at fun details. Outlines only \u2014 never fill shapes with color. Never cover faces or the main focal point; place doodles in empty areas like sky, walls or margins. Keep it balanced: four to seven doodle elements total, charming and confident, not cluttered. The photo is the hero \u2014 the doodles are the seasoning.",
28338
+ promptPrefix: "Layer playful hand-drawn doodles ON TOP of the reference photo while keeping every pixel of the underlying photograph completely unchanged \u2014 same people, same colors, same lighting, same crop. Doodle style: wobbly hand-drawn felt-tip marker lines in white with a few yellow accents, like quick sketches on a printed photo. Add: loose outline traces hugging one or two key shapes, small sparkles and stars, a hand-drawn thought cloud or speech bubble with a short witty handwritten phrase that reacts to what is actually happening in the photo, and simple arrows or underlines pointing at fun details. Outlines only \u2014 never fill shapes with color. Never cover faces or the main focal point; place doodles in empty areas like sky, walls or margins. Keep it balanced: four to seven doodle elements total, charming and confident, not cluttered. The photo is the hero \u2014 the doodles are the seasoning.",
28106
28339
  negativePrompt: "altered photo, restyled or recolored scene, redrawn subject, covered faces, filled color shapes, digital sticker or emoji look, vector clipart, cluttered doodles, garbled or misspelled handwriting, watermark, blurry"
28107
28340
  }
28108
28341
  },
@@ -28112,7 +28345,7 @@ var IMAGE_EDITS = [
28112
28345
  description: "Looser free-form doodles \u2014 the model improvises.",
28113
28346
  data: {
28114
28347
  provider: "nano-banana-pro",
28115
- prompt: "Decorate the reference photo with expressive hand-drawn doodles layered on top, keeping the underlying photograph itself completely unchanged. Free, confident hand-drawn marker linework \u2014 wobbly outlines, sparkles, squiggles, little flames or hearts where they fit the mood, and a short handwritten phrase that responds cleverly to the content of the photo (never a generic clich\xE9). Mix of white and one or two bright accent colors. Outline style only, no filled shapes. Compose the doodles around the subject \u2014 never on top of faces or the focal point \u2014 using empty areas and edges. Loose, playful, zine-like energy: it should feel like a bored genius doodled on a printed photo. Keep the original image pixels intact beneath the doodle layer.",
28348
+ promptPrefix: "Decorate the reference photo with expressive hand-drawn doodles layered on top, keeping the underlying photograph itself completely unchanged. Free, confident hand-drawn marker linework \u2014 wobbly outlines, sparkles, squiggles, little flames or hearts where they fit the mood, and a short handwritten phrase that responds cleverly to the content of the photo (never a generic clich\xE9). Mix of white and one or two bright accent colors. Outline style only, no filled shapes. Compose the doodles around the subject \u2014 never on top of faces or the focal point \u2014 using empty areas and edges. Loose, playful, zine-like energy: it should feel like a bored genius doodled on a printed photo. Keep the original image pixels intact beneath the doodle layer.",
28116
28349
  negativePrompt: "altered photo, restyled or recolored scene, covered faces, filled color blocks, sticker or clipart look, clich\xE9 phrases, garbled or misspelled handwriting, cluttered composition, watermark, blurry"
28117
28350
  }
28118
28351
  }
@@ -28139,7 +28372,8 @@ var GENERATE_IMAGE_PRESETS = [
28139
28372
  provider: "nano-banana-pro",
28140
28373
  aspectRatio: "16:9",
28141
28374
  resolution: "2K",
28142
- prompt: `Create a single high-resolution, densely packed character reference sheet titled "CHARACTER BOARD" using the attached photo of the person as the single source of truth for face, hair, beard, eyes, skin tone and body proportions. The same person must appear in every panel \u2014 same age, same features. Outfit identical to the attached photo across all panels. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade character-design UI. The composition should feel organized but not rigidly locked: allow the main portrait, metadata, and supporting panels to shift position naturally within the board. The panel arrangement can vary from generation to generation while remaining readable, balanced, and premium. Design the board so it works cleanly in different aspect ratios without depending on a fixed left-column structure. Include: A large hero portrait or 3/4-length character image, accompanied by a detailed metadata block: NAME \xB7 AGE \xB7 HEIGHT \xB7 BUILD \xB7 HAIR \xB7 EYES \xB7 FEATURES \xB7 OUTFIT (describe the exact clothing from the attached photo) \xB7 CHARACTER \xB7 MOOD. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body shots, neutral pose, identical outfit and lighting, neutral tan backdrop): FRONT \xB7 3/4 LEFT \xB7 SIDE LEFT \xB7 BACK \xB7 3/4 RIGHT. PANEL 02 \u2014 EXPRESSIONS (5 tight headshots, same lighting): CALM \xB7 LAUGHING \xB7 INTENSE \xB7 CONTEMPLATIVE \xB7 CONFIDENT. PANEL 03 \u2014 DETAILS (3 macros): face/eyes close-up \xB7 hand close-up (showing ring, watch or cuff) \xB7 distinctive outfit detail. PANEL 04 \u2014 OUTFIT FLAT-LAYS (5 isolated product shots on dark background): outerwear \xB7 top \xB7 bottom \xB7 footwear \xB7 main accessory. PANEL 05 \u2014 LIGHTING / MOOD (4 same-pose portraits under different lighting): SOFT WINDOW LIGHT \xB7 GOLDEN HOUR \xB7 COOL BLUE NIGHT \xB7 DRAMATIC RIM-LIGHT. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes derived from the outfit and skin tones. Bottom caption: "Use this character board as a visual reference for consistent depiction of the character across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent face across every single panel. 8K, fine grain, cinematic color grading.`,
28375
+ promptPrefix: `Create a single high-resolution, densely packed character reference sheet titled "CHARACTER BOARD" using the attached photo of the person as the single source of truth for face, hair, beard, eyes, skin tone and body proportions. The same person must appear in every panel \u2014 same age, same features. Outfit identical to the attached photo across all panels. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade character-design UI. The composition should feel organized but not rigidly locked: allow the main portrait, metadata, and supporting panels to shift position naturally within the board. The panel arrangement can vary from generation to generation while remaining readable, balanced, and premium. Design the board so it works cleanly in different aspect ratios without depending on a fixed left-column structure. Include: A large hero portrait or 3/4-length character image, accompanied by a detailed metadata block: NAME \xB7 AGE \xB7 HEIGHT \xB7 BUILD \xB7 HAIR \xB7 EYES \xB7 FEATURES \xB7 OUTFIT (describe the exact clothing from the attached photo) \xB7 CHARACTER \xB7 MOOD. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body shots, neutral pose, identical outfit and lighting, neutral tan backdrop): FRONT \xB7 3/4 LEFT \xB7 SIDE LEFT \xB7 BACK \xB7 3/4 RIGHT. PANEL 02 \u2014 EXPRESSIONS (5 tight headshots, same lighting): CALM \xB7 LAUGHING \xB7 INTENSE \xB7 CONTEMPLATIVE \xB7 CONFIDENT. PANEL 03 \u2014 DETAILS (3 macros): face/eyes close-up \xB7 hand close-up (showing ring, watch or cuff) \xB7 distinctive outfit detail. PANEL 04 \u2014 OUTFIT FLAT-LAYS (5 isolated product shots on dark background): outerwear \xB7 top \xB7 bottom \xB7 footwear \xB7 main accessory. PANEL 05 \u2014 LIGHTING / MOOD (4 same-pose portraits under different lighting): SOFT WINDOW LIGHT \xB7 GOLDEN HOUR \xB7 COOL BLUE NIGHT \xB7 DRAMATIC RIM-LIGHT. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes derived from the outfit and skin tones. Bottom caption: "Use this character board as a visual reference for consistent depiction of the character across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28376
+ promptSuffix: `Style: photorealistic, no illustration. Consistent face across every single panel. 8K, fine grain, cinematic color grading.`,
28143
28377
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution"
28144
28378
  }
28145
28379
  },
@@ -28152,7 +28386,8 @@ var GENERATE_IMAGE_PRESETS = [
28152
28386
  provider: "nano-banana-pro",
28153
28387
  aspectRatio: "16:9",
28154
28388
  resolution: "2K",
28155
- prompt: `Create a single high-resolution, densely packed pose reference sheet titled "POSE BOARD" using the attached photo of the person as the single source of truth for face, hair, eyes, skin tone, body proportions and outfit. The same person must appear in every panel \u2014 same age, same features, outfit identical to the attached photo across all panels. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade animation-planning UI. The composition should feel organized but not rigidly locked: allow the hero figure, metadata, and supporting panels to shift position naturally within the board while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large full-body hero shot in a relaxed standing pose with a metadata block: NAME \xB7 AGE \xB7 BUILD \xB7 HEIGHT \xB7 OUTFIT \xB7 POSE LANGUAGE \xB7 CENTER OF GRAVITY \xB7 DOMINANT HAND \xB7 PURPOSE. Also include five content groupings \u2014 render ALL five panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 BASIC POSES (5 full-body shots, identical outfit and lighting, neutral tan backdrop): STANDING \xB7 SITTING \xB7 WALKING \xB7 RUNNING \xB7 JUMPING. PANEL 02 \u2014 ACTION POSES (5 dynamic full-body shots with clear silhouettes): FIGHT STANCE \xB7 THROW \xB7 DODGE \xB7 CLIMB \xB7 LAND. PANEL 03 \u2014 EXPRESSIONS (5 tight headshots, same lighting): NEUTRAL \xB7 LAUGHING \xB7 ANGRY \xB7 SAD \xB7 SURPRISED. PANEL 04 \u2014 ANGLE COVERAGE (4 chest-up portraits): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK. PANEL 05 \u2014 COLOR PALETTE: 6 swatches with HEX codes derived from the outfit and skin tones. Bottom caption: "Use this pose board as a visual reference for consistent posing of the character across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent identity across every single panel. 8K, fine grain, cinematic color grading.`,
28389
+ promptPrefix: `Create a single high-resolution, densely packed pose reference sheet titled "POSE BOARD" using the attached photo of the person as the single source of truth for face, hair, eyes, skin tone, body proportions and outfit. The same person must appear in every panel \u2014 same age, same features, outfit identical to the attached photo across all panels. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade animation-planning UI. The composition should feel organized but not rigidly locked: allow the hero figure, metadata, and supporting panels to shift position naturally within the board while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large full-body hero shot in a relaxed standing pose with a metadata block: NAME \xB7 AGE \xB7 BUILD \xB7 HEIGHT \xB7 OUTFIT \xB7 POSE LANGUAGE \xB7 CENTER OF GRAVITY \xB7 DOMINANT HAND \xB7 PURPOSE. Also include five content groupings \u2014 render ALL five panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 BASIC POSES (5 full-body shots, identical outfit and lighting, neutral tan backdrop): STANDING \xB7 SITTING \xB7 WALKING \xB7 RUNNING \xB7 JUMPING. PANEL 02 \u2014 ACTION POSES (5 dynamic full-body shots with clear silhouettes): FIGHT STANCE \xB7 THROW \xB7 DODGE \xB7 CLIMB \xB7 LAND. PANEL 03 \u2014 EXPRESSIONS (5 tight headshots, same lighting): NEUTRAL \xB7 LAUGHING \xB7 ANGRY \xB7 SAD \xB7 SURPRISED. PANEL 04 \u2014 ANGLE COVERAGE (4 chest-up portraits): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK. PANEL 05 \u2014 COLOR PALETTE: 6 swatches with HEX codes derived from the outfit and skin tones. Bottom caption: "Use this pose board as a visual reference for consistent posing of the character across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28390
+ promptSuffix: `Style: photorealistic, no illustration. Consistent identity across every single panel. 8K, fine grain, cinematic color grading.`,
28156
28391
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, inconsistent identity between panels, extra limbs, blurry, low resolution"
28157
28392
  }
28158
28393
  },
@@ -28165,7 +28400,8 @@ var GENERATE_IMAGE_PRESETS = [
28165
28400
  provider: "nano-banana-pro",
28166
28401
  aspectRatio: "16:9",
28167
28402
  resolution: "2K",
28168
- prompt: `Create a single high-resolution, densely packed location reference sheet titled "LOCATION BOARD" using the attached photo of the location as the single source of truth for its architecture, atmosphere, lighting, materials and color palette. The space must be identical across every panel \u2014 same place, same materials, same era. All on-image labels in ENGLISH. Editorial location-reference board layout with a dark near-black background, thin yellow neon accent light on the far left, faint film-grain overlay, subtle cinematic interface elements, and production-grade location-scout UI. The composition should feel structured but not rigidly fixed: allow the hero location view, metadata, environmental studies, and supporting panels to shift position naturally within the board. The arrangement may vary from generation to generation while remaining readable, balanced, and premium. Design the board so it adapts cleanly to different aspect ratios without depending on a fixed left-column layout. Include a prominent hero shot of the location, ideally a wide establishing or defining view, accompanied by a detailed metadata block: NAME \xB7 TYPE (street / interior / exterior / forest) \xB7 ERA \xB7 SCALE (intimate / vast) ARCHITECTURE: (key features) MATERIALS: (stone, brick, wood, glass, etc.) ATMOSPHERE: (busy / quiet / eerie / romantic) DEFAULT TIME \xB7 DEFAULT WEATHER \xB7 PURPOSE (e.g. chase sequence, dialogue scene). Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 same-location shots, identical lighting): WIDE \xB7 MID \xB7 TIGHT \xB7 ALT ANGLE \xB7 OVERHEAD. PANEL 02 \u2014 TIME OF DAY (4 same-angle shots): DAWN \xB7 NOON \xB7 DUSK \xB7 NIGHT. PANEL 03 \u2014 DETAILS (2 macros): material/texture close-up \xB7 distinctive architectural detail. PANEL 04 \u2014 SET DRESSING / PROPS (5 isolated prop or signage studies on dark background): 5 key props or signage elements from the location. PANEL 05 \u2014 WEATHER / MOOD (4 same-angle shots): CLEAR SUNNY \xB7 OVERCAST \xB7 RAIN-SOAKED \xB7 MISTY FOG. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the location's dominant tones. Bottom caption: "Use this location board as a visual reference for consistent depiction of the environment across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent location across every panel. 8K, fine grain, cinematic color grading.`,
28403
+ promptPrefix: `Create a single high-resolution, densely packed location reference sheet titled "LOCATION BOARD" using the attached photo of the location as the single source of truth for its architecture, atmosphere, lighting, materials and color palette. The space must be identical across every panel \u2014 same place, same materials, same era. All on-image labels in ENGLISH. Editorial location-reference board layout with a dark near-black background, thin yellow neon accent light on the far left, faint film-grain overlay, subtle cinematic interface elements, and production-grade location-scout UI. The composition should feel structured but not rigidly fixed: allow the hero location view, metadata, environmental studies, and supporting panels to shift position naturally within the board. The arrangement may vary from generation to generation while remaining readable, balanced, and premium. Design the board so it adapts cleanly to different aspect ratios without depending on a fixed left-column layout. Include a prominent hero shot of the location, ideally a wide establishing or defining view, accompanied by a detailed metadata block: NAME \xB7 TYPE (street / interior / exterior / forest) \xB7 ERA \xB7 SCALE (intimate / vast) ARCHITECTURE: (key features) MATERIALS: (stone, brick, wood, glass, etc.) ATMOSPHERE: (busy / quiet / eerie / romantic) DEFAULT TIME \xB7 DEFAULT WEATHER \xB7 PURPOSE (e.g. chase sequence, dialogue scene). Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 same-location shots, identical lighting): WIDE \xB7 MID \xB7 TIGHT \xB7 ALT ANGLE \xB7 OVERHEAD. PANEL 02 \u2014 TIME OF DAY (4 same-angle shots): DAWN \xB7 NOON \xB7 DUSK \xB7 NIGHT. PANEL 03 \u2014 DETAILS (2 macros): material/texture close-up \xB7 distinctive architectural detail. PANEL 04 \u2014 SET DRESSING / PROPS (5 isolated prop or signage studies on dark background): 5 key props or signage elements from the location. PANEL 05 \u2014 WEATHER / MOOD (4 same-angle shots): CLEAR SUNNY \xB7 OVERCAST \xB7 RAIN-SOAKED \xB7 MISTY FOG. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the location's dominant tones. Bottom caption: "Use this location board as a visual reference for consistent depiction of the environment across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28404
+ promptSuffix: `Style: photorealistic, no illustration. Consistent location across every panel. 8K, fine grain, cinematic color grading.`,
28169
28405
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution"
28170
28406
  }
28171
28407
  },
@@ -28178,7 +28414,8 @@ var GENERATE_IMAGE_PRESETS = [
28178
28414
  provider: "nano-banana-pro",
28179
28415
  aspectRatio: "16:9",
28180
28416
  resolution: "2K",
28181
- prompt: `Create a single high-resolution, densely packed product reference sheet titled "PRODUCT BOARD" using the attached photo of the product as the single source of truth for its shape, materials, colorway, proportions, branding and finish. The same product must appear in every panel \u2014 identical model, identical colorway and markings. All on-image labels in ENGLISH. Editorial product-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade industrial-design UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally within the board while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero product shot with a metadata block: NAME \xB7 CATEGORY \xB7 BRAND \xB7 DIMENSIONS \xB7 WEIGHT \xB7 MATERIALS \xB7 FINISH \xB7 KEY FEATURES \xB7 COLORWAY. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 studio shots on a seamless background, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP. PANEL 02 \u2014 DETAILS (3 macros): material/texture close-up \xB7 seam/joint or mechanism \xB7 logo/branding detail. PANEL 03 \u2014 COLORWAYS (4 isolated shots of the same product in alternate finishes). PANEL 04 \u2014 SCALE (the product beside a common reference object, with a dimension callout). PANEL 05 \u2014 IN USE / CONTEXT (3 lifestyle shots in a real setting). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the product's materials and finish. Bottom caption: "Use this product board as a visual reference for consistent depiction of the product across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Studio. Style: photorealistic, no illustration. Consistent product across every panel. 8K, fine grain, studio product photography, crisp reflections.`,
28417
+ promptPrefix: `Create a single high-resolution, densely packed product reference sheet titled "PRODUCT BOARD" using the attached photo of the product as the single source of truth for its shape, materials, colorway, proportions, branding and finish. The same product must appear in every panel \u2014 identical model, identical colorway and markings. All on-image labels in ENGLISH. Editorial product-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade industrial-design UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally within the board while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero product shot with a metadata block: NAME \xB7 CATEGORY \xB7 BRAND \xB7 DIMENSIONS \xB7 WEIGHT \xB7 MATERIALS \xB7 FINISH \xB7 KEY FEATURES \xB7 COLORWAY. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 studio shots on a seamless background, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP. PANEL 02 \u2014 DETAILS (3 macros): material/texture close-up \xB7 seam/joint or mechanism \xB7 logo/branding detail. PANEL 03 \u2014 COLORWAYS (4 isolated shots of the same product in alternate finishes). PANEL 04 \u2014 SCALE (the product beside a common reference object, with a dimension callout). PANEL 05 \u2014 IN USE / CONTEXT (3 lifestyle shots in a real setting). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the product's materials and finish. Bottom caption: "Use this product board as a visual reference for consistent depiction of the product across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Studio.`,
28418
+ promptSuffix: `Style: photorealistic, no illustration. Consistent product across every panel. 8K, fine grain, studio product photography, crisp reflections.`,
28182
28419
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution"
28183
28420
  }
28184
28421
  },
@@ -28191,7 +28428,8 @@ var GENERATE_IMAGE_PRESETS = [
28191
28428
  provider: "nano-banana-pro",
28192
28429
  aspectRatio: "16:9",
28193
28430
  resolution: "2K",
28194
- prompt: `Create a single high-resolution, densely packed wardrobe reference sheet titled "OUTFIT BOARD" using the attached photo of the outfit as the single source of truth for its garments, fabrics, colorway, silhouette and styling. The same outfit must appear in every panel \u2014 identical garments, identical colors and trims. All on-image labels in ENGLISH. Editorial fashion-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade stylist UI. The composition should feel organized but not rigidly locked: allow the hero look, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a hero full-look shot with a metadata block: LOOK NAME \xB7 STYLE \xB7 SEASON \xB7 FABRICS \xB7 PALETTE \xB7 FIT \xB7 OCCASION. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 ON-BODY VIEWS (5 full-length shots, identical lighting): FRONT \xB7 3/4 LEFT \xB7 SIDE \xB7 BACK \xB7 3/4 RIGHT. PANEL 02 \u2014 FLAT-LAYS (5 isolated garment shots on a dark surface): top \xB7 bottom \xB7 outerwear \xB7 footwear \xB7 headwear. PANEL 03 \u2014 FABRIC & DETAIL (3 macros): weave/texture close-up \xB7 stitching or hardware \xB7 print or trim detail. PANEL 04 \u2014 ACCESSORIES (4 isolated accessory studies: bag \xB7 jewelry \xB7 belt \xB7 eyewear). PANEL 05 \u2014 COLORWAYS (3 alternate colorways of the same look). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the garments. Bottom caption: "Use this outfit board as a visual reference for consistent depiction of the wardrobe across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Editorial \xB7 Fashion. Style: photorealistic, no illustration. Consistent outfit across every panel. 8K, fine grain, editorial fashion photography.`,
28431
+ promptPrefix: `Create a single high-resolution, densely packed wardrobe reference sheet titled "OUTFIT BOARD" using the attached photo of the outfit as the single source of truth for its garments, fabrics, colorway, silhouette and styling. The same outfit must appear in every panel \u2014 identical garments, identical colors and trims. All on-image labels in ENGLISH. Editorial fashion-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade stylist UI. The composition should feel organized but not rigidly locked: allow the hero look, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a hero full-look shot with a metadata block: LOOK NAME \xB7 STYLE \xB7 SEASON \xB7 FABRICS \xB7 PALETTE \xB7 FIT \xB7 OCCASION. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 ON-BODY VIEWS (5 full-length shots, identical lighting): FRONT \xB7 3/4 LEFT \xB7 SIDE \xB7 BACK \xB7 3/4 RIGHT. PANEL 02 \u2014 FLAT-LAYS (5 isolated garment shots on a dark surface): top \xB7 bottom \xB7 outerwear \xB7 footwear \xB7 headwear. PANEL 03 \u2014 FABRIC & DETAIL (3 macros): weave/texture close-up \xB7 stitching or hardware \xB7 print or trim detail. PANEL 04 \u2014 ACCESSORIES (4 isolated accessory studies: bag \xB7 jewelry \xB7 belt \xB7 eyewear). PANEL 05 \u2014 COLORWAYS (3 alternate colorways of the same look). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the garments. Bottom caption: "Use this outfit board as a visual reference for consistent depiction of the wardrobe across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Editorial \xB7 Fashion.`,
28432
+ promptSuffix: `Style: photorealistic, no illustration. Consistent outfit across every panel. 8K, fine grain, editorial fashion photography.`,
28195
28433
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution"
28196
28434
  }
28197
28435
  },
@@ -28204,7 +28442,8 @@ var GENERATE_IMAGE_PRESETS = [
28204
28442
  provider: "nano-banana-pro",
28205
28443
  aspectRatio: "16:9",
28206
28444
  resolution: "2K",
28207
- prompt: `Create a single high-resolution, densely packed set-dressing reference sheet titled "SCENE BOARD" using the attached photo of the scene as the single source of truth for its props, set dressing, materials, signage and mood. The space and its contents must be consistent across every panel \u2014 same props, same materials, same era. All on-image labels in ENGLISH. Editorial set-decoration layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade art-department UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a hero establishing shot with a metadata block: SCENE NAME \xB7 TYPE \xB7 ERA \xB7 MOOD \xB7 KEY MATERIALS \xB7 PURPOSE. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 KEY PROPS (5 isolated prop studies on a dark background). PANEL 02 \u2014 SIGNAGE / GRAPHICS (3 readable signage or printed-graphic elements from the scene). PANEL 03 \u2014 MATERIALS & TEXTURES (3 macros: surface \xB7 fabric/wood/metal \xB7 wear/patina). PANEL 04 \u2014 LAYOUT / BLOCKING (a simple top-down or wide diagram of where key elements sit). PANEL 05 \u2014 LIGHTING STATES (3 same-angle shots: day \xB7 practical-lit night \xB7 dramatic). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the scene's dominant tones. Bottom caption: "Use this scene board as a visual reference for consistent set dressing across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent scene across every panel. 8K, fine grain, cinematic color grading.`,
28445
+ promptPrefix: `Create a single high-resolution, densely packed set-dressing reference sheet titled "SCENE BOARD" using the attached photo of the scene as the single source of truth for its props, set dressing, materials, signage and mood. The space and its contents must be consistent across every panel \u2014 same props, same materials, same era. All on-image labels in ENGLISH. Editorial set-decoration layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade art-department UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a hero establishing shot with a metadata block: SCENE NAME \xB7 TYPE \xB7 ERA \xB7 MOOD \xB7 KEY MATERIALS \xB7 PURPOSE. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 KEY PROPS (5 isolated prop studies on a dark background). PANEL 02 \u2014 SIGNAGE / GRAPHICS (3 readable signage or printed-graphic elements from the scene). PANEL 03 \u2014 MATERIALS & TEXTURES (3 macros: surface \xB7 fabric/wood/metal \xB7 wear/patina). PANEL 04 \u2014 LAYOUT / BLOCKING (a simple top-down or wide diagram of where key elements sit). PANEL 05 \u2014 LIGHTING STATES (3 same-angle shots: day \xB7 practical-lit night \xB7 dramatic). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the scene's dominant tones. Bottom caption: "Use this scene board as a visual reference for consistent set dressing across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28446
+ promptSuffix: `Style: photorealistic, no illustration. Consistent scene across every panel. 8K, fine grain, cinematic color grading.`,
28208
28447
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution"
28209
28448
  }
28210
28449
  },
@@ -28217,7 +28456,8 @@ var GENERATE_IMAGE_PRESETS = [
28217
28456
  provider: "nano-banana-pro",
28218
28457
  aspectRatio: "16:9",
28219
28458
  resolution: "2K",
28220
- prompt: `Create a single high-resolution, densely packed creature reference sheet titled "CREATURE BOARD" using the attached photo of the creature as the single source of truth for its anatomy, silhouette, coloration, textures and features. The same creature must appear in every panel \u2014 identical species, identical markings and proportions. All on-image labels in ENGLISH. Editorial creature-design layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade concept-design UI. The composition should feel organized but not rigidly locked: allow the hero render, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero full-body render with a metadata block: NAME \xB7 SPECIES \xB7 SIZE \xB7 BUILD \xB7 COLORATION \xB7 TEXTURES \xB7 TEMPERAMENT \xB7 FEATURES \xB7 MOVEMENT \xB7 VOCALIZATION. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body angles, neutral pose, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP-DOWN. PANEL 02 \u2014 POSES (4 dynamic full-body poses: idle \xB7 moving \xB7 alert \xB7 aggressive). PANEL 03 \u2014 DETAILS (3 macros): head/face close-up \xB7 hide/scale/fur texture \xB7 distinctive feature (claw, horn, fin). PANEL 04 \u2014 EXPRESSIONS (4 head studies showing temperament range). PANEL 05 \u2014 SCALE (the creature beside a human silhouette for size reference). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the creature's coloration. Bottom caption: "Use this creature board as a visual reference for consistent depiction of the creature across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent creature across every panel. 8K, fine grain, cinematic color grading.`,
28459
+ promptPrefix: `Create a single high-resolution, densely packed creature reference sheet titled "CREATURE BOARD" using the attached photo of the creature as the single source of truth for its anatomy, silhouette, coloration, textures and features. The same creature must appear in every panel \u2014 identical species, identical markings and proportions. All on-image labels in ENGLISH. Editorial creature-design layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade concept-design UI. The composition should feel organized but not rigidly locked: allow the hero render, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero full-body render with a metadata block: NAME \xB7 SPECIES \xB7 SIZE \xB7 BUILD \xB7 COLORATION \xB7 TEXTURES \xB7 TEMPERAMENT \xB7 FEATURES \xB7 MOVEMENT \xB7 VOCALIZATION. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body angles, neutral pose, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP-DOWN. PANEL 02 \u2014 POSES (4 dynamic full-body poses: idle \xB7 moving \xB7 alert \xB7 aggressive). PANEL 03 \u2014 DETAILS (3 macros): head/face close-up \xB7 hide/scale/fur texture \xB7 distinctive feature (claw, horn, fin). PANEL 04 \u2014 EXPRESSIONS (4 head studies showing temperament range). PANEL 05 \u2014 SCALE (the creature beside a human silhouette for size reference). PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the creature's coloration. Bottom caption: "Use this creature board as a visual reference for consistent depiction of the creature across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28460
+ promptSuffix: `Style: photorealistic, no illustration. Consistent creature across every panel. 8K, fine grain, cinematic color grading.`,
28221
28461
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution"
28222
28462
  }
28223
28463
  },
@@ -28230,7 +28470,8 @@ var GENERATE_IMAGE_PRESETS = [
28230
28470
  provider: "nano-banana-pro",
28231
28471
  aspectRatio: "16:9",
28232
28472
  resolution: "2K",
28233
- prompt: `Create a single high-resolution, densely packed vehicle reference sheet titled "VEHICLE BOARD" using the attached photo of the vehicle as the single source of truth for its body shape, proportions, paintwork, trim, wheels and condition. The same vehicle must appear in every panel \u2014 identical model, identical colorway, markings and wear. All on-image labels in ENGLISH. Editorial vehicle-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade transportation-design UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large three-quarter hero shot with a metadata block: NAME \xB7 TYPE \xB7 ERA \xB7 SCALE \xB7 BODY & MATERIALS \xB7 FINISH \xB7 SEATS \xB7 TOP SPEED \xB7 SIGNATURE FEATURE \xB7 ROLE. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 studio shots, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP-DOWN. PANEL 02 \u2014 INTERIOR / CABIN (4 close shots): cockpit through the window \xB7 dashboard detail \xB7 seats or cargo area \xB7 driver POV. PANEL 03 \u2014 DETAIL MACROS (4): headlight or light cluster \xB7 wheel and tire \xB7 badge or panel line \xB7 paint and wear close-up. PANEL 04 \u2014 IN MOTION (4 staged frames): driving straight \xB7 cornering \xB7 parked on an incline \xB7 night with headlights on. PANEL 05 \u2014 LIGHTING / MOOD (4 same-angle hero shots): DESERT MIDDAY \xB7 GOLDEN HOUR \xB7 STORMY OVERCAST \xB7 NIGHT NEON. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the paintwork and trim. Bottom caption: "Use this vehicle board as a visual reference for consistent depiction of the vehicle across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent vehicle across every panel. 8K, fine grain, cinematic color grading.`,
28473
+ promptPrefix: `Create a single high-resolution, densely packed vehicle reference sheet titled "VEHICLE BOARD" using the attached photo of the vehicle as the single source of truth for its body shape, proportions, paintwork, trim, wheels and condition. The same vehicle must appear in every panel \u2014 identical model, identical colorway, markings and wear. All on-image labels in ENGLISH. Editorial vehicle-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade transportation-design UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large three-quarter hero shot with a metadata block: NAME \xB7 TYPE \xB7 ERA \xB7 SCALE \xB7 BODY & MATERIALS \xB7 FINISH \xB7 SEATS \xB7 TOP SPEED \xB7 SIGNATURE FEATURE \xB7 ROLE. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 studio shots, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP-DOWN. PANEL 02 \u2014 INTERIOR / CABIN (4 close shots): cockpit through the window \xB7 dashboard detail \xB7 seats or cargo area \xB7 driver POV. PANEL 03 \u2014 DETAIL MACROS (4): headlight or light cluster \xB7 wheel and tire \xB7 badge or panel line \xB7 paint and wear close-up. PANEL 04 \u2014 IN MOTION (4 staged frames): driving straight \xB7 cornering \xB7 parked on an incline \xB7 night with headlights on. PANEL 05 \u2014 LIGHTING / MOOD (4 same-angle hero shots): DESERT MIDDAY \xB7 GOLDEN HOUR \xB7 STORMY OVERCAST \xB7 NIGHT NEON. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the paintwork and trim. Bottom caption: "Use this vehicle board as a visual reference for consistent depiction of the vehicle across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28474
+ promptSuffix: `Style: photorealistic, no illustration. Consistent vehicle across every panel. 8K, fine grain, cinematic color grading.`,
28234
28475
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, warped body panels, distorted geometry, blurry, low resolution"
28235
28476
  }
28236
28477
  },
@@ -28243,7 +28484,8 @@ var GENERATE_IMAGE_PRESETS = [
28243
28484
  provider: "nano-banana-pro",
28244
28485
  aspectRatio: "16:9",
28245
28486
  resolution: "2K",
28246
- prompt: `Create a single high-resolution, densely packed dish reference sheet titled "FOOD BOARD" using the attached photo of the dish as the single source of truth for its ingredients, plating, colors, textures and garnish. The same dish must appear in every panel \u2014 identical recipe, identical plating, bowl or plate, and props. All on-image labels in ENGLISH. Editorial culinary-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade food-styling UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large appetizing hero shot with a metadata block: DISH NAME \xB7 CUISINE \xB7 CATEGORY \xB7 KEY INGREDIENTS \xB7 TEXTURES \xB7 GARNISH \xB7 SERVED \xB7 AUDIENCE. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 PLATING ANGLES (5 beauty shots, identical styling): TOP-DOWN \xB7 3/4 HERO \xB7 SIDE \xB7 EXTREME CLOSE-UP \xB7 IN HAND OR WITH UTENSIL. PANEL 02 \u2014 INGREDIENT BREAKDOWN (5 isolated ingredient studies on a dark background). PANEL 03 \u2014 DETAIL MACROS (4): surface texture \xB7 glaze or sauce sheen \xB7 steam or freshness cue \xB7 garnish detail. PANEL 04 \u2014 IN CONTEXT (4 staged frames): steam rising \xB7 utensil lifting a bite \xB7 sauce pour frozen mid-action \xB7 hands holding the dish. PANEL 05 \u2014 LIGHTING / MOOD (4 same-angle hero shots): WARM APPETIZING \xB7 COOL EDITORIAL \xB7 HARD COMMERCIAL \xB7 MOODY DRAMATIC. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the dish and plating. Bottom caption: "Use this food board as a visual reference for consistent depiction of the dish across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Commercial. Style: photorealistic, no illustration. Consistent dish across every panel. 8K, fine grain, appetizing commercial color grading.`,
28487
+ promptPrefix: `Create a single high-resolution, densely packed dish reference sheet titled "FOOD BOARD" using the attached photo of the dish as the single source of truth for its ingredients, plating, colors, textures and garnish. The same dish must appear in every panel \u2014 identical recipe, identical plating, bowl or plate, and props. All on-image labels in ENGLISH. Editorial culinary-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade food-styling UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large appetizing hero shot with a metadata block: DISH NAME \xB7 CUISINE \xB7 CATEGORY \xB7 KEY INGREDIENTS \xB7 TEXTURES \xB7 GARNISH \xB7 SERVED \xB7 AUDIENCE. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 PLATING ANGLES (5 beauty shots, identical styling): TOP-DOWN \xB7 3/4 HERO \xB7 SIDE \xB7 EXTREME CLOSE-UP \xB7 IN HAND OR WITH UTENSIL. PANEL 02 \u2014 INGREDIENT BREAKDOWN (5 isolated ingredient studies on a dark background). PANEL 03 \u2014 DETAIL MACROS (4): surface texture \xB7 glaze or sauce sheen \xB7 steam or freshness cue \xB7 garnish detail. PANEL 04 \u2014 IN CONTEXT (4 staged frames): steam rising \xB7 utensil lifting a bite \xB7 sauce pour frozen mid-action \xB7 hands holding the dish. PANEL 05 \u2014 LIGHTING / MOOD (4 same-angle hero shots): WARM APPETIZING \xB7 COOL EDITORIAL \xB7 HARD COMMERCIAL \xB7 MOODY DRAMATIC. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the dish and plating. Bottom caption: "Use this food board as a visual reference for consistent depiction of the dish across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Commercial.`,
28488
+ promptSuffix: `Style: photorealistic, no illustration. Consistent dish across every panel. 8K, fine grain, appetizing commercial color grading.`,
28247
28489
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, unappetizing, plastic fake food, messy spills, blurry, low resolution"
28248
28490
  }
28249
28491
  },
@@ -28256,7 +28498,8 @@ var GENERATE_IMAGE_PRESETS = [
28256
28498
  provider: "nano-banana-pro",
28257
28499
  aspectRatio: "16:9",
28258
28500
  resolution: "2K",
28259
- prompt: `Create a single high-resolution, densely packed mascot reference sheet titled "MASCOT BOARD" using the attached image of the mascot as the single source of truth for its design, proportions, colors, materials and personality. The same mascot must appear in every panel \u2014 identical design, identical colors and details \u2014 rendered in the mascot's native art style read from the attached image (illustrated, plush, costumed or 3D), never drifting between styles. All on-image labels in ENGLISH. Editorial brand-character layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade brand-design UI. The composition should feel organized but not rigidly locked: allow the hero pose, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero pose with a metadata block: MASCOT NAME \xB7 BRAND \xB7 CATEGORY \xB7 MATERIAL / STYLE \xB7 PERSONALITY \xB7 CATCHPHRASE \xB7 SIZE \xB7 USE CASES. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body angles, identical lighting): FRONT \xB7 3/4 LEFT \xB7 SIDE \xB7 BACK \xB7 3/4 RIGHT. PANEL 02 \u2014 EXPRESSIONS (6 head studies): HAPPY \xB7 WAVING \xB7 SHOCKED \xB7 WINKING \xB7 SLEEPY \xB7 CURIOUS. PANEL 03 \u2014 DETAIL MACROS (3): face detail \xB7 material or texture close-up \xB7 signature accessory. PANEL 04 \u2014 BRAND APPLICATIONS (4 mockups): on product packaging \xB7 on a storefront sign \xB7 in a print ad \xB7 on merch. PANEL 05 \u2014 POSES (4 action poses): GREETING \xB7 CELEBRATING \xB7 PRESENTING \xB7 THUMBS-UP. PANEL 06 \u2014 BRAND COLOR PALETTE: 6 swatches with HEX codes from the mascot's colors. Bottom caption: "Use this mascot board as a visual reference for consistent depiction of the mascot across all generations." Bottom-right tags: STYLE \xB7 Brand \xB7 Character \xB7 Consistent. Consistent mascot and consistent art style across every panel. 8K, fine grain, premium brand-design finish.`,
28501
+ promptPrefix: `Create a single high-resolution, densely packed mascot reference sheet titled "MASCOT BOARD" using the attached image of the mascot as the single source of truth for its design, proportions, colors, materials and personality. The same mascot must appear in every panel \u2014 identical design, identical colors and details \u2014 rendered in the mascot's native art style read from the attached image (illustrated, plush, costumed or 3D), never drifting between styles. All on-image labels in ENGLISH. Editorial brand-character layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade brand-design UI. The composition should feel organized but not rigidly locked: allow the hero pose, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero pose with a metadata block: MASCOT NAME \xB7 BRAND \xB7 CATEGORY \xB7 MATERIAL / STYLE \xB7 PERSONALITY \xB7 CATCHPHRASE \xB7 SIZE \xB7 USE CASES. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body angles, identical lighting): FRONT \xB7 3/4 LEFT \xB7 SIDE \xB7 BACK \xB7 3/4 RIGHT. PANEL 02 \u2014 EXPRESSIONS (6 head studies): HAPPY \xB7 WAVING \xB7 SHOCKED \xB7 WINKING \xB7 SLEEPY \xB7 CURIOUS. PANEL 03 \u2014 DETAIL MACROS (3): face detail \xB7 material or texture close-up \xB7 signature accessory. PANEL 04 \u2014 BRAND APPLICATIONS (4 mockups): on product packaging \xB7 on a storefront sign \xB7 in a print ad \xB7 on merch. PANEL 05 \u2014 POSES (4 action poses): GREETING \xB7 CELEBRATING \xB7 PRESENTING \xB7 THUMBS-UP. PANEL 06 \u2014 BRAND COLOR PALETTE: 6 swatches with HEX codes from the mascot's colors. Bottom caption: "Use this mascot board as a visual reference for consistent depiction of the mascot across all generations." Bottom-right tags: STYLE \xB7 Brand \xB7 Character \xB7 Consistent.`,
28502
+ promptSuffix: `Consistent mascot and consistent art style across every panel. 8K, fine grain, premium brand-design finish.`,
28260
28503
  negativePrompt: "inconsistent art style between panels, design drift, off-model mascot, garbled text, misspelled labels, watermark, blurry, low resolution"
28261
28504
  }
28262
28505
  },
@@ -28269,7 +28512,8 @@ var GENERATE_IMAGE_PRESETS = [
28269
28512
  provider: "nano-banana-pro",
28270
28513
  aspectRatio: "16:9",
28271
28514
  resolution: "2K",
28272
- prompt: `Create a single high-resolution, densely packed pet reference sheet titled "PET BOARD" using the attached photo of the pet as the single source of truth for its species, breed, coat colors, markings, eyes and build. The same animal must appear in every panel \u2014 identical markings, identical proportions, identical collar or accessories. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade character-design UI. The composition should feel organized but not rigidly locked: allow the hero portrait, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero portrait with a metadata block: NAME \xB7 SPECIES \xB7 BREED \xB7 AGE \xB7 SIZE \xB7 COAT & MARKINGS \xB7 EYES \xB7 COLLAR / ACCESSORIES \xB7 TEMPERAMENT \xB7 SIGNATURE BEHAVIOR. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body angles, neutral stance, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP-DOWN. PANEL 02 \u2014 EXPRESSIONS & MOODS (6 head studies): ALERT \xB7 CURIOUS \xB7 PLAYFUL \xB7 SLEEPY \xB7 GRUMPY \xB7 HAPPY. PANEL 03 \u2014 DETAIL MACROS (4): eye close-up \xB7 coat or fur texture \xB7 paw detail \xB7 collar tag or accessory. PANEL 04 \u2014 POSES (5 natural poses): SITTING \xB7 LYING DOWN \xB7 WALKING \xB7 PLAYING \xB7 CURLED ASLEEP. PANEL 05 \u2014 LIGHTING / MOOD (4 same-pose portraits): SOFT WINDOW LIGHT \xB7 GOLDEN HOUR \xB7 COOL BLUE NIGHT \xB7 DRAMATIC RIM-LIGHT. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the coat and accessories. Bottom caption: "Use this pet board as a visual reference for consistent depiction of the pet across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. Consistent animal across every single panel. 8K, fine grain, cinematic color grading.`,
28515
+ promptPrefix: `Create a single high-resolution, densely packed pet reference sheet titled "PET BOARD" using the attached photo of the pet as the single source of truth for its species, breed, coat colors, markings, eyes and build. The same animal must appear in every panel \u2014 identical markings, identical proportions, identical collar or accessories. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade character-design UI. The composition should feel organized but not rigidly locked: allow the hero portrait, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero portrait with a metadata block: NAME \xB7 SPECIES \xB7 BREED \xB7 AGE \xB7 SIZE \xB7 COAT & MARKINGS \xB7 EYES \xB7 COLLAR / ACCESSORIES \xB7 TEMPERAMENT \xB7 SIGNATURE BEHAVIOR. Also include six content groupings \u2014 render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 \u2014 VIEWS (5 full-body angles, neutral stance, identical lighting): FRONT \xB7 3/4 \xB7 SIDE \xB7 BACK \xB7 TOP-DOWN. PANEL 02 \u2014 EXPRESSIONS & MOODS (6 head studies): ALERT \xB7 CURIOUS \xB7 PLAYFUL \xB7 SLEEPY \xB7 GRUMPY \xB7 HAPPY. PANEL 03 \u2014 DETAIL MACROS (4): eye close-up \xB7 coat or fur texture \xB7 paw detail \xB7 collar tag or accessory. PANEL 04 \u2014 POSES (5 natural poses): SITTING \xB7 LYING DOWN \xB7 WALKING \xB7 PLAYING \xB7 CURLED ASLEEP. PANEL 05 \u2014 LIGHTING / MOOD (4 same-pose portraits): SOFT WINDOW LIGHT \xB7 GOLDEN HOUR \xB7 COOL BLUE NIGHT \xB7 DRAMATIC RIM-LIGHT. PANEL 06 \u2014 COLOR PALETTE: 6 swatches with HEX codes from the coat and accessories. Bottom caption: "Use this pet board as a visual reference for consistent depiction of the pet across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic.`,
28516
+ promptSuffix: `Style: photorealistic, no illustration. Consistent animal across every single panel. 8K, fine grain, cinematic color grading.`,
28273
28517
  negativePrompt: "illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed anatomy, inconsistent markings between panels, wrong breed, blurry, low resolution"
28274
28518
  }
28275
28519
  },
@@ -28287,7 +28531,8 @@ var GENERATE_IMAGE_PRESETS = [
28287
28531
  provider: "nano-banana-2",
28288
28532
  aspectRatio: "3:4",
28289
28533
  resolution: "4K",
28290
- prompt: `Create a clean character reference grid using the attached photo of the person as the single source of truth for face, hair, eyes, skin tone, build and outfit. Four equal panels arranged in a tidy two-by-two grid on a single seamless neutral light-grey studio background: a tight front-facing portrait close-up, a 3/4-view portrait, a full-body shot from the front in a relaxed neutral stance, and a full-body shot from the back. The SAME person in every panel \u2014 identical age, features, hairstyle and outfit from the attached photo. Identical soft, even studio lighting in all four panels with no dramatic shadows. No decorations, no background props, no text, no UI elements \u2014 a sterile, production-neutral reference sheet built to be reused as an identity reference in later generations. Photorealistic, sharp focus, accurate natural skin texture, true-to-life color.`,
28534
+ promptPrefix: `Create a clean character reference grid using the attached photo of the person as the single source of truth for face, hair, eyes, skin tone, build and outfit. Four equal panels arranged in a tidy two-by-two grid on a single seamless neutral light-grey studio background: a tight front-facing portrait close-up, a 3/4-view portrait, a full-body shot from the front in a relaxed neutral stance, and a full-body shot from the back. The SAME person in every panel \u2014 identical age, features, hairstyle and outfit from the attached photo. Identical soft, even studio lighting in all four panels with no dramatic shadows. No decorations, no background props, no text, no UI elements \u2014 a sterile, production-neutral reference sheet built to be reused as an identity reference in later generations.`,
28535
+ promptSuffix: `Photorealistic, sharp focus, accurate natural skin texture, true-to-life color.`,
28291
28536
  negativePrompt: "stylization, illustration, decorative background, props, text, labels, UI elements, dramatic lighting, inconsistent face between panels, identity drift, changed outfit, deformed, blurry, watermark"
28292
28537
  }
28293
28538
  },
@@ -28326,19 +28571,20 @@ var GENERATE_IMAGE_PRESETS = [
28326
28571
  data: {
28327
28572
  provider: "gpt-image-2",
28328
28573
  quality: "high",
28329
- prompt: `Using the attached photo as the exact source, return the SAME image unchanged except for added annotations: overlay a small, clearly legible callout label on each distinct element a user might want to edit. Draw a thin leader line from each label to the element it names. Use short lowercase names in clear English (e.g. "drink 1", "drink 2", "flower basket", "hammock", "table", "sky", "sand", "palm tree"). Number duplicate element types ("drink 1", "drink 2"). Place labels on empty areas so they never overlap each other or hide the element they point to. Label only distinct, meaningful, editable objects \u2014 about 6 to 10 of them \u2014 and skip trivial background texture. Do NOT restyle, recolor, relight, or redraw the scene; keep every pixel of the underlying photo as close to the original as possible. The labels are an overlay on top of the otherwise-unchanged image.`,
28574
+ promptPrefix: `Using the attached photo as the exact source, return the SAME image unchanged except for added annotations: overlay a small, clearly legible callout label on each distinct element a user might want to edit. Draw a thin leader line from each label to the element it names. Use short lowercase names in clear English (e.g. "drink 1", "drink 2", "flower basket", "hammock", "table", "sky", "sand", "palm tree"). Number duplicate element types ("drink 1", "drink 2"). Place labels on empty areas so they never overlap each other or hide the element they point to. Label only distinct, meaningful, editable objects \u2014 about 6 to 10 of them \u2014 and skip trivial background texture. Do NOT restyle, recolor, relight, or redraw the scene; keep every pixel of the underlying photo as close to the original as possible. The labels are an overlay on top of the otherwise-unchanged image.`,
28330
28575
  negativePrompt: "garbled text, misspelled labels, overlapping labels, illegible text, restyled scene, recolored scene, redrawn image, cartoon, illustration, watermark, blurry"
28331
28576
  }
28332
28577
  },
28333
28578
  {
28334
28579
  id: "generate-image/edit-by-name",
28335
28580
  name: "Apply Named Edit",
28336
- description: "Step 2 \xB7 connect the labeled sheet \u2192 edit elements by name; the labels are removed from the result.",
28581
+ description: 'Step 2 \xB7 connect the labeled sheet \u2192 type your change in the prompt (e.g. change "drink 1" to blue); the labels are removed from the result.',
28337
28582
  group: "Edit by Name",
28338
28583
  data: {
28339
28584
  provider: "gpt-image-2",
28340
28585
  quality: "high",
28341
- prompt: `This image has callout labels naming its elements (made with the Label Elements preset). Use the labels ONLY to locate elements, then produce a clean edited photo with NO labels. Replace the next sentence with your change, referring to the labels: change "drink 1" to blue and replace the "flower basket" with a small dog. REMOVE every callout label, text box and leader line so none appear in the final image. Keep everything else exactly as it is.`,
28586
+ promptPrefix: `This image has callout labels naming its elements (made with the Label Elements preset). Use the labels ONLY to locate elements, then produce a clean edited photo with NO labels. Apply the change described next, referring to elements by their labels:`,
28587
+ promptSuffix: `REMOVE every callout label, text box and leader line so none appear in the final image. Keep everything else exactly as it is.`,
28342
28588
  negativePrompt: "leftover callout labels, visible text labels, text boxes, leader lines, garbled text, restyled scene, recolored unrelated elements, redrawn image, cartoon, illustration, watermark, blurry"
28343
28589
  }
28344
28590
  },
@@ -28356,7 +28602,7 @@ var GENERATE_IMAGE_PRESETS = [
28356
28602
  provider: "gpt-image-2",
28357
28603
  aspectRatio: "auto",
28358
28604
  resolution: "1K",
28359
- prompt: "make the persons in {image:1} faceless by making it 3d white generic face shape, keep everything else the same",
28605
+ promptPrefix: "make the persons in {image:1} faceless by making it 3d white generic face shape, keep everything else the same",
28360
28606
  negativePrompt: "visible facial features, eyes, nose, mouth, skin texture on the face, changing the background, altering clothing, hair or body, restyling the scene, relighting, changing pose or framing, cartoon look, distorted anatomy, watermark, blurry"
28361
28607
  }
28362
28608
  },
@@ -28369,7 +28615,7 @@ var GENERATE_IMAGE_PRESETS = [
28369
28615
  provider: "gpt-image-2",
28370
28616
  aspectRatio: "auto",
28371
28617
  resolution: "1K",
28372
- prompt: "remove persons faces from {image:1}, keep everything else the same",
28618
+ promptPrefix: "remove persons faces from {image:1}, keep everything else the same",
28373
28619
  negativePrompt: "visible facial features, eyes, nose, mouth, leftover face fragments, changing the background, altering clothing, hair or body, restyling the scene, relighting, changing pose or framing, horror or gore look, distorted anatomy, watermark, blurry"
28374
28620
  }
28375
28621
  },
@@ -28382,7 +28628,7 @@ var GENERATE_IMAGE_PRESETS = [
28382
28628
  provider: "gpt-image-2",
28383
28629
  aspectRatio: "auto",
28384
28630
  resolution: "1K",
28385
- prompt: "make faces transparent in {image:1}, keep everything else the same",
28631
+ promptPrefix: "make faces transparent in {image:1}, keep everything else the same",
28386
28632
  negativePrompt: "opaque faces, visible facial features, eyes, nose, mouth, changing the background, altering clothing, hair or body, restyling the scene, relighting, changing pose or framing, distorted anatomy, watermark, blurry"
28387
28633
  }
28388
28634
  },
@@ -29545,7 +29791,7 @@ var GENERATE_IMAGE_PRESETS = [
29545
29791
  data: {
29546
29792
  provider: "nano-banana-pro",
29547
29793
  aspectRatio: "3:4",
29548
- prompt: "Single photorealistic studio composite of the SAME person from the reference image at five stages of life, shoulder-to-shoulder left to right in a smooth age progression: a child around 7, a teen around 15, a young adult around 27, a mature adult around 45, and an elder around 70. Editorial portrait photography, 85mm lens at f/2.8, each figure framed chest-up, all facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines and wrinkles, hairline, hair color (darker in youth, greying with age), and a slight shift in facial fullness. Age-appropriate wardrobe per stage. Even soft cinematic studio key with gentle rim separation, clean dark-grey gradient seamless backdrop, refined neutral grade, natural skin tones, tack-sharp facial detail; the five figures fill the frame.",
29794
+ promptPrefix: "Single photorealistic studio composite of the SAME person from the reference image at five stages of life, shoulder-to-shoulder left to right in a smooth age progression: a child around 7, a teen around 15, a young adult around 27, a mature adult around 45, and an elder around 70. Editorial portrait photography, 85mm lens at f/2.8, each figure framed chest-up, all facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines and wrinkles, hairline, hair color (darker in youth, greying with age), and a slight shift in facial fullness. Age-appropriate wardrobe per stage. Even soft cinematic studio key with gentle rim separation, clean dark-grey gradient seamless backdrop, refined neutral grade, natural skin tones, tack-sharp facial detail; the five figures fill the frame.",
29549
29795
  negativePrompt: "different person, inconsistent face between figures, distorted features, identity drift across ages, wrong eye color, plastic skin, deformed, extra fingers, blurry, lowres, watermark, text"
29550
29796
  }
29551
29797
  },
@@ -29557,7 +29803,7 @@ var GENERATE_IMAGE_PRESETS = [
29557
29803
  data: {
29558
29804
  provider: "nano-banana-pro",
29559
29805
  aspectRatio: "3:4",
29560
- prompt: "Single photorealistic studio composite of the SAME person from the reference image as a three-age triptych, shoulder-to-shoulder left to right: around age 10, around age 40, and around age 75. Editorial portrait photography, 85mm lens at f/2.8, each figure framed chest-up, facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all three, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, hair color (darker in youth, greying with age), and a slight shift in facial fullness. Age-appropriate clothing per stage. Even soft cinematic studio key light with gentle rim separation, clean dark-grey gradient seamless backdrop, refined neutral grade, natural skin tones, tack-sharp facial detail; the three figures fill the frame.",
29806
+ promptPrefix: "Single photorealistic studio composite of the SAME person from the reference image as a three-age triptych, shoulder-to-shoulder left to right: around age 10, around age 40, and around age 75. Editorial portrait photography, 85mm lens at f/2.8, each figure framed chest-up, facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all three, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, hair color (darker in youth, greying with age), and a slight shift in facial fullness. Age-appropriate clothing per stage. Even soft cinematic studio key light with gentle rim separation, clean dark-grey gradient seamless backdrop, refined neutral grade, natural skin tones, tack-sharp facial detail; the three figures fill the frame.",
29561
29807
  negativePrompt: "different person, inconsistent face between figures, distorted features, identity drift across ages, wrong eye color, plastic skin, deformed, blurry, lowres, watermark, text"
29562
29808
  }
29563
29809
  },
@@ -29569,7 +29815,7 @@ var GENERATE_IMAGE_PRESETS = [
29569
29815
  data: {
29570
29816
  provider: "nano-banana-pro",
29571
29817
  aspectRatio: "3:4",
29572
- prompt: "Single black-and-white photorealistic studio composite of the SAME person from the reference image rendered at five stages of life, shoulder-to-shoulder left to right in a smooth age progression: around 7, 15, 27, 45, and 70. Fine-art monochrome portraiture, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, greying hair, and a slight shift in facial fullness. Age-appropriate clothing per stage. Even soft studio key light with gentle rim separation, clean dark-grey gradient backdrop. Deep tonal range from rich blacks to clean highlights, fine silver-gelatin film grain, tack-sharp facial detail; the five figures fill the frame.",
29818
+ promptPrefix: "Single black-and-white photorealistic studio composite of the SAME person from the reference image rendered at five stages of life, shoulder-to-shoulder left to right in a smooth age progression: around 7, 15, 27, 45, and 70. Fine-art monochrome portraiture, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, greying hair, and a slight shift in facial fullness. Age-appropriate clothing per stage. Even soft studio key light with gentle rim separation, clean dark-grey gradient backdrop. Deep tonal range from rich blacks to clean highlights, fine silver-gelatin film grain, tack-sharp facial detail; the five figures fill the frame.",
29573
29819
  negativePrompt: "color, color tint, different person, inconsistent face between figures, distorted features, identity drift across ages, plastic skin, deformed, blurry, lowres, watermark, text"
29574
29820
  }
29575
29821
  },
@@ -29581,7 +29827,7 @@ var GENERATE_IMAGE_PRESETS = [
29581
29827
  data: {
29582
29828
  provider: "nano-banana-pro",
29583
29829
  aspectRatio: "3:4",
29584
- prompt: "Single photorealistic studio composite of the SAME person from the reference image across five decades, shoulder-to-shoulder left to right with a smooth age progression and period-accurate styling: a 1980s child, a 1990s teen, a 2000s young adult, a 2010s adult, and a 2020s mature adult. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, hair color, and a slight shift in facial fullness. Style each to its decade in hair and wardrobe with a subtle period-accurate film treatment per decade: 1980s bold colors and big hair, 1990s casual grunge, 2000s frosted tips, 2010s clean modern, 2020s contemporary. Even soft studio key with gentle rim separation, clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the five figures fill the frame.",
29830
+ promptPrefix: "Single photorealistic studio composite of the SAME person from the reference image across five decades, shoulder-to-shoulder left to right with a smooth age progression and period-accurate styling: a 1980s child, a 1990s teen, a 2000s young adult, a 2010s adult, and a 2020s mature adult. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, hair color, and a slight shift in facial fullness. Style each to its decade in hair and wardrobe with a subtle period-accurate film treatment per decade: 1980s bold colors and big hair, 1990s casual grunge, 2000s frosted tips, 2010s clean modern, 2020s contemporary. Even soft studio key with gentle rim separation, clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the five figures fill the frame.",
29585
29831
  negativePrompt: "different person, inconsistent face between figures, distorted features, identity drift across decades, anachronistic styling, plastic skin, deformed, blurry, lowres, watermark, text"
29586
29832
  }
29587
29833
  },
@@ -29593,7 +29839,7 @@ var GENERATE_IMAGE_PRESETS = [
29593
29839
  data: {
29594
29840
  provider: "nano-banana-pro",
29595
29841
  aspectRatio: "3:4",
29596
- prompt: "Single photorealistic studio composite of the SAME person from the reference image in four seasonal looks, shoulder-to-shoulder left to right: spring, summer, autumn, and winter. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression, all at the SAME age as the reference \u2014 this is seasons, not aging. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all four figures, unmistakably the same person; ONLY wardrobe, hair styling and a subtle seasonal color grade change. Spring: light pastel layers, fresh airy tone. Summer: light tee, warm sunny tone. Autumn: knit sweater, golden amber tone. Winter: coat and scarf, cool crisp tone. Even soft studio key light with a gentle seasonal color cast and rim separation per figure, clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the four figures fill the frame.",
29842
+ promptPrefix: "Single photorealistic studio composite of the SAME person from the reference image in four seasonal looks, shoulder-to-shoulder left to right: spring, summer, autumn, and winter. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression, all at the SAME age as the reference \u2014 this is seasons, not aging. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all four figures, unmistakably the same person; ONLY wardrobe, hair styling and a subtle seasonal color grade change. Spring: light pastel layers, fresh airy tone. Summer: light tee, warm sunny tone. Autumn: knit sweater, golden amber tone. Winter: coat and scarf, cool crisp tone. Even soft studio key light with a gentle seasonal color cast and rim separation per figure, clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the four figures fill the frame.",
29597
29843
  negativePrompt: "different person, inconsistent face between figures, distorted features, aging, age differences between figures, plastic skin, deformed, blurry, lowres, watermark, text"
29598
29844
  }
29599
29845
  },
@@ -29605,7 +29851,7 @@ var GENERATE_IMAGE_PRESETS = [
29605
29851
  data: {
29606
29852
  provider: "nano-banana-pro",
29607
29853
  aspectRatio: "3:4",
29608
- prompt: "Single photorealistic composite of the SAME person from the reference image across four times of day, shoulder-to-shoulder left to right: dawn, midday, golden hour, and night. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression, all at the SAME age as the reference. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all four figures, unmistakably the same person; ONLY the lighting and color temperature change between figures. Dawn: soft cool blue light. Midday: bright neutral daylight. Golden hour: warm amber backlight with a gentle glow. Night: moody low light with a cool rim. Consistent chest-up framing and a clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the four figures fill the frame.",
29854
+ promptPrefix: "Single photorealistic composite of the SAME person from the reference image across four times of day, shoulder-to-shoulder left to right: dawn, midday, golden hour, and night. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression, all at the SAME age as the reference. CRITICAL identity lock \u2014 same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all four figures, unmistakably the same person; ONLY the lighting and color temperature change between figures. Dawn: soft cool blue light. Midday: bright neutral daylight. Golden hour: warm amber backlight with a gentle glow. Night: moody low light with a cool rim. Consistent chest-up framing and a clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the four figures fill the frame.",
29609
29855
  negativePrompt: "different person, inconsistent face between figures, distorted features, aging, age differences between figures, blown highlights, plastic skin, deformed, blurry, lowres, watermark, text"
29610
29856
  }
29611
29857
  },
@@ -32019,42 +32265,42 @@ var VIDEO_TO_VIDEO_PRESETS = [
32019
32265
  name: "Anime Restyle",
32020
32266
  description: "2D cel-shaded anime look.",
32021
32267
  group: "Restyle Looks",
32022
- data: { provider: "wan", prompt: "Restyle this video as a 2D cel-shaded anime: vibrant colors, clean linework, expressive cel shading. Preserve the original motion, composition, and timing.", negativePrompt: "photorealistic, blurry, distorted, flickering" }
32268
+ data: { provider: "wan", promptPrefix: "Restyle this video as a 2D cel-shaded anime: vibrant colors, clean linework, expressive cel shading. Preserve the original motion, composition, and timing.", negativePrompt: "photorealistic, blurry, distorted, flickering" }
32023
32269
  },
32024
32270
  {
32025
32271
  id: "video-to-video/claymation",
32026
32272
  name: "Claymation",
32027
32273
  description: "Tactile stop-motion clay.",
32028
32274
  group: "Restyle Looks",
32029
- data: { provider: "wan", prompt: "Restyle as tactile stop-motion claymation with plasticine textures and subtle fingerprints. Keep the original motion and framing.", negativePrompt: "photorealistic, smooth, flickering" }
32275
+ data: { provider: "wan", promptPrefix: "Restyle as tactile stop-motion claymation with plasticine textures and subtle fingerprints. Keep the original motion and framing.", negativePrompt: "photorealistic, smooth, flickering" }
32030
32276
  },
32031
32277
  {
32032
32278
  id: "video-to-video/cyberpunk-neon",
32033
32279
  name: "Cyberpunk Neon",
32034
32280
  description: "Rain-slicked neon city look.",
32035
32281
  group: "Restyle Looks",
32036
- data: { provider: "wan", prompt: "Restyle with a neon cyberpunk aesthetic: rain-slicked surfaces, glowing magenta and cyan lighting, moody atmosphere. Preserve the original motion.", negativePrompt: "daylight, flat lighting, blurry, distorted" }
32282
+ data: { provider: "wan", promptPrefix: "Restyle with a neon cyberpunk aesthetic: rain-slicked surfaces, glowing magenta and cyan lighting, moody atmosphere. Preserve the original motion.", negativePrompt: "daylight, flat lighting, blurry, distorted" }
32037
32283
  },
32038
32284
  {
32039
32285
  id: "video-to-video/oil-painting",
32040
32286
  name: "Oil Painting",
32041
32287
  description: "Moving painterly brushwork.",
32042
32288
  group: "Restyle Looks",
32043
- data: { provider: "wan", prompt: "Restyle as a moving oil painting with visible brushstrokes, rich impasto texture, and painterly color. Keep the original motion and composition.", negativePrompt: "photorealistic, flat, blurry, flickering" }
32289
+ data: { provider: "wan", promptPrefix: "Restyle as a moving oil painting with visible brushstrokes, rich impasto texture, and painterly color. Keep the original motion and composition.", negativePrompt: "photorealistic, flat, blurry, flickering" }
32044
32290
  },
32045
32291
  {
32046
32292
  id: "video-to-video/pixar-3d",
32047
32293
  name: "3D Animated",
32048
32294
  description: "Polished CG film look.",
32049
32295
  group: "Restyle Looks",
32050
- data: { provider: "wan", prompt: "Restyle as a polished 3D animated film: soft global illumination, expressive characters, clean stylized surfaces. Preserve the original motion and timing.", negativePrompt: "photorealistic, lowres, distorted, flickering" }
32296
+ data: { provider: "wan", promptPrefix: "Restyle as a polished 3D animated film: soft global illumination, expressive characters, clean stylized surfaces. Preserve the original motion and timing.", negativePrompt: "photorealistic, lowres, distorted, flickering" }
32051
32297
  },
32052
32298
  {
32053
32299
  id: "video-to-video/watercolor",
32054
32300
  name: "Watercolor",
32055
32301
  description: "Flowing washes on paper.",
32056
32302
  group: "Restyle Looks",
32057
- data: { provider: "wan", prompt: "Restyle as a flowing watercolor animation with soft washes, bleeding edges, and visible paper texture. Keep the original motion and composition.", negativePrompt: "photorealistic, harsh edges, blurry, flickering" }
32303
+ data: { provider: "wan", promptPrefix: "Restyle as a flowing watercolor animation with soft washes, bleeding edges, and visible paper texture. Keep the original motion and composition.", negativePrompt: "photorealistic, harsh edges, blurry, flickering" }
32058
32304
  }
32059
32305
  ];
32060
32306
  var ADD_CAPTIONS_PRESETS = [
@@ -32155,7 +32401,7 @@ var SWITCHX_PRESETS = [
32155
32401
  group: "Relight & Composite",
32156
32402
  data: {
32157
32403
  alphaMode: "auto",
32158
- prompt: "Relight the subject to match the reference: match its colour temperature, key-light direction and intensity, and add matching contact shadows. Keep the subject's motion, pose and identity unchanged."
32404
+ promptPrefix: "Relight the subject to match the reference: match its colour temperature, key-light direction and intensity, and add matching contact shadows. Keep the subject's motion, pose and identity unchanged."
32159
32405
  }
32160
32406
  },
32161
32407
  {
@@ -32165,7 +32411,7 @@ var SWITCHX_PRESETS = [
32165
32411
  group: "Relight & Composite",
32166
32412
  data: {
32167
32413
  alphaMode: "auto",
32168
- prompt: "Keep the foreground subject and replace the background with the environment from the reference. Relight the subject so it sits naturally in the new scene \u2014 match light direction, colour and shadows."
32414
+ promptPrefix: "Keep the foreground subject and replace the background with the environment from the reference. Relight the subject so it sits naturally in the new scene \u2014 match light direction, colour and shadows."
32169
32415
  }
32170
32416
  },
32171
32417
  {
@@ -32175,7 +32421,7 @@ var SWITCHX_PRESETS = [
32175
32421
  group: "Relight & Composite",
32176
32422
  data: {
32177
32423
  alphaMode: "fill",
32178
- prompt: "Restyle the entire frame to match the reference look \u2014 colour grade, lighting and mood \u2014 while preserving the original motion, composition and timing."
32424
+ promptPrefix: "Restyle the entire frame to match the reference look \u2014 colour grade, lighting and mood \u2014 while preserving the original motion, composition and timing."
32179
32425
  }
32180
32426
  },
32181
32427
  {
@@ -32186,7 +32432,7 @@ var SWITCHX_PRESETS = [
32186
32432
  data: {
32187
32433
  alphaMode: "select",
32188
32434
  alphaKeyframeIndex: 0,
32189
- prompt: "Composite the masked region against the reference and relight it to match. Leave everything outside the mask untouched."
32435
+ promptPrefix: "Composite the masked region against the reference and relight it to match. Leave everything outside the mask untouched."
32190
32436
  }
32191
32437
  },
32192
32438
  {
@@ -32196,7 +32442,7 @@ var SWITCHX_PRESETS = [
32196
32442
  group: "Relight & Composite",
32197
32443
  data: {
32198
32444
  alphaMode: "custom",
32199
- prompt: "Composite using the supplied per-frame matte and relight the kept region to match the reference. Preserve the original motion."
32445
+ promptPrefix: "Composite using the supplied per-frame matte and relight the kept region to match the reference. Preserve the original motion."
32200
32446
  }
32201
32447
  }
32202
32448
  ];
@@ -33000,7 +33246,8 @@ var SINGLE_PICKER_WIRING = [
33000
33246
  { kind: "single", nodeType: "photo-genre", label: "Photo Genre", valueField: "photoGenre", defaultValue: "fashion-editorial", catalogId: "photo-genre", entries: mapCat(PHOTO_GENRES, "category"), groupOrder: PHOTO_GENRE_CATEGORY_ORDER, groupLabels: PHOTO_GENRE_CATEGORY_LABELS },
33001
33247
  { kind: "single", nodeType: "backdrop", label: "Backdrop", valueField: "backdrop", defaultValue: "white-seamless", catalogId: "backdrop", entries: mapCat(BACKDROPS, "category"), groupOrder: BACKDROP_CATEGORY_ORDER, groupLabels: BACKDROP_CATEGORY_LABELS },
33002
33248
  { kind: "single", nodeType: "render-quality", label: "Render Quality", valueField: "renderQuality", defaultValue: "raytracing", catalogId: "render-quality", entries: mapCat(RENDER_QUALITIES) },
33003
- { kind: "single", nodeType: "composition-effects", label: "Composition Effect", valueField: "compositionEffect", defaultValue: "bursting-through-frame", catalogId: "composition-effects", entries: mapCat(COMPOSITION_EFFECTS) },
33249
+ // No default effect — see the note in picker-catalogs.ts.
33250
+ { kind: "single", nodeType: "composition-effects", label: "Composition Effect", valueField: "compositionEffect", defaultValue: "none", catalogId: "composition-effects", entries: mapCat(COMPOSITION_EFFECTS) },
33004
33251
  { kind: "single", nodeType: "action-fx", label: "Action FX", valueField: "actionFx", defaultValue: "earthquake-tremor", catalogId: "action-fx", entries: mapCat(ACTION_FX, "category"), groupOrder: ACTION_FX_CATEGORY_ORDER, groupLabels: ACTION_FX_CATEGORY_LABELS },
33005
33252
  { kind: "single", nodeType: "loop-subject", label: "Loop Subject", valueField: "loopSubject", defaultValue: "tunnel", catalogId: "loop-subject", entries: mapCat(LOOP_SUBJECTS, "category"), groupOrder: LOOP_SUBJECT_CATEGORY_ORDER, groupLabels: LOOP_SUBJECT_CATEGORY_LABELS },
33006
33253
  { kind: "single", nodeType: "post-process-effects", label: "Post-Process Effect", valueField: "postProcess", defaultValue: "vignette-soft", catalogId: "post-process-effects", entries: mapCat(POST_PROCESS_EFFECTS) },
@@ -33203,6 +33450,6 @@ function buildSurroundFillPrompt(direction, userPrompt) {
33203
33450
  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.`;
33204
33451
  }
33205
33452
 
33206
- 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_IDS, 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, 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_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, 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, 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_IDS, 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, 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, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, deriveTerm, 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, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, 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, listPickerCatalogs, migratePersonValue, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptBindsFirstFrame, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderStructuredFields, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
33453
+ 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, 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_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, 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_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, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, deriveTerm, 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, joinPromptParts, listPickerCatalogs, migratePersonValue, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderStructuredFields, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
33207
33454
  //# sourceMappingURL=index.js.map
33208
33455
  //# sourceMappingURL=index.js.map