@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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ConnectedReference, GenericNode, GenericEdge, HintNodeLike, HintGraphContext, EntityStyle, SupportedFontName, CharacterDef, IdentityMeta, SceneData, CharacterMentionTokenInfo, LocationMentionTokenInfo, UsageMode, ProjectedCatalog, ProjectedCatalogDimension, ProjectedCatalogOption, LocaleId, LocaleCatalogMap, StyleDirectives, I18nCatalogId, SurroundDirection } from '@nodaro/shared';
1
+ import { ConnectedReference, GenericNode, GenericEdge, HintNodeLike, HintGraphContext, EntityStyle, SupportedFontName, CharacterDef, IdentityMeta, SceneData, CharacterMentionTokenInfo, LocationMentionTokenInfo, UsageMode, ProjectedCatalog, ProjectedCatalogDimension, ProjectedCatalogOption, LocaleId, LocaleCatalogMap, PromptAffixes, StyleDirectives, I18nCatalogId, SurroundDirection } from '@nodaro/shared';
2
2
  export { HintEdgeLike, HintGraphContext, HintNodeLike } from '@nodaro/shared';
3
3
  import { z } from 'zod';
4
4
 
@@ -1000,34 +1000,12 @@ interface StructuredPromptFields {
1000
1000
  declare function renderStructuredFields(fields: StructuredPromptFields): string;
1001
1001
 
1002
1002
  /**
1003
- * Shared video-reference resolver CORE — the ONE pure implementation of the
1004
- * video-prompt `@-mention` + canonical-fallback + extras assembly that BOTH the
1005
- * frontend (`frontend/src/lib/video-prompt-assembly.ts`) and backend
1006
- * (`backend/src/services/workflow-engine/payload-builder.ts`) resolvers delegate
1007
- * to.
1008
- *
1009
- * Historically the FE and BE each hand-rolled a byte-for-byte copy of this logic
1010
- * (they had to stay in lock-step or single-node FE runs and orchestrator runs
1011
- * would diverge). This module is the lift-and-shift of the FRONTEND resolver's
1012
- * post-expansion body into one place so there is a single source of truth.
1013
- *
1014
- * Purity contract: NO FE/BE-only dependencies. The caller is responsible for the
1015
- * layer-specific work BEFORE calling in:
1016
- * - expanding wired Character upstreams into `ConnectedReference[]`
1017
- * (`wiredCharRefs`), and
1018
- * - looking up an extra-ref's character metadata by slug
1019
- * (`lookupCharacterBySlug` — FE: `nodes.find(...)`, BE: `buildCtx`).
1020
- *
1021
- * Behavior-preserving when first extracted (the FE resolver's post-expansion
1022
- * body was lifted verbatim). The ONE intended output change since is the
1023
- * reference-binding surface string: the per-image subject phrasing, the bullet
1024
- * ordinals, and the frame directive now emit `@image_N` / `@video_N` /
1025
- * `@audio_N` (the legacy form was `Image N`) — all routed through the single
1026
- * `REF_BINDING` swap-point below. The structural strings ("Use these
1027
- * characters:", the bullet layout, "… is the same subject as …") are otherwise
1028
- * unchanged.
1003
+ * The reference-binding surface string — `@image_N` / `@video_N` / `@audio_N`
1004
+ * — and the one identity sentence built on it. Split out of
1005
+ * `video-reference-resolver.ts` so the id-addressed token resolver
1006
+ * (`ref-id-tokens.ts`) can bind through the same arrows without a module
1007
+ * cycle; the resolver re-exports both, so importers are unaffected.
1029
1008
  */
1030
-
1031
1009
  /**
1032
1010
  * The SINGLE swap-point for the reference-binding surface-string (design D1/D7).
1033
1011
  *
@@ -1059,6 +1037,89 @@ declare const REF_BINDING: {
1059
1037
  readonly ordinal: (n: number) => string;
1060
1038
  readonly frame: (n: number, role: "opening" | "closing") => string;
1061
1039
  };
1040
+
1041
+ /**
1042
+ * `{ref:<id>}` / `{ref:<id>:<label>}` — id-addressed reference tokens.
1043
+ *
1044
+ * The API/Studio form of the positional `{image:N}` token: the client names a
1045
+ * reference by its OWN `connectedReferences[].id` and the platform substitutes
1046
+ * the `@image_N` seat after IT has done the numbering. Without it a client that
1047
+ * wanted the binding inline had to mirror the numbering walk client-side — a
1048
+ * duplicated rule that misbinds pictures the moment the walk changes.
1049
+ *
1050
+ * `resolveVideoReferenceCore` builds the `RefIdTokenContext` DURING its walk
1051
+ * and calls `resolveRefIdTokens` before the `referenceOrder` reorder (so the
1052
+ * binding follows the reference to its final seat); the video routes call it
1053
+ * standalone on their no-image-reference early return (nothing seated, so
1054
+ * every token degrades).
1055
+ */
1056
+ /** What `resolveRefIdTokens` resolves against — the numbering walk's output. */
1057
+ interface RefIdTokenContext {
1058
+ /** Reference id → the 1-based `@image_N` seat the walk gave it. */
1059
+ readonly slotById: ReadonlyMap<string, number>;
1060
+ /** Reference id → display name, the degrade target of a token that cannot bind. */
1061
+ readonly nameById: ReadonlyMap<string, string>;
1062
+ /**
1063
+ * How many image references actually ship — the same range gate `{image:N}`
1064
+ * uses. A seat past it (a capped-out or duplicate-URL ref) must not bind.
1065
+ */
1066
+ readonly imageCount: number;
1067
+ }
1068
+ /**
1069
+ * Rewrite id-addressed reference tokens into the `@image_N` binding of the
1070
+ * reference the caller sent under that id.
1071
+ *
1072
+ * Ids are matched by IDENTITY against the known ids (seated or named), never
1073
+ * parsed by character class: the whole content is tried as an id first (the
1074
+ * longest reading — an id may itself end in something label-shaped), then
1075
+ * `<id>:<label>` split at the last colon, then the token is unknown. The label
1076
+ * class is the one `REFERENCE_TOKEN_RE` uses. An id containing `{`, `}`, an
1077
+ * `@name:N` mention or a `{image:N}` token is unsupported (the mention pass
1078
+ * runs first and would rewrite it; a brace ends the token).
1079
+ *
1080
+ * Per token:
1081
+ * - id seated in range → `REF_BINDING.image(label, N)` when labeled, else the
1082
+ * bare `REF_BINDING.ordinal(N)` — exactly what `{image:N[:label]}` emits.
1083
+ * - otherwise (unknown id, ref skipped by the walk, capped out, or no image
1084
+ * references at all) → the label if given, else the ref's display name if
1085
+ * the id is known, else "". A token never ships raw — a malformed one is
1086
+ * dropped by the last-resort net.
1087
+ *
1088
+ * No whitespace tidy here: every caller runs `resolveReferenceTokens` after
1089
+ * this (the core does at every return), and that collapses the gap a dropped
1090
+ * token leaves. Returns the input untouched when it carries no `{ref:` at all.
1091
+ */
1092
+ declare function resolveRefIdTokens(prompt: string | undefined, ctx: RefIdTokenContext): string | undefined;
1093
+
1094
+ /**
1095
+ * Shared video-reference resolver CORE — the ONE pure implementation of the
1096
+ * video-prompt `@-mention` + canonical-fallback + extras assembly that BOTH the
1097
+ * frontend (`frontend/src/lib/video-prompt-assembly.ts`) and backend
1098
+ * (`backend/src/services/workflow-engine/payload-builder.ts`) resolvers delegate
1099
+ * to.
1100
+ *
1101
+ * Historically the FE and BE each hand-rolled a byte-for-byte copy of this logic
1102
+ * (they had to stay in lock-step or single-node FE runs and orchestrator runs
1103
+ * would diverge). This module is the lift-and-shift of the FRONTEND resolver's
1104
+ * post-expansion body into one place so there is a single source of truth.
1105
+ *
1106
+ * Purity contract: NO FE/BE-only dependencies. The caller is responsible for the
1107
+ * layer-specific work BEFORE calling in:
1108
+ * - expanding wired Character upstreams into `ConnectedReference[]`
1109
+ * (`wiredCharRefs`), and
1110
+ * - looking up an extra-ref's character metadata by slug
1111
+ * (`lookupCharacterBySlug` — FE: `nodes.find(...)`, BE: `buildCtx`).
1112
+ *
1113
+ * Behavior-preserving when first extracted (the FE resolver's post-expansion
1114
+ * body was lifted verbatim). The ONE intended output change since is the
1115
+ * reference-binding surface string: the per-image subject phrasing, the bullet
1116
+ * ordinals, and the frame directive now emit `@image_N` / `@video_N` /
1117
+ * `@audio_N` (the legacy form was `Image N`) — all routed through the single
1118
+ * `REF_BINDING` swap-point below. The structural strings ("Use these
1119
+ * characters:", the bullet layout, "… is the same subject as …") are otherwise
1120
+ * unchanged.
1121
+ */
1122
+
1062
1123
  /**
1063
1124
  * Positional reference counts the editor tokens are resolved against — how many
1064
1125
  * image / video / audio references are wired into the node, in worker-payload
@@ -1102,6 +1163,13 @@ declare function resolveReferenceTokens(prompt: string | undefined, counts: Refe
1102
1163
  * frontend `ExtraRef` / backend extras: only the fields this core reads.
1103
1164
  */
1104
1165
  interface VideoExtraRef {
1166
+ /**
1167
+ * The caller's own id for this reference (`connectedReferences[].id` on the
1168
+ * route, `extraRefs[].id` on the canvas) — what a `{ref:<id>}` token in the
1169
+ * prompt names. Slot-map only: the reorder's tile id stays `wired:<url>`.
1170
+ * Absent → the extra cannot be addressed by id (it still numbers normally).
1171
+ */
1172
+ id?: string;
1105
1173
  url: string;
1106
1174
  description?: string;
1107
1175
  characterSlug?: string;
@@ -1207,6 +1275,15 @@ interface ResolveVideoReferenceCoreArgs {
1207
1275
  * Wired in Phase B Tasks 2-3.
1208
1276
  */
1209
1277
  hybridRoles?: boolean;
1278
+ /**
1279
+ * Display names for EVERY reference the caller knows by id — including the
1280
+ * ones it did NOT hand to this walk (the route caps `connectedReferences` to
1281
+ * the provider's image budget before calling in). A `{ref:<id>}` token that
1282
+ * cannot bind degrades to `label ?? refNamesById[id] ?? ""`, so a capped-out
1283
+ * or skipped reference keeps its name in the prose instead of vanishing.
1284
+ * The wired character refs' `defaultName`s are known without this.
1285
+ */
1286
+ refNamesById?: ReadonlyMap<string, string>;
1210
1287
  }
1211
1288
  /**
1212
1289
  * Resolve `@kira:N` / `@kira:N:smile` mentions in a video-node prompt against
@@ -1961,7 +2038,10 @@ interface PickerCatalog {
1961
2038
  readonly options?: readonly PickerOption[];
1962
2039
  /** multi-dim: the dimension keys (no single catalog to flatten). */
1963
2040
  readonly fields?: readonly string[];
1964
- /** multi-dim: one self-describing entry per dimension field, in `fields` order. */
2041
+ /** Per-field option lists. Multi-dim catalogs always carry these, one per
2042
+ * `fields` entry in order; a single-dim catalog carries them when it has
2043
+ * secondary parameter fields beside its main picker (transition
2044
+ * position/duration/intensity). */
1965
2045
  readonly dimensions?: readonly PickerDimension[];
1966
2046
  }
1967
2047
  /**
@@ -3011,9 +3091,23 @@ interface CharacterFx {
3011
3091
  /** Optional authored compact term (see `term.ts` for the convention). */
3012
3092
  readonly term?: string;
3013
3093
  }
3014
- type CharacterFxPosition = "auto" | "start" | "middle" | "end" | "full";
3015
- type CharacterFxDuration = "auto" | "instant" | "short" | "medium" | "long";
3016
- type CharacterFxIntensity = "auto" | "subtle" | "natural" | "dynamic" | "crazy";
3094
+ /**
3095
+ * The three timing scales, each derived from the catalog that defines it (see
3096
+ * `CHARACTER_FX_POSITIONS` and friends below).
3097
+ *
3098
+ * The direction matters. These used to be hand-written unions with the clause
3099
+ * tables written out separately beside them, so the two could disagree: add a
3100
+ * step to the union, forget the clause, and the composer indexed a missing key
3101
+ * — pushing `undefined` into the parts list, which `join(", ")` renders as a
3102
+ * dangling separator on a prompt that then ships to a provider with the user's
3103
+ * chosen parameter silently dropped. Deriving the union FROM the catalog makes
3104
+ * that unrepresentable: one array is the source of the type, the option list
3105
+ * the API serves, and the clause table, so a new step reaches all three or
3106
+ * none. The exact id sets are pinned by `character-fx-timing-catalogs.test.ts`.
3107
+ */
3108
+ type CharacterFxPosition = (typeof CHARACTER_FX_POSITIONS)[number]["id"];
3109
+ type CharacterFxDuration = (typeof CHARACTER_FX_DURATIONS)[number]["id"];
3110
+ type CharacterFxIntensity = (typeof CHARACTER_FX_INTENSITIES)[number]["id"];
3017
3111
  interface CharacterFxTiming {
3018
3112
  position?: CharacterFxPosition;
3019
3113
  duration?: CharacterFxDuration;
@@ -3034,6 +3128,125 @@ declare function getCharacterFxPromptHint(id: string | undefined | null): string
3034
3128
  */
3035
3129
  declare function getCharacterFxTerm(id: string | undefined | null): string;
3036
3130
  declare const CHARACTER_FX_IDS: ReadonlyArray<string>;
3131
+ /**
3132
+ * The character-fx node's three timing parameters, as catalogs.
3133
+ *
3134
+ * Graded scales in the standard option shape, so a consumer that can only send
3135
+ * ids (Studio, the SDK, MCP) can offer Position / Duration / Intensity without
3136
+ * composing prompt text of its own. `auto` is the no-op head of each scale: an
3137
+ * empty `promptHint`, so an unset parameter contributes nothing and the model
3138
+ * is left to decide, exactly as before these were enumerable.
3139
+ *
3140
+ * These are NOT the transition node's scales, even though the ids match. The
3141
+ * wording is deliberately different — a transition OCCURS and SPANS the clip,
3142
+ * an effect MANIFESTS and PERSISTS — and the three intensity clauses coincide
3143
+ * by accident, not by shared definition. Keep the two catalogs separate; do
3144
+ * not fold one into the other.
3145
+ *
3146
+ * `POSITION_CLAUSES` / `DURATION_CLAUSES` / `INTENSITY_CLAUSES` below are
3147
+ * DERIVED from these arrays, so the clause the composer injects and the hint
3148
+ * the catalog advertises are the same string by construction and cannot drift.
3149
+ */
3150
+ interface CharacterFxTimingOption {
3151
+ readonly id: string;
3152
+ readonly label: string;
3153
+ readonly description: string;
3154
+ readonly promptHint: string;
3155
+ readonly term?: string;
3156
+ }
3157
+ declare const CHARACTER_FX_POSITIONS: readonly [{
3158
+ readonly id: "auto";
3159
+ readonly label: "Auto";
3160
+ readonly description: "Let the model place the effect";
3161
+ readonly promptHint: "";
3162
+ readonly term: "";
3163
+ }, {
3164
+ readonly id: "start";
3165
+ readonly label: "Start";
3166
+ readonly description: "Occurs at the opening of the clip";
3167
+ readonly promptHint: "the effect occurs at the opening of the clip";
3168
+ readonly term: "at the opening of the clip";
3169
+ }, {
3170
+ readonly id: "middle";
3171
+ readonly label: "Middle";
3172
+ readonly description: "Occurs in the middle of the clip";
3173
+ readonly promptHint: "the effect occurs in the middle of the clip";
3174
+ readonly term: "mid-clip";
3175
+ }, {
3176
+ readonly id: "end";
3177
+ readonly label: "End";
3178
+ readonly description: "Occurs at the end of the clip";
3179
+ readonly promptHint: "the effect occurs at the end of the clip";
3180
+ readonly term: "at the end of the clip";
3181
+ }, {
3182
+ readonly id: "full";
3183
+ readonly label: "Full";
3184
+ readonly description: "Persists for the entire clip";
3185
+ readonly promptHint: "the effect persists for the entire clip";
3186
+ readonly term: "persisting for the whole clip";
3187
+ }];
3188
+ declare const CHARACTER_FX_DURATIONS: readonly [{
3189
+ readonly id: "auto";
3190
+ readonly label: "Auto";
3191
+ readonly description: "Let the model time the effect";
3192
+ readonly promptHint: "";
3193
+ readonly term: "";
3194
+ }, {
3195
+ readonly id: "instant";
3196
+ readonly label: "Instant";
3197
+ readonly description: "Manifests instantaneously";
3198
+ readonly promptHint: "manifesting instantaneously";
3199
+ readonly term: "manifesting instantly";
3200
+ }, {
3201
+ readonly id: "short";
3202
+ readonly label: "Short (~1s)";
3203
+ readonly description: "Manifests over approximately 1 second";
3204
+ readonly promptHint: "manifesting over approximately 1 second";
3205
+ readonly term: "manifesting over about 1 second";
3206
+ }, {
3207
+ readonly id: "medium";
3208
+ readonly label: "Medium (~2s)";
3209
+ readonly description: "Manifests over approximately 2 seconds";
3210
+ readonly promptHint: "manifesting over approximately 2 seconds";
3211
+ readonly term: "manifesting over about 2 seconds";
3212
+ }, {
3213
+ readonly id: "long";
3214
+ readonly label: "Long (~3s)";
3215
+ readonly description: "Manifests over approximately 3 seconds";
3216
+ readonly promptHint: "manifesting over approximately 3 seconds";
3217
+ readonly term: "manifesting over about 3 seconds";
3218
+ }];
3219
+ declare const CHARACTER_FX_INTENSITIES: readonly [{
3220
+ readonly id: "auto";
3221
+ readonly label: "Auto";
3222
+ readonly description: "Let the model judge the effect's energy";
3223
+ readonly promptHint: "";
3224
+ readonly term: "";
3225
+ }, {
3226
+ readonly id: "subtle";
3227
+ readonly label: "Subtle";
3228
+ readonly description: "Restrained, minimal flourish";
3229
+ readonly promptHint: "with subtle restrained energy and minimal flourish";
3230
+ readonly term: "subtly";
3231
+ }, {
3232
+ readonly id: "natural";
3233
+ readonly label: "Natural";
3234
+ readonly description: "Unhurried, unforced timing";
3235
+ readonly promptHint: "with natural unhurried timing";
3236
+ readonly term: "at a natural pace";
3237
+ }, {
3238
+ readonly id: "dynamic";
3239
+ readonly label: "Dynamic";
3240
+ readonly description: "Assertive, energetic";
3241
+ readonly promptHint: "with dynamic energy and assertive flourish";
3242
+ readonly term: "energetically";
3243
+ }, {
3244
+ readonly id: "crazy";
3245
+ readonly label: "Crazy";
3246
+ readonly description: "Extreme, wild, distorted";
3247
+ readonly promptHint: "with extreme exaggerated energy, wild flourishes, and dramatic distortion";
3248
+ readonly term: "wildly exaggerated";
3249
+ }];
3037
3250
  /**
3038
3251
  * Compose a character-fx prompt-hint sentence from an effect id (or array
3039
3252
  * of 1-2 ids for multi-pick) plus target-ref display names (from upstream
@@ -4802,9 +5015,23 @@ interface Transition {
4802
5015
  */
4803
5016
  readonly term?: string;
4804
5017
  }
4805
- type TransitionPosition = "auto" | "start" | "middle" | "end" | "full";
4806
- type TransitionDuration = "auto" | "instant" | "short" | "medium" | "long";
4807
- type TransitionIntensity = "auto" | "subtle" | "natural" | "dynamic" | "crazy";
5018
+ /**
5019
+ * The three timing scales, each derived from the catalog that defines it (see
5020
+ * `TRANSITION_POSITIONS` and friends below).
5021
+ *
5022
+ * The direction matters. These used to be hand-written unions with the clause
5023
+ * tables written out separately beside them, so the two could disagree: add a
5024
+ * step to the union, forget the clause, and the composer indexed a missing key
5025
+ * — pushing `undefined` into the parts list, which `join(", ")` renders as a
5026
+ * dangling separator on a prompt that then ships to a provider with the user's
5027
+ * chosen parameter silently dropped. Deriving the union FROM the catalog makes
5028
+ * that unrepresentable: one array is the source of the type, the option list
5029
+ * the API serves, and the clause table, so a new step reaches all three or
5030
+ * none. The exact id sets are pinned by `transition-timing-catalogs.test.ts`.
5031
+ */
5032
+ type TransitionPosition = (typeof TRANSITION_POSITIONS)[number]["id"];
5033
+ type TransitionDuration = (typeof TRANSITION_DURATIONS)[number]["id"];
5034
+ type TransitionIntensity = (typeof TRANSITION_INTENSITIES)[number]["id"];
4808
5035
  interface TransitionTiming {
4809
5036
  position?: TransitionPosition;
4810
5037
  duration?: TransitionDuration;
@@ -4827,6 +5054,120 @@ declare function getTransitionPromptHint(id: string | undefined | null): string;
4827
5054
  */
4828
5055
  declare function getTransitionTerm(id: string | undefined | null): string;
4829
5056
  declare const TRANSITION_IDS: ReadonlyArray<string>;
5057
+ /**
5058
+ * The transition node's three timing parameters, as catalogs.
5059
+ *
5060
+ * These are graded scales, not free numbers — the same shape as
5061
+ * `exposure-settings`' aperture or `temporal`'s speed — so a consumer that can
5062
+ * only send ids (Studio, the SDK, MCP) can offer them without composing prompt
5063
+ * text of its own. `auto` is the no-op head of each scale: an empty
5064
+ * `promptHint`, so an unset parameter contributes nothing and the model is left
5065
+ * to decide, exactly as before these were enumerable.
5066
+ *
5067
+ * `POSITION_CLAUSES` / `DURATION_CLAUSES` / `INTENSITY_CLAUSES` below are
5068
+ * DERIVED from these arrays, so the clause the composer injects and the hint
5069
+ * the catalog advertises are the same string by construction and cannot drift.
5070
+ */
5071
+ interface TransitionTimingOption {
5072
+ readonly id: string;
5073
+ readonly label: string;
5074
+ readonly description: string;
5075
+ readonly promptHint: string;
5076
+ readonly term?: string;
5077
+ }
5078
+ declare const TRANSITION_POSITIONS: readonly [{
5079
+ readonly id: "auto";
5080
+ readonly label: "Auto";
5081
+ readonly description: "Let the model place it";
5082
+ readonly promptHint: "";
5083
+ readonly term: "";
5084
+ }, {
5085
+ readonly id: "start";
5086
+ readonly label: "Start";
5087
+ readonly description: "At the opening of the clip";
5088
+ readonly promptHint: "the transition occurs at the opening of the clip";
5089
+ readonly term: "at the opening of the clip";
5090
+ }, {
5091
+ readonly id: "middle";
5092
+ readonly label: "Middle";
5093
+ readonly description: "In the middle of the clip";
5094
+ readonly promptHint: "the transition occurs in the middle of the clip";
5095
+ readonly term: "mid-clip";
5096
+ }, {
5097
+ readonly id: "end";
5098
+ readonly label: "End";
5099
+ readonly description: "At the end of the clip";
5100
+ readonly promptHint: "the transition occurs at the end of the clip";
5101
+ readonly term: "at the end of the clip";
5102
+ }, {
5103
+ readonly id: "full";
5104
+ readonly label: "Full";
5105
+ readonly description: "Spans the entire clip";
5106
+ readonly promptHint: "the transition spans the entire clip";
5107
+ readonly term: "across the whole clip";
5108
+ }];
5109
+ declare const TRANSITION_DURATIONS: readonly [{
5110
+ readonly id: "auto";
5111
+ readonly label: "Auto";
5112
+ readonly description: "Let the model time it";
5113
+ readonly promptHint: "";
5114
+ readonly term: "";
5115
+ }, {
5116
+ readonly id: "instant";
5117
+ readonly label: "Instant";
5118
+ readonly description: "No perceptible duration";
5119
+ readonly promptHint: "occurring instantaneously";
5120
+ readonly term: "instantaneous";
5121
+ }, {
5122
+ readonly id: "short";
5123
+ readonly label: "Short (~1s)";
5124
+ readonly description: "Approximately 1 second";
5125
+ readonly promptHint: "lasting approximately 1 second";
5126
+ readonly term: "about 1 second";
5127
+ }, {
5128
+ readonly id: "medium";
5129
+ readonly label: "Medium (~2s)";
5130
+ readonly description: "Approximately 2 seconds";
5131
+ readonly promptHint: "lasting approximately 2 seconds";
5132
+ readonly term: "about 2 seconds";
5133
+ }, {
5134
+ readonly id: "long";
5135
+ readonly label: "Long (~3s)";
5136
+ readonly description: "Approximately 3 seconds";
5137
+ readonly promptHint: "lasting approximately 3 seconds";
5138
+ readonly term: "about 3 seconds";
5139
+ }];
5140
+ declare const TRANSITION_INTENSITIES: readonly [{
5141
+ readonly id: "auto";
5142
+ readonly label: "Auto";
5143
+ readonly description: "Let the model judge it";
5144
+ readonly promptHint: "";
5145
+ readonly term: "";
5146
+ }, {
5147
+ readonly id: "subtle";
5148
+ readonly label: "Subtle";
5149
+ readonly description: "Restrained, minimal flourish";
5150
+ readonly promptHint: "with subtle restrained energy and minimal flourish";
5151
+ readonly term: "subtly";
5152
+ }, {
5153
+ readonly id: "natural";
5154
+ readonly label: "Natural";
5155
+ readonly description: "Unhurried, unforced timing";
5156
+ readonly promptHint: "with natural unhurried timing";
5157
+ readonly term: "at a natural pace";
5158
+ }, {
5159
+ readonly id: "dynamic";
5160
+ readonly label: "Dynamic";
5161
+ readonly description: "Assertive, energetic";
5162
+ readonly promptHint: "with dynamic energy and assertive flourish";
5163
+ readonly term: "energetically";
5164
+ }, {
5165
+ readonly id: "crazy";
5166
+ readonly label: "Crazy";
5167
+ readonly description: "Extreme, wild, distorted";
5168
+ readonly promptHint: "with extreme exaggerated energy, wild flourishes, and dramatic distortion";
5169
+ readonly term: "wildly exaggerated";
5170
+ }];
4830
5171
  /**
4831
5172
  * Compose a structural prompt-hint sentence from a transition id (or array
4832
5173
  * of 1-2 ids for multi-pick) plus optional start-state/end-state hints
@@ -5205,13 +5546,33 @@ interface ResolvePromptArgs {
5205
5546
  * Off/undefined = exact legacy precedence (override > typed > wired) for every
5206
5547
  * other node type. */
5207
5548
  appendWired?: boolean;
5549
+ /** Pre/post text wrapped around WHICHEVER core precedence produced (override,
5550
+ * typed, wired, or the appendWired combination). Applied last. */
5551
+ affixes?: PromptAffixes;
5208
5552
  }
5553
+ /** The ONE join rule between two non-blank prompt parts: a single space unless
5554
+ * the boundary already has whitespace on either side or the right part opens
5555
+ * with sentence punctuation. Shared by `joinPromptParts` and the editor's
5556
+ * Final-view segment builder so preview and run agree byte-for-byte. */
5557
+ declare function promptPartSeparator(left: string, right: string): "" | " ";
5558
+ /** Join prompt parts with `promptPartSeparator`; blank parts are dropped,
5559
+ * non-blank parts are used verbatim (no trimming). */
5560
+ declare function joinPromptParts(parts: ReadonlyArray<string | undefined>): string;
5561
+ /**
5562
+ * Wrap `core` with the node's pre/post text. `{Label}` refs are resolved in the
5563
+ * AFFIXES only — the core arrives exactly as the caller's precedence produced it.
5564
+ * NO-OP GUARANTEE: with no non-blank affix the core is returned unchanged (same
5565
+ * reference) — every existing workflow stays byte-identical.
5566
+ * EMPTY CORE: a blank core with affixes yields the joined affixes alone.
5567
+ */
5568
+ declare function applyPromptAffixes(core: string, affixes: PromptAffixes | undefined, refMap: ReadonlyMap<string, string>): string;
5569
+ declare function applyPromptAffixes(core: string | undefined, affixes: PromptAffixes | undefined, refMap: ReadonlyMap<string, string>): string | undefined;
5209
5570
  /** SINGLE SOURCE OF TRUTH for prompt precedence across both DAG engines:
5210
5571
  * override (list fan-out) > first present typed candidate > wired > "".
5211
5572
  * "present" = non-empty after trim. {Label} refs are resolved on the chosen
5212
5573
  * branch via the shared resolveNodeRefs. With `appendWired`, the chosen base
5213
- * AND the wired value are both emitted (joined ". "). */
5214
- declare function resolvePrompt({ override, typed, wired, refMap, appendWired }: ResolvePromptArgs): string;
5574
+ * AND the wired value are both emitted (joined ". "). Affixes wrap the result. */
5575
+ declare function resolvePrompt({ override, typed, wired, refMap, appendWired, affixes }: ResolvePromptArgs): string;
5215
5576
  /** Compose a final NEGATIVE prompt from a TYPED base + a WIRED (connected
5216
5577
  * negative-handle) value: both are emitted, joined ". " (mirrors `appendWired`
5217
5578
  * for the positive prompt). Pure join — the caller resolves `{label}` refs on
@@ -5245,6 +5606,145 @@ declare function computeLlmChatFields(data: Record<string, unknown>, { override,
5245
5606
  systemPrompt: string;
5246
5607
  };
5247
5608
 
5609
+ /** Which prompt field a snippet belongs to. Negative-target snippets only
5610
+ * surface in negative-prompt fields, and are bare comma lists by convention
5611
+ * (per Google's Veo guidance, a negative FIELD must name the unwanted thing,
5612
+ * never "no X"). */
5613
+ type SnippetTarget = "prompt" | "negative";
5614
+ /** Node modality a snippet applies to. A node declares its modality once in
5615
+ * the frontend's NODE_PROMPT_FIELDS; the menu shows snippets whose `media`
5616
+ * contains it. */
5617
+ type SnippetMedia = "image" | "video" | "audio" | "text";
5618
+ declare const SNIPPET_MEDIA_VALUES: readonly SnippetMedia[];
5619
+ interface FactorySnippet {
5620
+ /** Stable kebab slug, e.g. "identity-lock". Unique across the catalog. */
5621
+ readonly id: string;
5622
+ readonly name: string;
5623
+ /** One-liner shown in the menu and matched by search. */
5624
+ readonly description?: string;
5625
+ /** The exact fragment inserted into the prompt. Single line; never contains
5626
+ * `{`, `}`, or `@` (guard-tested) so it can never form a mention/variable
5627
+ * token in the editor. */
5628
+ readonly text: string;
5629
+ readonly target: SnippetTarget;
5630
+ readonly media: readonly SnippetMedia[];
5631
+ /** Menu group AND the pill-swap sibling pool (swap lists same-category). */
5632
+ readonly category: string;
5633
+ }
5634
+
5635
+ /**
5636
+ * Single source of truth: which data field(s) hold a node's user-editable
5637
+ * prompt text. Drives the quick-edit Prompt modal so it can work generically
5638
+ * across every AI node without each call site hardcoding a field name.
5639
+ *
5640
+ * The registry LIVES HERE (`@nodaro/prompts`) so the backend orchestrator, the
5641
+ * `/v1/nodes` registry, the prompt-affix totality tests and the docs tooling
5642
+ * read the SAME list the editor does. `frontend/src/lib/prompt-fields.ts` is a
5643
+ * pure re-export of this module — frontend code keeps importing
5644
+ * `@/lib/prompt-fields` unchanged.
5645
+ *
5646
+ * Most nodes store the prompt in `data.prompt`, but several don't
5647
+ * (`text-prompt` → `text`, `image-to-text` → `customPrompt`, …) — this map is
5648
+ * where that knowledge lives, once.
5649
+ *
5650
+ * INVARIANT: every node that exposes a user-editable prompt MUST have an entry
5651
+ * here, or the quick-edit modal silently does nothing for it. A guard test
5652
+ * (`prompt-fields.test.ts`) keeps this in sync with the node set.
5653
+ *
5654
+ * This module is intentionally pure data (no React/lucide imports) so it can be
5655
+ * pulled into the app-runtime bundle and any test without dragging in the icon
5656
+ * library. The string `icon` kind is mapped to a concrete lucide component in
5657
+ * `prompt-edit-button.tsx` (`getPromptIcon`), the only place that renders it.
5658
+ */
5659
+
5660
+ /** Which lucide glyph a node's prompt affordance uses. Kept as a string so this
5661
+ * module stays icon-library-free; mapped to a component in the strip button. */
5662
+ type PromptIconKind = "pencil" | "paintbrush";
5663
+ interface PromptFieldSpec {
5664
+ /** Data key holding the primary prompt (e.g. "prompt", "text", "customPrompt"). */
5665
+ readonly prompt: string;
5666
+ /** Data key holding the negative prompt, when the node supports one. */
5667
+ readonly negative?: string;
5668
+ /** Label override for the primary field (defaults to "Prompt"). */
5669
+ readonly promptLabel?: string;
5670
+ /** Icon for the prompt affordance (strip button + modal title). Defaults to a
5671
+ * pencil; image-editing nodes use a paintbrush to read as "edit". */
5672
+ readonly icon?: PromptIconKind;
5673
+ /** Node modality for prompt-snippet scoping — drives which snippet pool the
5674
+ * "/" menu and Snippets button show for this node's prompt fields. REQUIRED
5675
+ * so a new node cannot forget to declare it (compile error). */
5676
+ readonly media: SnippetMedia;
5677
+ /** True when this node renders a media-result preview body and therefore
5678
+ * participates in inline-prompt mode (the `InlineNodePrompt` editor on the
5679
+ * node face, centralized in `BaseNode`). REQUIRED (like `media`) so a new
5680
+ * prompt node must consciously choose — compile error if omitted. The set of
5681
+ * `inline: true` types is guarded in `prompt-fields.test.ts`. */
5682
+ readonly inline: boolean;
5683
+ /** Some nodes only READ their prompt field when a sibling discriminator
5684
+ * selects it — TTS keeps `directText` but resolves it only while
5685
+ * `textSource === "direct"`, defaulting to `"connected"`. Writing the text
5686
+ * without flipping the discriminator saved the value and then failed with
5687
+ * "no text found" (founder hit it live, 2026-08-14). Declare the pair here
5688
+ * and every writer flips it automatically. */
5689
+ readonly promptGate?: {
5690
+ readonly field: string;
5691
+ readonly value: string;
5692
+ };
5693
+ /** Prompt pre/post text (`promptPrefix` / `promptSuffix`) support. Defaults to
5694
+ * ON for every prompt node; set `false` ONLY for a node whose "prompt" is not
5695
+ * a model prompt (the plain Text input node). Read via `nodeSupportsPromptAffixes`. */
5696
+ readonly affixes?: false;
5697
+ }
5698
+ declare const NODE_PROMPT_FIELDS: Readonly<Record<string, PromptFieldSpec>>;
5699
+ /** The prompt-field spec for a node type, or undefined if it has none. */
5700
+ declare function getPromptFields(nodeType: string | undefined): PromptFieldSpec | undefined;
5701
+ /** True when this node type has a registered, quick-editable prompt field. */
5702
+ declare function nodeHasPromptField(nodeType: string | undefined): boolean;
5703
+ /** Snippet modality for a node type (drives the snippet pool), or undefined
5704
+ * when the node has no prompt field. */
5705
+ declare function getSnippetMedia(nodeType: string | undefined): SnippetMedia | undefined;
5706
+ /** True when this node type renders the inline on-node prompt editor — the
5707
+ * media-preview nodes (image/video/audio result body). Single source for
5708
+ * BaseNode's centralized `InlineNodePrompt` rendering and the gold nodes'
5709
+ * `showInline` derivation (`useInlinePromptActive`). */
5710
+ declare function nodeHasInlinePrompt(nodeType: string | undefined): boolean;
5711
+ /** True when the node type carries `promptPrefix` / `promptSuffix` — every
5712
+ * registered prompt node except explicit opt-outs (`affixes: false`). The single
5713
+ * predicate the config panel, Final view, `/v1/nodes` registry, totality tests
5714
+ * and docs tooling all gate on. */
5715
+ declare function nodeSupportsPromptAffixes(nodeType: string | undefined): boolean;
5716
+ /**
5717
+ * Where the RUN-TIME prompt lives when it differs from the editor's prompt
5718
+ * field (spec §7). `generate-script`'s editable prompt is its `styleGuide`, but
5719
+ * the run wraps the topic `prompt` with the affixes — so previewing the style
5720
+ * guide must NOT show them.
5721
+ */
5722
+ declare const PROMPT_AFFIX_CORE_FIELD_OVERRIDES: Readonly<Record<string, string>>;
5723
+ /** The data key whose value the run wraps with promptPrefix/promptSuffix, or
5724
+ * undefined when the node has no affixes. */
5725
+ declare function promptAffixCoreField(nodeType: string | undefined): string | undefined;
5726
+ /**
5727
+ * True when a preview of `promptField` on this node must show the affixes —
5728
+ * i.e. that key is what the run actually wraps. THE gate for the editor's Final
5729
+ * view, so a sibling field (llm-chat's `systemPrompt`, generate-script's
5730
+ * `styleGuide`) never renders a wrap the run doesn't perform.
5731
+ *
5732
+ * Two ways a key qualifies:
5733
+ * - it IS the core field ({@link promptAffixCoreField}), or
5734
+ * - it is a run-time FALLBACK candidate for the type
5735
+ * ({@link NODE_PROMPT_CANDIDATE_FIELDS}) — `computeNodePrompt` picks the
5736
+ * first present candidate and wraps THAT, so i2v's legacy `motionPrompt`
5737
+ * genuinely receives the affixes when `data.prompt` is empty.
5738
+ *
5739
+ * The two rules never collide: no override type declares candidates (guarded in
5740
+ * `node-prompt-fields.test.ts`).
5741
+ *
5742
+ * `undefined` means "the node's primary prompt field" — the common call.
5743
+ */
5744
+ declare function promptFieldCarriesAffixes(nodeType: string | undefined, promptField: string | undefined): boolean;
5745
+ /** The affix-capable node types, derived from the registry (never hand-listed). */
5746
+ declare const PROMPT_AFFIX_NODE_TYPES: ReadonlySet<string>;
5747
+
5248
5748
  interface FactoryPreset {
5249
5749
  /** Stable slug "<nodeType>/<kebab-name>" — used as a React key and in exports. */
5250
5750
  readonly id: string;
@@ -5334,32 +5834,6 @@ declare const OBJECT_ASSET_PRESETS: Record<ObjectPresetAssetType, readonly strin
5334
5834
  /** Prompt-fragment maps per asset type — backend buildVariantPrompt reads this. */
5335
5835
  declare const OBJECT_ASSET_PROMPTS: Record<ObjectPresetAssetType, Record<string, string>>;
5336
5836
 
5337
- /** Which prompt field a snippet belongs to. Negative-target snippets only
5338
- * surface in negative-prompt fields, and are bare comma lists by convention
5339
- * (per Google's Veo guidance, a negative FIELD must name the unwanted thing,
5340
- * never "no X"). */
5341
- type SnippetTarget = "prompt" | "negative";
5342
- /** Node modality a snippet applies to. A node declares its modality once in
5343
- * the frontend's NODE_PROMPT_FIELDS; the menu shows snippets whose `media`
5344
- * contains it. */
5345
- type SnippetMedia = "image" | "video" | "audio" | "text";
5346
- declare const SNIPPET_MEDIA_VALUES: readonly SnippetMedia[];
5347
- interface FactorySnippet {
5348
- /** Stable kebab slug, e.g. "identity-lock". Unique across the catalog. */
5349
- readonly id: string;
5350
- readonly name: string;
5351
- /** One-liner shown in the menu and matched by search. */
5352
- readonly description?: string;
5353
- /** The exact fragment inserted into the prompt. Single line; never contains
5354
- * `{`, `}`, or `@` (guard-tested) so it can never form a mention/variable
5355
- * token in the editor. */
5356
- readonly text: string;
5357
- readonly target: SnippetTarget;
5358
- readonly media: readonly SnippetMedia[];
5359
- /** Menu group AND the pill-swap sibling pool (swap lists same-category). */
5360
- readonly category: string;
5361
- }
5362
-
5363
5837
  /** Factory snippet catalog (v1: image + video; audio/text follow later).
5364
5838
  * Order within a category = menu order = pill quick-cycle order. */
5365
5839
 
@@ -5450,4 +5924,4 @@ declare function getPickerWiring(nodeType: string | undefined | null): PickerWir
5450
5924
  */
5451
5925
  declare function buildSurroundFillPrompt(direction: SurroundDirection, userPrompt?: string): string;
5452
5926
 
5453
- 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, type ActionFx, type ActionFxCategory, type Aesthetic, type AestheticCategory, type AssembleImageInput, type AssembleSunoInput, type AssembleSunoResult, type Atmosphere, BACKDROPS, BACKDROP_CATEGORY_LABELS, BACKDROP_CATEGORY_ORDER, BACKDROP_IDS, BRAND_PRESETS, BRAND_PRESET_IDS, BRAND_PRESET_META, type Backdrop, type BackdropCategory, type BrandCasing, type BrandFonts, type BrandLogo, type BrandPalette, type BrandPresetId, type BrandPresetMeta, type BrandTokens, type BrandTypeSpec, type BuildImagePromptConfig, type BuildImagePromptResult, type BuildImagePromptSegmentsResult, 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, type CameraFormat, type CameraMotion, type CameraMotionCategory, type CatalogPack, type CatalogPackMode, type CategorizedInstrument, type CharacterFx, type CharacterFxCategory, type CharacterFxDuration, type CharacterFxIntensity, type CharacterFxPosition, type CharacterFxTiming, type CharacterMeta, type CharacterMotionPromptInput, type CharacterPromptInput, type ColorLook, type ColorLookCategory, type CompositionEffect, type ComputeNodePromptArgs, type CreaturePromptInput, DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, type DirectionFields, ERAS, ERA_CATEGORY_LABELS, ERA_CATEGORY_ORDER, ERA_IDS, EXPOSURE_CATEGORY_LABELS, EXPOSURE_CATEGORY_ORDER, EXPOSURE_FIELD_BY_CATEGORY, EXPOSURE_IDS, EXPOSURE_SETTINGS, type Era, type EraCategory, type ExposureCategory, type ExposureSettings, type ExposureValue, FACTORY_PRESETS, FACTORY_SNIPPETS, FILM_STILL_PREFIX, FRAMINGS, FRAMING_CATEGORY_LABELS, FRAMING_CATEGORY_ORDER, FRAMING_FIELD_BY_CATEGORY, FRAMING_IDS, type FacePromptInput, type FactoryPreset, type FactoryPresetGroup, type FactorySnippet, type Framing, type FramingCategory, type FramingValue, GAPS_SCHEMA, type GeminiOmniI2vInputsArgs, type GeminiOmniI2vInputsResult, HELD_PROPS, HELD_PROP_CATEGORY_LABELS, HELD_PROP_CATEGORY_ORDER, HELD_PROP_IDS, type HeldProp, type HeldPropCategory, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, type IdentityLockMode, type ImageReferenceDoctrine, type InstrumentCategory, type InstrumentationEntry, 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, type Lens, type Lighting, type LightingCategory, type LightingValue, type LlmChatFieldArgs, type LocationMotionPromptInput, type LocationPromptInput, type LocationRefinePromptInput, type LoopSubject, type LoopSubjectCategory, 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, type Material, type MaterialCategory, type ModelChange, type Mood, type MoodCategory, type MoodValue, type MultiDimPickerWiring, type MultiPickerAnalyzerSpec, type MusicEra, type MusicGenre, type MusicGenreCategory, type MusicMoodData, type MusicMoodEntry, type MusicSubgenre, 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, type ObjectMotionPromptInput, type ObjectPresetAssetType, type ObjectPromptInput, 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, type Person, type PersonDimension, type PersonDimensionSection, type PersonPack, type PersonValue, type PhotoGenre, type PhotoGenreCategory, type Photographer, type PhotographerCategory, type PickerAnalyzer, type PickerAnalyzerDescriptor, type PickerAnalyzerSpec, type PickerApplyMode, type PickerCatalog, type PickerCatalogDetail, type PickerCatalogInput, type PickerCatalogSummary, type PickerDimension, type PickerDimensionInput, type PickerDimensionSpec, type PickerGaps, type PickerHintMode, type PickerOption, type PickerOptionInput, type PickerType, type PickerWiring, type PickerWiringEntry, type Pose, type PoseCategory, type PoseValue, type PostProcessEffect, type ProjectPickerCatalogOptions, type ProjectedPickerCatalog, type ProjectedPickerDimension, type ProjectedPickerOption, type PromptSegment, type PromptSegmentOrigin, type ProviderPromptDoctrine, REFERENCE_IMAGE_ROLES, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, REF_BINDING, RENDER_QUALITIES, RENDER_QUALITY_IDS, type RecommendedModel, type ReferenceCounts, type RegisteredPersonEntry, type RenderQuality, type ResolveCharacterMentionsResult, type ResolveLocationMentionsResult, type ResolvePromptArgs, type ResolveVideoReferenceCoreArgs, 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, type Seedance2InputsArgs, type Seedance2InputsResult, type Seedance2Mode, type Setting, type SettingCategory, type SidecarCoverageReport, type SingleDimPickerWiring, type SnippetMedia, type SnippetTarget, type SoundComposition, type SoundCompositionFields, type SoundConsumerType, type StructuredPromptFields, type Style, type StylePreset, type Styling, type StylingDimension, type StylingValue, type SuspiciousTermOptions, 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, type Temporal, type TemporalCategory, type TemporalValue, type TermCarrier, type Transition, type TransitionCategory, type TransitionDuration, type TransitionIntensity, type TransitionPosition, type TransitionTiming, 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, type VeoI2vInputsArgs, type VeoI2vInputsResult, type VideoExtraRef, type VoiceCharacterEntry, type VoiceDeliveryEntry, WARDROBE, WARDROBE_CATEGORY_LABELS, WARDROBE_DIMENSION_ORDER, WARDROBE_FIELD_BY_DIMENSION, type WardrobeDimension, type WardrobeEntry, type WardrobeValue, type WizardCategory, type WizardNodeContext, type WizardOption, type WizardQuestion, type WizardSelection, 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 };
5927
+ 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, type ActionFx, type ActionFxCategory, type Aesthetic, type AestheticCategory, type AssembleImageInput, type AssembleSunoInput, type AssembleSunoResult, type Atmosphere, BACKDROPS, BACKDROP_CATEGORY_LABELS, BACKDROP_CATEGORY_ORDER, BACKDROP_IDS, BRAND_PRESETS, BRAND_PRESET_IDS, BRAND_PRESET_META, type Backdrop, type BackdropCategory, type BrandCasing, type BrandFonts, type BrandLogo, type BrandPalette, type BrandPresetId, type BrandPresetMeta, type BrandTokens, type BrandTypeSpec, type BuildImagePromptConfig, type BuildImagePromptResult, type BuildImagePromptSegmentsResult, 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, type CameraFormat, type CameraMotion, type CameraMotionCategory, type CatalogPack, type CatalogPackMode, type CategorizedInstrument, type CharacterFx, type CharacterFxCategory, type CharacterFxDuration, type CharacterFxIntensity, type CharacterFxPosition, type CharacterFxTiming, type CharacterFxTimingOption, type CharacterMeta, type CharacterMotionPromptInput, type CharacterPromptInput, type ColorLook, type ColorLookCategory, type CompositionEffect, type ComputeNodePromptArgs, type CreaturePromptInput, DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, type DirectionFields, ERAS, ERA_CATEGORY_LABELS, ERA_CATEGORY_ORDER, ERA_IDS, EXPOSURE_CATEGORY_LABELS, EXPOSURE_CATEGORY_ORDER, EXPOSURE_FIELD_BY_CATEGORY, EXPOSURE_IDS, EXPOSURE_SETTINGS, type Era, type EraCategory, type ExposureCategory, type ExposureSettings, type ExposureValue, FACTORY_PRESETS, FACTORY_SNIPPETS, FILM_STILL_PREFIX, FRAMINGS, FRAMING_CATEGORY_LABELS, FRAMING_CATEGORY_ORDER, FRAMING_FIELD_BY_CATEGORY, FRAMING_IDS, type FacePromptInput, type FactoryPreset, type FactoryPresetGroup, type FactorySnippet, type Framing, type FramingCategory, type FramingValue, GAPS_SCHEMA, type GeminiOmniI2vInputsArgs, type GeminiOmniI2vInputsResult, HELD_PROPS, HELD_PROP_CATEGORY_LABELS, HELD_PROP_CATEGORY_ORDER, HELD_PROP_IDS, type HeldProp, type HeldPropCategory, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, type IdentityLockMode, type ImageReferenceDoctrine, type InstrumentCategory, type InstrumentationEntry, 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, type Lens, type Lighting, type LightingCategory, type LightingValue, type LlmChatFieldArgs, type LocationMotionPromptInput, type LocationPromptInput, type LocationRefinePromptInput, type LoopSubject, type LoopSubjectCategory, 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, type Material, type MaterialCategory, type ModelChange, type Mood, type MoodCategory, type MoodValue, type MultiDimPickerWiring, type MultiPickerAnalyzerSpec, type MusicEra, type MusicGenre, type MusicGenreCategory, type MusicMoodData, type MusicMoodEntry, type MusicSubgenre, 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, type ObjectMotionPromptInput, type ObjectPresetAssetType, type ObjectPromptInput, 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, type Person, type PersonDimension, type PersonDimensionSection, type PersonPack, type PersonValue, type PhotoGenre, type PhotoGenreCategory, type Photographer, type PhotographerCategory, type PickerAnalyzer, type PickerAnalyzerDescriptor, type PickerAnalyzerSpec, type PickerApplyMode, type PickerCatalog, type PickerCatalogDetail, type PickerCatalogInput, type PickerCatalogSummary, type PickerDimension, type PickerDimensionInput, type PickerDimensionSpec, type PickerGaps, type PickerHintMode, type PickerOption, type PickerOptionInput, type PickerType, type PickerWiring, type PickerWiringEntry, type Pose, type PoseCategory, type PoseValue, type PostProcessEffect, type ProjectPickerCatalogOptions, type ProjectedPickerCatalog, type ProjectedPickerDimension, type ProjectedPickerOption, type PromptFieldSpec, type PromptIconKind, type PromptSegment, type PromptSegmentOrigin, type ProviderPromptDoctrine, REFERENCE_IMAGE_ROLES, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, REF_BINDING, RENDER_QUALITIES, RENDER_QUALITY_IDS, type RecommendedModel, type RefIdTokenContext, type ReferenceCounts, type RegisteredPersonEntry, type RenderQuality, type ResolveCharacterMentionsResult, type ResolveLocationMentionsResult, type ResolvePromptArgs, type ResolveVideoReferenceCoreArgs, 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, type Seedance2InputsArgs, type Seedance2InputsResult, type Seedance2Mode, type Setting, type SettingCategory, type SidecarCoverageReport, type SingleDimPickerWiring, type SnippetMedia, type SnippetTarget, type SoundComposition, type SoundCompositionFields, type SoundConsumerType, type StructuredPromptFields, type Style, type StylePreset, type Styling, type StylingDimension, type StylingValue, type SuspiciousTermOptions, 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, type Temporal, type TemporalCategory, type TemporalValue, type TermCarrier, type Transition, type TransitionCategory, type TransitionDuration, type TransitionIntensity, type TransitionPosition, type TransitionTiming, type TransitionTimingOption, 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, type VeoI2vInputsArgs, type VeoI2vInputsResult, type VideoExtraRef, type VoiceCharacterEntry, type VoiceDeliveryEntry, WARDROBE, WARDROBE_CATEGORY_LABELS, WARDROBE_DIMENSION_ORDER, WARDROBE_FIELD_BY_DIMENSION, type WardrobeDimension, type WardrobeEntry, type WardrobeValue, type WizardCategory, type WizardNodeContext, type WizardOption, type WizardQuestion, type WizardSelection, 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 };