@nodaro/prompts 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +383 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +516 -28
- package/dist/index.d.ts +516 -28
- package/dist/index.js +368 -51
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/__snapshots__/entity-convergence-image.test.ts.snap +19 -0
- package/src/__tests__/animal-getters-parity.test.ts +82 -0
- package/src/__tests__/assemble-image-input-cap.test.ts +212 -0
- package/src/__tests__/assemble-video-input-cap.test.ts +356 -0
- package/src/__tests__/entity-convergence-image.test.ts +374 -0
- package/src/__tests__/location-convergence-image.test.ts +29 -1
- package/src/__tests__/location-default-role-image.test.ts +166 -0
- package/src/__tests__/mention-splice-spacing.test.ts +257 -0
- package/src/__tests__/read-node-subject.test.ts +140 -0
- package/src/__tests__/subject-fold.test.ts +232 -0
- package/src/__tests__/subject-registry.test.ts +312 -0
- package/src/assemble-image-input.ts +133 -30
- package/src/assemble-video-input.ts +173 -18
- package/src/direction-registry.ts +18 -1
- package/src/hint-shedding.ts +68 -0
- package/src/index.ts +2 -0
- package/src/parameter-prompt-hint.ts +8 -7
- package/src/picker-catalogs.ts +14 -7
- package/src/prompt-builder.ts +544 -61
- package/src/read-node-direction.ts +60 -1
- package/src/subject-registry.ts +464 -0
package/dist/index.d.ts
CHANGED
|
@@ -896,6 +896,28 @@ interface BuildImagePromptSegmentsResult extends BuildImagePromptResult {
|
|
|
896
896
|
* origin-tagged decomposition.
|
|
897
897
|
*/
|
|
898
898
|
declare function buildImagePrompt(config: BuildImagePromptConfig): BuildImagePromptResult;
|
|
899
|
+
/** {@link buildImagePrompt} plus `overflowChars`. */
|
|
900
|
+
interface BuildImagePromptOverflowResult extends BuildImagePromptResult {
|
|
901
|
+
/**
|
|
902
|
+
* Characters the provider's prompt cap forced off the tail — `0` when the
|
|
903
|
+
* assembled prompt fit. This is the amount of text that must LEAVE the body
|
|
904
|
+
* for the prompt to fit without a tail cut, so a caller can shed exactly
|
|
905
|
+
* enough of its own droppable text and re-assemble.
|
|
906
|
+
*/
|
|
907
|
+
overflowChars: number;
|
|
908
|
+
}
|
|
909
|
+
/**
|
|
910
|
+
* `buildImagePrompt` plus the size of the cap overflow it had to clamp away.
|
|
911
|
+
*
|
|
912
|
+
* The prompt (and every other field) is BYTE-IDENTICAL to `buildImagePrompt` —
|
|
913
|
+
* the marks channel only observes. Exists because the tail clamp is ORDER-BLIND:
|
|
914
|
+
* it cuts whatever happens to be last, which on a low-cap provider can sever a
|
|
915
|
+
* reference directive or the user's own prose while a decorative hint clause
|
|
916
|
+
* survives. `assembleImageInput` uses this to drop its lowest-value text
|
|
917
|
+
* (direction-folded hint clauses) FIRST and re-assemble; the clamp then stays
|
|
918
|
+
* the last-resort fallback for a body that overflows on prose alone.
|
|
919
|
+
*/
|
|
920
|
+
declare function buildImagePromptWithOverflow(config: BuildImagePromptConfig): BuildImagePromptOverflowResult;
|
|
899
921
|
/**
|
|
900
922
|
* `buildImagePrompt` plus an origin-tagged decomposition of the assembled
|
|
901
923
|
* `prompt`. The string output (and all other fields) is byte-identical to
|
|
@@ -1039,7 +1061,8 @@ declare function renderStructuredFields(fields: StructuredPromptFields): string;
|
|
|
1039
1061
|
* token, not a bare id. A single-id channel cannot carry it.
|
|
1040
1062
|
* - Subject / Styling / prop dimensions (`animal`, `heldProp`, `material`,
|
|
1041
1063
|
* Person, Styling) — a separate `subject` channel, deliberately out of scope
|
|
1042
|
-
* here.
|
|
1064
|
+
* here. It now exists: `subject-registry.ts`, same table-driven shape, its
|
|
1065
|
+
* key set DISJOINT from this one (pinned by a test) so nothing folds twice.
|
|
1043
1066
|
*
|
|
1044
1067
|
* PACK BLINDNESS (parity, not a regression): `get*PromptHint` reads the frozen
|
|
1045
1068
|
* base arrays, so ids added by a deployment-registered catalog pack resolve to
|
|
@@ -1090,6 +1113,22 @@ interface DirectionFieldSpec {
|
|
|
1090
1113
|
* so they are NOT aliases of `shotSize` / `lightingStyle`, and an alias table
|
|
1091
1114
|
* would wrongly suppress a legal second selection. Overlap is handled instead
|
|
1092
1115
|
* by the exact-string dedupe in `renderDirectionHints`.
|
|
1116
|
+
*
|
|
1117
|
+
* SECOND MEANING OF POSITION: BOTH cap-aware assemblers — `assembleImageInput`
|
|
1118
|
+
* (stills) and `composeVideoPromptText` (video) — shed hint clauses from the
|
|
1119
|
+
* TAIL of this order when a provider's prompt cap overflows, through the one
|
|
1120
|
+
* shared arithmetic in `hint-shedding.ts`. So a row's position is also its
|
|
1121
|
+
* survival order under the cap on EVERY surface: reordering rows for one
|
|
1122
|
+
* surface silently changes what the other drops first, and the row a
|
|
1123
|
+
* video-surface reorder would most likely touch (`cameraMotion`) leads the
|
|
1124
|
+
* fold. That is a consequence of reusing the fold order, not a ranking — this
|
|
1125
|
+
* table stays a compatibility order; anything that needs a real importance
|
|
1126
|
+
* ranking should add an explicit priority column rather than reorder these rows.
|
|
1127
|
+
*
|
|
1128
|
+
* WHERE THIS TABLE SITS IN THE COMBINED ORDER: both assemblers fold the SUBJECT
|
|
1129
|
+
* channel (`subject-registry.ts`) BEFORE this one and shed the combined list
|
|
1130
|
+
* tail-first, so every direction row here is dropped before any subject clause.
|
|
1131
|
+
* Deliberate — see `hint-shedding.ts` for the argument.
|
|
1093
1132
|
*/
|
|
1094
1133
|
declare const DIRECTION_FIELDS: readonly [{
|
|
1095
1134
|
readonly key: "cameraMotion";
|
|
@@ -1424,6 +1463,273 @@ declare function renderDirectionHints(direction: DirectionFields | undefined, op
|
|
|
1424
1463
|
mode?: DirectionHintMode;
|
|
1425
1464
|
}): string[];
|
|
1426
1465
|
|
|
1466
|
+
/**
|
|
1467
|
+
* THE SUBJECT REGISTRY — the ordered table of every SUBJECT dimension the flat
|
|
1468
|
+
* `subject` channel carries (who is in the shot: Person, Styling, and the three
|
|
1469
|
+
* prop catalogs), plus the one renderer that folds it into prompt text.
|
|
1470
|
+
*
|
|
1471
|
+
* WHY A SECOND CHANNEL, NOT `StructuredPromptFields`: that type is FREE TEXT
|
|
1472
|
+
* (`person.hair?: string` → "with {hair} hair"), its reader is a hand-authored
|
|
1473
|
+
* field table whose totality is compile-time enforced by mapped types, its
|
|
1474
|
+
* values are bounded as prose (200 chars), and it renders as headed sentences
|
|
1475
|
+
* ("Subject: …. Style: …."). None of those survive contact with ~50 CATALOG IDS
|
|
1476
|
+
* plus deployment-registered pack dimensions unknown at compile time, whose
|
|
1477
|
+
* hints are authored as comma-joinable compound clauses. `direction-registry.ts`
|
|
1478
|
+
* already has the four properties this channel needs — a platform-owned fold
|
|
1479
|
+
* order exported for client preview parity, a DERIVED wire schema and node
|
|
1480
|
+
* reader, unknown-key/unknown-id inertness, and shared bounds across both doors
|
|
1481
|
+
* — so this module mirrors it. `direction-registry.ts` hands this scope off by
|
|
1482
|
+
* name in its own header.
|
|
1483
|
+
*
|
|
1484
|
+
* WIRE VOCABULARY: the keys are the platform's OWN node-data field names — the
|
|
1485
|
+
* ones `PERSON_FIELD_BY_DIMENSION` / `STYLING_FIELD_BY_DIMENSION` and the prop
|
|
1486
|
+
* pickers' `valueField` already use (`hairBase`, `lipState`, `wardrobeState`,
|
|
1487
|
+
* `heldProp`, `material`, `animal`, …). A canvas person/styling node stores
|
|
1488
|
+
* exactly these, and every `build*Hints` already consumes them.
|
|
1489
|
+
*
|
|
1490
|
+
* THE WIRE IS A FLAT BAG, AND THE FLATNESS IS LOAD-BEARING (not a shortcut):
|
|
1491
|
+
* `collectStylingFragments` reads `data.lipState` — a PERSON field — to skip
|
|
1492
|
+
* `makeup-bold-lips` when `lip-state-bold-red` is already selected. That dedupe
|
|
1493
|
+
* only fires for a consumer folding both pickers off ONE shared value map,
|
|
1494
|
+
* which is precisely what this channel is. Nesting `person` / `styling` as
|
|
1495
|
+
* sub-records would hand the styling builder a bag with no `lipState` in it and
|
|
1496
|
+
* the lipstick clause would silently double. Hence: flat wire, and the group
|
|
1497
|
+
* rows below receive the WHOLE normalized bag rather than a slice of it.
|
|
1498
|
+
*
|
|
1499
|
+
* PRE/POST FREE TEXT IS DELIBERATELY OFF THE WIRE (v1): `PersonValue` and
|
|
1500
|
+
* `StylingValue` BOTH declare `preText`/`postText` and both `collect*Fragments`
|
|
1501
|
+
* read them, so a shared flat bag would emit the same prose twice. They are the
|
|
1502
|
+
* only genuine key collision in the set and are simply not `SUBJECT_KEYS`, so
|
|
1503
|
+
* the normalizer drops them. Per-subject free text is the one future need that
|
|
1504
|
+
* would force either nesting or suffixed keys (`personPreText` / …).
|
|
1505
|
+
*
|
|
1506
|
+
* IMPORT RULE (hard, inherited from the direction registry): this module
|
|
1507
|
+
* imports only `get*PromptHint` / `get*Term` / `build*Hints` FUNCTIONS and the
|
|
1508
|
+
* `*_FIELD_BY_DIMENSION` / `*_DIMENSION_ORDER` maps — never a raw UPPERCASE
|
|
1509
|
+
* catalog array (`PEOPLE`, `STYLINGS`, `ANIMALS`). `catalog-funnel-ratchet.test.ts`
|
|
1510
|
+
* derives its watch set from `picker-catalogs.ts`'s uppercase value imports and
|
|
1511
|
+
* can only SHRINK, so a raw array import here would be a new offender — which
|
|
1512
|
+
* is exactly why the animal getters live in `@nodaro/shared`. Nothing here
|
|
1513
|
+
* reads an environment variable either (`content-free-contract.test.ts`):
|
|
1514
|
+
* verbosity and surface are threaded parameters, never deployment state.
|
|
1515
|
+
*
|
|
1516
|
+
* DISJOINT FROM `direction` BY CONTRACT: `SUBJECT_KEYS ∩ DIRECTION_KEYS = ∅`,
|
|
1517
|
+
* pinned by a test. `pose` rides `direction` even though the picker wiring files
|
|
1518
|
+
* it under "Subject / Object"; keeping the two key sets disjoint is what stops
|
|
1519
|
+
* one selection emitting two clauses.
|
|
1520
|
+
*/
|
|
1521
|
+
|
|
1522
|
+
/** Which generation stages fold a dimension (mirrors `DirectionSurface`). */
|
|
1523
|
+
type SubjectSurface = "image" | "video" | "both";
|
|
1524
|
+
/**
|
|
1525
|
+
* Flat subject ids — the wire shape and the canvas node-data shape.
|
|
1526
|
+
*
|
|
1527
|
+
* Keys are the platform's own field names; a value is one id, a list of ids, or
|
|
1528
|
+
* (for `customAge` alone) a number. Absent ≠ empty: a missing key means "no
|
|
1529
|
+
* hint", never a default.
|
|
1530
|
+
*/
|
|
1531
|
+
type SubjectFields = Readonly<Record<string, string | readonly string[] | number>>;
|
|
1532
|
+
/**
|
|
1533
|
+
* A fold row whose render consumes the WHOLE normalized bag and returns ONE
|
|
1534
|
+
* already-joined clause.
|
|
1535
|
+
*
|
|
1536
|
+
* Two reasons this kind exists rather than one row per person/styling field:
|
|
1537
|
+
* 1. the cross-catalog dedupe described in the module header needs the whole
|
|
1538
|
+
* bag in one call;
|
|
1539
|
+
* 2. these builders emit FRAGMENTS, not clauses — 30 person fragments handed
|
|
1540
|
+
* to the `". "` prompt-hint join read as "a beautiful woman. in her 30s.
|
|
1541
|
+
* East Asian." The catalogs' own grammar is a comma-joined compound clause,
|
|
1542
|
+
* so the row joins with ", " and hands back a single piece.
|
|
1543
|
+
*/
|
|
1544
|
+
interface SubjectGroupFieldSpec {
|
|
1545
|
+
/** Fold-row id. NOT a wire key — a group row reads many of them. */
|
|
1546
|
+
readonly key: string;
|
|
1547
|
+
readonly kind: "group";
|
|
1548
|
+
readonly surface: SubjectSurface;
|
|
1549
|
+
/** The whole normalized bag in, one joined clause out (`[]` when empty). */
|
|
1550
|
+
readonly render: (subject: SubjectFields, mode: PickerHintMode) => string[];
|
|
1551
|
+
}
|
|
1552
|
+
/** A fold row that reads ONE wire key holding catalog ids (the prop catalogs). */
|
|
1553
|
+
interface SubjectIdsFieldSpec {
|
|
1554
|
+
/** Wire key AND fold-row id — these rows are one key each. */
|
|
1555
|
+
readonly key: string;
|
|
1556
|
+
readonly kind: "ids";
|
|
1557
|
+
readonly surface: SubjectSurface;
|
|
1558
|
+
/** Ids honored. Extras are SLICED by the normalizer, never a 400. */
|
|
1559
|
+
readonly maxPicks: number;
|
|
1560
|
+
readonly render: (ids: readonly string[], mode: PickerHintMode) => string[];
|
|
1561
|
+
}
|
|
1562
|
+
type SubjectFieldSpec = SubjectGroupFieldSpec | SubjectIdsFieldSpec;
|
|
1563
|
+
/**
|
|
1564
|
+
* THE TABLE. Declaration order IS fold order (`SUBJECT_FOLD_KEYS`), pinned by
|
|
1565
|
+
* `__tests__/subject-registry.test.ts`.
|
|
1566
|
+
*
|
|
1567
|
+
* Person leads (who), then how they are styled, then what they hold, what it is
|
|
1568
|
+
* made of, and finally the animal in frame. Both group rows run over the SAME
|
|
1569
|
+
* normalized bag, in this order, which is what keeps the styling builder's
|
|
1570
|
+
* `lipState` dedupe alive.
|
|
1571
|
+
*
|
|
1572
|
+
* SECOND MEANING OF POSITION (same as `DIRECTION_FIELDS`): both cap-aware
|
|
1573
|
+
* assemblers fold this table AHEAD of the direction table into ONE sheddable
|
|
1574
|
+
* list and shed it TAIL-FIRST through `hint-shedding.ts`, so a row's position
|
|
1575
|
+
* here is also its survival order under a provider's prompt cap — subject
|
|
1576
|
+
* clauses outlive every direction clause, and within this block `animal` leaves
|
|
1577
|
+
* before `person`. A compatibility order, not a ranking; anything needing a
|
|
1578
|
+
* real ranking adds an explicit priority column rather than reordering rows.
|
|
1579
|
+
*/
|
|
1580
|
+
declare const SUBJECT_FIELDS: readonly [{
|
|
1581
|
+
readonly key: "person";
|
|
1582
|
+
readonly kind: "group";
|
|
1583
|
+
readonly surface: "both";
|
|
1584
|
+
readonly render: (subject: SubjectFields, mode: PickerHintMode) => string[];
|
|
1585
|
+
}, {
|
|
1586
|
+
readonly key: "styling";
|
|
1587
|
+
readonly kind: "group";
|
|
1588
|
+
readonly surface: "both";
|
|
1589
|
+
readonly render: (subject: SubjectFields, mode: PickerHintMode) => string[];
|
|
1590
|
+
}, {
|
|
1591
|
+
readonly key: "heldProp";
|
|
1592
|
+
readonly kind: "ids";
|
|
1593
|
+
readonly surface: "both";
|
|
1594
|
+
readonly maxPicks: 2;
|
|
1595
|
+
readonly render: (ids: readonly string[], mode: PickerHintMode) => string[];
|
|
1596
|
+
}, {
|
|
1597
|
+
readonly key: "material";
|
|
1598
|
+
readonly kind: "ids";
|
|
1599
|
+
readonly surface: "both";
|
|
1600
|
+
readonly maxPicks: 2;
|
|
1601
|
+
readonly render: (ids: readonly string[], mode: PickerHintMode) => string[];
|
|
1602
|
+
}, {
|
|
1603
|
+
readonly key: "animal";
|
|
1604
|
+
readonly kind: "ids";
|
|
1605
|
+
readonly surface: "both";
|
|
1606
|
+
readonly maxPicks: 1;
|
|
1607
|
+
readonly render: (ids: readonly string[], mode: PickerHintMode) => string[];
|
|
1608
|
+
}];
|
|
1609
|
+
type SubjectFieldRow = (typeof SUBJECT_FIELDS)[number];
|
|
1610
|
+
/**
|
|
1611
|
+
* Table order — THE canonical fold order, over ROWS (not wire keys). Exported
|
|
1612
|
+
* so a client's "will inject into prompt" preview folds in the exact order the
|
|
1613
|
+
* server does, the way `DIRECTION_KEYS` does for direction.
|
|
1614
|
+
*/
|
|
1615
|
+
declare const SUBJECT_FOLD_KEYS: ReadonlyArray<string>;
|
|
1616
|
+
/**
|
|
1617
|
+
* The one person field that is a NUMBER, not ids: the literal age in years,
|
|
1618
|
+
* consulted only when `age === "age-custom"` (`buildAgeFragment`). It has no
|
|
1619
|
+
* styling twin, so it rides the flat bag without collision.
|
|
1620
|
+
*/
|
|
1621
|
+
declare const SUBJECT_CUSTOM_AGE_KEY = "customAge";
|
|
1622
|
+
/**
|
|
1623
|
+
* THE WIRE KEY SET, derived — every person field, `customAge`, every styling
|
|
1624
|
+
* field, then the prop rows, in fold order. Never hand-listed: a dimension
|
|
1625
|
+
* added to either catalog joins the channel by construction.
|
|
1626
|
+
*
|
|
1627
|
+
* BASE ONLY, deliberately: a deployment-registered person pack adds dimensions
|
|
1628
|
+
* at RUNTIME, so the pack-aware set is computed per call inside
|
|
1629
|
+
* `normalizeSubjectFields` (and inside `readSubjectFields`). This constant is
|
|
1630
|
+
* what a client enumerates to build its projection; a pack dimension it cannot
|
|
1631
|
+
* know about still rides the wire and still folds.
|
|
1632
|
+
*
|
|
1633
|
+
* ONE CONSEQUENCE, noted rather than fixed: the person builder's legacy `lips`
|
|
1634
|
+
* fallback field is not a dimension and so is not here, making it unreachable
|
|
1635
|
+
* through this channel. Intended — the wire speaks the current vocabulary; the
|
|
1636
|
+
* fallback stays for node blobs written before the split.
|
|
1637
|
+
*/
|
|
1638
|
+
declare const SUBJECT_KEYS: ReadonlyArray<string>;
|
|
1639
|
+
/**
|
|
1640
|
+
* `SUBJECT_KEYS` plus whatever a deployment-registered person pack added — the
|
|
1641
|
+
* set the DOORS accept (`readSubjectFields`, and any route-side normalize).
|
|
1642
|
+
*
|
|
1643
|
+
* Rebuilt per call because pack registration happens at boot, after this module
|
|
1644
|
+
* is imported. With no packs registered it is `SUBJECT_KEYS` exactly, pinned by
|
|
1645
|
+
* a test.
|
|
1646
|
+
*/
|
|
1647
|
+
declare function getRegisteredSubjectKeys(): ReadonlyArray<string>;
|
|
1648
|
+
/** Verbosity for a whole subject fold. No family split — subject is one family. */
|
|
1649
|
+
type SubjectHintMode = PickerHintMode;
|
|
1650
|
+
/** Image policy: the full mechanism clause for every dimension. */
|
|
1651
|
+
declare const SUBJECT_IMAGE_HINT_MODE_DEFAULT: SubjectHintMode;
|
|
1652
|
+
/**
|
|
1653
|
+
* Video policy: the compact professional term.
|
|
1654
|
+
*
|
|
1655
|
+
* A fully specified person at `"full"` is ~30 paragraph clauses, and on the
|
|
1656
|
+
* video stage the start frame already carries the subject's identity — the
|
|
1657
|
+
* clip's prompt needs the subject NAMED, not re-described. (The image stage,
|
|
1658
|
+
* which is where the subject is actually being built, keeps `"full"`.)
|
|
1659
|
+
*/
|
|
1660
|
+
declare const SUBJECT_VIDEO_HINT_MODE_DEFAULT: SubjectHintMode;
|
|
1661
|
+
/**
|
|
1662
|
+
* Wire tolerance ceiling for an array-valued subject key, and the ceiling for
|
|
1663
|
+
* one id's length. DEFINED AS the direction constants rather than re-typed, so
|
|
1664
|
+
* ONE literal governs both channels and both doors (the route schema and the
|
|
1665
|
+
* persisted-node reader) — the wire and the canvas cannot start disagreeing
|
|
1666
|
+
* about which strings are ids at all.
|
|
1667
|
+
*/
|
|
1668
|
+
declare const SUBJECT_ARRAY_CEILING = 8;
|
|
1669
|
+
declare const SUBJECT_ID_MAX_CHARS = 100;
|
|
1670
|
+
/**
|
|
1671
|
+
* Bound on the NUMBER of keys in a subject bag. `SUBJECT_KEYS` is 54 today;
|
|
1672
|
+
* this leaves generous headroom for deployment-registered pack dimensions while
|
|
1673
|
+
* still closing an otherwise unbounded record that lands verbatim in
|
|
1674
|
+
* `jobs.input_data`. Unknown keys are inert (the renderer never reads them), so
|
|
1675
|
+
* this is storage hygiene, not validation.
|
|
1676
|
+
*/
|
|
1677
|
+
declare const MAX_SUBJECT_KEYS = 128;
|
|
1678
|
+
/** Bound on the LENGTH of one wire key. Field names are short identifiers. */
|
|
1679
|
+
declare const SUBJECT_KEY_MAX_CHARS = 64;
|
|
1680
|
+
/**
|
|
1681
|
+
* THE NORMALIZER — a known-key, per-dimension-capped copy of a subject bag.
|
|
1682
|
+
*
|
|
1683
|
+
* WHY IT EXISTS (and why the fold is unusable without it): the subject builders
|
|
1684
|
+
* do NOT cap. `collectPersonFragments` / `collectStylingFragments` /
|
|
1685
|
+
* `emitIndependentFragments` emit EVERY id they are handed; `normalizePickIds`
|
|
1686
|
+
* and `pickHeldPropIds` dedupe but never slice; only `buildMaterialHints` caps,
|
|
1687
|
+
* and only structurally at 2. `MAX_SELECTED_BY_DIMENSION`'s own doc names its
|
|
1688
|
+
* consumers as the picker UI, the analyzer schema and the Zod validator — NOT
|
|
1689
|
+
* the builders. Straight off the wire, then, a bag is a clause amplifier: 8 ids
|
|
1690
|
+
* (the array ceiling) on each of ~50 dimensions. This is where the per-dimension
|
|
1691
|
+
* cap actually gets enforced.
|
|
1692
|
+
*
|
|
1693
|
+
* It also:
|
|
1694
|
+
* - DROPS UNKNOWN KEYS, so `jobs.input_data` stays the platform's vocabulary
|
|
1695
|
+
* (unknown IDS stay inert instead — every getter resolves a miss to `""`);
|
|
1696
|
+
* - UNWRAPS a single-id array to a bare string. Load-bearing:
|
|
1697
|
+
* `collectPersonFragments` reads a single-pick dimension with
|
|
1698
|
+
* `typeof raw === "string"`, so a legitimate `["hair-base-long"]` from a
|
|
1699
|
+
* client's array-shaped store would otherwise contribute NOTHING;
|
|
1700
|
+
* - clamps `customAge` to a whole `0..120`, mirroring `buildAgeFragment`.
|
|
1701
|
+
*
|
|
1702
|
+
* Copy-on-write: the caller's object is never mutated. Idempotent, so calling it
|
|
1703
|
+
* at a door AND inside the renderer is free.
|
|
1704
|
+
*/
|
|
1705
|
+
declare function normalizeSubjectFields(subject: SubjectFields | undefined): SubjectFields | undefined;
|
|
1706
|
+
/** The rows a given generation stage folds, in table order. */
|
|
1707
|
+
declare function subjectFieldsForSurface(surface: "image" | "video"): ReadonlyArray<SubjectFieldSpec>;
|
|
1708
|
+
/**
|
|
1709
|
+
* Every clause the `subject` channel injects, in canonical table order.
|
|
1710
|
+
*
|
|
1711
|
+
* NORMALIZES ONCE, at the top, and hands THE SAME bag to both group rows — that
|
|
1712
|
+
* single shared bag is the mechanism behind the styling builder's cross-catalog
|
|
1713
|
+
* `lipState` dedupe, and it must not depend on a door having normalized first
|
|
1714
|
+
* (the normalizer is idempotent, so a door may do it too).
|
|
1715
|
+
*
|
|
1716
|
+
* Iterates the TABLE, never the caller's object: unknown wire keys contribute
|
|
1717
|
+
* nothing, the order is platform-owned, and an off-surface row is inert.
|
|
1718
|
+
* Unknown IDS are skipped too — every `get*PromptHint` returns `""` on a miss,
|
|
1719
|
+
* so a retired or pack-only id costs no clause rather than a 400.
|
|
1720
|
+
*
|
|
1721
|
+
* DEDUPE by exact clause string, FIRST OCCURRENCE WINS (order-preserving),
|
|
1722
|
+
* matching `renderDirectionHints`.
|
|
1723
|
+
*
|
|
1724
|
+
* Exported so a client's "will inject into prompt" preview renders the exact
|
|
1725
|
+
* server output — called on the very object the client sends — instead of
|
|
1726
|
+
* re-implementing the fold.
|
|
1727
|
+
*/
|
|
1728
|
+
declare function renderSubjectHints(subject: SubjectFields | undefined, opts: {
|
|
1729
|
+
surface: "image" | "video";
|
|
1730
|
+
mode?: SubjectHintMode;
|
|
1731
|
+
}): string[];
|
|
1732
|
+
|
|
1427
1733
|
/**
|
|
1428
1734
|
* The measured hint join, shared by the image (`composePromptText`) and video
|
|
1429
1735
|
* (`composeVideoPromptText`) composers so the two can never drift.
|
|
@@ -1450,6 +1756,39 @@ declare const PROMPT_HINT_SEPARATOR = ". ";
|
|
|
1450
1756
|
*/
|
|
1451
1757
|
declare function joinPromptHints(userPrompt: string, hints: readonly string[]): string;
|
|
1452
1758
|
|
|
1759
|
+
/**
|
|
1760
|
+
* How many of the first `kept` hint clauses may STAY if `deficit`
|
|
1761
|
+
* characters have to leave the body. Walks the fold order from the TAIL,
|
|
1762
|
+
* subtracting each clause plus the separator it brought, and stops as soon as
|
|
1763
|
+
* enough has been reclaimed.
|
|
1764
|
+
*
|
|
1765
|
+
* The name is historical (direction was the first and for a while the only
|
|
1766
|
+
* channel); the list both callers pass is now the COMBINED fold —
|
|
1767
|
+
* `[...subject, ...direction]` on both surfaces — so the shed order is that
|
|
1768
|
+
* combined order REVERSED: the direction block empties first, then the subject
|
|
1769
|
+
* block. Deliberate, and the reason the two folds share one list: a fully
|
|
1770
|
+
* specified person renders ~30 clauses, so a subject fold left unsheddable
|
|
1771
|
+
* would be the single biggest way to push an overflow into the order-blind
|
|
1772
|
+
* clamp, while a decorative grade or ISO value survives.
|
|
1773
|
+
*
|
|
1774
|
+
* Within the direction block the order is `DIRECTION_FIELDS` order REVERSED
|
|
1775
|
+
* (and within the subject block, `SUBJECT_FIELDS` reversed). Note what that
|
|
1776
|
+
* is and is not: each table's order is a COMPATIBILITY order (grouped by family,
|
|
1777
|
+
* with the legacy `DirectionFields` block pinned last so every pre-registry
|
|
1778
|
+
* caller's fold stays byte-identical) — it is NOT a ranking of how load-bearing
|
|
1779
|
+
* a dimension is, and this function does not claim one. Tail-first is chosen
|
|
1780
|
+
* because it is deterministic, matches the fold order the API documents, and
|
|
1781
|
+
* needs no second ordering to drift out of sync with the table. A caller mixing
|
|
1782
|
+
* legacy keys with the newer ones can therefore lose e.g. `lightingId` before a
|
|
1783
|
+
* decorative `isoValue` clause; if that ever matters, the fix is an explicit
|
|
1784
|
+
* priority column on `DIRECTION_FIELDS`, not a second hand-kept list here.
|
|
1785
|
+
*
|
|
1786
|
+
* Deliberately approximate (assembly is not perfectly additive); the caller
|
|
1787
|
+
* re-assembles and re-checks, and this function strictly decreases `kept`
|
|
1788
|
+
* whenever `deficit > 0`, so that loop terminates.
|
|
1789
|
+
*/
|
|
1790
|
+
declare function keepableDirectionHints(hintClauses: readonly string[], kept: number, deficit: number): number;
|
|
1791
|
+
|
|
1453
1792
|
/**
|
|
1454
1793
|
* The reference-binding surface string — `@image_N` / `@video_N` / `@audio_N`
|
|
1455
1794
|
* — and the one identity sentence built on it. Split out of
|
|
@@ -1905,17 +2244,17 @@ declare function assembleSunoInput(input: AssembleSunoInput): AssembleSunoResult
|
|
|
1905
2244
|
* This wrapper collapses them into one.
|
|
1906
2245
|
*
|
|
1907
2246
|
* THE NO-OP CONTRACT (load-bearing — the platform-caller parity relies on it):
|
|
1908
|
-
* a node that carries NO stored `direction` / `structured` (every
|
|
1909
|
-
* authored before the canvas honored them) still reaches here with
|
|
1910
|
-
* and `composePromptText` MUST return the caller's `userPrompt`
|
|
1911
|
-
* unchanged, so the wrapper degenerates to exactly the
|
|
1912
|
-
* call those sites made before. The platform callers
|
|
1913
|
-
* `payload-builder`) compose their prompt from the canvas GRAPH themselves and
|
|
1914
|
-
* ALSO forward a node's STORED `direction` / `structured` when it
|
|
1915
|
-
* (`
|
|
1916
|
-
*
|
|
1917
|
-
*
|
|
1918
|
-
*
|
|
2247
|
+
* a node that carries NO stored `subject` / `direction` / `structured` (every
|
|
2248
|
+
* workflow authored before the canvas honored them) still reaches here with all
|
|
2249
|
+
* three absent, and `composePromptText` MUST return the caller's `userPrompt`
|
|
2250
|
+
* byte-for-byte unchanged, so the wrapper degenerates to exactly the
|
|
2251
|
+
* `buildImagePrompt(...)` call those sites made before. The platform callers
|
|
2252
|
+
* (`execute-node` / `payload-builder`) compose their prompt from the canvas GRAPH themselves and
|
|
2253
|
+
* ALSO forward a node's STORED `subject` / `direction` / `structured` when it
|
|
2254
|
+
* carries them (`readSubjectFields` / `readDirectionFields` /
|
|
2255
|
+
* `readStructuredFields`); those nodes get the id-hint composition on top,
|
|
2256
|
+
* ADDITIVE to the graph-wired cinematography hints the caller already folded
|
|
2257
|
+
* into `userPrompt`. Studio and the MCP route supply the levers directly.
|
|
1919
2258
|
*
|
|
1920
2259
|
* THE EMPTY-CHECK FLAG (also load-bearing for parity): `execute-node` rejects a
|
|
1921
2260
|
* truly-empty assembled prompt (its "type one, mention a character, or connect
|
|
@@ -1949,6 +2288,13 @@ interface AssembleImageInput {
|
|
|
1949
2288
|
* is a no-op for it and the result is byte-identical to today).
|
|
1950
2289
|
*/
|
|
1951
2290
|
direction?: DirectionFields;
|
|
2291
|
+
/**
|
|
2292
|
+
* Flat subject ids (Person / Styling / props) → folded into the prompt AHEAD
|
|
2293
|
+
* of the direction clauses: the subject is the noun phrase the cinematography
|
|
2294
|
+
* then modifies. Same provenance as `direction` — Studio / MCP-route, or the
|
|
2295
|
+
* platform callers' narrow-read of a node's STORED `data.subject`.
|
|
2296
|
+
*/
|
|
2297
|
+
subject?: SubjectFields;
|
|
1952
2298
|
/** Path-1 structured fields → composed fragment appended to the prompt. */
|
|
1953
2299
|
structured?: StructuredPromptFields;
|
|
1954
2300
|
/**
|
|
@@ -2008,9 +2354,24 @@ interface AssembleImageInput {
|
|
|
2008
2354
|
* Assemble a node's image-generation inputs into a `BuildImagePromptResult`
|
|
2009
2355
|
* (`{ prompt, nativeNegativePrompt, referenceImageUrls }`).
|
|
2010
2356
|
*
|
|
2011
|
-
* Order: (1) compose the prompt text (no-op when no direction/structured),
|
|
2357
|
+
* Order: (1) compose the prompt text (no-op when no subject/direction/structured),
|
|
2012
2358
|
* (2) `buildImagePrompt(...)` — exactly the call the three sites make today,
|
|
2013
|
-
* (3)
|
|
2359
|
+
* (3) shed hint clauses and re-assemble while the provider cap overflows,
|
|
2360
|
+
* (4) optional post-assembly empty-prompt throw (gated by `throwOnEmpty`).
|
|
2361
|
+
*
|
|
2362
|
+
* TRUNCATION ORDERING (step 3): `buildImagePrompt`'s cap clamp cuts the TAIL,
|
|
2363
|
+
* which is ORDER-BLIND — on a low-cap provider (seedream = 3000) a maximal
|
|
2364
|
+
* direction fold renders ~3.3K characters of clauses and the cut can sever a
|
|
2365
|
+
* reference directive, mention-resolved text or the user's own prose while a
|
|
2366
|
+
* decorative clause survives. So the ASSEMBLER decides instead: it knows which
|
|
2367
|
+
* clauses are hints because it just built them, and drops them last-folded
|
|
2368
|
+
* first until the prompt fits. Everything else — references, prose, the
|
|
2369
|
+
* structured fragment, the Style/Avoid suffixes — outranks a hint. A body that
|
|
2370
|
+
* still overflows with ZERO hints (long prose or many directives on its own)
|
|
2371
|
+
* falls back to the builder's clamp, unchanged.
|
|
2372
|
+
*
|
|
2373
|
+
* UNDER-CAP PARITY: the first pass folds every hint, so a prompt that fits is
|
|
2374
|
+
* byte-identical to before — the retry only ever runs on an over-cap assembly.
|
|
2014
2375
|
*/
|
|
2015
2376
|
declare function assembleImageInput(input: AssembleImageInput): BuildImagePromptResult;
|
|
2016
2377
|
|
|
@@ -2033,14 +2394,26 @@ declare function assembleImageInput(input: AssembleImageInput): BuildImagePrompt
|
|
|
2033
2394
|
* bug this channel exists to fix. The image side is structurally identical
|
|
2034
2395
|
* (`assembleImageInput` = `composePromptText` → `buildImagePrompt`).
|
|
2035
2396
|
*
|
|
2397
|
+
* That ordering is also why cap-aware shedding here takes a `frame` callback
|
|
2398
|
+
* rather than a provider id: the shed must run at the FOLD site (before the
|
|
2399
|
+
* resolver) but be decided on the RESOLVED length (after it), so the binding
|
|
2400
|
+
* text the resolver adds is inside the budget and can never be the thing that
|
|
2401
|
+
* gets dropped. See {@link VideoPromptCapOptions}. Both catalog channels —
|
|
2402
|
+
* SUBJECT and direction — fold into the one sheddable list that budget walks.
|
|
2403
|
+
*
|
|
2036
2404
|
* THE VERBOSITY POLICY LIVES HERE, NOT IN THE CLIENT: motion dimensions render
|
|
2037
2405
|
* their compact professional term, look dimensions their full clause
|
|
2038
|
-
* (`VIDEO_HINT_MODE_DEFAULT`, resolved per row's `family` by the registry).
|
|
2406
|
+
* (`VIDEO_HINT_MODE_DEFAULT`, resolved per row's `family` by the registry). The
|
|
2407
|
+
* SUBJECT fold has its own policy — compact on video
|
|
2408
|
+
* (`SUBJECT_VIDEO_HINT_MODE_DEFAULT`), because a fully specified person at full
|
|
2409
|
+
* verbosity is ~30 paragraph clauses and the start frame already carries the
|
|
2410
|
+
* subject's identity into the clip.
|
|
2039
2411
|
* It is a threaded PARAMETER with a pure default — never deployment state:
|
|
2040
2412
|
* `__tests__/content-free-contract.test.ts` hard-fails any environment read
|
|
2041
2413
|
* under `packages/prompts/src`, and this module has nothing to read anyway.
|
|
2042
2414
|
*
|
|
2043
|
-
* EXACT NO-OP CONTRACT: with no direction and no structured fields
|
|
2415
|
+
* EXACT NO-OP CONTRACT: with no subject, no direction and no structured fields
|
|
2416
|
+
* the caller's
|
|
2044
2417
|
* `userPrompt` comes back VERBATIM AND UNTRIMMED — `undefined` included, since
|
|
2045
2418
|
* a video prompt is optional on the route. That is what keeps every existing
|
|
2046
2419
|
* caller byte-identical (the "backward-compatible: no connectedReferences →
|
|
@@ -2049,19 +2422,105 @@ declare function assembleImageInput(input: AssembleImageInput): BuildImagePrompt
|
|
|
2049
2422
|
* `__tests__/assemble-video-input.test.ts`).
|
|
2050
2423
|
*
|
|
2051
2424
|
* WHAT IS DELIBERATELY NOT HERE: the dimension table, the fold order, the
|
|
2052
|
-
* dedupe and the surface filter all live in `direction-registry.ts`
|
|
2053
|
-
*
|
|
2425
|
+
* dedupe and the surface filter all live in `direction-registry.ts` (and
|
|
2426
|
+
* `subject-registry.ts` for the subject channel) — ONE renderer per channel
|
|
2427
|
+
* serves both surfaces, so the image and video folds cannot drift.
|
|
2054
2428
|
* Clients render their "will inject into prompt" preview by importing
|
|
2055
2429
|
* `renderDirectionHints` + `joinPromptHints` directly.
|
|
2056
2430
|
*/
|
|
2057
2431
|
|
|
2058
2432
|
/**
|
|
2059
|
-
*
|
|
2060
|
-
*
|
|
2061
|
-
*
|
|
2062
|
-
*
|
|
2063
|
-
*
|
|
2064
|
-
*
|
|
2433
|
+
* Cap-aware shedding, opt-in. Absent → the composer is exactly what it always
|
|
2434
|
+
* was (every existing caller stays byte-identical, and the no-op path below is
|
|
2435
|
+
* never even reached differently).
|
|
2436
|
+
*
|
|
2437
|
+
* WHY A NUMBER AND A CALLBACK, NOT A PROVIDER ID — the two halves of the video
|
|
2438
|
+
* surface's problem, which the image half did not have:
|
|
2439
|
+
*
|
|
2440
|
+
* - `cap` is the caller's EFFECTIVE ceiling, not `getMaxVideoPromptChars` read
|
|
2441
|
+
* here. The routes compute it with `effectiveVideoPromptCeiling`, which
|
|
2442
|
+
* mirrors `applyVideoNegativePrompt`'s reservation of the `"\nAvoid: …"`
|
|
2443
|
+
* suffix for a provider with no native negative param. Re-deriving the cap
|
|
2444
|
+
* inside this package would put a second copy of that reservation one
|
|
2445
|
+
* refactor away from drifting from the clamp it is supposed to predict.
|
|
2446
|
+
*
|
|
2447
|
+
* - `frame` is the REFERENCE RESOLVER, and it is what makes the shed correct
|
|
2448
|
+
* end-to-end. The fold runs BEFORE `resolveVideoReferenceCore` (see the
|
|
2449
|
+
* module header — folding afterwards strands the scene description past the
|
|
2450
|
+
* identity directives). The resolver then ADDS binding text: legacy's
|
|
2451
|
+
* "Use these characters:" block, hybrid's lock lines and the canonical role
|
|
2452
|
+
* phrases it APPENDS. That added text is exactly what an order-blind tail cut
|
|
2453
|
+
* destroys first, so it must be inside the budget — but it must never be
|
|
2454
|
+
* shed. Measuring THROUGH the caller's framing gives both properties at once:
|
|
2455
|
+
* the shed decision sees the final length, while the only thing it can drop
|
|
2456
|
+
* is a hint clause it rendered itself.
|
|
2457
|
+
*
|
|
2458
|
+
* Re-framing a SUBSET of the hints is sound because a hint can never change how
|
|
2459
|
+
* the resolver reads the rest of the body: no registered catalog hint, term or
|
|
2460
|
+
* label contains a `{image:N}` / `{ref:` / `@slug:N` shape
|
|
2461
|
+
* (`__tests__/direction-hint-token-safety.test.ts` pins that for every catalog),
|
|
2462
|
+
* so dropping one cannot renumber or unbind a reference.
|
|
2463
|
+
*/
|
|
2464
|
+
interface VideoPromptCapOptions {
|
|
2465
|
+
/**
|
|
2466
|
+
* The maximum length the FRAMED prompt may reach. Sheds only while the framed
|
|
2467
|
+
* body exceeds it; `undefined` (the default) disables shedding entirely.
|
|
2468
|
+
*/
|
|
2469
|
+
readonly cap?: number;
|
|
2470
|
+
/**
|
|
2471
|
+
* The downstream framing the cap is measured through — the caller's reference
|
|
2472
|
+
* assembly. Identity when omitted (a caller with a cap but no references).
|
|
2473
|
+
* Must be PURE: it is called once per shed iteration, and the caller re-runs
|
|
2474
|
+
* its own real assembly on the returned body afterwards.
|
|
2475
|
+
*/
|
|
2476
|
+
readonly frame?: (body: string | undefined) => string | undefined;
|
|
2477
|
+
}
|
|
2478
|
+
/**
|
|
2479
|
+
* Fold a video run's subject and cinematic-direction ids (and optional
|
|
2480
|
+
* structured fields) into its prompt body.
|
|
2481
|
+
*
|
|
2482
|
+
* The SUBJECT hints land first (who is in the shot — the noun phrase the
|
|
2483
|
+
* cinematography modifies), then the direction hints in the registry's
|
|
2484
|
+
* canonical table order (camera motion leads), and the structured fragment
|
|
2485
|
+
* lands LAST — the same ordering `composePromptText` uses for stills.
|
|
2486
|
+
*
|
|
2487
|
+
* `subject` rides `opts` rather than a fourth positional parameter on purpose:
|
|
2488
|
+
* every existing caller passes `(prompt, direction)` or
|
|
2489
|
+
* `(prompt, direction, structured)` positionally, and a new positional would
|
|
2490
|
+
* have made the two levers' order a memorization test.
|
|
2491
|
+
*
|
|
2492
|
+
* TRUNCATION ORDERING (opt-in via `opts.cap`): the provider clamp
|
|
2493
|
+
* (`applyVideoNegativePrompt`) slices the prompt TAIL, which is ORDER-BLIND —
|
|
2494
|
+
* on a low-cap provider (kling = 1000) a broad direction renders more than the
|
|
2495
|
+
* whole ceiling and the cut severs reference bindings and the end of the user's
|
|
2496
|
+
* prose while decorative clauses survive. With a cap the composer decides
|
|
2497
|
+
* instead: it knows which clauses are hints because it just rendered them, and
|
|
2498
|
+
* drops them LAST-FOLDED FIRST until the framed prompt fits. Everything else —
|
|
2499
|
+
* the user's prose, the structured fragment (user CONTENT, never a garnish) and
|
|
2500
|
+
* every byte the resolver's framing adds — outranks a hint.
|
|
2501
|
+
*
|
|
2502
|
+
* SUBJECT CLAUSES ARE SHED CANDIDATES TOO, and they shed AFTER the direction
|
|
2503
|
+
* clauses. Both folds are catalog decoration of the same class — ids the
|
|
2504
|
+
* platform rendered into wording — so exempting one would just move the
|
|
2505
|
+
* overflow into the order-blind clamp, which is the bug this machinery exists
|
|
2506
|
+
* to prevent. They ride the SAME `hintClauses` list the shed already walks
|
|
2507
|
+
* (subject first, direction second, tail-first shedding), so there is exactly
|
|
2508
|
+
* one shed arithmetic (`hint-shedding.ts`) across both channels and both
|
|
2509
|
+
* surfaces. Neither channel ever sheds before the prose, the references or the
|
|
2510
|
+
* structured fragment.
|
|
2511
|
+
*
|
|
2512
|
+
* WHAT THE BUDGET DELIBERATELY EXCLUDES: the route's later opt-in identity
|
|
2513
|
+
* injection (an async DB read that appends a canonical description) and any
|
|
2514
|
+
* registered `applyPromptPolicies` transform both run AFTER the reference
|
|
2515
|
+
* assembly and are not modelled here. Pricing them in would mean folding an
|
|
2516
|
+
* await into this pure composer; instead the provider clamp stays their last
|
|
2517
|
+
* resort, exactly as today. Same for a body that still overflows with ZERO
|
|
2518
|
+
* hints left — long prose, or many bound references on their own.
|
|
2519
|
+
*
|
|
2520
|
+
* UNDER-CAP PARITY: the first pass folds every hint, so a prompt that fits is
|
|
2521
|
+
* byte-identical to a capless call, and a caller with no
|
|
2522
|
+
* `subject`/`direction`/`structured` takes the same exact no-op path it always
|
|
2523
|
+
* did.
|
|
2065
2524
|
*
|
|
2066
2525
|
* @param userPrompt The user's prompt. Optional: an image-to-video run may
|
|
2067
2526
|
* legitimately have none, and it is returned as-is when nothing folds.
|
|
@@ -2070,17 +2529,24 @@ declare function assembleImageInput(input: AssembleImageInput): BuildImagePrompt
|
|
|
2070
2529
|
* nothing — never a throw.
|
|
2071
2530
|
* @param structured Path-1 structured fields. Not a `/v1/generate-video` wire
|
|
2072
2531
|
* field today; the canvas orchestrator passes it directly.
|
|
2073
|
-
* @param opts.hintMode Override the verbosity policy (a whole-fold
|
|
2532
|
+
* @param opts.hintMode Override the direction verbosity policy (a whole-fold
|
|
2074
2533
|
* `PickerHintMode`, or a `{ look, motion }` split).
|
|
2534
|
+
* @param opts.subject Flat subject ids (Person / Styling / props), same
|
|
2535
|
+
* inertness contract as `direction`.
|
|
2536
|
+
* @param opts.subjectHintMode Override the subject verbosity policy.
|
|
2537
|
+
* @param opts.cap / `opts.frame` See {@link VideoPromptCapOptions}.
|
|
2075
2538
|
*/
|
|
2076
2539
|
declare function composeVideoPromptText(userPrompt: string | undefined, direction: DirectionFields | undefined, structured?: StructuredPromptFields, opts?: {
|
|
2077
2540
|
readonly hintMode?: DirectionHintMode;
|
|
2078
|
-
|
|
2541
|
+
readonly subject?: SubjectFields;
|
|
2542
|
+
readonly subjectHintMode?: SubjectHintMode;
|
|
2543
|
+
} & VideoPromptCapOptions): string | undefined;
|
|
2079
2544
|
|
|
2080
2545
|
/**
|
|
2081
2546
|
* Narrow readers turning UNTRUSTED persisted node data (`workflows.nodes`
|
|
2082
2547
|
* JSONB — import, MCP write, node preset, a Studio-emitted graph) into the
|
|
2083
|
-
* typed `direction` / `structured` levers `assembleImageInput`
|
|
2548
|
+
* typed `subject` / `direction` / `structured` levers `assembleImageInput`
|
|
2549
|
+
* accepts.
|
|
2084
2550
|
* `buildPayload` has no zod and workflow writes are
|
|
2085
2551
|
* `z.record(z.string(), z.unknown())`, so this blob may have been written years
|
|
2086
2552
|
* ago by any client.
|
|
@@ -2138,6 +2604,28 @@ declare function composeVideoPromptText(userPrompt: string | undefined, directio
|
|
|
2138
2604
|
* entries survive rather than being crowded out by them.
|
|
2139
2605
|
*/
|
|
2140
2606
|
declare function readDirectionFields(value: unknown): DirectionFields | undefined;
|
|
2607
|
+
/**
|
|
2608
|
+
* Read a node's stored SUBJECT ids — the flat Person / Styling / prop bag the
|
|
2609
|
+
* `subject` channel carries. Same three contracts as `readDirectionFields`:
|
|
2610
|
+
* drop-never-throw, `undefined` never `{}`, and bounds shared with the wire
|
|
2611
|
+
* door by CONSTANT (`SUBJECT_ID_MAX_CHARS` / `SUBJECT_ARRAY_CEILING`, which are
|
|
2612
|
+
* defined AS the direction constants) so a body the route accepts and the same
|
|
2613
|
+
* node re-run from the canvas cannot disagree about which strings are ids.
|
|
2614
|
+
*
|
|
2615
|
+
* DERIVED from `getRegisteredSubjectKeys()`, never a hand-authored field list —
|
|
2616
|
+
* that is the whole lesson of `readStructuredFields` below, whose hand table is
|
|
2617
|
+
* only viable because `StructuredPromptFields` is a small hand-authored type.
|
|
2618
|
+
* The subject vocabulary is ~54 catalog-derived fields PLUS deployment-registered
|
|
2619
|
+
* pack dimensions unknown at compile time, so it is read from the registry at
|
|
2620
|
+
* call time. Iterating the KEY SET (never `Object.keys(value)`) is also what
|
|
2621
|
+
* keeps an adversarial blob's key count off the hot path.
|
|
2622
|
+
*
|
|
2623
|
+
* The SEMANTIC per-dimension cap stays the renderer's job
|
|
2624
|
+
* (`normalizeSubjectFields`), exactly as `maxPicks` does for direction: this
|
|
2625
|
+
* reader bounds cardinality only. `customAge` is the one number on the wire and
|
|
2626
|
+
* is passed through finite-only — the renderer clamps it.
|
|
2627
|
+
*/
|
|
2628
|
+
declare function readSubjectFields(value: unknown): SubjectFields | undefined;
|
|
2141
2629
|
/** Read a node's stored Path-1 structured prompt fields. Same drop-never-throw
|
|
2142
2630
|
* and `undefined`-never-`{}` contract as `readDirectionFields`. */
|
|
2143
2631
|
declare function readStructuredFields(value: unknown): StructuredPromptFields | undefined;
|
|
@@ -6493,4 +6981,4 @@ declare function getPickerWiring(nodeType: string | undefined | null): PickerWir
|
|
|
6493
6981
|
*/
|
|
6494
6982
|
declare function buildSurroundFillPrompt(direction: SurroundDirection, userPrompt?: string): string;
|
|
6495
6983
|
|
|
6496
|
-
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, DIRECTION_ARRAY_CEILING, DIRECTION_FIELDS, DIRECTION_ID_MAX_CHARS, DIRECTION_KEYS, type DirectionFamily, type DirectionFieldRow, type DirectionFieldSpec, type DirectionFields, type DirectionHintMode, type DirectionKey, type DirectionSurface, 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_HINT_MODE_DEFAULT, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, type IdentityLockMode, type ImageDirectionKey, 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, PROMPT_HINT_SEPARATOR, 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_HINT_MODE_DEFAULT, VIDEO_WIZARD_CATEGORIES, VOCAL_PRESENCE, VOCAL_PRESENCE_INSTRUMENTAL_ID, VOICE_ACCENTS, VOICE_AGES, VOICE_ARCHETYPES, VOICE_CHARACTER_DEFAULT_DATA, VOICE_DELIVERY_DEFAULT_DATA, VOICE_EMOTIONS, VOICE_GENDERS, VOICE_LANGUAGES, VOICE_PACES, VOICE_TIMBRES, type VeoI2vInputsArgs, type VeoI2vInputsResult, type VideoDirectionKey, 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, composeVideoPromptText, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, deriveTerm, directionFieldsForSurface, expandImagePositionRefs, expandImageRefTokens, filmStillPrefix, getActionFx, getActionFxLabel, getActionFxPromptHint, getActionFxTerm, getAesthetic, getAestheticLabel, getAestheticPromptHint, getAestheticTerm, getAtmosphere, getAtmosphereLabel, getAtmospherePromptHint, getAtmosphereTerm, getBackdrop, getBackdropLabel, getBackdropPromptHint, getBackdropTerm, getCameraFormat, getCameraFormatLabel, getCameraFormatPromptHint, getCameraFormatTerm, getCameraMotion, getCameraMotionLabel, getCameraMotionPromptHint, getCameraMotionTerm, getCategoriesForNodeType, getCharacterFx, getCharacterFxLabel, getCharacterFxPromptHint, getCharacterFxTerm, getColorLook, getColorLookLabel, getColorLookPromptHint, getColorLookTerm, getCompositionEffect, getCompositionEffectLabel, getCompositionEffectPromptHint, getCompositionEffectTerm, getEffectiveSunoCustomMode, getEra, getEraLabel, getEraPromptHint, getEraTerm, getExposure, getExposureLabel, getExposurePromptHint, getExposureTerm, getFactoryPresets, getFactorySnippets, getFraming, getFramingCategoryLimit, getFramingLabel, getFramingPromptHint, getFramingTerm, getHeldProp, getHeldPropLabel, getHeldPropPromptHint, getHeldPropTerm, getIdentityLockClause, getInstrument, getInstrumentTerm, getLens, getLensLabel, getLensPromptHint, getLensTerm, getLighting, getLightingLabel, getLightingPromptHint, getLightingTerm, getLoopSubject, getLoopSubjectLabel, getLoopSubjectPromptHint, getLoopSubjectTerm, getMaterial, getMaterialLabel, getMaterialPromptHint, getMaterialTerm, getMood, getMoodLabel, getMoodPromptHint, getMoodTerm, getMusicEmotion, getMusicEmotionTerm, getMusicEnergy, getMusicEnergyTerm, getMusicEra, getMusicEraTerm, getMusicGenre, getMusicGenreLabel, getMusicGenreTerm, getMusicSubgenre, getMusicSubgenreTerm, getMusicVibe, getMusicVibeTerm, getParameterPromptHint, getPerson, getPersonDimensionLimit, getPersonLabel, getPersonPromptHint, getPersonTerm, getPhotoGenre, getPhotoGenreLabel, getPhotoGenrePromptHint, getPhotoGenreTerm, getPhotographer, getPhotographerLabel, getPhotographerPromptHint, getPhotographerTerm, getPickerAnalyzer, getPickerCatalog, getPickerWiring, getPose, getPoseLabel, getPosePromptHint, getPoseTerm, getPostProcessEffect, getPostProcessEffectLabel, getPostProcessEffectPromptHint, getPostProcessEffectTerm, getProductionStyle, getProductionStyleTerm, getPromptDoctrine, getPromptFields, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, getSnippetMedia, getStyle, getStyleLabel, getStylePreset, getStylePromptHint, getStyleTerm, getStyling, getStylingDimensionLimit, getStylingLabel, getStylingPromptHint, getStylingTerm, getTemporal, getTemporalLabel, getTemporalPromptHint, getTemporalTerm, getTransition, getTransitionLabel, getTransitionPromptHint, getTransitionTerm, getVocalPresence, getVocalPresenceTerm, getVoiceAccent, getVoiceAccentTerm, getVoiceAge, getVoiceAgeTerm, getVoiceArchetype, getVoiceArchetypeTerm, getVoiceEmotion, getVoiceEmotionTerm, getVoiceGender, getVoiceGenderTerm, getVoiceLanguage, getVoiceLanguageTerm, getVoicePace, getVoicePaceTerm, getVoiceTimbre, getVoiceTimbreTerm, getWardrobeEntriesByDimension, getWardrobeEntry, getWardrobePromptHint, groupFactoryPresets, hasUpstreamCharacter, identityRefsSentence, isAnalyzablePicker, isInstrumentalVocal, isSuspiciousDerivedTerm, isVantageFraming, isWizardSupported, joinPromptHints, joinPromptParts, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDirectionHints, renderStructuredFields, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|
|
6984
|
+
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 BuildImagePromptOverflowResult, 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, DIRECTION_ARRAY_CEILING, DIRECTION_FIELDS, DIRECTION_ID_MAX_CHARS, DIRECTION_KEYS, type DirectionFamily, type DirectionFieldRow, type DirectionFieldSpec, type DirectionFields, type DirectionHintMode, type DirectionKey, type DirectionSurface, 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_HINT_MODE_DEFAULT, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, type IdentityLockMode, type ImageDirectionKey, 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, MAX_SUBJECT_KEYS, MOODS, MOOD_CATEGORY_LABELS, MOOD_CATEGORY_ORDER, MOOD_IDS, MOVEMENT_LABELS, MULTI_PICKER_WIRING, MUSIC_EMOTIONS, MUSIC_ENERGIES, MUSIC_ERAS, MUSIC_GENRES, MUSIC_GENRE_CATEGORY_LABELS, MUSIC_GENRE_CATEGORY_ORDER, MUSIC_GENRE_DEFAULT_DATA, MUSIC_MOOD_DEFAULT_DATA, MUSIC_VIBES, MUSIC_WIZARD_CATEGORIES, 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, PROMPT_HINT_SEPARATOR, 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, SUBJECT_ARRAY_CEILING, SUBJECT_CUSTOM_AGE_KEY, SUBJECT_FIELDS, SUBJECT_FOLD_KEYS, SUBJECT_ID_MAX_CHARS, SUBJECT_IMAGE_HINT_MODE_DEFAULT, SUBJECT_KEYS, SUBJECT_KEY_MAX_CHARS, SUBJECT_VIDEO_HINT_MODE_DEFAULT, 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 SubjectFieldRow, type SubjectFieldSpec, type SubjectFields, type SubjectGroupFieldSpec, type SubjectHintMode, type SubjectIdsFieldSpec, type SubjectSurface, 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_HINT_MODE_DEFAULT, VIDEO_WIZARD_CATEGORIES, VOCAL_PRESENCE, VOCAL_PRESENCE_INSTRUMENTAL_ID, VOICE_ACCENTS, VOICE_AGES, VOICE_ARCHETYPES, VOICE_CHARACTER_DEFAULT_DATA, VOICE_DELIVERY_DEFAULT_DATA, VOICE_EMOTIONS, VOICE_GENDERS, VOICE_LANGUAGES, VOICE_PACES, VOICE_TIMBRES, type VeoI2vInputsArgs, type VeoI2vInputsResult, type VideoDirectionKey, type VideoExtraRef, type VideoPromptCapOptions, 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, buildImagePromptWithOverflow, buildInstrumentationHints, buildInstrumentationTerms, buildLightingHints, buildLightingTerms, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMaterialHints, buildMaterialTerms, buildMoodHints, buildMoodTerms, buildMotionPrompt, buildMultiPickerAnalyzerSpec, buildMusicGenreHints, buildMusicGenreTerms, buildMusicMoodHints, buildMusicMoodTerms, buildObjectMotionPrompt, buildObjectPrompt, buildPersonHints, buildPersonTerms, buildPhotographerHints, buildPhotographerTerms, buildPickerAnalyzerSpec, buildPickerLegend, buildPickerZodSchema, buildPoseHints, buildPoseTerms, buildPostProcessHints, buildPostProcessTerms, buildReferenceBlocks, buildScenePrompt, buildStylingHints, buildStylingTerms, buildSurroundFillPrompt, buildTemporalHints, buildTemporalTerms, buildVoiceCharacterHints, buildVoiceCharacterTerms, buildVoiceDeliveryHints, buildVoiceDeliveryTerms, buildWardrobeHints, catalogPacksVersion, characterLockToRefLock, collectIdentityLockClause, composeCameraMotionHintFromConnections, composeCameraMotionTermFromConnections, composeCharacterFxHintFromConnections, composeNegative, composePickerCatalogs, composeSoundHintFromConnections, composeTransitionHintFromConnections, composeVideoPromptText, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, deriveTerm, directionFieldsForSurface, expandImagePositionRefs, expandImageRefTokens, filmStillPrefix, getActionFx, getActionFxLabel, getActionFxPromptHint, getActionFxTerm, getAesthetic, getAestheticLabel, getAestheticPromptHint, getAestheticTerm, getAtmosphere, getAtmosphereLabel, getAtmospherePromptHint, getAtmosphereTerm, getBackdrop, getBackdropLabel, getBackdropPromptHint, getBackdropTerm, getCameraFormat, getCameraFormatLabel, getCameraFormatPromptHint, getCameraFormatTerm, getCameraMotion, getCameraMotionLabel, getCameraMotionPromptHint, getCameraMotionTerm, getCategoriesForNodeType, getCharacterFx, getCharacterFxLabel, getCharacterFxPromptHint, getCharacterFxTerm, getColorLook, getColorLookLabel, getColorLookPromptHint, getColorLookTerm, getCompositionEffect, getCompositionEffectLabel, getCompositionEffectPromptHint, getCompositionEffectTerm, getEffectiveSunoCustomMode, getEra, getEraLabel, getEraPromptHint, getEraTerm, getExposure, getExposureLabel, getExposurePromptHint, getExposureTerm, getFactoryPresets, getFactorySnippets, getFraming, getFramingCategoryLimit, getFramingLabel, getFramingPromptHint, getFramingTerm, getHeldProp, getHeldPropLabel, getHeldPropPromptHint, getHeldPropTerm, getIdentityLockClause, getInstrument, getInstrumentTerm, getLens, getLensLabel, getLensPromptHint, getLensTerm, getLighting, getLightingLabel, getLightingPromptHint, getLightingTerm, getLoopSubject, getLoopSubjectLabel, getLoopSubjectPromptHint, getLoopSubjectTerm, getMaterial, getMaterialLabel, getMaterialPromptHint, getMaterialTerm, getMood, getMoodLabel, getMoodPromptHint, getMoodTerm, getMusicEmotion, getMusicEmotionTerm, getMusicEnergy, getMusicEnergyTerm, getMusicEra, getMusicEraTerm, getMusicGenre, getMusicGenreLabel, getMusicGenreTerm, getMusicSubgenre, getMusicSubgenreTerm, getMusicVibe, getMusicVibeTerm, getParameterPromptHint, getPerson, getPersonDimensionLimit, getPersonLabel, getPersonPromptHint, getPersonTerm, getPhotoGenre, getPhotoGenreLabel, getPhotoGenrePromptHint, getPhotoGenreTerm, getPhotographer, getPhotographerLabel, getPhotographerPromptHint, getPhotographerTerm, getPickerAnalyzer, getPickerCatalog, getPickerWiring, getPose, getPoseLabel, getPosePromptHint, getPoseTerm, getPostProcessEffect, getPostProcessEffectLabel, getPostProcessEffectPromptHint, getPostProcessEffectTerm, getProductionStyle, getProductionStyleTerm, getPromptDoctrine, getPromptFields, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRegisteredSubjectKeys, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, getSnippetMedia, getStyle, getStyleLabel, getStylePreset, getStylePromptHint, getStyleTerm, getStyling, getStylingDimensionLimit, getStylingLabel, getStylingPromptHint, getStylingTerm, getTemporal, getTemporalLabel, getTemporalPromptHint, getTemporalTerm, getTransition, getTransitionLabel, getTransitionPromptHint, getTransitionTerm, getVocalPresence, getVocalPresenceTerm, getVoiceAccent, getVoiceAccentTerm, getVoiceAge, getVoiceAgeTerm, getVoiceArchetype, getVoiceArchetypeTerm, getVoiceEmotion, getVoiceEmotionTerm, getVoiceGender, getVoiceGenderTerm, getVoiceLanguage, getVoiceLanguageTerm, getVoicePace, getVoicePaceTerm, getVoiceTimbre, getVoiceTimbreTerm, getWardrobeEntriesByDimension, getWardrobeEntry, getWardrobePromptHint, groupFactoryPresets, hasUpstreamCharacter, identityRefsSentence, isAnalyzablePicker, isInstrumentalVocal, isSuspiciousDerivedTerm, isVantageFraming, isWizardSupported, joinPromptHints, joinPromptParts, keepableDirectionHints, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, normalizeSubjectFields, personPacksVersion, pickerFanoutTargets, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, readSubjectFields, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDirectionHints, renderStructuredFields, renderSubjectHints, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, subjectFieldsForSurface, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|