@nodaro/shared 2.18.0 → 2.20.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.
Files changed (83) hide show
  1. package/dist/index.cjs +350 -23
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +955 -564
  4. package/dist/index.d.ts +955 -564
  5. package/dist/index.js +334 -24
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/src/__tests__/credit-identifiers.test.ts +180 -0
  9. package/src/__tests__/gvp-supported-providers.test.ts +22 -1
  10. package/src/__tests__/image-pricing-catalog-coverage.test.ts +139 -0
  11. package/src/__tests__/normalize-node-params.test.ts +36 -0
  12. package/src/__tests__/organizations-types.test.ts +29 -1
  13. package/src/__tests__/prompt-length-limits.test.ts +40 -0
  14. package/src/__tests__/suno-credit-type.test.ts +54 -0
  15. package/src/__tests__/video-analysis-brief.test.ts +61 -0
  16. package/src/__tests__/video-audio-capability.test.ts +43 -0
  17. package/src/__tests__/video-mode-for-inputs.test.ts +1 -1
  18. package/src/__tests__/wan-3-catalog.test.ts +243 -0
  19. package/src/credit-identifiers.ts +191 -21
  20. package/src/i18n/held-prop.ar.ts +2 -0
  21. package/src/i18n/held-prop.de.ts +3 -0
  22. package/src/i18n/held-prop.es.ts +3 -0
  23. package/src/i18n/held-prop.fr.ts +2 -0
  24. package/src/i18n/held-prop.he.ts +3 -0
  25. package/src/i18n/held-prop.hi.ts +2 -0
  26. package/src/i18n/held-prop.ja.ts +3 -0
  27. package/src/i18n/held-prop.ko.ts +3 -0
  28. package/src/i18n/held-prop.pt-BR.ts +3 -0
  29. package/src/i18n/held-prop.ru.ts +2 -0
  30. package/src/i18n/held-prop.zh-CN.ts +3 -0
  31. package/src/i18n/person.ar.ts +3 -0
  32. package/src/i18n/person.de.ts +4 -0
  33. package/src/i18n/person.es.ts +4 -0
  34. package/src/i18n/person.fr.ts +3 -0
  35. package/src/i18n/person.he.ts +4 -0
  36. package/src/i18n/person.hi.ts +3 -0
  37. package/src/i18n/person.ja.ts +4 -0
  38. package/src/i18n/person.ko.ts +4 -0
  39. package/src/i18n/person.pt-BR.ts +4 -0
  40. package/src/i18n/person.ru.ts +3 -0
  41. package/src/i18n/person.zh-CN.ts +4 -0
  42. package/src/i18n/setting.ar.ts +2 -0
  43. package/src/i18n/setting.de.ts +3 -0
  44. package/src/i18n/setting.es.ts +3 -0
  45. package/src/i18n/setting.fr.ts +2 -0
  46. package/src/i18n/setting.he.ts +3 -0
  47. package/src/i18n/setting.hi.ts +2 -0
  48. package/src/i18n/setting.ja.ts +3 -0
  49. package/src/i18n/setting.ko.ts +3 -0
  50. package/src/i18n/setting.pt-BR.ts +3 -0
  51. package/src/i18n/setting.ru.ts +2 -0
  52. package/src/i18n/setting.zh-CN.ts +3 -0
  53. package/src/i18n/style.ar.ts +2 -0
  54. package/src/i18n/style.de.ts +3 -0
  55. package/src/i18n/style.es.ts +3 -0
  56. package/src/i18n/style.fr.ts +2 -0
  57. package/src/i18n/style.he.ts +3 -0
  58. package/src/i18n/style.hi.ts +2 -0
  59. package/src/i18n/style.ja.ts +3 -0
  60. package/src/i18n/style.ko.ts +3 -0
  61. package/src/i18n/style.pt-BR.ts +3 -0
  62. package/src/i18n/style.ru.ts +2 -0
  63. package/src/i18n/style.zh-CN.ts +3 -0
  64. package/src/i18n/styling.ar.ts +4 -0
  65. package/src/i18n/styling.de.ts +5 -0
  66. package/src/i18n/styling.es.ts +5 -0
  67. package/src/i18n/styling.fr.ts +4 -0
  68. package/src/i18n/styling.he.ts +5 -0
  69. package/src/i18n/styling.hi.ts +4 -0
  70. package/src/i18n/styling.ja.ts +5 -0
  71. package/src/i18n/styling.ko.ts +5 -0
  72. package/src/i18n/styling.pt-BR.ts +5 -0
  73. package/src/i18n/styling.ru.ts +4 -0
  74. package/src/i18n/styling.zh-CN.ts +5 -0
  75. package/src/index.ts +17 -0
  76. package/src/model-catalog.ts +101 -0
  77. package/src/model-constants.ts +251 -16
  78. package/src/node-default-mappings.ts +5 -0
  79. package/src/normalize-node-params.ts +8 -0
  80. package/src/organizations/types.ts +12 -0
  81. package/src/organizations/views.ts +114 -0
  82. package/src/video-analysis.ts +45 -0
  83. package/src/video-ui-defaults.ts +66 -0
package/dist/index.d.cts CHANGED
@@ -524,6 +524,33 @@ declare const CREDIT_BASE_USD = 0.002;
524
524
  * (generate-image, image-to-image, edit-image). Single source of truth — the route Zod
525
525
  * schemas and the factory-preset guard test all read this. Prompt cap ONLY (not negativePrompt). */
526
526
  declare const IMAGE_PROMPT_MAX = 5000;
527
+ /**
528
+ * The ONE aspect-ratio vocabulary the image routes' Zod enums are built from —
529
+ * `/v1/generate-image`, `/v1/image-to-image` and `/v1/edit-image` all declare
530
+ * `z.enum(IMAGE_ASPECT_RATIO_VALUES)` instead of keeping three literal lists
531
+ * that drift.
532
+ *
533
+ * It is the UNION of every ratio any `kind: "image"` catalog entry declares, so
534
+ * a value the picker offers can never 400 at the route. That gap has shipped
535
+ * twice — Wan 2.7's ultra-wide `8:1`/`1:8` (fixed on generate-image only) and
536
+ * Nano Banana 2 Lite's banner `4:1`/`1:4` (still open until this tuple landed).
537
+ * `packages/shared/src/__tests__/image-pricing-catalog-coverage.test.ts` fails
538
+ * the build if a new model declares a ratio this tuple is missing.
539
+ *
540
+ * This enum is a VOCABULARY BOUND, not a per-model gate: it only stops a
541
+ * free-form string from reaching a provider as `image_size`. The per-model gate
542
+ * is the catalog snap (`resolveNormalizedImageGen` → `normalizeModelInput`),
543
+ * which CORRECTS an unsupported ratio and discloses it in the response's
544
+ * `adjustments` — never rejects. So widening this tuple is always safe: it
545
+ * defers a rejection to the correcting snap, which is the desired behaviour.
546
+ *
547
+ * `auto` is model-specific (GPT Image 2 / Nano Banana 2 Lite treat it as
548
+ * "native"); it lives here for the same reason as the rest — the snap drops or
549
+ * replaces it for models that do not declare it.
550
+ */
551
+ declare const IMAGE_ASPECT_RATIO_VALUES: readonly ["auto", "1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "5:4", "4:5", "21:9", "4:1", "1:4", "8:1", "1:8"];
552
+ /** A ratio string the image routes accept (pre-snap vocabulary, not a per-model guarantee). */
553
+ type ImageAspectRatio = typeof IMAGE_ASPECT_RATIO_VALUES[number];
527
554
  /**
528
555
  * Per-provider maximum ASSEMBLED image-prompt length (chars), VERIFIED against
529
556
  * each model's official docs.kie.ai schema (2026-06). Providers absent here use
@@ -560,14 +587,35 @@ declare function getMaxImagePromptChars(provider: string | undefined): number;
560
587
  declare const VIDEO_PROMPT_MAX = 8000;
561
588
  /**
562
589
  * Suno prompt / lyrics / content ceiling — the LARGEST any Suno version accepts
563
- * in custom mode (V4.5 / V4.5PLUS / V4.5ALL / V5 / V5.5 = 5000). The route Zod
564
- * uses this as a generous ceiling; the handler clamps to the per-version cap via
565
- * {@link getMaxSunoPromptChars} (V4/V3.5 = 3000, non-custom = 500). Shared with
566
- * the editor `maxLength` / counter (warn-don't-block at the per-version cap).
567
- * `style` and `title` have their own caps ({@link getMaxSunoStyleChars} /
568
- * {@link SUNO_TITLE_MAX}).
590
+ * in custom mode (V4.5 / V4.5PLUS / V4.5ALL / V5 / V5.5 = 5000). NOT the route
591
+ * Zod bound — the routes bind at {@link SUNO_HARD_CEILING} and clamp to the
592
+ * per-version cap via {@link getMaxSunoPromptChars} (3000 non-custom for every
593
+ * version; in custom mode 3000 for V4/V3.5, 5000 for V4.5+/V5) before the job
594
+ * is built. This constant is shared with the editor `maxLength` / counter
595
+ * (warn-don't-block at the per-version cap). `style` and `title` have their
596
+ * own caps ({@link getMaxSunoStyleChars} / {@link SUNO_TITLE_MAX}).
569
597
  */
570
598
  declare const SUNO_TEXT_MAX = 5000;
599
+ /**
600
+ * Absolute ceiling for every Suno text field on the route Zod schemas
601
+ * (`prompt`, `lyrics`, `fullLyrics`, `content`, `userPrompt`).
602
+ *
603
+ * WARN-DON'T-BLOCK. The per-version caps ({@link getMaxSunoPromptChars} /
604
+ * {@link getMaxSunoStyleChars}) do the real work — the routes CLAMP to them
605
+ * before building the job. The Zod bound only exists to stop abuse, so it must
606
+ * stay generous: until 2026-09 the routes bounded these fields at
607
+ * {@link SUNO_TEXT_MAX} (5000), which meant a programmatically-set prompt (an
608
+ * agent, an app run, a FieldMapping) was hard-REJECTED with a 400 before the
609
+ * clamp could trim it — three app-report rows on 2026-08-19..31.
610
+ *
611
+ * DISTINCT FROM {@link PROMPT_HARD_CEILING} on purpose: that one is an
612
+ * image/video budget pinned to MAX_IMAGE/VIDEO_PROMPT_CHARS_BY_PROVIDER by its
613
+ * own drift guard. Coupling them would let one modality's limits move the
614
+ * other's. This one has a single invariant, enforced in
615
+ * `__tests__/prompt-length-limits.test.ts`: it MUST stay >= every value
616
+ * getMaxSunoPromptChars / getMaxSunoStyleChars can return.
617
+ */
618
+ declare const SUNO_HARD_CEILING = 30000;
571
619
  /**
572
620
  * Absolute ceiling for the `prompt` / `negativePrompt` fields on the image and
573
621
  * video routes' Zod schemas. The PER-MODEL limits below (and the editor warning)
@@ -639,9 +687,11 @@ declare const MAX_TTS_CHARS_BY_PROVIDER: Record<string, number>;
639
687
  /** Max TTS text length (chars) for a provider: verified override, else {@link TTS_TEXT_MAX}. */
640
688
  declare function getMaxTtsChars(provider: string | undefined): number;
641
689
  /**
642
- * Suno per-version field caps (from docs.kie.ai/suno-api/generate-music). The old
643
- * flat {@link SUNO_TEXT_MAX} (3000) was simultaneously too low for V4.5+/V5
644
- * prompts (5000) and too high for `style` (1000) and `title` (80).
690
+ * Suno per-version field caps (from docs.kie.ai/suno-api/generate-music). The
691
+ * original flat 3000 cap was simultaneously too low for V4.5+/V5 prompts
692
+ * (5000) and too high for `style` (1000) and `title` (80). ({@link
693
+ * SUNO_TEXT_MAX} is 5000 today — the largest per-version prompt cap; the
694
+ * route Zod bound is {@link SUNO_HARD_CEILING}.)
645
695
  * - prompt / lyrics: 3000 in non-custom mode (all versions); in custom mode
646
696
  * 3000 for V4/V3.5 and 5000 for V4.5 / V4.5PLUS / V4.5ALL / V5 / V5.5.
647
697
  * - style: 200 for V4/V3.5, 1000 for V4.5+.
@@ -788,13 +838,13 @@ type ImageGenProvider = typeof IMAGE_GEN_PROVIDERS[number];
788
838
  type ImageI2IProvider = typeof IMAGE_I2I_PROVIDERS[number];
789
839
  type ImageEditProvider = typeof IMAGE_EDIT_PROVIDERS[number];
790
840
  /** Image-to-video providers */
791
- declare const IMAGE_TO_VIDEO_PROVIDERS: readonly ["minimax", "veo3", "veo3.1", "veo3_lite", "kling", "kling-turbo", "kling-3.0", "kling-master", "seedance", "seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5", "minimax-h3", "hailuo-2.3-pro", "hailuo-2.3", "hailuo-standard", "wan-i2v", "wan-turbo", "bytedance-lite", "bytedance-pro", "bytedance-pro-fast", "grok-i2v", "wan-2.7-i2v", "happyhorse-i2v", "happyhorse-ref2v", "runway-kie", "kling-3-omni", "gemini-omni-video", "ltx-2.3-pro", "ltx-2.3-fast", "grok-imagine-video-1.5"];
841
+ declare const IMAGE_TO_VIDEO_PROVIDERS: readonly ["minimax", "veo3", "veo3.1", "veo3_lite", "kling", "kling-turbo", "kling-3.0", "kling-master", "seedance", "seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5", "minimax-h3", "hailuo-2.3-pro", "hailuo-2.3", "hailuo-standard", "wan-i2v", "wan-turbo", "bytedance-lite", "bytedance-pro", "bytedance-pro-fast", "grok-i2v", "wan-2.7-i2v", "happyhorse-i2v", "happyhorse-ref2v", "runway-kie", "kling-3-omni", "gemini-omni-video", "gemini-omni-flash", "wan-3", "wan-3-prime", "ltx-2.3-pro", "ltx-2.3-fast", "grok-imagine-video-1.5"];
792
842
  type ImageToVideoProvider = typeof IMAGE_TO_VIDEO_PROVIDERS[number];
793
843
  /** Text-to-video providers */
794
- declare const TEXT_TO_VIDEO_PROVIDERS: readonly ["minimax", "veo3", "veo3.1", "veo3_lite", "kling", "kling-turbo", "kling-3.0", "grok", "seedance", "seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5", "minimax-h3", "wan", "hailuo-standard", "bytedance-lite", "bytedance-pro", "wan-turbo", "wan-2.7-t2v", "happyhorse", "runway-kie", "gemini-omni-video", "ltx-2.3-pro", "ltx-2.3-fast", "grok-imagine-video-1.5", "kling-3-omni", "kling-master", "hailuo-2.3", "hailuo-2.3-pro", "bytedance-pro-fast", "happyhorse-ref2v"];
844
+ declare const TEXT_TO_VIDEO_PROVIDERS: readonly ["minimax", "veo3", "veo3.1", "veo3_lite", "kling", "kling-turbo", "kling-3.0", "grok", "seedance", "seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5", "minimax-h3", "wan", "hailuo-standard", "bytedance-lite", "bytedance-pro", "wan-turbo", "wan-2.7-t2v", "happyhorse", "runway-kie", "gemini-omni-video", "gemini-omni-flash", "wan-3", "wan-3-prime", "ltx-2.3-pro", "ltx-2.3-fast", "grok-imagine-video-1.5", "kling-3-omni", "kling-master", "hailuo-2.3", "hailuo-2.3-pro", "bytedance-pro-fast", "happyhorse-ref2v"];
795
845
  type TextToVideoProvider = typeof TEXT_TO_VIDEO_PROVIDERS[number];
796
846
  /** Unified video-generation providers (image-to-video ∪ text-to-video) for the generate-video node. */
797
- declare const VIDEO_GEN_PROVIDERS: readonly ["minimax", "veo3", "veo3.1", "veo3_lite", "kling", "kling-turbo", "kling-3.0", "kling-master", "seedance", "seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5", "minimax-h3", "hailuo-2.3-pro", "hailuo-2.3", "hailuo-standard", "wan-i2v", "wan-turbo", "bytedance-lite", "bytedance-pro", "bytedance-pro-fast", "grok-i2v", "wan-2.7-i2v", "happyhorse-i2v", "happyhorse-ref2v", "runway-kie", "kling-3-omni", "gemini-omni-video", "ltx-2.3-pro", "ltx-2.3-fast", "grok-imagine-video-1.5", ...("veo3" | "kling-3.0" | "seedance-2" | "veo3.1" | "wan-turbo" | "bytedance-lite" | "kling-turbo" | "minimax" | "hailuo-standard" | "grok" | "minimax-h3" | "hailuo-2.3-pro" | "hailuo-2.3" | "veo3_lite" | "gemini-omni-video" | "kling" | "kling-master" | "kling-3-omni" | "grok-imagine-video-1.5" | "seedance" | "seedance-2-fast" | "seedance-2-mini" | "seedance-2-5" | "wan" | "wan-2.7-t2v" | "happyhorse" | "happyhorse-ref2v" | "bytedance-pro" | "bytedance-pro-fast" | "runway-kie" | "ltx-2.3-pro" | "ltx-2.3-fast")[]];
847
+ declare const VIDEO_GEN_PROVIDERS: readonly ["minimax", "veo3", "veo3.1", "veo3_lite", "kling", "kling-turbo", "kling-3.0", "kling-master", "seedance", "seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5", "minimax-h3", "hailuo-2.3-pro", "hailuo-2.3", "hailuo-standard", "wan-i2v", "wan-turbo", "bytedance-lite", "bytedance-pro", "bytedance-pro-fast", "grok-i2v", "wan-2.7-i2v", "happyhorse-i2v", "happyhorse-ref2v", "runway-kie", "kling-3-omni", "gemini-omni-video", "gemini-omni-flash", "wan-3", "wan-3-prime", "ltx-2.3-pro", "ltx-2.3-fast", "grok-imagine-video-1.5", ...("veo3" | "kling-3.0" | "seedance-2" | "veo3.1" | "wan-turbo" | "bytedance-lite" | "kling-turbo" | "minimax" | "hailuo-standard" | "grok" | "minimax-h3" | "hailuo-2.3-pro" | "hailuo-2.3" | "veo3_lite" | "gemini-omni-video" | "gemini-omni-flash" | "kling" | "kling-master" | "kling-3-omni" | "grok-imagine-video-1.5" | "seedance" | "seedance-2-fast" | "seedance-2-mini" | "seedance-2-5" | "wan-3" | "wan-3-prime" | "wan" | "wan-2.7-t2v" | "happyhorse" | "happyhorse-ref2v" | "bytedance-pro" | "bytedance-pro-fast" | "runway-kie" | "ltx-2.3-pro" | "ltx-2.3-fast")[]];
798
848
  type VideoGenProvider = typeof VIDEO_GEN_PROVIDERS[number];
799
849
  /**
800
850
  * Video models that expose DISTINCT provider ids per mode (text-to-video vs
@@ -998,6 +1048,52 @@ declare const MINIMAX_H3_DEFAULT_RESOLUTION = "2K";
998
1048
  * billed tier can never undercut the rendered one.
999
1049
  */
1000
1050
  declare function normalizeMinimaxH3Resolution(resolution: string | undefined): "768P" | "2K";
1051
+ /**
1052
+ * Wan 3.0 family — the KIE "wan/3-0-video" market model and its high-speed
1053
+ * "wan/3-0-video-prime" sibling. The two share a BYTE-IDENTICAL input schema
1054
+ * (first/last frame OR an all-purpose reference mode with images/videos/audio,
1055
+ * native `audio` boolean, 2-30s, 480P/720P/1080P, six aspect ratios with
1056
+ * `adaptive` as the default); only the per-second rate differs. Prime is the
1057
+ * FASTER tier at a higher rate — never describe it as "higher quality".
1058
+ *
1059
+ * Exact-membership set — NEVER match on a "wan" prefix: "wan", "wan-i2v",
1060
+ * "wan-turbo", "wan-flash", "wan-videoedit" and the "wan-2.7-*" ids are
1061
+ * unrelated 2.x models with a different surface (and a different reference
1062
+ * token format — see WAN_3_DOCTRINE in @nodaro/prompts).
1063
+ */
1064
+ declare const WAN_3_PROVIDERS: Set<string>;
1065
+ declare function isWan3Provider(provider: string | undefined): boolean;
1066
+ /** Wan 3.0 resolution the PLATFORM renders when the param is omitted or unknown.
1067
+ * Deliberately NOT KIE's own default (1080P): 720p is the tier the bare credit
1068
+ * identifier prices, so the provider layer pins it to keep render == billed. */
1069
+ declare const WAN_3_DEFAULT_RESOLUTION = "720P";
1070
+ /**
1071
+ * SINGLE normalization for the Wan 3.0 resolution lever (KIE wire enum
1072
+ * "480P" | "720P" | "1080P"). Everything INTERNAL — the catalog, QUALITY_MAP,
1073
+ * dropdowns, RESOLUTION_DURATION_PRICING keys and every emitted credit
1074
+ * identifier — stays LOWERCASE; this helper is the ONE place the uppercase wire
1075
+ * form is produced (backend KIE payload build), the twin of
1076
+ * {@link normalizeMinimaxH3Resolution}.
1077
+ *
1078
+ * Case-insensitive. Anything else (undefined, garbage, a stale "4k") collapses
1079
+ * to {@link WAN_3_DEFAULT_RESOLUTION} — the tier the default credit identifier
1080
+ * reserves — so the billed tier can never undercut the rendered one.
1081
+ */
1082
+ declare function normalizeWan3Resolution(resolution: string | undefined): "480P" | "720P" | "1080P";
1083
+ /**
1084
+ * Google Gemini Omni family — the KIE "gemini-omni-video" market model and its
1085
+ * faster/cheaper "google/gemini-omni-flash-1-1" sibling. Both take the SAME
1086
+ * request shape (prompt + image_urls references, video-edit through the i2v
1087
+ * handle, 4/6/8/10s, 720p/1080p or a 4K band) and are dispatched through the
1088
+ * same runner, so every behavioural branch that used to compare against the
1089
+ * literal "gemini-omni-video" must ask this predicate instead — V2V routing,
1090
+ * the 7-slot reference quota, the mode swap and the aspect-ratio panels.
1091
+ *
1092
+ * Exact-membership set — NEVER match on a "gemini" prefix (the Gemini LLM ids
1093
+ * would collide).
1094
+ */
1095
+ declare const GEMINI_OMNI_PROVIDERS: Set<string>;
1096
+ declare function isGeminiOmniProvider(provider: string | undefined): boolean;
1001
1097
  /**
1002
1098
  * Video models that are CATALOGUED and priced but have NO working dispatch
1003
1099
  * path today — selecting one fails at the router, not at validation.
@@ -1112,6 +1208,10 @@ declare function maxSegmentsFor(provider: string | undefined, capSec: number): n
1112
1208
  * param at all (inferred from the frame). Only the pure-t2v endpoint requires
1113
1209
  * a concrete ratio — the KIE provider layer coerces `adaptive` → `16:9` there
1114
1210
  * (see applyMinimaxH3Params in backend kie/video.ts).
1211
+ *
1212
+ * Wan 3.0 also defaults to `adaptive` — it is the model's own KIE default and
1213
+ * the first value in its aspect enum, so an un-set node must not silently run
1214
+ * at 16:9 while the panel displays Adaptive.
1115
1215
  */
1116
1216
  declare function defaultVideoAspectRatio(provider: string | undefined): string;
1117
1217
  /**
@@ -1310,8 +1410,9 @@ declare const AUDIO_ADDON_PROVIDERS: Set<string>;
1310
1410
  type VideoAudioMode = "none" | "ambient" | "native_speech" | "audio_driven";
1311
1411
  interface VideoAudioCapability {
1312
1412
  mode: VideoAudioMode;
1313
- /** Provider-option field carrying the on/off toggle, when user-controllable. */
1314
- field?: "generateAudio" | "sound";
1413
+ /** Provider-option field carrying the on/off toggle, when user-controllable.
1414
+ * `audio` is Wan 3.0's own boolean lever (KIE `input.audio`, default true). */
1415
+ field?: "generateAudio" | "sound" | "audio";
1315
1416
  /** Audio is always produced and can't be turned off by the user (VEO 3.x). */
1316
1417
  alwaysOn?: boolean;
1317
1418
  /** Enabling audio raises the credit cost (Kling — see AUDIO_ADDON_PROVIDERS). */
@@ -1791,90 +1892,504 @@ interface ExtraRefCharacterContext {
1791
1892
  declare function expandExtraRefsToConnectedReferences(extras: ReadonlyArray<ExtraRefInput> | undefined, lookupCharacterContext?: (slug: string) => ExtraRefCharacterContext | undefined): ConnectedReference[];
1792
1893
 
1793
1894
  /**
1794
- * Build composite credit model identifiers for variable pricing.
1795
- * Shared between frontend and backend.
1895
+ * Model catalog — single source of truth for what each Nodaro-exposed model
1896
+ * is, who made it, what it's good for, and which knobs it accepts.
1897
+ *
1898
+ * Consumed by:
1899
+ * - Backend MCP `list_models` tool (renders the nested per-kind / per-family
1900
+ * response so Claude can pick the right model for a user's intent)
1901
+ * - (future) Frontend config panels — today they read parallel registries
1902
+ * in `frontend/src/components/editor/config-panels/model-options.ts`; a
1903
+ * follow-up will migrate them to import from here.
1904
+ *
1905
+ * Authoring rules:
1906
+ * - Keep `description` to one line (≤120 chars). It's what Claude reads to
1907
+ * decide which model to use.
1908
+ * - `useCases` is a small set of short tags (1-3 words) — verbs/nouns Claude
1909
+ * can match against user intent ("typography", "character", "fast",
1910
+ * "cinematic"). Stay consistent across entries: don't write "text" in one
1911
+ * and "typography" in another.
1912
+ * - `aspectRatios` / `resolutions` / `qualities` only appear when the model
1913
+ * actually exposes that lever (e.g., Nano Banana base has no `resolution`).
1914
+ * - `durations` is in seconds.
1915
+ * - `pricing[0]` is ALWAYS the default variant (the bare id without a
1916
+ * composite suffix like `:4K` or `:high`).
1917
+ * - Costs are sourced from `STATIC_CREDIT_COSTS` (see backend
1918
+ * `src/billing/credits.ts`). Keep them in sync if the table changes.
1919
+ * - After editing `MODEL_CATALOG` or `MODEL_RECOMMENDATIONS`, run
1920
+ * `npm run gen:skills` (from `backend/`) to refresh the public
1921
+ * `docs/choosing-models.md` guide. CI (`gen:skills:check`) fails on drift.
1796
1922
  */
1923
+ type ModelKind = "image" | "video" | "audio";
1924
+ type ModelMode = "t2i" | "i2i" | "edit" | "upscale" | "remove-bg" | "i2v" | "t2v" | "v2v" | "extend" | "motion-transfer" | "lip-sync" | "video-upscale" | "tts" | "music" | "sfx" | "stt" | "voice-clone" | "voice-design" | "voice-changer" | "isolation" | "dubbing" | "forced-alignment" | "dialogue" | "video-analysis" | "video-audit";
1925
+ interface PriceVariant {
1926
+ /** Composite identifier as it appears in `STATIC_CREDIT_COSTS`. */
1927
+ identifier: string;
1928
+ /** Credits charged at reservation. */
1929
+ credits: number;
1930
+ /** Short human-readable note describing this variant ("1K default", "4K", "with audio"). */
1931
+ note?: string;
1932
+ }
1933
+ interface ModelCatalogEntry {
1934
+ id: string;
1935
+ kind: ModelKind;
1936
+ /**
1937
+ * Operations this model supports. Many video models (minimax, veo3,
1938
+ * seedance) support BOTH i2v AND t2v under the same id — the route handler
1939
+ * picks which KIE endpoint to hit based on whether an image was supplied.
1940
+ * For those, list both modes here so MCP filters and frontend pickers see
1941
+ * the model in either context.
1942
+ */
1943
+ modes: readonly ModelMode[];
1944
+ /** Vendor / lab that produced the model. Used for UI grouping. */
1945
+ family: string;
1946
+ /** Display name (NOT the id — the id is the API enum value). */
1947
+ label: string;
1948
+ /**
1949
+ * Model LINE for the add-node Models tab — the brand-agnostic product line a
1950
+ * user thinks in ("Nano Banana", "Flux", "VEO", "Kling", "ElevenLabs").
1951
+ * Distinct from `family` (the lab: Google covers Nano Banana + Imagen + VEO).
1952
+ * REQUIRED for every node-creatable model; a completeness guard in
1953
+ * `@nodaro/shared` (model-tree.test.ts) fails if one is missing.
1954
+ */
1955
+ series?: string;
1956
+ /**
1957
+ * The value written into the creating node's data field when this model is
1958
+ * picked from the Models tab, for models whose catalog id differs from the
1959
+ * stored value. Only `suno-generate` diverges today (id `suno-v5` → `data.model`
1960
+ * "V5"). Omit when the id IS the stored value (the common case).
1961
+ */
1962
+ dataValue?: string;
1963
+ /** One-liner. Visible to Claude in MCP `list_models` output. */
1964
+ description: string;
1965
+ /** Short tags Claude matches against user intent. */
1966
+ useCases: readonly string[];
1967
+ /**
1968
+ * Capabilities flags: "reference-image", "end-frame", "audio", etc.
1969
+ *
1970
+ * `"video-reference"` (video models only) means the model accepts a
1971
+ * reference VIDEO as a CONDITIONING clip — the r2v transport that
1972
+ * `resolveSeedance2Inputs` builds and that KIE receives as
1973
+ * `reference_video_urls`. It is what generate-video-pro's `extend` render
1974
+ * method needs (a continuation tail off the previous segment), and
1975
+ * `GVP_EXTEND_PROVIDERS` derives from it.
1976
+ *
1977
+ * It is deliberately NOT set on `gemini-omni-video`: that model's
1978
+ * `video_list` input is a V2V SOURCE clip with a trim window, an
1979
+ * auto-determined duration and flat per-generation pricing (see
1980
+ * `runGeminiOmni` in `backend/src/providers/kie/video.ts`) — a different
1981
+ * transport, not a continuation reference.
1982
+ */
1983
+ features?: readonly string[];
1984
+ aspectRatios?: readonly string[];
1985
+ resolutions?: readonly string[];
1986
+ qualities?: readonly string[];
1987
+ durations?: readonly number[];
1988
+ pricing: readonly PriceVariant[];
1989
+ /** Editorial highlight — "best in tier". Surfaces in MCP output as a ⭐. */
1990
+ featured?: boolean;
1991
+ /**
1992
+ * Per-model overrides for the global value label decorations (e.g. Hailuo
1993
+ * 2.3 Pro labels its 1080P resolution as "1080P (6s max)" because the
1994
+ * model caps long durations at lower resolution). Falls back to
1995
+ * `MODEL_VALUE_LABELS` for values not listed here.
1996
+ */
1997
+ valueLabels?: Record<string, string>;
1998
+ /**
1999
+ * Hide from MCP `list_models` output and tool model enums. Used for legacy
2000
+ * model versions superseded by newer entries — they remain in the catalog
2001
+ * (and accessible via direct API / frontend pickers for back-compat) but
2002
+ * stop showing up in Claude.ai's model picker, which keeps the surface
2003
+ * tight and steers the agent to the current generation.
2004
+ *
2005
+ * Frontend pickers ignore this flag.
2006
+ */
2007
+ mcpHidden?: boolean;
2008
+ }
1797
2009
  /**
1798
- * Compute composite model identifier for variable credit pricing.
1799
- * Examples: "gpt-image:high", "flux:2K", "nano-banana-pro:4K", "ideogram:TURBO",
1800
- * "flux-2-pro:2MP", "flux-2-max:2MP:1ref" (Flux 2 — billed per megapixel).
1801
- *
1802
- * For image models, uses quality/resolution/renderingSpeed and (Flux 2) the output
1803
- * megapixel count plus (Flux 2 Max) the number of reference images attached at request time.
1804
- * For video models, uses duration/sound params when the model has variable pricing.
2010
+ * Editorial recommendations — short "best for X" picks Claude can echo back
2011
+ * to the user when they don't know which model to use. Surfaces as a "Quick
2012
+ * recommendations" footer in MCP `list_models` output.
1805
2013
  */
1806
- declare function buildCreditModelIdentifier(provider: string, quality?: string, resolution?: string, renderingSpeed?: string, targetResolution?: string, referenceImageCount?: number): string;
2014
+ interface ModelRecommendation {
2015
+ intent: string;
2016
+ modelIds: readonly string[];
2017
+ note: string;
2018
+ }
2019
+ declare const MODEL_RECOMMENDATIONS: readonly ModelRecommendation[];
2020
+ declare const MODEL_CATALOG: Record<string, ModelCatalogEntry>;
1807
2021
  /**
1808
- * Reference-aware image-generation credit identifier — the SINGLE source of
1809
- * truth shared by the single-node routes (`/v1/generate-image`,
1810
- * `/v1/image-to-image`) and the workflow orchestrator
1811
- * (`payload-builder.ts`). It centralises the two pricing dimensions that must
1812
- * match across both paths or a Flux 2 generation is billed the wrong tier
1813
- * (Flux 2 commits non-metered / has no upward true-up, so the reserved
1814
- * identifier IS the final charge):
1815
- * - `refCount`: the number of reference images sent to the provider (Flux 2
1816
- * bills per ref). generate-image passes the assembled count (0 for pure
1817
- * text-to-image); image-to-image passes 1 (the primary `imageUrl`) + extras.
1818
- * - `swapToI2i`: generate-image auto-swaps a bare T2I provider to its i2i
1819
- * sibling (`T2I_TO_I2I_VARIANT`) when refs are attached, so the credit id
1820
- * matches the variant actually invoked. image-to-image is already an i2i
1821
- * provider → pass `false`.
1822
- *
1823
- * The LoRA short-circuit (`flux-lora-character`) stays at the call site because
1824
- * the routing decision needs a DB lookup the routes/orchestrator own.
2022
+ * Lookup helpers for MCP and the future frontend migration.
1825
2023
  */
1826
- declare function resolveImageGenCreditIdentifier(opts: {
1827
- provider: string | undefined;
1828
- quality?: string;
1829
- resolution?: string;
1830
- renderingSpeed?: string;
1831
- refCount: number;
1832
- swapToI2i?: boolean;
1833
- }): string;
1834
- declare function buildVideoCreditModelIdentifier(provider: string, duration?: number | string, sound?: boolean, nodeType?: "image-to-video" | "text-to-video", mode?: string, resolution?: string, hasVideoRef?: boolean): string;
2024
+ declare function listModels(filter?: {
2025
+ kind?: ModelKind;
2026
+ mode?: ModelMode;
2027
+ family?: string;
2028
+ }): ModelCatalogEntry[];
1835
2029
  /**
1836
- * Compute composite model identifier for motion control with duration-tiered pricing.
1837
- * Examples: "kling-3.0-motion:10s", "kling-3.0-motion:1080p:15s", "motion-transfer:5s"
2030
+ * Group entries by family, returning a stable order.
2031
+ * Returns Array<{ family: string; models: ModelCatalogEntry[] }>.
2032
+ */
2033
+ declare function groupByFamily(entries: ModelCatalogEntry[]): Array<{
2034
+ family: string;
2035
+ models: ModelCatalogEntry[];
2036
+ }>;
2037
+ declare function getModel(id: string): ModelCatalogEntry | undefined;
2038
+ type ValidationField = "aspectRatio" | "resolution" | "quality" | "duration";
2039
+ interface ModelValidationIssue {
2040
+ field: ValidationField;
2041
+ message: string;
2042
+ allowed: readonly (string | number)[] | null;
2043
+ }
2044
+ /**
2045
+ * Validate that the user's lever values are supported by the chosen model.
1838
2046
  *
1839
- * Wan Animate providers use resolution-tiered pricing (not per-second):
1840
- * "wan-animate-move" (480p default), "wan-animate-move:580p", "wan-animate-move:720p"
2047
+ * Returns null on success or the FIRST issue found. We surface a single issue
2048
+ * rather than collecting all so the agent doesn't get a wall of complaints —
2049
+ * fix one thing, retry. Order: aspectRatio → resolution → quality → duration.
1841
2050
  *
1842
- * @param provider - Motion control provider key ("kling" for 2.6, "kling-3.0", "wan-animate-move", "wan-animate-replace")
1843
- * @param resolution - "720p" or "1080p" (Kling), "480p" or "580p" or "720p" (Wan Animate)
1844
- * @param videoDuration - Reference video duration in seconds (defaults to 10s, unused for Wan Animate)
2051
+ * Semantics:
2052
+ * - If the field is undefined, it's never an issue.
2053
+ * - If the catalog entry doesn't list a corresponding lever (e.g. base
2054
+ * nano-banana has no `resolutions`), passing that field IS an issue —
2055
+ * silently dropping it has caused two bugs already.
2056
+ * - If the value is in the allow list, it's valid.
2057
+ *
2058
+ * Unknown model ids are NOT flagged here — the route handler / Zod model
2059
+ * enum is the right gate for that. We just skip validation.
1845
2060
  */
1846
- declare function buildMotionCreditModelIdentifier(provider: string, resolution: string, videoDuration?: number): string;
1847
-
2061
+ declare function validateModelInput(modelId: string, input: {
2062
+ aspectRatio?: string;
2063
+ resolution?: string;
2064
+ quality?: string;
2065
+ duration?: number;
2066
+ }): ModelValidationIssue | null;
1848
2067
  /**
1849
- * Pure credit estimators for video-utility nodes (loop-video, trim-video,
1850
- * combine-videos). Used by frontend (Run-button display + API call) AND
1851
- * backend (creditGuard reservation) so the displayed cost equals what gets
1852
- * debited.
2068
+ * The resolution a Flux 2 model should land on when its stored value is absent
2069
+ * or invalid. Flux 2 exposes ascending megapixel options ("0.5 MP"…"4 MP"), so
2070
+ * snapping to `options[0]` would silently downgrade every node to the cheapest
2071
+ * tier; each variant has a sensible mid default instead. Returns undefined for
2072
+ * every non-Flux-2 model (they snap to `options[0]` normally).
1853
2073
  */
1854
- declare const VIDEO_UTIL_PRICING: {
1855
- /** 1 credit per 5 seconds of output, ceiling. */
1856
- readonly CREDITS_PER_5_SEC: 1;
1857
- /** Smart-loop-cut work scales at 1 credit per ~24 frames searched. */
1858
- readonly FRAMES_PER_CREDIT: 24;
1859
- /** Used when an upstream node hasn't produced a measurable duration yet. */
1860
- readonly FALLBACK_DURATION_SECONDS: 8;
1861
- };
1862
- interface LoopVideoEstimatorInput {
1863
- mode?: "repeat" | "duration";
1864
- repeatCount?: number;
1865
- targetDuration?: number;
1866
- smartLoopCutBeforeRepeat?: boolean;
1867
- smartLoopCutLookback?: number;
2074
+ declare function defaultResolutionFor(modelId: string): string | undefined;
2075
+ /** One correction `normalizeModelInput` made, for disclosure to the user. */
2076
+ interface ModelInputAdjustment {
2077
+ field: "aspectRatio" | "resolution" | "quality" | "duration";
2078
+ /** The value that was asked for. */
2079
+ from: string | number;
2080
+ /** What it became — `undefined` means the lever was dropped entirely. */
2081
+ to: string | number | undefined;
2082
+ reason: string;
1868
2083
  }
1869
- interface TrimVideoEstimatorInput {
1870
- trimMode?: "time" | "seconds" | "keep-first-seconds" | "keep-last-seconds" | "frames" | "smart-loop-cut";
1871
- startTime?: number;
1872
- endTime?: number;
1873
- /** Seconds-mirror of frames mode: trim N seconds from start AND/OR end. */
1874
- trimStartSeconds?: number;
1875
- trimEndSeconds?: number;
1876
- /** Keep only the first/last N seconds (probes duration at runtime). */
1877
- keepFirstSeconds?: number;
2084
+ interface NormalizedModelInput {
2085
+ aspectRatio?: string;
2086
+ resolution?: string;
2087
+ quality?: string;
2088
+ duration?: number;
2089
+ /** Empty when the input was already valid. */
2090
+ adjustments: ModelInputAdjustment[];
2091
+ }
2092
+ /**
2093
+ * Coerce a model's parameters into a combination the model actually accepts.
2094
+ *
2095
+ * The correcting twin of `validateModelInput`. Validation is right when a
2096
+ * human/agent is composing a single call and can retry (MCP verbs do this).
2097
+ * It is the WRONG answer at a persistence or execution boundary: rejecting
2098
+ * there turns a fixable typo into a failed run — and a failed run takes every
2099
+ * already-generated, already-billed sibling node down with it. Incident
2100
+ * 2026-08-09: one node carrying `gpt-image` + `16:9` (a pair the config panel
2101
+ * cannot produce, written straight into workflow JSON by a non-UI author)
2102
+ * aborted a run whose five other nodes had already produced images.
2103
+ *
2104
+ * Rules, mirroring the config panels' provider-change snap:
2105
+ * - Model has no such lever → drop the value (sending it 400s upstream).
2106
+ * - Value outside the model's allow-list → snap to the model's default
2107
+ * (`defaultResolutionFor`) or the first valid option.
2108
+ * - Then apply cross-field constraints that only hold for certain models.
2109
+ *
2110
+ * Unknown model ids pass through untouched — the route's Zod model enum is the
2111
+ * right gate for those, exactly as in `validateModelInput`.
2112
+ *
2113
+ * Every correction is reported in `adjustments` so callers can disclose what
2114
+ * changed rather than silently handing back something else.
2115
+ */
2116
+ declare function normalizeModelInput(modelId: string, input: {
2117
+ aspectRatio?: string;
2118
+ resolution?: string;
2119
+ quality?: string;
2120
+ duration?: number;
2121
+ }): NormalizedModelInput;
2122
+ interface LabeledOption {
2123
+ value: string;
2124
+ label: string;
2125
+ }
2126
+ /** Return `{value, label}[]` for the model's aspect ratios, or `null` if none. */
2127
+ declare function getAspectRatioOptions(modelId: string): LabeledOption[] | null;
2128
+ /** Return `{value, label}[]` for the model's resolution lever, or `null` if none. */
2129
+ declare function getResolutionOptions(modelId: string): LabeledOption[] | null;
2130
+ /** Return `{value, label}[]` for the model's quality lever, or `null` if none. */
2131
+ declare function getQualityOptions(modelId: string): LabeledOption[] | null;
2132
+ /** Return the model's allowed durations (in seconds), or `null` if none. */
2133
+ declare function getDurationsForModel(modelId: string): number[] | null;
2134
+ /**
2135
+ * Min/max credits across all pricing variants — used by the frontend's
2136
+ * "5–8 cr" range badge in the model dropdown. `null` for models with a
2137
+ * single price point.
2138
+ */
2139
+ declare function getCreditRange(modelId: string): {
2140
+ min: number;
2141
+ max: number;
2142
+ } | null;
2143
+ /** Whether the model declares a given capability flag in its `features` array. */
2144
+ declare function hasFeature(modelId: string, feature: string): boolean;
2145
+ /**
2146
+ * All ids in the catalog whose `features` includes the given flag. Used by
2147
+ * frontend to build PROVIDERS_WITH_END_FRAME / PROVIDERS_WITH_REFERENCES
2148
+ * lists derived from the catalog.
2149
+ */
2150
+ declare function modelsWithFeature(feature: string): string[];
2151
+ /**
2152
+ * Map of `{modelId: durations[]}` for every catalog entry whose `modes`
2153
+ * includes the given mode. Used to derive KIE_VIDEO_DURATIONS (mode i2v)
2154
+ * and KIE_T2V_DURATIONS (mode t2v) on the frontend.
2155
+ */
2156
+ declare function durationsByMode(mode: ModelMode): Record<string, number[]>;
2157
+ /**
2158
+ * Map of `{modelId: LabeledOption[]}` for every catalog entry of the given
2159
+ * kind that exposes a resolution lever. Used to derive
2160
+ * IMAGE_RESOLUTION_OPTIONS / VIDEO_RESOLUTION_OPTIONS on the frontend.
2161
+ */
2162
+ declare function resolutionOptionsByKind(kind: ModelKind): Record<string, LabeledOption[]>;
2163
+ /**
2164
+ * Map of `{modelId: LabeledOption[]}` for every catalog entry of the given
2165
+ * kind that exposes an aspect_ratio lever.
2166
+ */
2167
+ declare function aspectRatioOptionsByKind(kind: ModelKind): Record<string, LabeledOption[]>;
2168
+ /** Same shape as `aspectRatioOptionsByKind` but for `qualities`. */
2169
+ declare function qualityOptionsByKind(kind: ModelKind): Record<string, LabeledOption[]>;
2170
+ /** One shaped model row for a picker — capabilities derived from the catalog. */
2171
+ interface ModelMenuOption {
2172
+ /** Catalog id (the API enum value). */
2173
+ id: string;
2174
+ /** Human-readable display name from the catalog. */
2175
+ label: string;
2176
+ /** Resolution levers, `[]` when the model exposes none. */
2177
+ resolutions: LabeledOption[];
2178
+ /** Aspect-ratio levers, `[]` when the model exposes none. */
2179
+ aspectRatios: LabeledOption[];
2180
+ /** Duration levers in seconds (union of i2v+t2v modes); `[]` for image / fixed-duration models. */
2181
+ durations: {
2182
+ value: number;
2183
+ label: string;
2184
+ }[];
2185
+ }
2186
+ /**
2187
+ * Build shaped picker rows for one catalog `kind` from a caller-supplied id
2188
+ * allowlist (the curation — which ids, in what order, stays the caller's). Every
2189
+ * CAPABILITY is derived from the catalog accessors, never hardcoded, so the menu
2190
+ * can't drift as the catalog evolves. Ids absent from the catalog or of the
2191
+ * wrong kind are skipped (so a stale allowlist entry drops out cleanly). Pure;
2192
+ * returns fresh arrays (never aliases the accessor maps).
2193
+ */
2194
+ declare function buildModelMenu(kind: ModelKind, allowlist: readonly string[]): ModelMenuOption[];
2195
+ /** All `{modelId: {min, max}}` entries that have variable pricing (>1 variant). */
2196
+ declare function creditRangesAll(): Record<string, {
2197
+ min: number;
2198
+ max: number;
2199
+ }>;
2200
+ /**
2201
+ * Tuple of model ids for a given kind + one or more modes. Built for use as
2202
+ * a Zod `z.enum()` argument so MCP tool input schemas stay in sync with the
2203
+ * catalog without manual maintenance.
2204
+ *
2205
+ * Filters out `mcpHidden: true` entries by default — pass `includeHidden`
2206
+ * to surface legacy versions (used internally by validators that still need
2207
+ * to recognize older ids forwarded by direct API callers).
2208
+ *
2209
+ * Pass `kind: null` to skip the kind filter — useful for cross-kind ids
2210
+ * like "grok" (catalog kind=image, modes include both t2i and t2v).
2211
+ */
2212
+ declare function modelIdsByKindMode(kind: ModelKind | null, modes: readonly ModelMode[], opts?: {
2213
+ includeHidden?: boolean;
2214
+ }): [string, ...string[]];
2215
+
2216
+ /**
2217
+ * Build composite credit model identifiers for variable pricing.
2218
+ * Shared between frontend and backend.
2219
+ */
2220
+
2221
+ /**
2222
+ * Compute composite model identifier for variable credit pricing.
2223
+ * Examples: "gpt-image:high", "flux:2K", "nano-banana-pro:4K", "ideogram:TURBO",
2224
+ * "flux-2-pro:2MP", "flux-2-max:2MP:1ref" (Flux 2 — billed per megapixel).
2225
+ *
2226
+ * For image models, uses quality/resolution/renderingSpeed and (Flux 2) the output
2227
+ * megapixel count plus (Flux 2 Max) the number of reference images attached at request time.
2228
+ * For video models, uses duration/sound params when the model has variable pricing.
2229
+ */
2230
+ declare function buildCreditModelIdentifier(provider: string, quality?: string, resolution?: string, renderingSpeed?: string, targetResolution?: string, referenceImageCount?: number): string;
2231
+ /**
2232
+ * An image request's catalog-snapped parameters PLUS the credit identifier
2233
+ * priced off them.
2234
+ *
2235
+ * `adjustments` is the disclosure channel: every lever this changed, why, and
2236
+ * to what. Routes return it in the 200 body so a caller learns their value was
2237
+ * corrected instead of silently getting something else.
2238
+ */
2239
+ interface NormalizedImageGen {
2240
+ /** Credit identifier, priced off the SNAPPED `resolution` / `quality`. */
2241
+ identifier: string;
2242
+ /** The catalog model id the params were snapped against (post T2I→I2I swap). */
2243
+ modelId: string;
2244
+ aspectRatio?: string;
2245
+ resolution?: string;
2246
+ quality?: string;
2247
+ /** Empty when the caller's values were already valid for `modelId`. */
2248
+ adjustments: ModelInputAdjustment[];
2249
+ }
2250
+ /**
2251
+ * Snap an image request's catalog-governed levers to a combination the model
2252
+ * actually accepts, and price the credit identifier off the SNAPPED values.
2253
+ *
2254
+ * WHY THE SNAP LIVES HERE and not at the call site. Both image routes compute
2255
+ * their credit identifier TWICE — once in the `creditGuard` preHandler (the
2256
+ * CHECK) and once at the handler's `reserveCreditsForJob` (the DEBIT) — and a
2257
+ * dedicated test asserts the two stay byte-identical (see
2258
+ * `backend/src/routes/__tests__/generate-image.test.ts`, "CHECK === DEBIT").
2259
+ * `resolution` and `quality` are pricing dimensions, so a snap applied at only
2260
+ * one of those sites breaks that invariant, and `commit_credits` never collects
2261
+ * an upward delta — the reserve IS the charge. Putting the snap inside the
2262
+ * primitive makes CHECK, DEBIT and the workflow orchestrator agree by
2263
+ * construction rather than by everyone remembering to call a normalizer.
2264
+ *
2265
+ * Inputs are typed `unknown` on purpose: the preHandler runs BEFORE Zod, so a
2266
+ * caller can put a number or an object in `resolution`. Non-strings become
2267
+ * `undefined` rather than reaching `normalizeModelInput` as a lie.
2268
+ *
2269
+ * Unknown model ids pass through untouched (same contract as
2270
+ * `normalizeModelInput`) — the route's provider enum is the gate for those.
2271
+ */
2272
+ declare function resolveNormalizedImageGen(opts: {
2273
+ provider: string | undefined;
2274
+ aspectRatio?: unknown;
2275
+ quality?: unknown;
2276
+ resolution?: unknown;
2277
+ renderingSpeed?: unknown;
2278
+ refCount: number;
2279
+ swapToI2i?: boolean;
2280
+ }): NormalizedImageGen;
2281
+ /**
2282
+ * Reference-aware image-generation credit identifier — the SINGLE source of
2283
+ * truth shared by the single-node routes (`/v1/generate-image`,
2284
+ * `/v1/image-to-image`) and the workflow orchestrator
2285
+ * (`payload-builder.ts`). It centralises the two pricing dimensions that must
2286
+ * match across both paths or a Flux 2 generation is billed the wrong tier
2287
+ * (Flux 2 commits non-metered / has no upward true-up, so the reserved
2288
+ * identifier IS the final charge):
2289
+ * - `refCount`: the number of reference images sent to the provider (Flux 2
2290
+ * bills per ref). generate-image passes the assembled count (0 for pure
2291
+ * text-to-image); image-to-image passes 1 (the primary `imageUrl`) + extras.
2292
+ * - `swapToI2i`: generate-image auto-swaps a bare T2I provider to its i2i
2293
+ * sibling (`T2I_TO_I2I_VARIANT`) when refs are attached, so the credit id
2294
+ * matches the variant actually invoked. image-to-image is already an i2i
2295
+ * provider → pass `false`.
2296
+ *
2297
+ * The LoRA short-circuit (`flux-lora-character`) stays at the call site because
2298
+ * the routing decision needs a DB lookup the routes/orchestrator own.
2299
+ */
2300
+ declare function resolveImageGenCreditIdentifier(opts: {
2301
+ provider: string | undefined;
2302
+ quality?: string;
2303
+ resolution?: string;
2304
+ renderingSpeed?: string;
2305
+ refCount: number;
2306
+ swapToI2i?: boolean;
2307
+ }): string;
2308
+ declare function buildVideoCreditModelIdentifier(provider: string, duration?: number | string, sound?: boolean, nodeType?: "image-to-video" | "text-to-video", mode?: string, resolution?: string, hasVideoRef?: boolean): string;
2309
+ /**
2310
+ * Compute composite model identifier for motion control with duration-tiered pricing.
2311
+ * Examples: "kling-3.0-motion:10s", "kling-3.0-motion:1080p:15s", "motion-transfer:5s"
2312
+ *
2313
+ * Wan Animate providers use resolution-tiered pricing (not per-second):
2314
+ * "wan-animate-move" (480p default), "wan-animate-move:580p", "wan-animate-move:720p"
2315
+ *
2316
+ * @param provider - Motion control provider key ("kling" for 2.6, "kling-3.0", "wan-animate-move", "wan-animate-replace")
2317
+ * @param resolution - "720p" or "1080p" (Kling), "480p" or "580p" or "720p" (Wan Animate)
2318
+ * @param videoDuration - Reference video duration in seconds (defaults to 10s, unused for Wan Animate)
2319
+ */
2320
+ declare function buildMotionCreditModelIdentifier(provider: string, resolution: string, videoDuration?: number): string;
2321
+ /**
2322
+ * The Suno operations whose credit key depends on the model VERSION.
2323
+ *
2324
+ * `/v1/suno/generate`, `/cover` and `/extend` resolve their creditGuard
2325
+ * identifier through `sunoCreditType(model, <operation>)` (routes/suno.ts
2326
+ * :247-249, :335-337, :407-409). EVERY other Suno route charges a flat
2327
+ * per-operation key and ignores the version the node carries — mashup (:648),
2328
+ * add-instrumental (:852), add-vocals (:907), upload-extend (:1016),
2329
+ * replace-section (:710), style-boost (:771), convert-wav (:962),
2330
+ * lyrics (:482), music-video (:594), voice (:1218).
2331
+ *
2332
+ * Anything that QUOTES a Suno price — a dropdown row, a node badge, the
2333
+ * workflow-credit estimator — must follow the same split, or it displays a
2334
+ * credit key the route never charges.
2335
+ */
2336
+ declare const SUNO_VERSION_PRICED_OPERATIONS: readonly ["suno-generate", "suno-cover", "suno-extend"];
2337
+ /**
2338
+ * The seven Suno operations that appear behind a select/dropdown UI (model
2339
+ * pickers, node badges, the credit estimator) — the three version-priced
2340
+ * operations above, plus the four flat-key operations exercised by
2341
+ * `sunoCreditType`'s own test suite. A readonly tuple so later tasks (the
2342
+ * model dropdowns, node badges) can iterate or count it without redeclaring
2343
+ * the list and drifting from this one.
2344
+ */
2345
+ declare const SUNO_SELECT_OPERATIONS: readonly ["suno-generate", "suno-cover", "suno-extend", "suno-mashup", "suno-add-instrumental", "suno-add-vocals", "suno-upload-extend"];
2346
+ /**
2347
+ * OUR Nodaro credit key for a Suno operation, given the model version and the
2348
+ * operation (which is also the node type and the BullMQ job name).
2349
+ *
2350
+ * This is the single source of truth for the Suno pricing contract, shared by
2351
+ * the reservation path (routes/suno.ts creditGuard), the egress seam
2352
+ * (workers/handlers/suno.ts `modelKey`, which must match what was reserved),
2353
+ * both workflow-credit estimators (ee/billing/credits.ts and the frontend
2354
+ * config-panels/helpers.ts), the seven Suno model dropdowns and the three Suno
2355
+ * node badges. It is a billing key — NEVER a KIE provider id — which is what
2356
+ * satisfies the B3 egress invariant.
2357
+ *
2358
+ * V5_5 → "suno-v5_5", V5 → "suno-v5", any other version → the operation key.
2359
+ * A non-version-priced operation is returned unchanged.
2360
+ */
2361
+ declare function sunoCreditType(model: string | undefined, operation: string): string;
2362
+
2363
+ /**
2364
+ * Pure credit estimators for video-utility nodes (loop-video, trim-video,
2365
+ * combine-videos). Used by frontend (Run-button display + API call) AND
2366
+ * backend (creditGuard reservation) so the displayed cost equals what gets
2367
+ * debited.
2368
+ */
2369
+ declare const VIDEO_UTIL_PRICING: {
2370
+ /** 1 credit per 5 seconds of output, ceiling. */
2371
+ readonly CREDITS_PER_5_SEC: 1;
2372
+ /** Smart-loop-cut work scales at 1 credit per ~24 frames searched. */
2373
+ readonly FRAMES_PER_CREDIT: 24;
2374
+ /** Used when an upstream node hasn't produced a measurable duration yet. */
2375
+ readonly FALLBACK_DURATION_SECONDS: 8;
2376
+ };
2377
+ interface LoopVideoEstimatorInput {
2378
+ mode?: "repeat" | "duration";
2379
+ repeatCount?: number;
2380
+ targetDuration?: number;
2381
+ smartLoopCutBeforeRepeat?: boolean;
2382
+ smartLoopCutLookback?: number;
2383
+ }
2384
+ interface TrimVideoEstimatorInput {
2385
+ trimMode?: "time" | "seconds" | "keep-first-seconds" | "keep-last-seconds" | "frames" | "smart-loop-cut";
2386
+ startTime?: number;
2387
+ endTime?: number;
2388
+ /** Seconds-mirror of frames mode: trim N seconds from start AND/OR end. */
2389
+ trimStartSeconds?: number;
2390
+ trimEndSeconds?: number;
2391
+ /** Keep only the first/last N seconds (probes duration at runtime). */
2392
+ keepFirstSeconds?: number;
1878
2393
  keepLastSeconds?: number;
1879
2394
  trimStartFrames?: number;
1880
2395
  trimEndFrames?: number;
@@ -4248,497 +4763,175 @@ declare function getAnimalLabel(id: string | undefined | null, fallback?: string
4248
4763
  * `picker-catalogs.ts`'s own uppercase value imports and can only SHRINK, so a
4249
4764
  * new raw-array reader under `packages/prompts/src` fails CI. A FUNCTION in
4250
4765
  * `@nodaro/shared` (where the catalog itself lives) is invisible to that scan
4251
- * and is the same "functions only" discipline `direction-registry.ts` follows.
4252
- *
4253
- * Empty string on a miss, matching every `get*PromptHint` in `@nodaro/prompts`:
4254
- * a retired or unknown id contributes no clause rather than throwing.
4255
- */
4256
- declare function getAnimalPromptHint(id: string | undefined | null): string;
4257
- /**
4258
- * The COMPACT counterpart of `getAnimalPromptHint`: the same lookup, the same
4259
- * empty-string-on-miss, returning the short professional term a prompt would
4260
- * actually carry ("golden retriever", "t-rex") instead of the full clause.
4261
- *
4262
- * An authored `term` wins; otherwise the label IS the professional term for a
4263
- * concrete object, resolved through the mechanical derivation — NOT a bare
4264
- * `toLowerCase()` — so a parenthetical label is stripped exactly the way every
4265
- * other catalog strips it.
4266
- */
4267
- declare function getAnimalTerm(id: string | undefined | null): string;
4268
- declare const ANIMAL_SUBCATEGORY_LABELS: Readonly<Record<AnimalSubcategory, string>>;
4269
- declare const ANIMAL_SUBCATEGORY_ORDER: ReadonlyArray<AnimalSubcategory>;
4270
-
4271
- /**
4272
- * Canonical catalog of furniture presets for the Object entity node.
4273
- *
4274
- * When the Object category is "furniture", users pick a specific furniture
4275
- * piece from this catalog. The picker auto-fills the object's `objectName`
4276
- * and `description` so the existing `buildObjectPrompt` pipeline just works
4277
- * — no backend prompt changes needed.
4278
- *
4279
- * Organized into everyday sub-categories: seating, tables, beds, storage,
4280
- * lighting, kitchen & dining, outdoor, decorative, and bath.
4281
- */
4282
- type FurnitureSubcategory = "seating" | "tables" | "beds" | "storage" | "lighting" | "kitchen-dining" | "outdoor" | "decorative" | "bath";
4283
- interface Furniture {
4284
- readonly id: string;
4285
- readonly label: string;
4286
- readonly subcategory: FurnitureSubcategory;
4287
- readonly description: string;
4288
- /**
4289
- * Optional authored compact term — the short phrase a professional would
4290
- * write in a prompt, as opposed to the user-facing `label` (see the `term`
4291
- * convention in `@nodaro/prompts`'s `term.ts`). Authored ONLY where the
4292
- * lowercased label is not that phrase — a UI compound naming two things at
4293
- * once ("Airship / Dirigible" -> "airship", "Plasma Sword / Lightsaber" ->
4294
- * "plasma sword"). Everywhere else the lowercased label IS the term for a
4295
- * concrete object ("golden retriever", "katana"), so nothing is authored.
4296
- */
4297
- readonly term?: string;
4298
- }
4299
- declare const FURNITURE: ReadonlyArray<Furniture>;
4300
- declare function getFurniture(id: string | undefined | null): Furniture | undefined;
4301
- declare function getFurnitureLabel(id: string | undefined | null, fallback?: string): string;
4302
- declare const FURNITURE_SUBCATEGORY_LABELS: Readonly<Record<FurnitureSubcategory, string>>;
4303
- declare const FURNITURE_SUBCATEGORY_ORDER: ReadonlyArray<FurnitureSubcategory>;
4304
-
4305
- /**
4306
- * Facets of a source character/asset that can be selectively injected into a
4307
- * consumer character via the Character node's Assets handle (element/asset
4308
- * injection, P2). Single source of truth for the frontend facet chip options
4309
- * AND the backend facet-extraction instructions.
4310
- *
4311
- * `full` injects the whole source description verbatim (no LLM call needed).
4312
- * Every other facet is LLM-extracted on demand from the source's
4313
- * `canonicalDescription` via `POST /v1/character/extract-facet`.
4314
- */
4315
- interface CharacterFacet {
4316
- /** Stable id stored on the connection (`assetInjections[].facet`). */
4317
- readonly id: string;
4318
- /** Human label shown in the facet chip. */
4319
- readonly label: string;
4320
- /** What the extractor should pull from the source description. Phrased to
4321
- * complete "Extract {instruction} …". Unused for `full`. */
4322
- readonly instruction: string;
4323
- }
4324
- declare const CHARACTER_FACETS: readonly CharacterFacet[];
4325
- declare const DEFAULT_CHARACTER_FACET = "full";
4326
- declare const CHARACTER_FACET_IDS: ReadonlySet<string>;
4327
- declare function getCharacterFacet(id: string): CharacterFacet | undefined;
4328
-
4329
- /**
4330
- * Canonical catalog of vehicle presets for the Object entity node.
4331
- *
4332
- * When the Object category is "vehicle", users pick a specific vehicle from
4333
- * this catalog. The picker auto-fills the object's `objectName` and
4334
- * `description` so the existing `buildObjectPrompt` pipeline just works — no
4335
- * backend prompt changes needed.
4336
- *
4337
- * Organized into everyday sub-categories: classic cars, everyday cars,
4338
- * performance cars, motorcycles, bicycles (human-powered), trucks, transit
4339
- * (buses + rail + horse-drawn), aircraft, watercraft, military, construction,
4340
- * and sci-fi.
4341
- */
4342
- type VehicleSubcategory = "cars-classic" | "cars-everyday" | "cars-performance" | "motorcycles" | "bicycles" | "trucks" | "transit" | "aircraft" | "watercraft" | "military" | "construction" | "sci-fi";
4343
- interface Vehicle {
4344
- readonly id: string;
4345
- readonly label: string;
4346
- readonly subcategory: VehicleSubcategory;
4347
- readonly description: string;
4348
- /**
4349
- * Optional authored compact term — the short phrase a professional would
4350
- * write in a prompt, as opposed to the user-facing `label` (see the `term`
4351
- * convention in `@nodaro/prompts`'s `term.ts`). Authored ONLY where the
4352
- * lowercased label is not that phrase — a UI compound naming two things at
4353
- * once ("Airship / Dirigible" -> "airship", "Plasma Sword / Lightsaber" ->
4354
- * "plasma sword"). Everywhere else the lowercased label IS the term for a
4355
- * concrete object ("golden retriever", "katana"), so nothing is authored.
4356
- */
4357
- readonly term?: string;
4358
- }
4359
- declare const VEHICLES: ReadonlyArray<Vehicle>;
4360
- declare function getVehicle(id: string | undefined | null): Vehicle | undefined;
4361
- declare function getVehicleLabel(id: string | undefined | null, fallback?: string): string;
4362
- declare const VEHICLE_SUBCATEGORY_LABELS: Readonly<Record<VehicleSubcategory, string>>;
4363
- declare const VEHICLE_SUBCATEGORY_ORDER: ReadonlyArray<VehicleSubcategory>;
4364
-
4365
- /**
4366
- * Canonical catalog of weapon presets for the Object entity node.
4367
- *
4368
- * When the Object category is "weapon", users pick a specific weapon from
4369
- * this catalog. The picker auto-fills the object's `objectName` and
4370
- * `description` so the existing `buildObjectPrompt` pipeline just works —
4371
- * no backend prompt changes needed.
4372
- *
4373
- * Organized by weapon family: swords, daggers, axes, polearms, bows,
4374
- * blunt/impact, throwing, modern firearms, historical firearms, explosives
4375
- * & siege, sci-fi, and fantasy.
4376
- */
4377
- type WeaponSubcategory = "swords" | "daggers" | "axes" | "polearms" | "bows" | "blunt" | "throwing" | "firearms-modern" | "firearms-historical" | "explosives-siege" | "sci-fi" | "fantasy";
4378
- interface Weapon {
4379
- readonly id: string;
4380
- readonly label: string;
4381
- readonly subcategory: WeaponSubcategory;
4382
- readonly description: string;
4383
- /**
4384
- * Optional authored compact term — the short phrase a professional would
4385
- * write in a prompt, as opposed to the user-facing `label` (see the `term`
4386
- * convention in `@nodaro/prompts`'s `term.ts`). Authored ONLY where the
4387
- * lowercased label is not that phrase — a UI compound naming two things at
4388
- * once ("Airship / Dirigible" -> "airship", "Plasma Sword / Lightsaber" ->
4389
- * "plasma sword"). Everywhere else the lowercased label IS the term for a
4390
- * concrete object ("golden retriever", "katana"), so nothing is authored.
4391
- */
4392
- readonly term?: string;
4393
- }
4394
- declare const WEAPONS: ReadonlyArray<Weapon>;
4395
- declare function getWeapon(id: string | undefined | null): Weapon | undefined;
4396
- declare function getWeaponLabel(id: string | undefined | null, fallback?: string): string;
4397
- declare const WEAPON_SUBCATEGORY_LABELS: Readonly<Record<WeaponSubcategory, string>>;
4398
- declare const WEAPON_SUBCATEGORY_ORDER: ReadonlyArray<WeaponSubcategory>;
4399
-
4400
- /**
4401
- * Multi-select helpers for parameter dimensions that allow up to N picks.
4402
- *
4403
- * A dimension's stored value can be:
4404
- * - undefined / "" / [] → no pick
4405
- * - string → single pick (back-compat with single-select fields)
4406
- * - string[] → multi pick (1..N entries)
4407
- *
4408
- * `pickIds` normalizes any of those into a clean string[] (deduped, falsy
4409
- * entries dropped). Pickers cap the array at `maxSelected` (FIFO replacement
4410
- * is the picker's responsibility, not this helper's).
4411
- *
4412
- * Multi-select dimensions today: Person.ethnicity, Mood.mood, Aesthetic.aesthetic.
4413
- */
4414
- declare function pickIds(value: unknown): string[];
4415
- /**
4416
- * Cap a multi-pick array at `maxSelected`, FIFO-replacing the oldest entry
4417
- * when the array is full and a new id is added. Returns a fresh array.
4418
- */
4419
- declare function togglePick(current: ReadonlyArray<string>, id: string, maxSelected: number): string[];
4420
-
4421
- /**
4422
- * Model catalog — single source of truth for what each Nodaro-exposed model
4423
- * is, who made it, what it's good for, and which knobs it accepts.
4424
- *
4425
- * Consumed by:
4426
- * - Backend MCP `list_models` tool (renders the nested per-kind / per-family
4427
- * response so Claude can pick the right model for a user's intent)
4428
- * - (future) Frontend config panels — today they read parallel registries
4429
- * in `frontend/src/components/editor/config-panels/model-options.ts`; a
4430
- * follow-up will migrate them to import from here.
4431
- *
4432
- * Authoring rules:
4433
- * - Keep `description` to one line (≤120 chars). It's what Claude reads to
4434
- * decide which model to use.
4435
- * - `useCases` is a small set of short tags (1-3 words) — verbs/nouns Claude
4436
- * can match against user intent ("typography", "character", "fast",
4437
- * "cinematic"). Stay consistent across entries: don't write "text" in one
4438
- * and "typography" in another.
4439
- * - `aspectRatios` / `resolutions` / `qualities` only appear when the model
4440
- * actually exposes that lever (e.g., Nano Banana base has no `resolution`).
4441
- * - `durations` is in seconds.
4442
- * - `pricing[0]` is ALWAYS the default variant (the bare id without a
4443
- * composite suffix like `:4K` or `:high`).
4444
- * - Costs are sourced from `STATIC_CREDIT_COSTS` (see backend
4445
- * `src/billing/credits.ts`). Keep them in sync if the table changes.
4446
- * - After editing `MODEL_CATALOG` or `MODEL_RECOMMENDATIONS`, run
4447
- * `npm run gen:skills` (from `backend/`) to refresh the public
4448
- * `docs/choosing-models.md` guide. CI (`gen:skills:check`) fails on drift.
4449
- */
4450
- type ModelKind = "image" | "video" | "audio";
4451
- type ModelMode = "t2i" | "i2i" | "edit" | "upscale" | "remove-bg" | "i2v" | "t2v" | "v2v" | "extend" | "motion-transfer" | "lip-sync" | "video-upscale" | "tts" | "music" | "sfx" | "stt" | "voice-clone" | "voice-design" | "voice-changer" | "isolation" | "dubbing" | "forced-alignment" | "dialogue" | "video-analysis" | "video-audit";
4452
- interface PriceVariant {
4453
- /** Composite identifier as it appears in `STATIC_CREDIT_COSTS`. */
4454
- identifier: string;
4455
- /** Credits charged at reservation. */
4456
- credits: number;
4457
- /** Short human-readable note describing this variant ("1K default", "4K", "with audio"). */
4458
- note?: string;
4459
- }
4460
- interface ModelCatalogEntry {
4461
- id: string;
4462
- kind: ModelKind;
4463
- /**
4464
- * Operations this model supports. Many video models (minimax, veo3,
4465
- * seedance) support BOTH i2v AND t2v under the same id — the route handler
4466
- * picks which KIE endpoint to hit based on whether an image was supplied.
4467
- * For those, list both modes here so MCP filters and frontend pickers see
4468
- * the model in either context.
4469
- */
4470
- modes: readonly ModelMode[];
4471
- /** Vendor / lab that produced the model. Used for UI grouping. */
4472
- family: string;
4473
- /** Display name (NOT the id — the id is the API enum value). */
4474
- label: string;
4475
- /**
4476
- * Model LINE for the add-node Models tab — the brand-agnostic product line a
4477
- * user thinks in ("Nano Banana", "Flux", "VEO", "Kling", "ElevenLabs").
4478
- * Distinct from `family` (the lab: Google covers Nano Banana + Imagen + VEO).
4479
- * REQUIRED for every node-creatable model; a completeness guard in
4480
- * `@nodaro/shared` (model-tree.test.ts) fails if one is missing.
4481
- */
4482
- series?: string;
4483
- /**
4484
- * The value written into the creating node's data field when this model is
4485
- * picked from the Models tab, for models whose catalog id differs from the
4486
- * stored value. Only `suno-generate` diverges today (id `suno-v5` → `data.model`
4487
- * "V5"). Omit when the id IS the stored value (the common case).
4488
- */
4489
- dataValue?: string;
4490
- /** One-liner. Visible to Claude in MCP `list_models` output. */
4491
- description: string;
4492
- /** Short tags Claude matches against user intent. */
4493
- useCases: readonly string[];
4494
- /**
4495
- * Capabilities flags: "reference-image", "end-frame", "audio", etc.
4496
- *
4497
- * `"video-reference"` (video models only) means the model accepts a
4498
- * reference VIDEO as a CONDITIONING clip — the r2v transport that
4499
- * `resolveSeedance2Inputs` builds and that KIE receives as
4500
- * `reference_video_urls`. It is what generate-video-pro's `extend` render
4501
- * method needs (a continuation tail off the previous segment), and
4502
- * `GVP_EXTEND_PROVIDERS` derives from it.
4503
- *
4504
- * It is deliberately NOT set on `gemini-omni-video`: that model's
4505
- * `video_list` input is a V2V SOURCE clip with a trim window, an
4506
- * auto-determined duration and flat per-generation pricing (see
4507
- * `runGeminiOmni` in `backend/src/providers/kie/video.ts`) — a different
4508
- * transport, not a continuation reference.
4509
- */
4510
- features?: readonly string[];
4511
- aspectRatios?: readonly string[];
4512
- resolutions?: readonly string[];
4513
- qualities?: readonly string[];
4514
- durations?: readonly number[];
4515
- pricing: readonly PriceVariant[];
4516
- /** Editorial highlight — "best in tier". Surfaces in MCP output as a ⭐. */
4517
- featured?: boolean;
4518
- /**
4519
- * Per-model overrides for the global value label decorations (e.g. Hailuo
4520
- * 2.3 Pro labels its 1080P resolution as "1080P (6s max)" because the
4521
- * model caps long durations at lower resolution). Falls back to
4522
- * `MODEL_VALUE_LABELS` for values not listed here.
4523
- */
4524
- valueLabels?: Record<string, string>;
4525
- /**
4526
- * Hide from MCP `list_models` output and tool model enums. Used for legacy
4527
- * model versions superseded by newer entries — they remain in the catalog
4528
- * (and accessible via direct API / frontend pickers for back-compat) but
4529
- * stop showing up in Claude.ai's model picker, which keeps the surface
4530
- * tight and steers the agent to the current generation.
4531
- *
4532
- * Frontend pickers ignore this flag.
4533
- */
4534
- mcpHidden?: boolean;
4535
- }
4536
- /**
4537
- * Editorial recommendations — short "best for X" picks Claude can echo back
4538
- * to the user when they don't know which model to use. Surfaces as a "Quick
4539
- * recommendations" footer in MCP `list_models` output.
4540
- */
4541
- interface ModelRecommendation {
4542
- intent: string;
4543
- modelIds: readonly string[];
4544
- note: string;
4545
- }
4546
- declare const MODEL_RECOMMENDATIONS: readonly ModelRecommendation[];
4547
- declare const MODEL_CATALOG: Record<string, ModelCatalogEntry>;
4548
- /**
4549
- * Lookup helpers for MCP and the future frontend migration.
4550
- */
4551
- declare function listModels(filter?: {
4552
- kind?: ModelKind;
4553
- mode?: ModelMode;
4554
- family?: string;
4555
- }): ModelCatalogEntry[];
4556
- /**
4557
- * Group entries by family, returning a stable order.
4558
- * Returns Array<{ family: string; models: ModelCatalogEntry[] }>.
4559
- */
4560
- declare function groupByFamily(entries: ModelCatalogEntry[]): Array<{
4561
- family: string;
4562
- models: ModelCatalogEntry[];
4563
- }>;
4564
- declare function getModel(id: string): ModelCatalogEntry | undefined;
4565
- type ValidationField = "aspectRatio" | "resolution" | "quality" | "duration";
4566
- interface ModelValidationIssue {
4567
- field: ValidationField;
4568
- message: string;
4569
- allowed: readonly (string | number)[] | null;
4570
- }
4571
- /**
4572
- * Validate that the user's lever values are supported by the chosen model.
4573
- *
4574
- * Returns null on success or the FIRST issue found. We surface a single issue
4575
- * rather than collecting all so the agent doesn't get a wall of complaints —
4576
- * fix one thing, retry. Order: aspectRatio → resolution → quality → duration.
4577
- *
4578
- * Semantics:
4579
- * - If the field is undefined, it's never an issue.
4580
- * - If the catalog entry doesn't list a corresponding lever (e.g. base
4581
- * nano-banana has no `resolutions`), passing that field IS an issue —
4582
- * silently dropping it has caused two bugs already.
4583
- * - If the value is in the allow list, it's valid.
4584
- *
4585
- * Unknown model ids are NOT flagged here — the route handler / Zod model
4586
- * enum is the right gate for that. We just skip validation.
4587
- */
4588
- declare function validateModelInput(modelId: string, input: {
4589
- aspectRatio?: string;
4590
- resolution?: string;
4591
- quality?: string;
4592
- duration?: number;
4593
- }): ModelValidationIssue | null;
4594
- /**
4595
- * The resolution a Flux 2 model should land on when its stored value is absent
4596
- * or invalid. Flux 2 exposes ascending megapixel options ("0.5 MP"…"4 MP"), so
4597
- * snapping to `options[0]` would silently downgrade every node to the cheapest
4598
- * tier; each variant has a sensible mid default instead. Returns undefined for
4599
- * every non-Flux-2 model (they snap to `options[0]` normally).
4600
- */
4601
- declare function defaultResolutionFor(modelId: string): string | undefined;
4602
- /** One correction `normalizeModelInput` made, for disclosure to the user. */
4603
- interface ModelInputAdjustment {
4604
- field: "aspectRatio" | "resolution" | "quality" | "duration";
4605
- /** The value that was asked for. */
4606
- from: string | number;
4607
- /** What it became — `undefined` means the lever was dropped entirely. */
4608
- to: string | number | undefined;
4609
- reason: string;
4610
- }
4611
- interface NormalizedModelInput {
4612
- aspectRatio?: string;
4613
- resolution?: string;
4614
- quality?: string;
4615
- duration?: number;
4616
- /** Empty when the input was already valid. */
4617
- adjustments: ModelInputAdjustment[];
4618
- }
4619
- /**
4620
- * Coerce a model's parameters into a combination the model actually accepts.
4621
- *
4622
- * The correcting twin of `validateModelInput`. Validation is right when a
4623
- * human/agent is composing a single call and can retry (MCP verbs do this).
4624
- * It is the WRONG answer at a persistence or execution boundary: rejecting
4625
- * there turns a fixable typo into a failed run — and a failed run takes every
4626
- * already-generated, already-billed sibling node down with it. Incident
4627
- * 2026-08-09: one node carrying `gpt-image` + `16:9` (a pair the config panel
4628
- * cannot produce, written straight into workflow JSON by a non-UI author)
4629
- * aborted a run whose five other nodes had already produced images.
4630
- *
4631
- * Rules, mirroring the config panels' provider-change snap:
4632
- * - Model has no such lever → drop the value (sending it 400s upstream).
4633
- * - Value outside the model's allow-list → snap to the model's default
4634
- * (`defaultResolutionFor`) or the first valid option.
4635
- * - Then apply cross-field constraints that only hold for certain models.
4636
- *
4637
- * Unknown model ids pass through untouched — the route's Zod model enum is the
4638
- * right gate for those, exactly as in `validateModelInput`.
4639
- *
4640
- * Every correction is reported in `adjustments` so callers can disclose what
4641
- * changed rather than silently handing back something else.
4642
- */
4643
- declare function normalizeModelInput(modelId: string, input: {
4644
- aspectRatio?: string;
4645
- resolution?: string;
4646
- quality?: string;
4647
- duration?: number;
4648
- }): NormalizedModelInput;
4649
- interface LabeledOption {
4650
- value: string;
4651
- label: string;
4652
- }
4653
- /** Return `{value, label}[]` for the model's aspect ratios, or `null` if none. */
4654
- declare function getAspectRatioOptions(modelId: string): LabeledOption[] | null;
4655
- /** Return `{value, label}[]` for the model's resolution lever, or `null` if none. */
4656
- declare function getResolutionOptions(modelId: string): LabeledOption[] | null;
4657
- /** Return `{value, label}[]` for the model's quality lever, or `null` if none. */
4658
- declare function getQualityOptions(modelId: string): LabeledOption[] | null;
4659
- /** Return the model's allowed durations (in seconds), or `null` if none. */
4660
- declare function getDurationsForModel(modelId: string): number[] | null;
4661
- /**
4662
- * Min/max credits across all pricing variants — used by the frontend's
4663
- * "5–8 cr" range badge in the model dropdown. `null` for models with a
4664
- * single price point.
4665
- */
4666
- declare function getCreditRange(modelId: string): {
4667
- min: number;
4668
- max: number;
4669
- } | null;
4670
- /** Whether the model declares a given capability flag in its `features` array. */
4671
- declare function hasFeature(modelId: string, feature: string): boolean;
4766
+ * and is the same "functions only" discipline `direction-registry.ts` follows.
4767
+ *
4768
+ * Empty string on a miss, matching every `get*PromptHint` in `@nodaro/prompts`:
4769
+ * a retired or unknown id contributes no clause rather than throwing.
4770
+ */
4771
+ declare function getAnimalPromptHint(id: string | undefined | null): string;
4672
4772
  /**
4673
- * All ids in the catalog whose `features` includes the given flag. Used by
4674
- * frontend to build PROVIDERS_WITH_END_FRAME / PROVIDERS_WITH_REFERENCES
4675
- * lists derived from the catalog.
4773
+ * The COMPACT counterpart of `getAnimalPromptHint`: the same lookup, the same
4774
+ * empty-string-on-miss, returning the short professional term a prompt would
4775
+ * actually carry ("golden retriever", "t-rex") instead of the full clause.
4776
+ *
4777
+ * An authored `term` wins; otherwise the label IS the professional term for a
4778
+ * concrete object, resolved through the mechanical derivation — NOT a bare
4779
+ * `toLowerCase()` — so a parenthetical label is stripped exactly the way every
4780
+ * other catalog strips it.
4676
4781
  */
4677
- declare function modelsWithFeature(feature: string): string[];
4782
+ declare function getAnimalTerm(id: string | undefined | null): string;
4783
+ declare const ANIMAL_SUBCATEGORY_LABELS: Readonly<Record<AnimalSubcategory, string>>;
4784
+ declare const ANIMAL_SUBCATEGORY_ORDER: ReadonlyArray<AnimalSubcategory>;
4785
+
4678
4786
  /**
4679
- * Map of `{modelId: durations[]}` for every catalog entry whose `modes`
4680
- * includes the given mode. Used to derive KIE_VIDEO_DURATIONS (mode i2v)
4681
- * and KIE_T2V_DURATIONS (mode t2v) on the frontend.
4787
+ * Canonical catalog of furniture presets for the Object entity node.
4788
+ *
4789
+ * When the Object category is "furniture", users pick a specific furniture
4790
+ * piece from this catalog. The picker auto-fills the object's `objectName`
4791
+ * and `description` so the existing `buildObjectPrompt` pipeline just works
4792
+ * — no backend prompt changes needed.
4793
+ *
4794
+ * Organized into everyday sub-categories: seating, tables, beds, storage,
4795
+ * lighting, kitchen & dining, outdoor, decorative, and bath.
4682
4796
  */
4683
- declare function durationsByMode(mode: ModelMode): Record<string, number[]>;
4797
+ type FurnitureSubcategory = "seating" | "tables" | "beds" | "storage" | "lighting" | "kitchen-dining" | "outdoor" | "decorative" | "bath";
4798
+ interface Furniture {
4799
+ readonly id: string;
4800
+ readonly label: string;
4801
+ readonly subcategory: FurnitureSubcategory;
4802
+ readonly description: string;
4803
+ /**
4804
+ * Optional authored compact term — the short phrase a professional would
4805
+ * write in a prompt, as opposed to the user-facing `label` (see the `term`
4806
+ * convention in `@nodaro/prompts`'s `term.ts`). Authored ONLY where the
4807
+ * lowercased label is not that phrase — a UI compound naming two things at
4808
+ * once ("Airship / Dirigible" -> "airship", "Plasma Sword / Lightsaber" ->
4809
+ * "plasma sword"). Everywhere else the lowercased label IS the term for a
4810
+ * concrete object ("golden retriever", "katana"), so nothing is authored.
4811
+ */
4812
+ readonly term?: string;
4813
+ }
4814
+ declare const FURNITURE: ReadonlyArray<Furniture>;
4815
+ declare function getFurniture(id: string | undefined | null): Furniture | undefined;
4816
+ declare function getFurnitureLabel(id: string | undefined | null, fallback?: string): string;
4817
+ declare const FURNITURE_SUBCATEGORY_LABELS: Readonly<Record<FurnitureSubcategory, string>>;
4818
+ declare const FURNITURE_SUBCATEGORY_ORDER: ReadonlyArray<FurnitureSubcategory>;
4819
+
4684
4820
  /**
4685
- * Map of `{modelId: LabeledOption[]}` for every catalog entry of the given
4686
- * kind that exposes a resolution lever. Used to derive
4687
- * IMAGE_RESOLUTION_OPTIONS / VIDEO_RESOLUTION_OPTIONS on the frontend.
4821
+ * Facets of a source character/asset that can be selectively injected into a
4822
+ * consumer character via the Character node's Assets handle (element/asset
4823
+ * injection, P2). Single source of truth for the frontend facet chip options
4824
+ * AND the backend facet-extraction instructions.
4825
+ *
4826
+ * `full` injects the whole source description verbatim (no LLM call needed).
4827
+ * Every other facet is LLM-extracted on demand from the source's
4828
+ * `canonicalDescription` via `POST /v1/character/extract-facet`.
4688
4829
  */
4689
- declare function resolutionOptionsByKind(kind: ModelKind): Record<string, LabeledOption[]>;
4830
+ interface CharacterFacet {
4831
+ /** Stable id stored on the connection (`assetInjections[].facet`). */
4832
+ readonly id: string;
4833
+ /** Human label shown in the facet chip. */
4834
+ readonly label: string;
4835
+ /** What the extractor should pull from the source description. Phrased to
4836
+ * complete "Extract {instruction} …". Unused for `full`. */
4837
+ readonly instruction: string;
4838
+ }
4839
+ declare const CHARACTER_FACETS: readonly CharacterFacet[];
4840
+ declare const DEFAULT_CHARACTER_FACET = "full";
4841
+ declare const CHARACTER_FACET_IDS: ReadonlySet<string>;
4842
+ declare function getCharacterFacet(id: string): CharacterFacet | undefined;
4843
+
4690
4844
  /**
4691
- * Map of `{modelId: LabeledOption[]}` for every catalog entry of the given
4692
- * kind that exposes an aspect_ratio lever.
4845
+ * Canonical catalog of vehicle presets for the Object entity node.
4846
+ *
4847
+ * When the Object category is "vehicle", users pick a specific vehicle from
4848
+ * this catalog. The picker auto-fills the object's `objectName` and
4849
+ * `description` so the existing `buildObjectPrompt` pipeline just works — no
4850
+ * backend prompt changes needed.
4851
+ *
4852
+ * Organized into everyday sub-categories: classic cars, everyday cars,
4853
+ * performance cars, motorcycles, bicycles (human-powered), trucks, transit
4854
+ * (buses + rail + horse-drawn), aircraft, watercraft, military, construction,
4855
+ * and sci-fi.
4693
4856
  */
4694
- declare function aspectRatioOptionsByKind(kind: ModelKind): Record<string, LabeledOption[]>;
4695
- /** Same shape as `aspectRatioOptionsByKind` but for `qualities`. */
4696
- declare function qualityOptionsByKind(kind: ModelKind): Record<string, LabeledOption[]>;
4697
- /** One shaped model row for a picker — capabilities derived from the catalog. */
4698
- interface ModelMenuOption {
4699
- /** Catalog id (the API enum value). */
4700
- id: string;
4701
- /** Human-readable display name from the catalog. */
4702
- label: string;
4703
- /** Resolution levers, `[]` when the model exposes none. */
4704
- resolutions: LabeledOption[];
4705
- /** Aspect-ratio levers, `[]` when the model exposes none. */
4706
- aspectRatios: LabeledOption[];
4707
- /** Duration levers in seconds (union of i2v+t2v modes); `[]` for image / fixed-duration models. */
4708
- durations: {
4709
- value: number;
4710
- label: string;
4711
- }[];
4857
+ type VehicleSubcategory = "cars-classic" | "cars-everyday" | "cars-performance" | "motorcycles" | "bicycles" | "trucks" | "transit" | "aircraft" | "watercraft" | "military" | "construction" | "sci-fi";
4858
+ interface Vehicle {
4859
+ readonly id: string;
4860
+ readonly label: string;
4861
+ readonly subcategory: VehicleSubcategory;
4862
+ readonly description: string;
4863
+ /**
4864
+ * Optional authored compact term — the short phrase a professional would
4865
+ * write in a prompt, as opposed to the user-facing `label` (see the `term`
4866
+ * convention in `@nodaro/prompts`'s `term.ts`). Authored ONLY where the
4867
+ * lowercased label is not that phrase — a UI compound naming two things at
4868
+ * once ("Airship / Dirigible" -> "airship", "Plasma Sword / Lightsaber" ->
4869
+ * "plasma sword"). Everywhere else the lowercased label IS the term for a
4870
+ * concrete object ("golden retriever", "katana"), so nothing is authored.
4871
+ */
4872
+ readonly term?: string;
4712
4873
  }
4874
+ declare const VEHICLES: ReadonlyArray<Vehicle>;
4875
+ declare function getVehicle(id: string | undefined | null): Vehicle | undefined;
4876
+ declare function getVehicleLabel(id: string | undefined | null, fallback?: string): string;
4877
+ declare const VEHICLE_SUBCATEGORY_LABELS: Readonly<Record<VehicleSubcategory, string>>;
4878
+ declare const VEHICLE_SUBCATEGORY_ORDER: ReadonlyArray<VehicleSubcategory>;
4879
+
4713
4880
  /**
4714
- * Build shaped picker rows for one catalog `kind` from a caller-supplied id
4715
- * allowlist (the curation — which ids, in what order, stays the caller's). Every
4716
- * CAPABILITY is derived from the catalog accessors, never hardcoded, so the menu
4717
- * can't drift as the catalog evolves. Ids absent from the catalog or of the
4718
- * wrong kind are skipped (so a stale allowlist entry drops out cleanly). Pure;
4719
- * returns fresh arrays (never aliases the accessor maps).
4881
+ * Canonical catalog of weapon presets for the Object entity node.
4882
+ *
4883
+ * When the Object category is "weapon", users pick a specific weapon from
4884
+ * this catalog. The picker auto-fills the object's `objectName` and
4885
+ * `description` so the existing `buildObjectPrompt` pipeline just works —
4886
+ * no backend prompt changes needed.
4887
+ *
4888
+ * Organized by weapon family: swords, daggers, axes, polearms, bows,
4889
+ * blunt/impact, throwing, modern firearms, historical firearms, explosives
4890
+ * & siege, sci-fi, and fantasy.
4720
4891
  */
4721
- declare function buildModelMenu(kind: ModelKind, allowlist: readonly string[]): ModelMenuOption[];
4722
- /** All `{modelId: {min, max}}` entries that have variable pricing (>1 variant). */
4723
- declare function creditRangesAll(): Record<string, {
4724
- min: number;
4725
- max: number;
4726
- }>;
4892
+ type WeaponSubcategory = "swords" | "daggers" | "axes" | "polearms" | "bows" | "blunt" | "throwing" | "firearms-modern" | "firearms-historical" | "explosives-siege" | "sci-fi" | "fantasy";
4893
+ interface Weapon {
4894
+ readonly id: string;
4895
+ readonly label: string;
4896
+ readonly subcategory: WeaponSubcategory;
4897
+ readonly description: string;
4898
+ /**
4899
+ * Optional authored compact term — the short phrase a professional would
4900
+ * write in a prompt, as opposed to the user-facing `label` (see the `term`
4901
+ * convention in `@nodaro/prompts`'s `term.ts`). Authored ONLY where the
4902
+ * lowercased label is not that phrase — a UI compound naming two things at
4903
+ * once ("Airship / Dirigible" -> "airship", "Plasma Sword / Lightsaber" ->
4904
+ * "plasma sword"). Everywhere else the lowercased label IS the term for a
4905
+ * concrete object ("golden retriever", "katana"), so nothing is authored.
4906
+ */
4907
+ readonly term?: string;
4908
+ }
4909
+ declare const WEAPONS: ReadonlyArray<Weapon>;
4910
+ declare function getWeapon(id: string | undefined | null): Weapon | undefined;
4911
+ declare function getWeaponLabel(id: string | undefined | null, fallback?: string): string;
4912
+ declare const WEAPON_SUBCATEGORY_LABELS: Readonly<Record<WeaponSubcategory, string>>;
4913
+ declare const WEAPON_SUBCATEGORY_ORDER: ReadonlyArray<WeaponSubcategory>;
4914
+
4727
4915
  /**
4728
- * Tuple of model ids for a given kind + one or more modes. Built for use as
4729
- * a Zod `z.enum()` argument so MCP tool input schemas stay in sync with the
4730
- * catalog without manual maintenance.
4916
+ * Multi-select helpers for parameter dimensions that allow up to N picks.
4731
4917
  *
4732
- * Filters out `mcpHidden: true` entries by default — pass `includeHidden`
4733
- * to surface legacy versions (used internally by validators that still need
4734
- * to recognize older ids forwarded by direct API callers).
4918
+ * A dimension's stored value can be:
4919
+ * - undefined / "" / [] → no pick
4920
+ * - string → single pick (back-compat with single-select fields)
4921
+ * - string[] → multi pick (1..N entries)
4735
4922
  *
4736
- * Pass `kind: null` to skip the kind filter — useful for cross-kind ids
4737
- * like "grok" (catalog kind=image, modes include both t2i and t2v).
4923
+ * `pickIds` normalizes any of those into a clean string[] (deduped, falsy
4924
+ * entries dropped). Pickers cap the array at `maxSelected` (FIFO replacement
4925
+ * is the picker's responsibility, not this helper's).
4926
+ *
4927
+ * Multi-select dimensions today: Person.ethnicity, Mood.mood, Aesthetic.aesthetic.
4738
4928
  */
4739
- declare function modelIdsByKindMode(kind: ModelKind | null, modes: readonly ModelMode[], opts?: {
4740
- includeHidden?: boolean;
4741
- }): [string, ...string[]];
4929
+ declare function pickIds(value: unknown): string[];
4930
+ /**
4931
+ * Cap a multi-pick array at `maxSelected`, FIFO-replacing the oldest entry
4932
+ * when the array is full and a new id is added. Returns a fresh array.
4933
+ */
4934
+ declare function togglePick(current: ReadonlyArray<string>, id: string, maxSelected: number): string[];
4742
4935
 
4743
4936
  /**
4744
4937
  * Caption styles for the add-captions node. Static path uses FFmpeg drawtext;
@@ -8923,6 +9116,12 @@ declare function stripTransientRuntimeData<T extends {
8923
9116
  * through mode-dependent defaults (`"adaptive"` for Seedance/Hailuo, duration
8924
9117
  * composites tied to pricing) that this flat normalizer would flatten wrongly;
8925
9118
  * they get their own pass once those defaults are catalog-derived too.
9119
+ *
9120
+ * `modify-image` carries the same provider/aspectRatio/resolution/quality trio
9121
+ * as `image-to-image` (it routes through the same worker), and `edit-image`
9122
+ * carries provider + aspectRatio. `edit-image`'s `targetResolution` is an
9123
+ * UPSCALE target, a different field this module never reads — so listing the
9124
+ * type here heals its ratio without touching what it is priced on.
8926
9125
  */
8927
9126
  declare const MODEL_PARAM_NODE_TYPES: ReadonlySet<string>;
8928
9127
  interface NodeParamAdjustment extends ModelInputAdjustment {
@@ -10372,6 +10571,19 @@ declare function inferMusicVideo(analysis: {
10372
10571
  }>;
10373
10572
  }>;
10374
10573
  } | undefined | null): boolean;
10574
+ /**
10575
+ * The analysis with its server-derived fields removed — the form an LLM is
10576
+ * handed when the analysis IS the brief (Nodaro Studio's Director and its
10577
+ * job-id loader). Drops `warnings` and `variationFolds` at the top and
10578
+ * `visualResolved`, `slotRefs`, `oversized` on every scene; keeps
10579
+ * `refImageUrl` (a downstream cast image) and everything else. Never mutates;
10580
+ * a non-object input comes back as-is.
10581
+ *
10582
+ * ONE strip list, shared by the worker that composes the brief server-side
10583
+ * (`llm-structured` jobs with a `videoUrl`) and the client that loads a
10584
+ * finished analysis into a textarea, so the two can never drift.
10585
+ */
10586
+ declare function stripDerivedAnalysisFields(json: unknown): unknown;
10375
10587
 
10376
10588
  /**
10377
10589
  * Video-analysis pricing — shared duration-bucket credit model.
@@ -10506,6 +10718,49 @@ declare function videoAuditCreditsForBucket(bucketSec: number, auto: boolean): n
10506
10718
  */
10507
10719
  declare function bucketSecondsFromAuditCreditId(id: string): number | null;
10508
10720
 
10721
+ /**
10722
+ * UI-default fills for the unified video nodes — the ONE source of truth shared
10723
+ * by the backend DAG payload builder, the config-panel fail-safe snaps and the
10724
+ * node's hover/run strip.
10725
+ *
10726
+ * Several config panels RENDER a default without persisting it to node data, so
10727
+ * an untouched node submits `aspectRatio` / `resolution` undefined and the
10728
+ * enqueued job row (and the /v1/jobs echo) then disagrees with what actually
10729
+ * renders. Worse, the panels' generic snap writes `resolutions[0]` for a stale
10730
+ * value, which is the CHEAPEST tier under the repo's ascending-resolution
10731
+ * convention — not necessarily the tier the model renders and bills.
10732
+ *
10733
+ * These helpers were local to `backend/src/services/workflow-engine/payload-builder.ts`
10734
+ * until the Wan 3.0 launch gave the platform its first provider whose declared
10735
+ * billing default differs from `resolutions[0]`; three surfaces then had to
10736
+ * agree, so they live here.
10737
+ *
10738
+ * The resolution fill is per-family ON PURPOSE. Wan 3.0 reads its DECLARED
10739
+ * billing default (PRICING_DEFAULT_RESOLUTION = 720p) because its catalog list
10740
+ * is ascending, so an index-0 fill would write 480p — a tier both `runWan3`
10741
+ * (which renders 720P) and the credit identifier (which bills the 720p row)
10742
+ * disagree with. The Seedance family keeps its historical first-catalog-tier
10743
+ * fill, deliberately: switching it to PRICING_DEFAULT_RESOLUTION would reprice
10744
+ * live seedance-2-5 runs, whose declared default (720p) differs from the 480p
10745
+ * this has always filled. That 480p-fill vs 720p-billing-default divergence on
10746
+ * seedance-2-5 is a KNOWN pre-existing gap, out of scope here — do not "align"
10747
+ * the branches without repricing it deliberately.
10748
+ */
10749
+ /** `adaptive` is the aspect default for Seedance 2, MiniMax H3 and Wan 3.0. */
10750
+ declare function uiAspectRatioFill(provider: string): string | undefined;
10751
+ /** See the file docstring — per-family on purpose; never a generic
10752
+ * PRICING_DEFAULT_RESOLUTION read (that would reprice seedance-2-5). */
10753
+ declare function uiResolutionFill(provider: string): string | undefined;
10754
+ /**
10755
+ * Duration the node RENDERS and BILLS when `data.duration` is unset, for the
10756
+ * families whose credit identifier declares a duration fallback that is NOT
10757
+ * `durations[0]`. Wan 3.0's bare identifier is the 5s tier while its ladder
10758
+ * starts at 2s; the Gemini Omni family's is the 8s tier while its ladder starts
10759
+ * at 4s. Everyone else falls back to the first listed duration, so this returns
10760
+ * undefined and the caller keeps `durations[0]`.
10761
+ */
10762
+ declare function uiDurationFill(provider: string): number | undefined;
10763
+
10509
10764
  /**
10510
10765
  * Smart-cut SEARCH WINDOWS — the shared bound + clamp for
10511
10766
  * generate-video-pro's `smartCutFramesPrev` / `smartCutFramesNext`.
@@ -10651,12 +10906,21 @@ declare const GRANTED_ACCESS: readonly ["view", "edit"];
10651
10906
  type GrantedAccess = (typeof GRANTED_ACCESS)[number];
10652
10907
  declare const SUBMISSION_STATUSES: readonly ["submitted", "in_review", "returned", "approved"];
10653
10908
  type SubmissionStatus = (typeof SUBMISSION_STATUSES)[number];
10909
+ /**
10910
+ * How a usage report is bucketed. `workspace` is org-scope only; `none`
10911
+ * = flat rows. A runtime list, like `ORG_ROLES`, so the plugin route's Zod is
10912
+ * `z.enum(USAGE_GROUP_BYS)` and the migration guard asserts the SQL
10913
+ * `NOT IN (...)` list equals this minus `none` — one vocabulary, never three
10914
+ * hand-copies that drift.
10915
+ */
10916
+ declare const USAGE_GROUP_BYS: readonly ["workspace", "member", "model", "day", "none"];
10917
+ type UsageGroupBy = (typeof USAGE_GROUP_BYS)[number];
10654
10918
  /**
10655
10919
  * Error codes the organization endpoints add to the standard envelope
10656
10920
  * (`{ error: { code, message } }`). Clients dispatch on the code, never on
10657
10921
  * the message text.
10658
10922
  */
10659
- declare const ORG_ERROR_CODES: readonly ["not_a_member", "insufficient_role", "org_not_active", "member_suspended", "workspace_archived", "personal_space_disabled", "token_workspace_mismatch", "run_requires_authenticated_member", "budget_exceeded", "member_cap_exceeded", "model_not_allowed", "invitation_expired", "invitation_revoked", "email_mismatch", "join_code_invalid", "domain_not_allowed", "already_started", "collab_unavailable", "terms_required", "not_org_member", "already_a_member", "owner_cannot_leave", "has_active_workspaces", "invitation_not_found", "invitation_accepted", "bulk_invite_cap_exceeded"];
10923
+ declare const ORG_ERROR_CODES: readonly ["not_a_member", "insufficient_role", "org_not_active", "member_suspended", "workspace_archived", "personal_space_disabled", "token_workspace_mismatch", "run_requires_authenticated_member", "budget_exceeded", "member_cap_exceeded", "model_not_allowed", "invitation_expired", "invitation_revoked", "email_mismatch", "join_code_invalid", "domain_not_allowed", "already_started", "collab_unavailable", "audit_unavailable", "terms_required", "not_org_member", "already_a_member", "owner_cannot_leave", "has_active_workspaces", "invitation_not_found", "invitation_accepted", "bulk_invite_cap_exceeded"];
10660
10924
  type OrgErrorCode = (typeof ORG_ERROR_CODES)[number];
10661
10925
  /**
10662
10926
  * The settings every organization kind has a default for. `organizations.
@@ -10933,6 +11197,133 @@ interface OrgPage<T> {
10933
11197
  data: T[];
10934
11198
  nextCursor: string | null;
10935
11199
  }
11200
+ /**
11201
+ * Usage reporting. What `GET /v1/orgs/:id/usage` and
11202
+ * `GET /v1/workspaces/:id/usage` return. No cost/USD field appears anywhere —
11203
+ * a report shows CREDITS a class or team spent, never the platform's own rates
11204
+ * (pricing-leak class, guarded by organizations-types.test.ts and the
11205
+ * migration guard).
11206
+ */
11207
+ /** One bucket of a usage report. Exactly one of workspace/member/model/day is set. */
11208
+ interface UsageReportRow {
11209
+ key: string;
11210
+ workspace: {
11211
+ id: string;
11212
+ name: string | null;
11213
+ slug: string | null;
11214
+ archived: boolean;
11215
+ } | null;
11216
+ member: {
11217
+ userId: string;
11218
+ displayName: string | null;
11219
+ email: string | null;
11220
+ } | null;
11221
+ model: string | null;
11222
+ /** `YYYY-MM-DD` in the report's `tz`. */
11223
+ day: string | null;
11224
+ runCount: number;
11225
+ appRunCount: number;
11226
+ /** Settled where known, the held reservation otherwise. = settledCredits + inFlightCredits. */
11227
+ credits: number;
11228
+ settledCredits: number;
11229
+ inFlightCredits: number;
11230
+ inFlightRuns: number;
11231
+ }
11232
+ /**
11233
+ * A platform-absorbed line for one workspace, split by ORIGIN (never attributed
11234
+ * to a member). Two ledgers share the `org_usage_variance` source: a
11235
+ * `metered_overrun` (a metered run's overrun beyond the budget — it HAS a
11236
+ * settled usage_logs counterpart) and an `app_markup` shortfall (an
11237
+ * approved-app markup the budget could not cover — it has NO usage_logs row).
11238
+ * `other` is a future/unrecognised origin.
11239
+ */
11240
+ interface UsageVarianceRow {
11241
+ workspace: {
11242
+ id: string;
11243
+ name: string | null;
11244
+ slug: string | null;
11245
+ } | null;
11246
+ kind: "metered_overrun" | "app_markup" | "other";
11247
+ credits: number;
11248
+ rowCount: number;
11249
+ }
11250
+ /**
11251
+ * Totals over the WHOLE window — every usage_logs row in [from, to] after the
11252
+ * scope / userId / workspaceId narrowing — never over the returned `rows`.
11253
+ * Unaffected by `truncated`; equals a `groupBy=day` report's column-wise sum.
11254
+ */
11255
+ interface UsageReportTotals {
11256
+ runCount: number;
11257
+ credits: number;
11258
+ settledCredits: number;
11259
+ inFlightCredits: number;
11260
+ /** Metered-overrun variance in the window — a run's overrun the platform absorbed. */
11261
+ platformAbsorbedCredits: number;
11262
+ /** Approved-app markup shortfall the platform absorbed. It has NO usage_logs run, so it is not in the figures above. */
11263
+ appMarkupAbsorbedCredits: number;
11264
+ /**
11265
+ * settledCredits − platformAbsorbedCredits: the METERED settlement that
11266
+ * reached the workspace budget(s). App markup charged to a budget (migration
11267
+ * 352) is not a usage_logs row and is not included here; when a markup
11268
+ * shortfall is absorbed this figure under-reports and may go negative — it is
11269
+ * NOT `workspace_budgets.spent_credits`.
11270
+ */
11271
+ chargedToBudget: number;
11272
+ }
11273
+ interface UsageReport {
11274
+ scope: "org" | "workspace";
11275
+ scopeId: string;
11276
+ from: string;
11277
+ to: string;
11278
+ tz: string;
11279
+ groupBy: Exclude<UsageGroupBy, "none">;
11280
+ /** Present when a member's self-view or an admin's `?userId=` narrowed the report. */
11281
+ userId: string | null;
11282
+ /** Present when an org report was narrowed to one workspace. */
11283
+ workspaceId: string | null;
11284
+ rows: UsageReportRow[];
11285
+ variance: UsageVarianceRow[];
11286
+ totals: UsageReportTotals;
11287
+ /**
11288
+ * True when more than 5000 buckets existed and the tail of `rows` was dropped
11289
+ * — narrow the window. Only `rows` is incomplete; `totals` and `variance`
11290
+ * cover the whole window regardless.
11291
+ */
11292
+ truncated: boolean;
11293
+ }
11294
+ /** One usage_logs row as an organization sees it. No cost fields, ever. */
11295
+ interface UsageLogEntry {
11296
+ id: string;
11297
+ createdAt: string;
11298
+ workspace: {
11299
+ id: string;
11300
+ name: string | null;
11301
+ slug: string | null;
11302
+ } | null;
11303
+ member: {
11304
+ userId: string;
11305
+ displayName: string | null;
11306
+ email: string | null;
11307
+ } | null;
11308
+ jobId: string | null;
11309
+ model: string;
11310
+ status: "reserved" | "committed";
11311
+ creditsReserved: number;
11312
+ creditsSettled: number | null;
11313
+ credits: number;
11314
+ isAppRun: boolean;
11315
+ }
11316
+ /** Query parameters shared by both usage routes (dates inclusive, IANA tz). */
11317
+ interface UsageQuery {
11318
+ from?: string;
11319
+ to?: string;
11320
+ tz?: string;
11321
+ groupBy?: UsageGroupBy;
11322
+ workspaceId?: string;
11323
+ userId?: string;
11324
+ cursor?: string;
11325
+ limit?: number;
11326
+ }
10936
11327
 
10937
11328
  /**
10938
11329
  * Which DB columns of a saved entity land on its canvas node, per kind.
@@ -11001,4 +11392,4 @@ declare function entityHydrationColumns(kind: EntityNodeKind): string[];
11001
11392
  /** Every scalar `kind` actually has, shared plus its own. */
11002
11393
  declare function entityScalarFields(kind: EntityNodeKind): ReadonlyArray<readonly [string, string]>;
11003
11394
 
11004
- export { ACCESS_LEVELS, ACTIVE_SCENE_HELPERS, ADVANCED_MODE_UNAVAILABLE_REASON, AGGREGATEABLE_TYPES, AGGREGATE_LANE_SOURCE_TYPES, AI_AVATAR_DURATION_BUCKETS, AI_AVATAR_MAX_AUDIO_SEC, AI_AVATAR_MAX_DURATION_SEC, AI_AVATAR_RESERVE_IDS, AI_WRITER_PROVIDERS, ALA_CARTE_BOARDS, ALL_CAPTION_STYLES, ANIMALS, ANIMAL_SUBCATEGORY_LABELS, ANIMAL_SUBCATEGORY_ORDER, ASPECT_RATIO_DIMENSIONS, AUDIO_ADDON_PROVIDERS, AUDIO_CROSSFADE_CURVES, AUDIO_CROSSFADE_CURVE_IDS, AUDIO_FX_PRESETS, AUDIO_FX_PRESET_LABELS, AUDIO_FX_PRESET_SET, AUDIO_FX_REVERB_PRESETS, AUDIO_PRODUCER_TYPES, type AccessLevel, type AddBRollResult, AddBRollResultSchema, type AggregateableType, type AggregationBuckets, type AiAvatarDurationBucket, type AiAvatarEngine, type AiAvatarResolution, type AiWriterProvider, type AlaCarteBoard, type AnalyzedScene, type AnchorSceneStyleResult, AnchorSceneStyleResultSchema, type Animal, type AnimalSubcategory, type AssetRef, AssetRefSchema, type AudioCrossfadeCurve, type AudioFxPreset, type AudioLayer, type AuditImagesResult, AuditImagesResultSchema, type AuditImagesShotEntry, AuditImagesShotEntrySchema, AuditPromptIssueSchema, type AuditPromptResult, AuditPromptResultSchema, AvatarPayloadError, BOARD_TO_ASSET_TYPE, BOARD_TO_COLUMN, BOARD_VARIANTS, type BoardEntityKind, type BoardPromptContext, type BoardTemplate, BridgeToNextSceneInputSchema, type BridgeToNextSceneResult, BridgeToNextSceneResultSchema, type BrowseCommunityParams, type BrowseCommunityResult, CATEGORY_DURATION_DEFAULTS, CHARACTER_ASPECT_DEFAULTS, CHARACTER_ASPECT_OPTIONS, CHARACTER_ASSET_TYPES, CHARACTER_ASSET_VARIANTS, CHARACTER_ATTACH_COLUMNS, CHARACTER_FACETS, CHARACTER_FACET_IDS, CHARACTER_LORA_TRAINING_JOB_TYPE, CHARACTER_MOTION_PROVIDERS, CHARACTER_PICKER_DISPLAY_ORDER, CHARACTER_REFERENCE_PHOTO_KINDS, CHARACTER_STYLES, CHARACTER_VARIANT_ASSET_BUCKETS, CHAT_ENABLED_STAGES, CHAT_STAGES, CHAT_TURN_CAPS, CHAT_WIRED_STAGES, CINEMATIC_DEFAULT_DURATION_SEC, CINEMATIC_DEFAULT_RESOLUTION, CINEMATIC_MAX_DURATION_SEC, CINEMATIC_MAX_LOOKS, CINEMATIC_MAX_REFERENCE_IMAGES, CINEMATIC_MAX_REFERENCE_VIDEOS, CINEMATIC_MIN_DURATION_SEC, CINEMATIC_MIN_LOOKS, CINEMATIC_PROMPT_MAX, CINEMATIC_RESERVE_IDS, COLLABORATOR_ROLES, COLLECT_IN_HANDLE, COMBINE_TRANSITIONS, COMBINE_TRANSITION_GROUP_LABELS, COMBINE_TRANSITION_GROUP_ORDER, COMBINE_TRANSITION_IDS, COMPOSER_PLAN_FIELDS, COMPOSER_PLAN_MAP, CONTENT_TYPES_BY_PLATFORM, CREATURE_ATTACH_COLUMNS, CREDIT_BASE_USD, CREDIT_ROUNDING_RESOLUTION, type CaptionStyle, type CastCoverageCriticVerdict, CastCoverageCriticVerdictSchema, type CharacterAspectRatio, type CharacterAssetType, type CharacterAssetTypeForAspect, type CharacterAttachColumn, type CharacterDef, type CharacterFacet, type CharacterImageCriticVerdict, CharacterImageCriticVerdictSchema, type CharacterLoraFields, type CharacterMentionTokenInfo, CharacterMetadataSchema, type CharacterMotionProvider, type CharacterReferencePhoto, type CharacterReferencePhotoKind, type CharacterVariantAssetBucket, type CharacterVariantAssetItem, type CharacterVoiceSpec, type ChatEnabledStage, type ChatTurnResponse, ChatTurnResponseSchema, type CinematicResolution, type ClipLook, type CloneListingResult, type CollaboratorRole, type CombineTransition, type CombineTransitionGroup, type CombineVideosEstimatorInput, type CommunityCard, type CommunityEntityType, type CommunityFullDetail, type CommunityReportReason, type CommunitySort, type ComponentHandle, type ComponentMetadata, type ConnectedReference, type CreatureAttachColumn, CriticIssueSchema, type CustomEntry, DEFAULT_AUDIO_CROSSFADE_CURVE_ID, DEFAULT_CARRIED_FRACTION, DEFAULT_CHARACTER_ANGLE_COUNT, DEFAULT_CHARACTER_EXPRESSION_COUNT, DEFAULT_CHARACTER_FACET, DEFAULT_LABEL_BY_SOURCE, DEFAULT_LOCATION_USAGE_MODE, DEFAULT_PANEL_COUNT, DEFAULT_REF_IMAGE_MAX, DEFAULT_SECTIONS, DEFAULT_USAGE_MODE, DEFAULT_VIDEO_ANALYSIS_MODEL, DEFAULT_VIDEO_ANALYSIS_TIER, DEFAULT_VIDEO_CLIP_COST, DEFAULT_VIDEO_DURATION_SEC, DEFAULT_VIDEO_PROVIDER, DEFAULT_VOICE_CHANGER_MODEL, DEFAULT_VOICE_DESIGN_MODEL, DETAIL_VARIANTS, DURATION_PRICED_PROVIDERS, DYNAMIC_PRODUCER_TYPES, type DetectionResult, DetectionResultSchema, type DialogueLine, EFFORT_TIER_BUMP, EMOTIONAL_BEAT, ENTITY_ASPECT_DEFAULTS, ENTITY_BUCKET_FIELDS, ENTITY_DB_ID_FIELD, ENTITY_IMAGE_HANDLE_TYPES, ENTITY_KIND_SCALAR_FIELDS, ENTITY_NAME_FIELD, ENTITY_NODE_KINDS, ENTITY_SCALAR_FIELDS, ENTITY_SECTIONS, ENTITY_STATUSES, ENTITY_TABLE, ENTITY_TOOL_RETRY_CAP, ENTITY_TYPES, EXECUTION_DATA_KEYS, EXTEND_VIDEO_PROVIDERS, type EntityKind, type EntityMentionTokenInfo, type EntityMetadata, EntityMetadataSchema, type EntityNodeKind, type EntityReferenceInput, type EntityRejectInput, EntityRejectInputSchema, type EntitySlot, type EntityStaleEvent, EntityStaleEventSchema, type EntityStateChangeEvent, EntityStateChangeEventSchema, type EntityStatus, type EntityStudioKind, type EntityStyle, type EntityType, type EvaluateConditionOptions, type ExportedPreset, type ExposableField, type ExposableOutput, type ExposedSetting, type ExtendVideoProvider, type ExtraRefCharacterContext, type ExtraRefInput, FACE_SWAP_PROVIDERS, FAL_LIP_SYNC_PROVIDERS, FAN_OUT_EACH_TYPES, FEATURED_ENTITIES, FILM_BASE_CREDITS, FLEXIBLE_INPUT_LIP_SYNC_PROVIDERS, FLUX2_RES_MP, FLUX_LORA_CHARACTER_MODEL_ID, FRAME_MODE_ADAPTIVE_ONLY_ASPECT, FRAME_TARGET_HANDLES, FREECUT_EXPORT_COMPLETE, FREECUT_EXPORT_PROGRESS, FREECUT_READY, FREECUT_REQUEST_IMPORT, FURNITURE, FURNITURE_SUBCATEGORY_LABELS, FURNITURE_SUBCATEGORY_ORDER, type FaceSwapProvider, type FavoriteListingResult, type FeaturedEntity, type FilmCreditEstimate, type FilterListCondition, type FilterListOperator, type FilterOperator, type FixContinuityInput, FixContinuityInputSchema, type FixContinuityResult, FixContinuityResultSchema, type Flux2Model, type FreecutExportCompletePayload, type FreecutExportProgressPayload, type FreecutImportFile, type FreecutRequestImportPayload, type FullSelectorMode, type Furniture, type FurnitureSubcategory, GENERATE_TEXT_DELIMITER, GLOBAL_MAX_DURATION_SECONDS, GRANTED_ACCESS, GROUP_HANDLE_PREFIX, GUIDANCE_SCALE_SUPPORT, GVP_ANCHOR_CHOICES, GVP_DEFAULT_PROVIDER, GVP_END_FRAME_PROVIDERS, GVP_EXTEND_PROVIDERS, GVP_SUPPORTED_PROVIDERS, GenerateMotionInputSchema, type GenerateMotionResult, GenerateMotionResultSchema, type GenericEdge, type GenericNode, type GrantedAccess, type GvpAnchorChoice, type GvpAnchorWireMode, HANDLE_PORT_SEPARATOR, HELPERS_SHIPPED_IN_1B3, HIGH_QUALITY_PROVIDERS, HINT_EXEMPT_PARAMETER_TYPES, type HintEdgeLike, type HintGraphContext, type HintNodeLike, type I18nCatalogId, I2I_MASK_SUPPORT, I2I_STRENGTH_SUPPORT, IDEOGRAM_PROVIDERS, IMAGE_CRITIC_LEAF_MODES, IMAGE_CRITIC_MAX_RETRIES, IMAGE_CRITIC_METADATA_KEYS, IMAGE_CRITIC_MIN_ADHERENCE_SCORE, IMAGE_CRITIC_MODES, IMAGE_CRITIC_UNRESOLVABLE, IMAGE_EDIT_PROVIDERS, IMAGE_GEN_PROVIDERS, IMAGE_I2I_PROVIDERS, IMAGE_MASK_MODE, IMAGE_PROMPT_MAX, IMAGE_REF_TYPES, IMAGE_TO_VIDEO_PROVIDERS, INPUT_FIELD_MAP, INPUT_NODE_TYPES, INSTAGRAM_CAROUSEL_MAX_ITEMS, INSTAGRAM_CAROUSEL_MIN_ITEMS, ITER_CLONE_PATTERN, type IdentityFidelity, type IdentityMeta, type ImageCriticIssue, ImageCriticIssueSchema, type ImageCriticLeafMode, type ImageCriticMetadataKey, type ImageCriticMode, type ImageCriticNodeIssue, type ImageCriticResult, ImageCriticResultSchema, type ImageCriticVerdict, ImageCriticVerdictSchema, type ImageEditProvider, type ImageGenProvider, type ImageI2IProvider, type ImageMaskMode, type ImageMentionTokenInfo, type ImageToVideoProvider, type ImprovePromptInput, ImprovePromptInputSchema, type ImprovePromptResult, ImprovePromptResultSchema, type InputFieldSchema, type InvitationDelivery, type InvitationPreview, type InvitationState, type InvitationView, type JoinCodeView, type JsonEvalResult, type JsonFilter, type JsonPatch, KEYFRAME_CREDITS_PER_SHOT, KINETIC_CAPTION_STYLES, type KieApiFormat, type KineticCaptionStyle, LANGUAGES, LEGACY_LOTTIE_HOST_REMAP, LIP_SYNC_DURATION_BUCKETS, LIP_SYNC_MAX_AUDIO_SECONDS, LIP_SYNC_PROVIDERS, LLM_FEATURE_DEFAULTS, LLM_MODALITY_CAPS, LLM_MODELS, LLM_MODEL_IDS, LLM_REASONING_EFFORTS, LLM_ROUTE_DEFAULTS, LLM_TEXT_INPUT_MAX, LLM_VENDOR_LABELS, LLM_VENDOR_ORDER, LOCATION_ASSET_TYPES, LOCATION_ASSET_VARIANTS, LOCATION_ATMOSPHERE_PROVIDERS, LOCATION_ATTACH_COLUMNS, LOCATION_BUCKET_TO_CATALOG_ID, LOCATION_PRESET_TO_CATALOG, LOCATION_REFERENCE_PHOTO_KINDS, LOCATION_REFERENCE_PHOTO_KIND_LABELS, LOCATION_USAGE_MODES, LOTTIE_OVERLAY_CATALOG, LOTTIE_SLOT_FIELD_PREFIX, type LabeledOption, type LipSyncDurationBucket, type LipSyncProvider, type LlmFeature, type LlmModelDef, type LlmModelGroup, type LlmReasoningEffort, type LlmRouteDefaults, type LlmTier, type LlmVendor, type LocaleCatalogMap, type LocaleDirection, type LocaleId, type LocationAssetType, type LocationAtmosphereProvider, type LocationAttachColumn, type LocationCatalogRef, type LocationImageCriticVerdict, LocationImageCriticVerdictSchema, type LocationMentionTokenInfo, LocationMetadataSchema, type LocationReferencePhotoKind, type LocationUsageMode, LocationsCoverageCriticIssueSchema, type LocationsCoverageCriticVerdict, LocationsCoverageCriticVerdictSchema, type LoopTrimEstimatorInput, type LoopVideoEstimatorInput, type LoraEligibleRef, type LoraRouting, type LottieOverlayCatalogEntry, type LottieSlotField, MAX_CUSTOM_ENTRIES_PER_BOARD, MAX_IMAGE_PROMPT_CHARS_BY_PROVIDER, MAX_LOCATION_VARIANTS, MAX_NEGATIVE_PROMPT_CHARS_BY_PROVIDER, MAX_PANELS_PER_SHEET, MAX_TTS_CHARS_BY_PROVIDER, MAX_VIDEO_PROMPT_CHARS_BY_PROVIDER, MEMBER_STATUSES, MINIMAX_H3_DEFAULT_RESOLUTION, MINIMAX_H3_PROVIDERS, MODELS_WITH_REFERENCE_IMAGE_SUPPORT, MODEL_CATALOG, MODEL_PARAM_NODE_TYPES, MODEL_RECOMMENDATIONS, MODIFY_IMAGE_PROVIDERS, MOTION_COLUMN, MOTION_TRANSFER_PROVIDERS, MUSIC_PROVIDERS, type MaskRegionDescriptor, type MatchCutVerdict, MatchCutVerdictSchema, type MeOrganizations, type Member, type MemberStatus, type MinimalEdge, type MinimalNode, type ModelCatalogEntry, type ModelInputAdjustment, type ModelKind, type ModelMenuOption, type ModelMode, type ModelNodeTarget, type ModelPromptingStyle, type ModelRecommendation, type ModelTreeLine, type ModelTreeVariant, type ModelValidationIssue, type ModifyImageProvider, type MotionTransferProviderType, type MusicProvider, NATIVE_ADAPTIVE_ASPECT, NATIVE_NEGATIVE_PROMPT_MODELS, NATIVE_NEGATIVE_VIDEO_PROVIDERS, NEGATIVE_PROMPT_MAX, NODARO_IMPORT_FILES, NODARO_LOAD_TIMELINE, NODARO_LOAD_VIDEO, NODARO_RESET_PROJECT, NODE_DEFAULT_TYPES, NODE_MAPPABLE_FIELDS, NODE_PRESET_EXPORT_KIND, NODE_REF_PATTERN, NON_EN_LOCALE_IDS, NO_SPLIT_DELIMITER, type NodaroLoadTimelinePayload, type NodaroLoadVideoPayload, type NodeDefaultType, type NodeParamAdjustment, type NodePresetExport, type NormalizedModelInput, type NormalizedNodes, OBJECT_ASPECT_DEFAULTS, OBJECT_ASPECT_OPTIONS, OBJECT_ASSET_TYPES, OBJECT_ASSET_VARIANTS, OBJECT_ATTACH_COLUMNS, OBJECT_MOTION_PROVIDERS, OBJECT_PICKER_NODE_TYPES, ORG_ERROR_CODES, ORG_KINDS, ORG_ROLES, ORG_STATUSES, OUTPUT_FIELD_MAP, OUTPUT_FORMATS, type ObjectAspectRatio, type ObjectAssetType, type ObjectAssetTypeForAspect, type ObjectAttachColumn, ObjectMetadataSchema, type ObjectMotionProvider, type ObjectsValidationIssue, type ObjectsValidationResult, OptimizeForModelInputSchema, type OptimizeForModelResult, OptimizeForModelResultSchema, type OrgAuditEntry, type OrgErrorCode, type OrgKind, type OrgMemberView, type OrgPage, type OrgRole, type OrgSettings, OrgSettingsSchema, type OrgStatus, type OrganizationSummary, type OrganizationView, type OutputFormat, type OutputMode, type OutputType, PARAMETER_NODE_TYPES, PASSTHROUGH_TYPES, PAYG_RETENTION_DAYS, PER_FORMAT_DURATION_BOUNDS, PICKER_TO_COMBINE_TRANSITION, PIPELINE_ACTIVATION_MODES, PIPELINE_FORMATS, PIPELINE_HARD_TIMEOUT_MS, PIPELINE_MODEL_STAGES, PIPELINE_MODES, PIPELINE_OUTPUT_RESOLUTIONS, PIPELINE_PINNABLE_IMAGE_MODELS, PIPELINE_PINNABLE_SCRIPT_LLMS, PIPELINE_PINNABLE_VIDEO_MODELS, PIPELINE_STAGE_NAMES, PIPELINE_STAGE_TIMEOUT_MS, PIPELINE_TYPES, PLACEHOLDER_CHARACTER_NAME, PLATFORM_LABELS, PLATFORM_SPECS, PRESET_APPLY_CLEAR_KEYS, PRESET_EXCLUDED_KEYS, PRESET_LABELS, PRESET_SETTING_KEYS, PRICING_DEFAULT_DURATION_SEC, PRICING_DEFAULT_RESOLUTION, PROMPT_HARD_CEILING, PROMPT_PREFIX_KEY, PROMPT_SUFFIX_KEY, PROVIDER_DIRECTIVE_DEFAULTS, PROVIDER_PLACEHOLDER_PREFIX, type PanelGenRequest, type PanelRequest, type PanelSource, type PipelineActivationMode, type PipelineCompletedEvent, PipelineCompletedEventSchema, type PipelineConfig, PipelineConfigSchema, type PipelineDriftSummary, PipelineDriftSummarySchema, type PipelineEditorDecisionsReadyEvent, PipelineEditorDecisionsReadyEventSchema, type PipelineEvent, type PipelineForkedEvent, PipelineForkedEventSchema, type PipelineFormat, type PipelineInput, PipelineInputSchema, type PipelineLifecycleEvent, type PipelineMode, type PipelineModelStage, type PipelineMusicReadyEvent, PipelineMusicReadyEventSchema, type PipelineOutputResolution, type PipelinePinnableImageModel, type PipelinePinnableScriptLlm, type PipelinePinnableVideoModel, type PipelineStageName, PipelineStageNameSchema, type PipelineStageStatus, PipelineStageStatusSchema, type PipelineState, PipelineStateSchema, type PipelineStatus, PipelineStatusSchema, type PipelineType, type PixelBox, type PresentationItem, type PresetEntry, type PresetSettingKey, type PresetSettings, PresetSettingsSchema, type PriceVariant, type ProgressSegment, type ProjectedCatalog, type ProjectedCatalogDimension, type ProjectedCatalogOption, type PromptAffixFields, type PromptAffixes, type ProposedChange, type PublishListingParams, type PublishListingResult, QA_CHECK_PROVIDERS, type QaCheckProvider, type QualityLevel, REDUCE_STRATEGIES, REDUCE_STRATEGY_IDS, REFERENCE_BOARD_PROVIDERS, REFERENCE_BOARD_TEMPLATES, REFERENCE_HANDLE_MAP, REFERENCE_ROLE_PRESETS, REF_HANDLE_CATEGORY, REF_IMAGE_MAX_LIMITS, RENDERING_SPEED_SUPPORT, REPEATABLE_NODE_TYPES, REPEAT_PLACEHOLDER, REPLICATE_LIP_SYNC_PROVIDERS, RESERVED_TEMPLATE_VARS, type ReduceMeta, type ReduceStrategy, type ReduceStrategyId, type RefCandidate, type RefModalityEdge, type ReferenceBoardProvider, type ReferenceModality, type ReferenceSheet, type ReferenceSource, type ReportListingResult, type ResolveCharacterAspectOptions, type ResolveObjectAspectOptions, type ResolveSeparatorOptions, type ResolvedDialogueVoiceLine, type RouterConditionGroup, SCENE_HELPER_NAMES, SCRAPER_ACTOR_LABELS, SCRAPER_CREDIT_COSTS, SCRAPER_OUTPUT_FIELDS, SCRIPT_PROVIDERS, SEASONS, SECTION_BOARD, SECTION_KINDS, SEEDANCE_2_5_REF_LIMITS, SEEDANCE_2_CONTINUATION_REF_SEC, SEEDANCE_2_EXTEND_STITCH, SEEDANCE_2_PROVIDERS, SEEDANCE_2_R2V_MAX_AUDIO_SEC_BY_PROVIDER, SEEDANCE_2_R2V_MIN_REF_VIDEO_SEC, SEEDANCE_2_REF_LIMITS, SEEDANCE_LIP_SYNC_PROVIDERS, SEED_SUPPORT, SEPARATOR_DISPLAY, SEPARATOR_PRESETS, SHEET_ASPECTS, SHEET_BACKGROUNDS, SHEET_PRESETS, SHEET_SKINS, SHEET_TYPES, SHORT_FILM_ANGLE_COUNT, SHORT_FILM_EXPRESSION_COUNT, SHORT_FILM_VARIANT_THRESHOLD_SEC, SLOT_TOKEN_RE, SMART_CUT_WINDOW_DEFAULT, SMART_CUT_WINDOW_MAX, SMART_CUT_WINDOW_MIN, SOCIAL_POST_NODE_TYPES, STAGE_PATCH_SCHEMA, STATIC_CAPTION_STYLES, STRUCTURAL_SECTIONS, STRUCTURED_VISION_MODELS, SUBMISSION_STATUSES, SUNO_ADD_TRACK_MODELS, SUNO_FIELD_HANDLE_FIELDS, SUNO_MODELS, SUNO_TEXT_MAX, SUNO_TITLE_MAX, SUNO_TRACK_SOURCE_TYPES, SUPPORTED_FONT_NAMES, SURROUND_DIRECTIONS, SWITCHX_BLOCK_FRAMES, SWITCHX_FRAME_TIERS, type SceneData, type SceneHelperName, SceneHelperNameSchema, type SceneInputMode, SceneInputModeSchema, type SceneMetadata, SceneMetadataSchema, type SceneNodeData, SceneNodeDataSchema, SceneSpecSchema, type ScraperActorId, type ScriptCriticVerdict, ScriptCriticVerdictSchema, type ScriptProvider, type Season, type SectionKind, type SelectorConfig, type SelectorFields, type SelectorMode, type SelectorPredicateOp, type SelectorResult, type SemanticAspectRatio, type SeparatorPreset, type SharedListing, type SharedVoice, type SheetAspect, type SheetBackground, type SheetCostEstimate, type SheetEntry, type SheetFlavour, type SheetGenerationPlan, type SheetPreset, type SheetPresetId, type SheetSection, type SheetSkin, type SheetTextData, type SheetType, type ShotElement, type ShotImageElement, type ShotShapeElement, type ShotSpec, ShotSpecSchema, type ShotTextElement, type ShowrunnerPlan, ShowrunnerPlanSchema, type SidecarLoader, type SlotControlDescriptor, type SlotControlKind, type SlotVariation, type SocialMediaContentType, type SocialMediaPlatform, type SocialMediaSpec, type SortDirection, type SortListOptions, type SortType, type StageAwaitingSubGateEvent, StageAwaitingSubGateEventSchema, type StaticCaptionStyle, type StoryboardCohesionCriticVerdict, StoryboardCohesionCriticVerdictSchema, type StyleDirectives, StyleDirectivesSchema, type SubGateName, SubGateNameSchema, type SubmissionStatus, type SunoAddTrackModel, type SunoModel, type SupportedFontName, type SurroundDirection, type Swatch, T2I_TO_I2I_VARIANT, TASK_CHAINED_EDIT_PROVIDERS, TEXT_TO_AUDIO_PROVIDERS, TEXT_TO_VIDEO_PROVIDERS, TIER_MAX_PIPELINE_COST_CREDITS, TIER_PIPELINE_PARALLELISM, TILT_CARRIED_FRACTION, TRANSCRIBE_PROVIDERS, TRANSIENT_RUNTIME_KEYS, TTS_PROVIDERS, TTS_TEXT_MAX, TWO_K_RESOLUTION_PROVIDERS, type TextToAudioProvider, type TextToVideoProvider, type TranscribeProvider, type TransitionType, TransitionTypeSchema, type TrimVideoEstimatorInput, type TtsProvider, UPSCALE_IMAGE_PROVIDERS, USAGE_MODES, type UpscaleImageProvider, type UsageMode, VARIABLES_HANDLE_ID, VARIABLE_PRICING_MODELS, VEHICLES, VEHICLE_SUBCATEGORY_LABELS, VEHICLE_SUBCATEGORY_ORDER, VEO_PROVIDERS, VIDEO_ANALYSIS_BUCKET_CREDITS, VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN, VIDEO_ANALYSIS_DEFAULT_VARIATION, VIDEO_ANALYSIS_DURATION_BUCKETS, VIDEO_ANALYSIS_DURATION_TOLERANCE_SEC, VIDEO_ANALYSIS_ENTITY_SOURCES, VIDEO_ANALYSIS_FACELESS_ANGLES, VIDEO_ANALYSIS_LEGACY_MODELS, VIDEO_ANALYSIS_LLM_MODELS, VIDEO_ANALYSIS_MAX_DURATION_SEC, VIDEO_ANALYSIS_MAX_SCENE_SEC, VIDEO_ANALYSIS_MAX_VARIATIONS, VIDEO_ANALYSIS_MIXED_TIERS, VIDEO_ANALYSIS_SHOT_ANGLES, VIDEO_ANALYSIS_SPEED_EFFECTS, VIDEO_ANALYSIS_STORY_JUMPS, VIDEO_ANALYSIS_TEXT_KINDS, VIDEO_ANALYSIS_TIERS, VIDEO_ANALYSIS_TIER_LABELS, VIDEO_ANALYSIS_TIER_ORDER, VIDEO_ANALYSIS_TIMES_OF_DAY, VIDEO_ANALYSIS_TRANSITIONS, VIDEO_ANALYSIS_VARIATION_SLUGS, VIDEO_ANALYSIS_VISUAL_EFFECTS, VIDEO_ANALYSIS_WINDOW, VIDEO_AUDIO_CAPABILITY, VIDEO_AUDIT_BUCKET_CREDITS, VIDEO_CLIP_CREDITS, VIDEO_CRITIC_CREDITS_PER_SHOT, VIDEO_CRITIC_FRAME_MODES, VIDEO_CRITIC_MAX_RETRIES, VIDEO_CRITIC_METADATA_KEYS, VIDEO_CRITIC_MIN_ADHERENCE_SCORE, VIDEO_DURATION_TIERS, VIDEO_GEN_COLLAPSED_T2V_IDS, VIDEO_GEN_PROVIDERS, VIDEO_INPUT_LIP_SYNC_PROVIDERS, VIDEO_MODEL_CAPS, VIDEO_MODE_ALIASES, VIDEO_PRODUCER_TYPES, VIDEO_PROMPT_MAX, VIDEO_PROVIDERS_REQUIRING_IMAGE, VIDEO_PROVIDERS_WITHOUT_DISPATCH, VIDEO_REF_LIMITS_BY_PROVIDER, VIDEO_TO_VIDEO_PROVIDERS, VIDEO_UPSCALE_PROVIDERS, VIDEO_UTIL_PRICING, VIDEO_VARIABLE_PRICING, VOICE_CHANGER_MODELS, VOICE_CHANGER_MODEL_IDS, VOICE_DESIGN_MODELS, type ValidateMatchCutInput, ValidateMatchCutInputSchema, type ValidateMatchCutResult, ValidateMatchCutResultSchema, type ValidationField, type Vehicle, type VehicleSubcategory, type VideoAnalysisClipTransitionIn, type VideoAnalysisEntitySource, type VideoAnalysisMixedTier, type VideoAnalysisModelTier, type VideoAnalysisResult, type VideoAnalysisShotAngle, type VideoAnalysisSpeedEffect, type VideoAnalysisTextKind, type VideoAnalysisTier, type VideoAnalysisTransition, type VideoAnalysisVisualEffect, type VideoAudioCapability, type VideoAudioMode, type VideoClipCost, type VideoCriticFrameMode, type VideoCriticMetadataKey, type VideoCriticShotFields, type VideoCriticVerdict, VideoCriticVerdictSchema, type VideoGenProvider, type VideoModeAlias, type VideoModelCapabilities, type VideoToVideoProvider, type VideoUpscaleProvider, type Voice, type VoiceChangerModel, type VoiceClone, type VoiceDesignModel, type VoiceLibraryParams, type VoiceLibraryResponse, type VoiceMatch, VoiceMatchSchema, type VoiceType, WARDROBE_VARIANTS, WEAPONS, WEAPON_SUBCATEGORY_LABELS, WEAPON_SUBCATEGORY_ORDER, WORKFLOW_VISIBILITIES, WORKSPACE_HEADER, WORKSPACE_HEADER_LOWER, WORKSPACE_ROLES, type Weapon, type WeaponSubcategory, type WindowAnalysis, type WindowScene, type WorkflowAssetKind, type WorkflowExport, type WorkflowExportCharacter, type WorkflowExportCreature, type WorkflowExportLocation, type WorkflowExportObject, type WorkflowImportReport, type WorkflowImportSkippedAsset, type WorkflowMediaRef, type WorkflowPortability, type WorkflowVisibility, type WorkspaceMemberView, type WorkspaceRole, type WorkspaceSettings, WorkspaceSettingsSchema, type WorkspaceSummary, type WorkspaceView, aggregateByType, aiAvatarReserveCreditId, analyzedSceneSchema, applyDefaultVideoSelection, applyHandleInputOverride, applyRange, applyRangeIndices, applySlots, applyVideoAudioToggle, applyVideoNegativePrompt, aspectRatioFromDims, aspectRatioOptionsByKind, aspectRatioToNumber, assembleNarratedVideoCredits, availableReasoningEfforts, bucketSecondsFromAuditCreditId, bucketSecondsFromCreditId, buildBoardPrompt, buildChildrenByParent, buildConditionVariables, buildCreditModelIdentifier, buildExpressionFromVisual, buildLipSyncCreditId, buildLlmCreditIdentifier, buildModelMenu, buildModelTree, buildMotionCreditModelIdentifier, buildNodePresetExport, buildPanelPrompt, buildProgressSegments, buildRangeLabel, buildScraperCreditId, buildVideoAnalysisCreditId, buildVideoAuditCreditId, buildVideoCreditModelIdentifier, calculateCombinedProgress, calculateMonetizationMarkup, calculateMonetizedCost, calculateProgress, canonicalVarName, characterBoardItems, characterBucketDisplayRank, characterMentionSlug, characterMentionableAssetArrays, characterSheetRefItems, characterVariantAssetArrays, cinematicCreditId, clampCinematicDuration, clampSmartCutWindow, cleanOrphanedItems, clearImageCriticMetadata, clearVideoCriticMetadata, clipLookSchema, collectAncestorRefs, combineSameLabelRefs, computeAggregateLanes, countRefModalityEdges, creditRangesAll, creditsToUsd, decodeProviderItem, defaultCarriedFraction, defaultResolutionFor, defaultRoleForSource, defaultVideoAspectRatio, deriveLinkedFields, deriveLottieSlotFields, deriveSlotRefs, describeEdgeBehavior, describeMaskRegion, describeNodeAdjustments, describeSlotControl, dropUnknownBindings, dropUnknownSpeakers, durationsByMode, effectiveReasoningEffort, encodeProviderItem, ensureLocaleCatalogLoaded, entityHydrationColumns, entityMentionSlug, entityMentionSlugForRef, entityScalarFields, entitySlotSchema, entryMatchesQuery, estimateCombineVideosCredits, estimateFilmCredits, estimateLoopTrimAddonCredits, estimateLoopVideoCredits, estimateScriptDurationSec, estimateSheetCost, estimateTrimVideoCredits, evaluateCondition, evaluateConditionGroup, evaluateJsonExpression, evaluateJsonPath, expandExtraRefsToConnectedReferences, expandItemsWithRepeat, extractAllGeneratedResults, extractCharacterLoraFields, extractGeneratedJsonAsList, extractPresetData, extractReferencedLabels, extractVideoDurationFromNode, fieldKeyFromHandle, filterCloneNodes, findCharacterMentionTokens, findEntityMentionTokens, findImageMentionTokens, findLocationMentionTokens, findSeedance2AudioOverLimit, firstSightExtraRole, flattenItems, getAnimal, getAnimalLabel, getAnimalPromptHint, getAnimalTerm, getAspectRatioOptions, getAudioCrossfadeCurve, getCharacterFacet, getCombineTransition, getCreditRange, getDurationsForModel, getEffectiveRepeatCount, getFeaturedEntities, getFurniture, getFurnitureLabel, getInputFieldSchema, getInputNodes, getItemSortId, getLipSyncMaxAudioSeconds, getLlmModalityCaps, getLlmModel, getLlmTier, getLocaleDirection, getMaxImagePromptChars, getMaxNegativePromptChars, getMaxSunoPromptChars, getMaxSunoStyleChars, getMaxTtsChars, getMaxVideoPromptChars, getModel, getNodeLabel, getNodeResult, getOutputNodes, getOutputType, getParameterValue, getQualityOptions, getResolutionOptions, getRouteReachableNodeIds, getStrategy, getTargetField, getValidValues, getVehicle, getVehicleLabel, getVideoAudioCapability, getWeapon, getWeaponLabel, groupByFamily, groupHandleId, groupLlmModelsByVendor, hasContiguousSegmentDurations, hasFeature, hexToRgbaArray, humanizeSlotSid, imageMentionSlug, imageMentionSlugForRef, imageReferenceLimit, inferMusicVideo, isAggregateableType, isCharacterAspectRatio, isCollectInEdge, isDefaultSelectorConfig, isExpandedClone, isFlux2Model, isGvpSupportedProvider, isHandleInputWired, isKineticCaptionStyle, isLocationUsageMode, isMinimaxH3Provider, isObjectAspectRatio, isOversizedScene, isPaygRetentionActive, isPerSecondLipSyncProvider, isScraperActor, isSeedance2Provider, isTiltDirection, isUsageMode, isVeoProvider, isVideoAnalysisMixedTier, isVideoAnalysisTier, jsonResultToList, knownEntitySlugsFromRefs, knownImageSlugsFromRefs, listBoardTemplates, listModels, listSlotSids, llmRouteDefaults, locationMentionSlug, locationReferencePhotoKindLabel, locationUsageModeLabel, mapAspectRatio, mapQuality, mapShotIntentToProviderDirectives, matchVariant, maxSegmentSecFor, maxSegmentsFor, mergeClipLook, mergeExposedSettings, migrateEdgeOutputMode, migrateToItems, minSegmentSecFor, modelIdsByKindMode, modelToNodeTarget, modelsForInputMode, modelsWithFeature, motionGraphicsFeature, normalizeLottieLayers, normalizeMinimaxH3Resolution, normalizeModelInput, normalizeNodeModelParams, normalizePinterestUrl, normalizeRoleSlug, orderedLlmModels, parseAttributedDialogue, parseCharacterMentionToken, parseEntityMentionToken, parseGroupHandle, parseHandleId, parseImageMentionToken, parseListExpression, parseLocationMentionToken, parseNodePresetExport, parseNodeRef, pickAiAvatarBucket, pickIds, pickLipSyncBucket, pickSwitchXFrameTier, pickVideoAnalysisBucket, planSheetGeneration, planSheetPanels, preferredInputModeForModel, presentTypes, presetApplyClearKeys, presetDataMatches, presetEntries, qualityOptionsByKind, readPromptAffixes, refHandleCategory, referenceModalityForHandle, referenceSheetCreditId, registerCatalogSidecars, registerSidecarLoaders, renderAnalyzedScene, resetCatalogSidecars, resolutionOptionsByKind, resolveAiAvatarCreditId, resolveAudioCrossfadeCurve, resolveCharacterAspectRatio, resolveCinematicCreditId, resolveConditionValue, resolveDefaultRole, resolveDescription, resolveDialogueVoices, resolveEffectiveSourceType, resolveEffectiveTier, resolveEntityAspect, resolveFieldMappings, resolveGvpAnchorWire, resolveImageGenCreditIdentifier, resolveIndex, resolveLabel, resolveListExpression, resolveLlmCreditId, resolveLocationFields, resolveLocationPresetCatalog, resolveLottieOverlaySrc, resolveNodeRefs, resolveObjectAspectRatio, resolvePipelineModel, resolveRelativeWindowToken, resolveScraperCreditId, resolveSelectorRefs, resolveSeparator, resolveSheetSections, resolveSlideshowTransition, resolveSourceThroughConnectedList, resolveStoredTier, resolveSwitchXCreditId, resolveVideoAnalysisModel, resolveVideoModeForInputs, resolveVideoProviderForMode, resolveXfadeName, rewriteSceneBindings, rewriteSlotTokens, rewriteSpeakerSlots, rgbaArrayToHex, roleToPhrase, runSelector, sanitizeRole, searchModelVariants, seedance2AudioLimitSec, segmentDurationsFor, selectByModulo, selectByNamedKey, selectByPredicate, selectListItems, selectLoraRoutingForMentions, selectRandom, setRegisteredPersonPackFields, settledWithLimit, slotVariationSchema, sortCharacterEntriesForDisplay, sortListItems, sourceRefKey, spliceDelimitedRows, splitByLoopDelimiter, splitGeneratedItems, spreadJsonArrayIfSingleton, stringifyPathResults, stripExportContent, stripTransientRuntimeData, supportedDefaultDimensions, supportsAdvancedMode, supportsEndAnchor, supportsExtendRender, toConnectedReference, toConnectedReferences, togglePick, tryParseJson, unwrapUnresolvedTokens, usageModeDirective, usageModeIncludesName, usageModeLabel, usdToCredits, validateAiAvatarPayload, validateCinematicAvatarPayload, validateDurationForFormat, validateModeActivation, validateModelInput, validateNoNestedGroups, validateObjects, validateProviderForNodeType, validateSubWorkflowRoutes, variantJobId, videoAnalysisCreditSegment, videoAnalysisNumWindows, videoAnalysisResultSchema, videoAuditCreditsForBucket, videoModelCanSpeakDialogue, videoModelSupportsAudio, videoNegativeSuffix, videoProviderRequiresImage, windowAnalysisSchema, zipMergeLists };
11395
+ export { ACCESS_LEVELS, ACTIVE_SCENE_HELPERS, ADVANCED_MODE_UNAVAILABLE_REASON, AGGREGATEABLE_TYPES, AGGREGATE_LANE_SOURCE_TYPES, AI_AVATAR_DURATION_BUCKETS, AI_AVATAR_MAX_AUDIO_SEC, AI_AVATAR_MAX_DURATION_SEC, AI_AVATAR_RESERVE_IDS, AI_WRITER_PROVIDERS, ALA_CARTE_BOARDS, ALL_CAPTION_STYLES, ANIMALS, ANIMAL_SUBCATEGORY_LABELS, ANIMAL_SUBCATEGORY_ORDER, ASPECT_RATIO_DIMENSIONS, AUDIO_ADDON_PROVIDERS, AUDIO_CROSSFADE_CURVES, AUDIO_CROSSFADE_CURVE_IDS, AUDIO_FX_PRESETS, AUDIO_FX_PRESET_LABELS, AUDIO_FX_PRESET_SET, AUDIO_FX_REVERB_PRESETS, AUDIO_PRODUCER_TYPES, type AccessLevel, type AddBRollResult, AddBRollResultSchema, type AggregateableType, type AggregationBuckets, type AiAvatarDurationBucket, type AiAvatarEngine, type AiAvatarResolution, type AiWriterProvider, type AlaCarteBoard, type AnalyzedScene, type AnchorSceneStyleResult, AnchorSceneStyleResultSchema, type Animal, type AnimalSubcategory, type AssetRef, AssetRefSchema, type AudioCrossfadeCurve, type AudioFxPreset, type AudioLayer, type AuditImagesResult, AuditImagesResultSchema, type AuditImagesShotEntry, AuditImagesShotEntrySchema, AuditPromptIssueSchema, type AuditPromptResult, AuditPromptResultSchema, AvatarPayloadError, BOARD_TO_ASSET_TYPE, BOARD_TO_COLUMN, BOARD_VARIANTS, type BoardEntityKind, type BoardPromptContext, type BoardTemplate, BridgeToNextSceneInputSchema, type BridgeToNextSceneResult, BridgeToNextSceneResultSchema, type BrowseCommunityParams, type BrowseCommunityResult, CATEGORY_DURATION_DEFAULTS, CHARACTER_ASPECT_DEFAULTS, CHARACTER_ASPECT_OPTIONS, CHARACTER_ASSET_TYPES, CHARACTER_ASSET_VARIANTS, CHARACTER_ATTACH_COLUMNS, CHARACTER_FACETS, CHARACTER_FACET_IDS, CHARACTER_LORA_TRAINING_JOB_TYPE, CHARACTER_MOTION_PROVIDERS, CHARACTER_PICKER_DISPLAY_ORDER, CHARACTER_REFERENCE_PHOTO_KINDS, CHARACTER_STYLES, CHARACTER_VARIANT_ASSET_BUCKETS, CHAT_ENABLED_STAGES, CHAT_STAGES, CHAT_TURN_CAPS, CHAT_WIRED_STAGES, CINEMATIC_DEFAULT_DURATION_SEC, CINEMATIC_DEFAULT_RESOLUTION, CINEMATIC_MAX_DURATION_SEC, CINEMATIC_MAX_LOOKS, CINEMATIC_MAX_REFERENCE_IMAGES, CINEMATIC_MAX_REFERENCE_VIDEOS, CINEMATIC_MIN_DURATION_SEC, CINEMATIC_MIN_LOOKS, CINEMATIC_PROMPT_MAX, CINEMATIC_RESERVE_IDS, COLLABORATOR_ROLES, COLLECT_IN_HANDLE, COMBINE_TRANSITIONS, COMBINE_TRANSITION_GROUP_LABELS, COMBINE_TRANSITION_GROUP_ORDER, COMBINE_TRANSITION_IDS, COMPOSER_PLAN_FIELDS, COMPOSER_PLAN_MAP, CONTENT_TYPES_BY_PLATFORM, CREATURE_ATTACH_COLUMNS, CREDIT_BASE_USD, CREDIT_ROUNDING_RESOLUTION, type CaptionStyle, type CastCoverageCriticVerdict, CastCoverageCriticVerdictSchema, type CharacterAspectRatio, type CharacterAssetType, type CharacterAssetTypeForAspect, type CharacterAttachColumn, type CharacterDef, type CharacterFacet, type CharacterImageCriticVerdict, CharacterImageCriticVerdictSchema, type CharacterLoraFields, type CharacterMentionTokenInfo, CharacterMetadataSchema, type CharacterMotionProvider, type CharacterReferencePhoto, type CharacterReferencePhotoKind, type CharacterVariantAssetBucket, type CharacterVariantAssetItem, type CharacterVoiceSpec, type ChatEnabledStage, type ChatTurnResponse, ChatTurnResponseSchema, type CinematicResolution, type ClipLook, type CloneListingResult, type CollaboratorRole, type CombineTransition, type CombineTransitionGroup, type CombineVideosEstimatorInput, type CommunityCard, type CommunityEntityType, type CommunityFullDetail, type CommunityReportReason, type CommunitySort, type ComponentHandle, type ComponentMetadata, type ConnectedReference, type CreatureAttachColumn, CriticIssueSchema, type CustomEntry, DEFAULT_AUDIO_CROSSFADE_CURVE_ID, DEFAULT_CARRIED_FRACTION, DEFAULT_CHARACTER_ANGLE_COUNT, DEFAULT_CHARACTER_EXPRESSION_COUNT, DEFAULT_CHARACTER_FACET, DEFAULT_LABEL_BY_SOURCE, DEFAULT_LOCATION_USAGE_MODE, DEFAULT_PANEL_COUNT, DEFAULT_REF_IMAGE_MAX, DEFAULT_SECTIONS, DEFAULT_USAGE_MODE, DEFAULT_VIDEO_ANALYSIS_MODEL, DEFAULT_VIDEO_ANALYSIS_TIER, DEFAULT_VIDEO_CLIP_COST, DEFAULT_VIDEO_DURATION_SEC, DEFAULT_VIDEO_PROVIDER, DEFAULT_VOICE_CHANGER_MODEL, DEFAULT_VOICE_DESIGN_MODEL, DETAIL_VARIANTS, DURATION_PRICED_PROVIDERS, DYNAMIC_PRODUCER_TYPES, type DetectionResult, DetectionResultSchema, type DialogueLine, EFFORT_TIER_BUMP, EMOTIONAL_BEAT, ENTITY_ASPECT_DEFAULTS, ENTITY_BUCKET_FIELDS, ENTITY_DB_ID_FIELD, ENTITY_IMAGE_HANDLE_TYPES, ENTITY_KIND_SCALAR_FIELDS, ENTITY_NAME_FIELD, ENTITY_NODE_KINDS, ENTITY_SCALAR_FIELDS, ENTITY_SECTIONS, ENTITY_STATUSES, ENTITY_TABLE, ENTITY_TOOL_RETRY_CAP, ENTITY_TYPES, EXECUTION_DATA_KEYS, EXTEND_VIDEO_PROVIDERS, type EntityKind, type EntityMentionTokenInfo, type EntityMetadata, EntityMetadataSchema, type EntityNodeKind, type EntityReferenceInput, type EntityRejectInput, EntityRejectInputSchema, type EntitySlot, type EntityStaleEvent, EntityStaleEventSchema, type EntityStateChangeEvent, EntityStateChangeEventSchema, type EntityStatus, type EntityStudioKind, type EntityStyle, type EntityType, type EvaluateConditionOptions, type ExportedPreset, type ExposableField, type ExposableOutput, type ExposedSetting, type ExtendVideoProvider, type ExtraRefCharacterContext, type ExtraRefInput, FACE_SWAP_PROVIDERS, FAL_LIP_SYNC_PROVIDERS, FAN_OUT_EACH_TYPES, FEATURED_ENTITIES, FILM_BASE_CREDITS, FLEXIBLE_INPUT_LIP_SYNC_PROVIDERS, FLUX2_RES_MP, FLUX_LORA_CHARACTER_MODEL_ID, FRAME_MODE_ADAPTIVE_ONLY_ASPECT, FRAME_TARGET_HANDLES, FREECUT_EXPORT_COMPLETE, FREECUT_EXPORT_PROGRESS, FREECUT_READY, FREECUT_REQUEST_IMPORT, FURNITURE, FURNITURE_SUBCATEGORY_LABELS, FURNITURE_SUBCATEGORY_ORDER, type FaceSwapProvider, type FavoriteListingResult, type FeaturedEntity, type FilmCreditEstimate, type FilterListCondition, type FilterListOperator, type FilterOperator, type FixContinuityInput, FixContinuityInputSchema, type FixContinuityResult, FixContinuityResultSchema, type Flux2Model, type FreecutExportCompletePayload, type FreecutExportProgressPayload, type FreecutImportFile, type FreecutRequestImportPayload, type FullSelectorMode, type Furniture, type FurnitureSubcategory, GEMINI_OMNI_PROVIDERS, GENERATE_TEXT_DELIMITER, GLOBAL_MAX_DURATION_SECONDS, GRANTED_ACCESS, GROUP_HANDLE_PREFIX, GUIDANCE_SCALE_SUPPORT, GVP_ANCHOR_CHOICES, GVP_DEFAULT_PROVIDER, GVP_END_FRAME_PROVIDERS, GVP_EXTEND_PROVIDERS, GVP_SUPPORTED_PROVIDERS, GenerateMotionInputSchema, type GenerateMotionResult, GenerateMotionResultSchema, type GenericEdge, type GenericNode, type GrantedAccess, type GvpAnchorChoice, type GvpAnchorWireMode, HANDLE_PORT_SEPARATOR, HELPERS_SHIPPED_IN_1B3, HIGH_QUALITY_PROVIDERS, HINT_EXEMPT_PARAMETER_TYPES, type HintEdgeLike, type HintGraphContext, type HintNodeLike, type I18nCatalogId, I2I_MASK_SUPPORT, I2I_STRENGTH_SUPPORT, IDEOGRAM_PROVIDERS, IMAGE_ASPECT_RATIO_VALUES, IMAGE_CRITIC_LEAF_MODES, IMAGE_CRITIC_MAX_RETRIES, IMAGE_CRITIC_METADATA_KEYS, IMAGE_CRITIC_MIN_ADHERENCE_SCORE, IMAGE_CRITIC_MODES, IMAGE_CRITIC_UNRESOLVABLE, IMAGE_EDIT_PROVIDERS, IMAGE_GEN_PROVIDERS, IMAGE_I2I_PROVIDERS, IMAGE_MASK_MODE, IMAGE_PROMPT_MAX, IMAGE_REF_TYPES, IMAGE_TO_VIDEO_PROVIDERS, INPUT_FIELD_MAP, INPUT_NODE_TYPES, INSTAGRAM_CAROUSEL_MAX_ITEMS, INSTAGRAM_CAROUSEL_MIN_ITEMS, ITER_CLONE_PATTERN, type IdentityFidelity, type IdentityMeta, type ImageAspectRatio, type ImageCriticIssue, ImageCriticIssueSchema, type ImageCriticLeafMode, type ImageCriticMetadataKey, type ImageCriticMode, type ImageCriticNodeIssue, type ImageCriticResult, ImageCriticResultSchema, type ImageCriticVerdict, ImageCriticVerdictSchema, type ImageEditProvider, type ImageGenProvider, type ImageI2IProvider, type ImageMaskMode, type ImageMentionTokenInfo, type ImageToVideoProvider, type ImprovePromptInput, ImprovePromptInputSchema, type ImprovePromptResult, ImprovePromptResultSchema, type InputFieldSchema, type InvitationDelivery, type InvitationPreview, type InvitationState, type InvitationView, type JoinCodeView, type JsonEvalResult, type JsonFilter, type JsonPatch, KEYFRAME_CREDITS_PER_SHOT, KINETIC_CAPTION_STYLES, type KieApiFormat, type KineticCaptionStyle, LANGUAGES, LEGACY_LOTTIE_HOST_REMAP, LIP_SYNC_DURATION_BUCKETS, LIP_SYNC_MAX_AUDIO_SECONDS, LIP_SYNC_PROVIDERS, LLM_FEATURE_DEFAULTS, LLM_MODALITY_CAPS, LLM_MODELS, LLM_MODEL_IDS, LLM_REASONING_EFFORTS, LLM_ROUTE_DEFAULTS, LLM_TEXT_INPUT_MAX, LLM_VENDOR_LABELS, LLM_VENDOR_ORDER, LOCATION_ASSET_TYPES, LOCATION_ASSET_VARIANTS, LOCATION_ATMOSPHERE_PROVIDERS, LOCATION_ATTACH_COLUMNS, LOCATION_BUCKET_TO_CATALOG_ID, LOCATION_PRESET_TO_CATALOG, LOCATION_REFERENCE_PHOTO_KINDS, LOCATION_REFERENCE_PHOTO_KIND_LABELS, LOCATION_USAGE_MODES, LOTTIE_OVERLAY_CATALOG, LOTTIE_SLOT_FIELD_PREFIX, type LabeledOption, type LipSyncDurationBucket, type LipSyncProvider, type LlmFeature, type LlmModelDef, type LlmModelGroup, type LlmReasoningEffort, type LlmRouteDefaults, type LlmTier, type LlmVendor, type LocaleCatalogMap, type LocaleDirection, type LocaleId, type LocationAssetType, type LocationAtmosphereProvider, type LocationAttachColumn, type LocationCatalogRef, type LocationImageCriticVerdict, LocationImageCriticVerdictSchema, type LocationMentionTokenInfo, LocationMetadataSchema, type LocationReferencePhotoKind, type LocationUsageMode, LocationsCoverageCriticIssueSchema, type LocationsCoverageCriticVerdict, LocationsCoverageCriticVerdictSchema, type LoopTrimEstimatorInput, type LoopVideoEstimatorInput, type LoraEligibleRef, type LoraRouting, type LottieOverlayCatalogEntry, type LottieSlotField, MAX_CUSTOM_ENTRIES_PER_BOARD, MAX_IMAGE_PROMPT_CHARS_BY_PROVIDER, MAX_LOCATION_VARIANTS, MAX_NEGATIVE_PROMPT_CHARS_BY_PROVIDER, MAX_PANELS_PER_SHEET, MAX_TTS_CHARS_BY_PROVIDER, MAX_VIDEO_PROMPT_CHARS_BY_PROVIDER, MEMBER_STATUSES, MINIMAX_H3_DEFAULT_RESOLUTION, MINIMAX_H3_PROVIDERS, MODELS_WITH_REFERENCE_IMAGE_SUPPORT, MODEL_CATALOG, MODEL_PARAM_NODE_TYPES, MODEL_RECOMMENDATIONS, MODIFY_IMAGE_PROVIDERS, MOTION_COLUMN, MOTION_TRANSFER_PROVIDERS, MUSIC_PROVIDERS, type MaskRegionDescriptor, type MatchCutVerdict, MatchCutVerdictSchema, type MeOrganizations, type Member, type MemberStatus, type MinimalEdge, type MinimalNode, type ModelCatalogEntry, type ModelInputAdjustment, type ModelKind, type ModelMenuOption, type ModelMode, type ModelNodeTarget, type ModelPromptingStyle, type ModelRecommendation, type ModelTreeLine, type ModelTreeVariant, type ModelValidationIssue, type ModifyImageProvider, type MotionTransferProviderType, type MusicProvider, NATIVE_ADAPTIVE_ASPECT, NATIVE_NEGATIVE_PROMPT_MODELS, NATIVE_NEGATIVE_VIDEO_PROVIDERS, NEGATIVE_PROMPT_MAX, NODARO_IMPORT_FILES, NODARO_LOAD_TIMELINE, NODARO_LOAD_VIDEO, NODARO_RESET_PROJECT, NODE_DEFAULT_TYPES, NODE_MAPPABLE_FIELDS, NODE_PRESET_EXPORT_KIND, NODE_REF_PATTERN, NON_EN_LOCALE_IDS, NO_SPLIT_DELIMITER, type NodaroLoadTimelinePayload, type NodaroLoadVideoPayload, type NodeDefaultType, type NodeParamAdjustment, type NodePresetExport, type NormalizedImageGen, type NormalizedModelInput, type NormalizedNodes, OBJECT_ASPECT_DEFAULTS, OBJECT_ASPECT_OPTIONS, OBJECT_ASSET_TYPES, OBJECT_ASSET_VARIANTS, OBJECT_ATTACH_COLUMNS, OBJECT_MOTION_PROVIDERS, OBJECT_PICKER_NODE_TYPES, ORG_ERROR_CODES, ORG_KINDS, ORG_ROLES, ORG_STATUSES, OUTPUT_FIELD_MAP, OUTPUT_FORMATS, type ObjectAspectRatio, type ObjectAssetType, type ObjectAssetTypeForAspect, type ObjectAttachColumn, ObjectMetadataSchema, type ObjectMotionProvider, type ObjectsValidationIssue, type ObjectsValidationResult, OptimizeForModelInputSchema, type OptimizeForModelResult, OptimizeForModelResultSchema, type OrgAuditEntry, type OrgErrorCode, type OrgKind, type OrgMemberView, type OrgPage, type OrgRole, type OrgSettings, OrgSettingsSchema, type OrgStatus, type OrganizationSummary, type OrganizationView, type OutputFormat, type OutputMode, type OutputType, PARAMETER_NODE_TYPES, PASSTHROUGH_TYPES, PAYG_RETENTION_DAYS, PER_FORMAT_DURATION_BOUNDS, PICKER_TO_COMBINE_TRANSITION, PIPELINE_ACTIVATION_MODES, PIPELINE_FORMATS, PIPELINE_HARD_TIMEOUT_MS, PIPELINE_MODEL_STAGES, PIPELINE_MODES, PIPELINE_OUTPUT_RESOLUTIONS, PIPELINE_PINNABLE_IMAGE_MODELS, PIPELINE_PINNABLE_SCRIPT_LLMS, PIPELINE_PINNABLE_VIDEO_MODELS, PIPELINE_STAGE_NAMES, PIPELINE_STAGE_TIMEOUT_MS, PIPELINE_TYPES, PLACEHOLDER_CHARACTER_NAME, PLATFORM_LABELS, PLATFORM_SPECS, PRESET_APPLY_CLEAR_KEYS, PRESET_EXCLUDED_KEYS, PRESET_LABELS, PRESET_SETTING_KEYS, PRICING_DEFAULT_DURATION_SEC, PRICING_DEFAULT_RESOLUTION, PROMPT_HARD_CEILING, PROMPT_PREFIX_KEY, PROMPT_SUFFIX_KEY, PROVIDER_DIRECTIVE_DEFAULTS, PROVIDER_PLACEHOLDER_PREFIX, type PanelGenRequest, type PanelRequest, type PanelSource, type PipelineActivationMode, type PipelineCompletedEvent, PipelineCompletedEventSchema, type PipelineConfig, PipelineConfigSchema, type PipelineDriftSummary, PipelineDriftSummarySchema, type PipelineEditorDecisionsReadyEvent, PipelineEditorDecisionsReadyEventSchema, type PipelineEvent, type PipelineForkedEvent, PipelineForkedEventSchema, type PipelineFormat, type PipelineInput, PipelineInputSchema, type PipelineLifecycleEvent, type PipelineMode, type PipelineModelStage, type PipelineMusicReadyEvent, PipelineMusicReadyEventSchema, type PipelineOutputResolution, type PipelinePinnableImageModel, type PipelinePinnableScriptLlm, type PipelinePinnableVideoModel, type PipelineStageName, PipelineStageNameSchema, type PipelineStageStatus, PipelineStageStatusSchema, type PipelineState, PipelineStateSchema, type PipelineStatus, PipelineStatusSchema, type PipelineType, type PixelBox, type PresentationItem, type PresetEntry, type PresetSettingKey, type PresetSettings, PresetSettingsSchema, type PriceVariant, type ProgressSegment, type ProjectedCatalog, type ProjectedCatalogDimension, type ProjectedCatalogOption, type PromptAffixFields, type PromptAffixes, type ProposedChange, type PublishListingParams, type PublishListingResult, QA_CHECK_PROVIDERS, type QaCheckProvider, type QualityLevel, REDUCE_STRATEGIES, REDUCE_STRATEGY_IDS, REFERENCE_BOARD_PROVIDERS, REFERENCE_BOARD_TEMPLATES, REFERENCE_HANDLE_MAP, REFERENCE_ROLE_PRESETS, REF_HANDLE_CATEGORY, REF_IMAGE_MAX_LIMITS, RENDERING_SPEED_SUPPORT, REPEATABLE_NODE_TYPES, REPEAT_PLACEHOLDER, REPLICATE_LIP_SYNC_PROVIDERS, RESERVED_TEMPLATE_VARS, type ReduceMeta, type ReduceStrategy, type ReduceStrategyId, type RefCandidate, type RefModalityEdge, type ReferenceBoardProvider, type ReferenceModality, type ReferenceSheet, type ReferenceSource, type ReportListingResult, type ResolveCharacterAspectOptions, type ResolveObjectAspectOptions, type ResolveSeparatorOptions, type ResolvedDialogueVoiceLine, type RouterConditionGroup, SCENE_HELPER_NAMES, SCRAPER_ACTOR_LABELS, SCRAPER_CREDIT_COSTS, SCRAPER_OUTPUT_FIELDS, SCRIPT_PROVIDERS, SEASONS, SECTION_BOARD, SECTION_KINDS, SEEDANCE_2_5_REF_LIMITS, SEEDANCE_2_CONTINUATION_REF_SEC, SEEDANCE_2_EXTEND_STITCH, SEEDANCE_2_PROVIDERS, SEEDANCE_2_R2V_MAX_AUDIO_SEC_BY_PROVIDER, SEEDANCE_2_R2V_MIN_REF_VIDEO_SEC, SEEDANCE_2_REF_LIMITS, SEEDANCE_LIP_SYNC_PROVIDERS, SEED_SUPPORT, SEPARATOR_DISPLAY, SEPARATOR_PRESETS, SHEET_ASPECTS, SHEET_BACKGROUNDS, SHEET_PRESETS, SHEET_SKINS, SHEET_TYPES, SHORT_FILM_ANGLE_COUNT, SHORT_FILM_EXPRESSION_COUNT, SHORT_FILM_VARIANT_THRESHOLD_SEC, SLOT_TOKEN_RE, SMART_CUT_WINDOW_DEFAULT, SMART_CUT_WINDOW_MAX, SMART_CUT_WINDOW_MIN, SOCIAL_POST_NODE_TYPES, STAGE_PATCH_SCHEMA, STATIC_CAPTION_STYLES, STRUCTURAL_SECTIONS, STRUCTURED_VISION_MODELS, SUBMISSION_STATUSES, SUNO_ADD_TRACK_MODELS, SUNO_FIELD_HANDLE_FIELDS, SUNO_HARD_CEILING, SUNO_MODELS, SUNO_SELECT_OPERATIONS, SUNO_TEXT_MAX, SUNO_TITLE_MAX, SUNO_TRACK_SOURCE_TYPES, SUNO_VERSION_PRICED_OPERATIONS, SUPPORTED_FONT_NAMES, SURROUND_DIRECTIONS, SWITCHX_BLOCK_FRAMES, SWITCHX_FRAME_TIERS, type SceneData, type SceneHelperName, SceneHelperNameSchema, type SceneInputMode, SceneInputModeSchema, type SceneMetadata, SceneMetadataSchema, type SceneNodeData, SceneNodeDataSchema, SceneSpecSchema, type ScraperActorId, type ScriptCriticVerdict, ScriptCriticVerdictSchema, type ScriptProvider, type Season, type SectionKind, type SelectorConfig, type SelectorFields, type SelectorMode, type SelectorPredicateOp, type SelectorResult, type SemanticAspectRatio, type SeparatorPreset, type SharedListing, type SharedVoice, type SheetAspect, type SheetBackground, type SheetCostEstimate, type SheetEntry, type SheetFlavour, type SheetGenerationPlan, type SheetPreset, type SheetPresetId, type SheetSection, type SheetSkin, type SheetTextData, type SheetType, type ShotElement, type ShotImageElement, type ShotShapeElement, type ShotSpec, ShotSpecSchema, type ShotTextElement, type ShowrunnerPlan, ShowrunnerPlanSchema, type SidecarLoader, type SlotControlDescriptor, type SlotControlKind, type SlotVariation, type SocialMediaContentType, type SocialMediaPlatform, type SocialMediaSpec, type SortDirection, type SortListOptions, type SortType, type StageAwaitingSubGateEvent, StageAwaitingSubGateEventSchema, type StaticCaptionStyle, type StoryboardCohesionCriticVerdict, StoryboardCohesionCriticVerdictSchema, type StyleDirectives, StyleDirectivesSchema, type SubGateName, SubGateNameSchema, type SubmissionStatus, type SunoAddTrackModel, type SunoModel, type SupportedFontName, type SurroundDirection, type Swatch, T2I_TO_I2I_VARIANT, TASK_CHAINED_EDIT_PROVIDERS, TEXT_TO_AUDIO_PROVIDERS, TEXT_TO_VIDEO_PROVIDERS, TIER_MAX_PIPELINE_COST_CREDITS, TIER_PIPELINE_PARALLELISM, TILT_CARRIED_FRACTION, TRANSCRIBE_PROVIDERS, TRANSIENT_RUNTIME_KEYS, TTS_PROVIDERS, TTS_TEXT_MAX, TWO_K_RESOLUTION_PROVIDERS, type TextToAudioProvider, type TextToVideoProvider, type TranscribeProvider, type TransitionType, TransitionTypeSchema, type TrimVideoEstimatorInput, type TtsProvider, UPSCALE_IMAGE_PROVIDERS, USAGE_GROUP_BYS, USAGE_MODES, type UpscaleImageProvider, type UsageGroupBy, type UsageLogEntry, type UsageMode, type UsageQuery, type UsageReport, type UsageReportRow, type UsageReportTotals, type UsageVarianceRow, VARIABLES_HANDLE_ID, VARIABLE_PRICING_MODELS, VEHICLES, VEHICLE_SUBCATEGORY_LABELS, VEHICLE_SUBCATEGORY_ORDER, VEO_PROVIDERS, VIDEO_ANALYSIS_BUCKET_CREDITS, VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN, VIDEO_ANALYSIS_DEFAULT_VARIATION, VIDEO_ANALYSIS_DURATION_BUCKETS, VIDEO_ANALYSIS_DURATION_TOLERANCE_SEC, VIDEO_ANALYSIS_ENTITY_SOURCES, VIDEO_ANALYSIS_FACELESS_ANGLES, VIDEO_ANALYSIS_LEGACY_MODELS, VIDEO_ANALYSIS_LLM_MODELS, VIDEO_ANALYSIS_MAX_DURATION_SEC, VIDEO_ANALYSIS_MAX_SCENE_SEC, VIDEO_ANALYSIS_MAX_VARIATIONS, VIDEO_ANALYSIS_MIXED_TIERS, VIDEO_ANALYSIS_SHOT_ANGLES, VIDEO_ANALYSIS_SPEED_EFFECTS, VIDEO_ANALYSIS_STORY_JUMPS, VIDEO_ANALYSIS_TEXT_KINDS, VIDEO_ANALYSIS_TIERS, VIDEO_ANALYSIS_TIER_LABELS, VIDEO_ANALYSIS_TIER_ORDER, VIDEO_ANALYSIS_TIMES_OF_DAY, VIDEO_ANALYSIS_TRANSITIONS, VIDEO_ANALYSIS_VARIATION_SLUGS, VIDEO_ANALYSIS_VISUAL_EFFECTS, VIDEO_ANALYSIS_WINDOW, VIDEO_AUDIO_CAPABILITY, VIDEO_AUDIT_BUCKET_CREDITS, VIDEO_CLIP_CREDITS, VIDEO_CRITIC_CREDITS_PER_SHOT, VIDEO_CRITIC_FRAME_MODES, VIDEO_CRITIC_MAX_RETRIES, VIDEO_CRITIC_METADATA_KEYS, VIDEO_CRITIC_MIN_ADHERENCE_SCORE, VIDEO_DURATION_TIERS, VIDEO_GEN_COLLAPSED_T2V_IDS, VIDEO_GEN_PROVIDERS, VIDEO_INPUT_LIP_SYNC_PROVIDERS, VIDEO_MODEL_CAPS, VIDEO_MODE_ALIASES, VIDEO_PRODUCER_TYPES, VIDEO_PROMPT_MAX, VIDEO_PROVIDERS_REQUIRING_IMAGE, VIDEO_PROVIDERS_WITHOUT_DISPATCH, VIDEO_REF_LIMITS_BY_PROVIDER, VIDEO_TO_VIDEO_PROVIDERS, VIDEO_UPSCALE_PROVIDERS, VIDEO_UTIL_PRICING, VIDEO_VARIABLE_PRICING, VOICE_CHANGER_MODELS, VOICE_CHANGER_MODEL_IDS, VOICE_DESIGN_MODELS, type ValidateMatchCutInput, ValidateMatchCutInputSchema, type ValidateMatchCutResult, ValidateMatchCutResultSchema, type ValidationField, type Vehicle, type VehicleSubcategory, type VideoAnalysisClipTransitionIn, type VideoAnalysisEntitySource, type VideoAnalysisMixedTier, type VideoAnalysisModelTier, type VideoAnalysisResult, type VideoAnalysisShotAngle, type VideoAnalysisSpeedEffect, type VideoAnalysisTextKind, type VideoAnalysisTier, type VideoAnalysisTransition, type VideoAnalysisVisualEffect, type VideoAudioCapability, type VideoAudioMode, type VideoClipCost, type VideoCriticFrameMode, type VideoCriticMetadataKey, type VideoCriticShotFields, type VideoCriticVerdict, VideoCriticVerdictSchema, type VideoGenProvider, type VideoModeAlias, type VideoModelCapabilities, type VideoToVideoProvider, type VideoUpscaleProvider, type Voice, type VoiceChangerModel, type VoiceClone, type VoiceDesignModel, type VoiceLibraryParams, type VoiceLibraryResponse, type VoiceMatch, VoiceMatchSchema, type VoiceType, WAN_3_DEFAULT_RESOLUTION, WAN_3_PROVIDERS, WARDROBE_VARIANTS, WEAPONS, WEAPON_SUBCATEGORY_LABELS, WEAPON_SUBCATEGORY_ORDER, WORKFLOW_VISIBILITIES, WORKSPACE_HEADER, WORKSPACE_HEADER_LOWER, WORKSPACE_ROLES, type Weapon, type WeaponSubcategory, type WindowAnalysis, type WindowScene, type WorkflowAssetKind, type WorkflowExport, type WorkflowExportCharacter, type WorkflowExportCreature, type WorkflowExportLocation, type WorkflowExportObject, type WorkflowImportReport, type WorkflowImportSkippedAsset, type WorkflowMediaRef, type WorkflowPortability, type WorkflowVisibility, type WorkspaceMemberView, type WorkspaceRole, type WorkspaceSettings, WorkspaceSettingsSchema, type WorkspaceSummary, type WorkspaceView, aggregateByType, aiAvatarReserveCreditId, analyzedSceneSchema, applyDefaultVideoSelection, applyHandleInputOverride, applyRange, applyRangeIndices, applySlots, applyVideoAudioToggle, applyVideoNegativePrompt, aspectRatioFromDims, aspectRatioOptionsByKind, aspectRatioToNumber, assembleNarratedVideoCredits, availableReasoningEfforts, bucketSecondsFromAuditCreditId, bucketSecondsFromCreditId, buildBoardPrompt, buildChildrenByParent, buildConditionVariables, buildCreditModelIdentifier, buildExpressionFromVisual, buildLipSyncCreditId, buildLlmCreditIdentifier, buildModelMenu, buildModelTree, buildMotionCreditModelIdentifier, buildNodePresetExport, buildPanelPrompt, buildProgressSegments, buildRangeLabel, buildScraperCreditId, buildVideoAnalysisCreditId, buildVideoAuditCreditId, buildVideoCreditModelIdentifier, calculateCombinedProgress, calculateMonetizationMarkup, calculateMonetizedCost, calculateProgress, canonicalVarName, characterBoardItems, characterBucketDisplayRank, characterMentionSlug, characterMentionableAssetArrays, characterSheetRefItems, characterVariantAssetArrays, cinematicCreditId, clampCinematicDuration, clampSmartCutWindow, cleanOrphanedItems, clearImageCriticMetadata, clearVideoCriticMetadata, clipLookSchema, collectAncestorRefs, combineSameLabelRefs, computeAggregateLanes, countRefModalityEdges, creditRangesAll, creditsToUsd, decodeProviderItem, defaultCarriedFraction, defaultResolutionFor, defaultRoleForSource, defaultVideoAspectRatio, deriveLinkedFields, deriveLottieSlotFields, deriveSlotRefs, describeEdgeBehavior, describeMaskRegion, describeNodeAdjustments, describeSlotControl, dropUnknownBindings, dropUnknownSpeakers, durationsByMode, effectiveReasoningEffort, encodeProviderItem, ensureLocaleCatalogLoaded, entityHydrationColumns, entityMentionSlug, entityMentionSlugForRef, entityScalarFields, entitySlotSchema, entryMatchesQuery, estimateCombineVideosCredits, estimateFilmCredits, estimateLoopTrimAddonCredits, estimateLoopVideoCredits, estimateScriptDurationSec, estimateSheetCost, estimateTrimVideoCredits, evaluateCondition, evaluateConditionGroup, evaluateJsonExpression, evaluateJsonPath, expandExtraRefsToConnectedReferences, expandItemsWithRepeat, extractAllGeneratedResults, extractCharacterLoraFields, extractGeneratedJsonAsList, extractPresetData, extractReferencedLabels, extractVideoDurationFromNode, fieldKeyFromHandle, filterCloneNodes, findCharacterMentionTokens, findEntityMentionTokens, findImageMentionTokens, findLocationMentionTokens, findSeedance2AudioOverLimit, firstSightExtraRole, flattenItems, getAnimal, getAnimalLabel, getAnimalPromptHint, getAnimalTerm, getAspectRatioOptions, getAudioCrossfadeCurve, getCharacterFacet, getCombineTransition, getCreditRange, getDurationsForModel, getEffectiveRepeatCount, getFeaturedEntities, getFurniture, getFurnitureLabel, getInputFieldSchema, getInputNodes, getItemSortId, getLipSyncMaxAudioSeconds, getLlmModalityCaps, getLlmModel, getLlmTier, getLocaleDirection, getMaxImagePromptChars, getMaxNegativePromptChars, getMaxSunoPromptChars, getMaxSunoStyleChars, getMaxTtsChars, getMaxVideoPromptChars, getModel, getNodeLabel, getNodeResult, getOutputNodes, getOutputType, getParameterValue, getQualityOptions, getResolutionOptions, getRouteReachableNodeIds, getStrategy, getTargetField, getValidValues, getVehicle, getVehicleLabel, getVideoAudioCapability, getWeapon, getWeaponLabel, groupByFamily, groupHandleId, groupLlmModelsByVendor, hasContiguousSegmentDurations, hasFeature, hexToRgbaArray, humanizeSlotSid, imageMentionSlug, imageMentionSlugForRef, imageReferenceLimit, inferMusicVideo, isAggregateableType, isCharacterAspectRatio, isCollectInEdge, isDefaultSelectorConfig, isExpandedClone, isFlux2Model, isGeminiOmniProvider, isGvpSupportedProvider, isHandleInputWired, isKineticCaptionStyle, isLocationUsageMode, isMinimaxH3Provider, isObjectAspectRatio, isOversizedScene, isPaygRetentionActive, isPerSecondLipSyncProvider, isScraperActor, isSeedance2Provider, isTiltDirection, isUsageMode, isVeoProvider, isVideoAnalysisMixedTier, isVideoAnalysisTier, isWan3Provider, jsonResultToList, knownEntitySlugsFromRefs, knownImageSlugsFromRefs, listBoardTemplates, listModels, listSlotSids, llmRouteDefaults, locationMentionSlug, locationReferencePhotoKindLabel, locationUsageModeLabel, mapAspectRatio, mapQuality, mapShotIntentToProviderDirectives, matchVariant, maxSegmentSecFor, maxSegmentsFor, mergeClipLook, mergeExposedSettings, migrateEdgeOutputMode, migrateToItems, minSegmentSecFor, modelIdsByKindMode, modelToNodeTarget, modelsForInputMode, modelsWithFeature, motionGraphicsFeature, normalizeLottieLayers, normalizeMinimaxH3Resolution, normalizeModelInput, normalizeNodeModelParams, normalizePinterestUrl, normalizeRoleSlug, normalizeWan3Resolution, orderedLlmModels, parseAttributedDialogue, parseCharacterMentionToken, parseEntityMentionToken, parseGroupHandle, parseHandleId, parseImageMentionToken, parseListExpression, parseLocationMentionToken, parseNodePresetExport, parseNodeRef, pickAiAvatarBucket, pickIds, pickLipSyncBucket, pickSwitchXFrameTier, pickVideoAnalysisBucket, planSheetGeneration, planSheetPanels, preferredInputModeForModel, presentTypes, presetApplyClearKeys, presetDataMatches, presetEntries, qualityOptionsByKind, readPromptAffixes, refHandleCategory, referenceModalityForHandle, referenceSheetCreditId, registerCatalogSidecars, registerSidecarLoaders, renderAnalyzedScene, resetCatalogSidecars, resolutionOptionsByKind, resolveAiAvatarCreditId, resolveAudioCrossfadeCurve, resolveCharacterAspectRatio, resolveCinematicCreditId, resolveConditionValue, resolveDefaultRole, resolveDescription, resolveDialogueVoices, resolveEffectiveSourceType, resolveEffectiveTier, resolveEntityAspect, resolveFieldMappings, resolveGvpAnchorWire, resolveImageGenCreditIdentifier, resolveIndex, resolveLabel, resolveListExpression, resolveLlmCreditId, resolveLocationFields, resolveLocationPresetCatalog, resolveLottieOverlaySrc, resolveNodeRefs, resolveNormalizedImageGen, resolveObjectAspectRatio, resolvePipelineModel, resolveRelativeWindowToken, resolveScraperCreditId, resolveSelectorRefs, resolveSeparator, resolveSheetSections, resolveSlideshowTransition, resolveSourceThroughConnectedList, resolveStoredTier, resolveSwitchXCreditId, resolveVideoAnalysisModel, resolveVideoModeForInputs, resolveVideoProviderForMode, resolveXfadeName, rewriteSceneBindings, rewriteSlotTokens, rewriteSpeakerSlots, rgbaArrayToHex, roleToPhrase, runSelector, sanitizeRole, searchModelVariants, seedance2AudioLimitSec, segmentDurationsFor, selectByModulo, selectByNamedKey, selectByPredicate, selectListItems, selectLoraRoutingForMentions, selectRandom, setRegisteredPersonPackFields, settledWithLimit, slotVariationSchema, sortCharacterEntriesForDisplay, sortListItems, sourceRefKey, spliceDelimitedRows, splitByLoopDelimiter, splitGeneratedItems, spreadJsonArrayIfSingleton, stringifyPathResults, stripDerivedAnalysisFields, stripExportContent, stripTransientRuntimeData, sunoCreditType, supportedDefaultDimensions, supportsAdvancedMode, supportsEndAnchor, supportsExtendRender, toConnectedReference, toConnectedReferences, togglePick, tryParseJson, uiAspectRatioFill, uiDurationFill, uiResolutionFill, unwrapUnresolvedTokens, usageModeDirective, usageModeIncludesName, usageModeLabel, usdToCredits, validateAiAvatarPayload, validateCinematicAvatarPayload, validateDurationForFormat, validateModeActivation, validateModelInput, validateNoNestedGroups, validateObjects, validateProviderForNodeType, validateSubWorkflowRoutes, variantJobId, videoAnalysisCreditSegment, videoAnalysisNumWindows, videoAnalysisResultSchema, videoAuditCreditsForBucket, videoModelCanSpeakDialogue, videoModelSupportsAudio, videoNegativeSuffix, videoProviderRequiresImage, windowAnalysisSchema, zipMergeLists };