@nodaro/shared 2.12.2 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1810,11 +1810,11 @@ var VIDEO_MODELS = {
1810
1810
  description: "Legacy fast-tier analysis model (pre-2026-07). Kept so stored raw-model configs keep running and keep pricing under their own identifier; new fast-tier runs use the current fast model.",
1811
1811
  useCases: ["video-analysis", "shot-list", "fast"],
1812
1812
  pricing: [
1813
- { identifier: "video-analysis:gemini-3-flash", credits: 847, note: "10-min ceiling (no duration given)" },
1814
- { identifier: "video-analysis:gemini-3-flash:60s", credits: 180 },
1813
+ { identifier: "video-analysis:gemini-3-flash", credits: 848, note: "10-min ceiling (no duration given)" },
1814
+ { identifier: "video-analysis:gemini-3-flash:60s", credits: 181 },
1815
1815
  { identifier: "video-analysis:gemini-3-flash:180s", credits: 185 },
1816
1816
  { identifier: "video-analysis:gemini-3-flash:360s", credits: 515 },
1817
- { identifier: "video-analysis:gemini-3-flash:600s", credits: 847, note: "10-min ceiling" }
1817
+ { identifier: "video-analysis:gemini-3-flash:600s", credits: 848, note: "10-min ceiling" }
1818
1818
  ]
1819
1819
  },
1820
1820
  "gemini-3.6-flash-video-analysis": {
@@ -1827,11 +1827,11 @@ var VIDEO_MODELS = {
1827
1827
  description: "Analyze a video into a structured shot list (scenes, camera, audio) \u2014 fast, economy tier. Billed per duration bucket.",
1828
1828
  useCases: ["video-analysis", "shot-list", "fast"],
1829
1829
  pricing: [
1830
- { identifier: "video-analysis:gemini-3.6-flash", credits: 990, note: "10-min ceiling (no duration given)" },
1830
+ { identifier: "video-analysis:gemini-3.6-flash", credits: 992, note: "10-min ceiling (no duration given)" },
1831
1831
  { identifier: "video-analysis:gemini-3.6-flash:60s", credits: 204 },
1832
- { identifier: "video-analysis:gemini-3.6-flash:180s", credits: 218 },
1833
- { identifier: "video-analysis:gemini-3.6-flash:360s", credits: 600 },
1834
- { identifier: "video-analysis:gemini-3.6-flash:600s", credits: 990, note: "10-min ceiling" }
1832
+ { identifier: "video-analysis:gemini-3.6-flash:180s", credits: 219 },
1833
+ { identifier: "video-analysis:gemini-3.6-flash:360s", credits: 602 },
1834
+ { identifier: "video-analysis:gemini-3.6-flash:600s", credits: 992, note: "10-min ceiling" }
1835
1835
  ]
1836
1836
  },
1837
1837
  "gemini-3.1-pro-video-analysis": {
@@ -1844,11 +1844,11 @@ var VIDEO_MODELS = {
1844
1844
  description: "Analyze a video into a structured shot list (scenes, camera, audio) \u2014 higher-fidelity, default tier. Billed per duration bucket.",
1845
1845
  useCases: ["video-analysis", "shot-list", "cinematic"],
1846
1846
  pricing: [
1847
- { identifier: "video-analysis:gemini-3.1-pro", credits: 1053, note: "10-min ceiling (no duration given)" },
1847
+ { identifier: "video-analysis:gemini-3.1-pro", credits: 1056, note: "10-min ceiling (no duration given)" },
1848
1848
  { identifier: "video-analysis:gemini-3.1-pro:60s", credits: 216 },
1849
1849
  { identifier: "video-analysis:gemini-3.1-pro:180s", credits: 232 },
1850
- { identifier: "video-analysis:gemini-3.1-pro:360s", credits: 639 },
1851
- { identifier: "video-analysis:gemini-3.1-pro:600s", credits: 1053, note: "10-min ceiling" }
1850
+ { identifier: "video-analysis:gemini-3.1-pro:360s", credits: 640 },
1851
+ { identifier: "video-analysis:gemini-3.1-pro:600s", credits: 1056, note: "10-min ceiling" }
1852
1852
  ]
1853
1853
  },
1854
1854
  // Both mixed tiers are variants of the same advanced multi-engine analysis
@@ -1864,11 +1864,11 @@ var VIDEO_MODELS = {
1864
1864
  description: "Our most advanced analysis tier \u2014 multiple analysis engines combined into one result for maximum completeness and accuracy. Billed per duration bucket.",
1865
1865
  useCases: ["video-analysis", "shot-list", "premium", "most-complete"],
1866
1866
  pricing: [
1867
- { identifier: "video-analysis:mixed", credits: 1174, note: "10-min ceiling (no duration given)" },
1868
- { identifier: "video-analysis:mixed:60s", credits: 269 },
1869
- { identifier: "video-analysis:mixed:180s", credits: 290 },
1870
- { identifier: "video-analysis:mixed:360s", credits: 727 },
1871
- { identifier: "video-analysis:mixed:600s", credits: 1174, note: "10-min ceiling" }
1867
+ { identifier: "video-analysis:mixed", credits: 1177, note: "10-min ceiling (no duration given)" },
1868
+ { identifier: "video-analysis:mixed:60s", credits: 270 },
1869
+ { identifier: "video-analysis:mixed:180s", credits: 291 },
1870
+ { identifier: "video-analysis:mixed:360s", credits: 729 },
1871
+ { identifier: "video-analysis:mixed:600s", credits: 1177, note: "10-min ceiling" }
1872
1872
  ]
1873
1873
  },
1874
1874
  // SMART — the accuracy tier. Since the 2026-08-03 hybrid re-plan it is a
@@ -1886,11 +1886,11 @@ var VIDEO_MODELS = {
1886
1886
  description: "Highest-accuracy analysis \u2014 a hybrid pass that blends a native skeleton read with several donor analysis rolls, then always refines the merged result to find shot boundaries and identify the cast by appearance. Best choice when the shot list will drive regeneration. Billed per duration bucket.",
1887
1887
  useCases: ["video-analysis", "shot-list", "premium", "most-accurate"],
1888
1888
  pricing: [
1889
- { identifier: "video-analysis:smart", credits: 2071, note: "10-min ceiling (no duration given)" },
1890
- { identifier: "video-analysis:smart:60s", credits: 412 },
1891
- { identifier: "video-analysis:smart:180s", credits: 502 },
1892
- { identifier: "video-analysis:smart:360s", credits: 1264 },
1893
- { identifier: "video-analysis:smart:600s", credits: 2071, note: "10-min ceiling" }
1889
+ { identifier: "video-analysis:smart", credits: 2076, note: "10-min ceiling (no duration given)" },
1890
+ { identifier: "video-analysis:smart:60s", credits: 413 },
1891
+ { identifier: "video-analysis:smart:180s", credits: 503 },
1892
+ { identifier: "video-analysis:smart:360s", credits: 1267 },
1893
+ { identifier: "video-analysis:smart:600s", credits: 2076, note: "10-min ceiling" }
1894
1894
  ]
1895
1895
  },
1896
1896
  // ── AI Audit (`video-audit`) ── a SEPARATE node from video-analysis (own
@@ -1914,11 +1914,11 @@ var VIDEO_MODELS = {
1914
1914
  description: "Re-watches a clip against a wired analysis, applies video-verified corrections under guards, and returns a disclosed report of what changed. Billed per duration bucket.",
1915
1915
  useCases: ["video-audit", "qa", "shot-list", "verification"],
1916
1916
  pricing: [
1917
- { identifier: "video-audit", credits: 1070, note: "10-min ceiling (no duration given)" },
1918
- { identifier: "video-audit:60s", credits: 214 },
1917
+ { identifier: "video-audit", credits: 1073, note: "10-min ceiling (no duration given)" },
1918
+ { identifier: "video-audit:60s", credits: 215 },
1919
1919
  { identifier: "video-audit:180s", credits: 290 },
1920
- { identifier: "video-audit:360s", credits: 661 },
1921
- { identifier: "video-audit:600s", credits: 1070, note: "10-min ceiling" }
1920
+ { identifier: "video-audit:360s", credits: 663 },
1921
+ { identifier: "video-audit:600s", credits: 1073, note: "10-min ceiling" }
1922
1922
  ]
1923
1923
  },
1924
1924
  "video-audit-auto": {
@@ -1930,11 +1930,11 @@ var VIDEO_MODELS = {
1930
1930
  description: "Same video-verified audit as AI Audit, but auto-runs a fast analysis first when none is wired in, then applies corrections under guards and returns a disclosed report. Billed per duration bucket.",
1931
1931
  useCases: ["video-audit", "qa", "shot-list", "verification", "auto-analysis"],
1932
1932
  pricing: [
1933
- { identifier: "video-audit:auto", credits: 1917, note: "10-min ceiling (no duration given)" },
1934
- { identifier: "video-audit:auto:60s", credits: 394 },
1933
+ { identifier: "video-audit:auto", credits: 1921, note: "10-min ceiling (no duration given)" },
1934
+ { identifier: "video-audit:auto:60s", credits: 396 },
1935
1935
  { identifier: "video-audit:auto:180s", credits: 475 },
1936
- { identifier: "video-audit:auto:360s", credits: 1176 },
1937
- { identifier: "video-audit:auto:600s", credits: 1917, note: "10-min ceiling" }
1936
+ { identifier: "video-audit:auto:360s", credits: 1178 },
1937
+ { identifier: "video-audit:auto:600s", credits: 1921, note: "10-min ceiling" }
1938
1938
  ]
1939
1939
  }
1940
1940
  };
@@ -12195,8 +12195,28 @@ function describeNodeAdjustments(adjustments) {
12195
12195
  );
12196
12196
  }
12197
12197
 
12198
+ // src/prompt-affixes.ts
12199
+ var PROMPT_PREFIX_KEY = "promptPrefix";
12200
+ var PROMPT_SUFFIX_KEY = "promptSuffix";
12201
+ function nonBlank(v) {
12202
+ return typeof v === "string" && v.trim().length > 0 ? v : void 0;
12203
+ }
12204
+ function readPromptAffixes(data) {
12205
+ const prefix = nonBlank(data[PROMPT_PREFIX_KEY]);
12206
+ const suffix = nonBlank(data[PROMPT_SUFFIX_KEY]);
12207
+ return {
12208
+ ...prefix !== void 0 ? { prefix } : {},
12209
+ ...suffix !== void 0 ? { suffix } : {}
12210
+ };
12211
+ }
12212
+
12198
12213
  // src/node-preset-extract.ts
12199
12214
  var PRESET_APPLY_CLEAR_KEYS = [...COMPOSER_PLAN_FIELDS, "lottieUrl"];
12215
+ var PROMPT_CONTENT_KEYS = ["prompt", PROMPT_PREFIX_KEY, PROMPT_SUFFIX_KEY];
12216
+ function presetApplyClearKeys(presetData) {
12217
+ const ownsPromptContent = PROMPT_CONTENT_KEYS.some((k) => presetData[k] !== void 0);
12218
+ return ownsPromptContent ? [...PRESET_APPLY_CLEAR_KEYS, PROMPT_PREFIX_KEY, PROMPT_SUFFIX_KEY] : PRESET_APPLY_CLEAR_KEYS;
12219
+ }
12200
12220
  var PRESET_EXCLUDED_KEYS = /* @__PURE__ */ new Set([
12201
12221
  "label",
12202
12222
  "fieldMappings",
@@ -13026,7 +13046,24 @@ var VIDEO_ANALYSIS_VISUAL_EFFECTS = [
13026
13046
  "distortion",
13027
13047
  "double-exposure"
13028
13048
  ];
13029
- var VIDEO_ANALYSIS_TRANSITIONS = ["cut", "fade", "dissolve", "wipe", "whip"];
13049
+ var VIDEO_ANALYSIS_TRANSITIONS = [
13050
+ "cut",
13051
+ "fade",
13052
+ "dissolve",
13053
+ "wipe",
13054
+ "whip",
13055
+ // v2 (2026-08-30, recast shot craft rev 1.5 Appendix F): the common edits a
13056
+ // creator actually cuts with. `white-flash` / `digital-glitch` are spelled
13057
+ // out because `flash` / `glitch` already name in-shot EFFECTS (the axis test
13058
+ // below) — a device is the edit BETWEEN two shots, an effect is on one shot.
13059
+ "zoom",
13060
+ "slide",
13061
+ "white-flash",
13062
+ "digital-glitch",
13063
+ "morph",
13064
+ "match",
13065
+ "jump"
13066
+ ];
13030
13067
  var VIDEO_ANALYSIS_TEXT_KINDS = ["title", "caption", "lower-third", "subtitle", "logo", "other"];
13031
13068
  var VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN = ["fade"];
13032
13069
  var VIDEO_ANALYSIS_SPEED_EFFECTS = ["slow-motion", "ramp-in", "ramp-out", "timelapse", "freeze", "reverse"];
@@ -13363,37 +13400,37 @@ var WINDOW_OVERLAP = 5;
13363
13400
  var VIDEO_ANALYSIS_WINDOW = { LEN: WINDOW_LEN, STRIDE: WINDOW_STRIDE, OVERLAP: WINDOW_OVERLAP, SINGLE_MAX: 180 };
13364
13401
  var VIDEO_ANALYSIS_BUCKET_CREDITS = {
13365
13402
  // Legacy fast-tier model (pre-2026-07) — kept for stored raw-id configs.
13366
- "video-analysis:gemini-3-flash:60s": 180,
13403
+ "video-analysis:gemini-3-flash:60s": 181,
13367
13404
  "video-analysis:gemini-3-flash:180s": 185,
13368
13405
  "video-analysis:gemini-3-flash:360s": 515,
13369
- "video-analysis:gemini-3-flash:600s": 847,
13406
+ "video-analysis:gemini-3-flash:600s": 848,
13370
13407
  // Current fast tier — regenerated from the private formula for its backing
13371
13408
  // model; higher than the legacy fast schedule but still ≤ pro per bucket.
13372
13409
  "video-analysis:gemini-3.6-flash:60s": 204,
13373
- "video-analysis:gemini-3.6-flash:180s": 218,
13374
- "video-analysis:gemini-3.6-flash:360s": 600,
13375
- "video-analysis:gemini-3.6-flash:600s": 990,
13410
+ "video-analysis:gemini-3.6-flash:180s": 219,
13411
+ "video-analysis:gemini-3.6-flash:360s": 602,
13412
+ "video-analysis:gemini-3.6-flash:600s": 992,
13376
13413
  "video-analysis:gemini-3.1-pro:60s": 216,
13377
13414
  "video-analysis:gemini-3.1-pro:180s": 232,
13378
- "video-analysis:gemini-3.1-pro:360s": 639,
13379
- "video-analysis:gemini-3.1-pro:600s": 1053,
13415
+ "video-analysis:gemini-3.1-pro:360s": 640,
13416
+ "video-analysis:gemini-3.1-pro:600s": 1056,
13380
13417
  // Mixed tiers (`mixed` + `mixed-fast`) share ONE credit family — they are
13381
13418
  // variants of the same engine plan (plan internals live in the private
13382
13419
  // analysis plugin). Admin-tunable via model_pricing like every other row.
13383
- "video-analysis:mixed:60s": 269,
13384
- "video-analysis:mixed:180s": 290,
13385
- "video-analysis:mixed:360s": 727,
13386
- "video-analysis:mixed:600s": 1174,
13420
+ "video-analysis:mixed:60s": 270,
13421
+ "video-analysis:mixed:180s": 291,
13422
+ "video-analysis:mixed:360s": 729,
13423
+ "video-analysis:mixed:600s": 1177,
13387
13424
  // SMART — the accuracy tier, and since the 2026-08-03 re-plan a multi-roll
13388
13425
  // plan like the others, always refined (`selectionMode` does not apply
13389
13426
  // here — smart always refines; it never offers a cheaper "choose" path).
13390
13427
  // Priced above the economy tiers because it genuinely costs more to run;
13391
13428
  // the only tier whose accuracy is validated against a hand-counted edit
13392
13429
  // list, re-validated at the current plan before this schedule shipped.
13393
- "video-analysis:smart:60s": 412,
13394
- "video-analysis:smart:180s": 502,
13395
- "video-analysis:smart:360s": 1264,
13396
- "video-analysis:smart:600s": 2071
13430
+ "video-analysis:smart:60s": 413,
13431
+ "video-analysis:smart:180s": 503,
13432
+ "video-analysis:smart:360s": 1267,
13433
+ "video-analysis:smart:600s": 2076
13397
13434
  };
13398
13435
  function videoAnalysisCreditSegment(modelOrSentinel) {
13399
13436
  return modelOrSentinel === "mixed-fast" ? "mixed" : modelOrSentinel;
@@ -13414,14 +13451,14 @@ function videoAnalysisNumWindows(bucketSec) {
13414
13451
  return bucketSec <= VIDEO_ANALYSIS_WINDOW.SINGLE_MAX ? 1 : 1 + Math.ceil((bucketSec - WINDOW_LEN) / WINDOW_STRIDE);
13415
13452
  }
13416
13453
  var VIDEO_AUDIT_BUCKET_CREDITS = {
13417
- "video-audit:60s": 214,
13454
+ "video-audit:60s": 215,
13418
13455
  "video-audit:180s": 290,
13419
- "video-audit:360s": 661,
13420
- "video-audit:600s": 1070,
13421
- "video-audit:auto:60s": 394,
13456
+ "video-audit:360s": 663,
13457
+ "video-audit:600s": 1073,
13458
+ "video-audit:auto:60s": 396,
13422
13459
  "video-audit:auto:180s": 475,
13423
- "video-audit:auto:360s": 1176,
13424
- "video-audit:auto:600s": 1917
13460
+ "video-audit:auto:360s": 1178,
13461
+ "video-audit:auto:600s": 1921
13425
13462
  };
13426
13463
  function buildVideoAuditCreditId(args) {
13427
13464
  const { analysisProvided, durationSec } = args;
@@ -13912,6 +13949,8 @@ exports.PRESET_SETTING_KEYS = PRESET_SETTING_KEYS;
13912
13949
  exports.PRICING_DEFAULT_DURATION_SEC = PRICING_DEFAULT_DURATION_SEC;
13913
13950
  exports.PRICING_DEFAULT_RESOLUTION = PRICING_DEFAULT_RESOLUTION;
13914
13951
  exports.PROMPT_HARD_CEILING = PROMPT_HARD_CEILING;
13952
+ exports.PROMPT_PREFIX_KEY = PROMPT_PREFIX_KEY;
13953
+ exports.PROMPT_SUFFIX_KEY = PROMPT_SUFFIX_KEY;
13915
13954
  exports.PROVIDER_DIRECTIVE_DEFAULTS = PROVIDER_DIRECTIVE_DEFAULTS;
13916
13955
  exports.PROVIDER_PLACEHOLDER_PREFIX = PROVIDER_PLACEHOLDER_PREFIX;
13917
13956
  exports.PipelineCompletedEventSchema = PipelineCompletedEventSchema;
@@ -14313,9 +14352,11 @@ exports.planSheetGeneration = planSheetGeneration;
14313
14352
  exports.planSheetPanels = planSheetPanels;
14314
14353
  exports.preferredInputModeForModel = preferredInputModeForModel;
14315
14354
  exports.presentTypes = presentTypes;
14355
+ exports.presetApplyClearKeys = presetApplyClearKeys;
14316
14356
  exports.presetDataMatches = presetDataMatches;
14317
14357
  exports.presetEntries = presetEntries;
14318
14358
  exports.qualityOptionsByKind = qualityOptionsByKind;
14359
+ exports.readPromptAffixes = readPromptAffixes;
14319
14360
  exports.refHandleCategory = refHandleCategory;
14320
14361
  exports.referenceModalityForHandle = referenceModalityForHandle;
14321
14362
  exports.referenceSheetCreditId = referenceSheetCreditId;