@nodaro/shared 3.10.0 → 3.11.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
@@ -8243,7 +8243,9 @@ var VIDEO_ONLY_PARAMETER_NODE_TYPES = /* @__PURE__ */ new Set([
8243
8243
  ]);
8244
8244
  var EXECUTION_GRAPH_COMPOSED_PARAMETER_TYPES = /* @__PURE__ */ new Set([
8245
8245
  "camera-motion",
8246
- "character-motion"
8246
+ "character-motion",
8247
+ "transition",
8248
+ "character-fx"
8247
8249
  ]);
8248
8250
  var registeredPersonPackFields = [];
8249
8251
  function setRegisteredPersonPackFields(fields) {
@@ -14689,7 +14691,21 @@ var entitySlotSchema = zod.z.object({
14689
14691
  */
14690
14692
  refRejectedReason: zod.z.string().optional(),
14691
14693
  /** NON-default looks only; present only when at least one exists. */
14692
- variations: zod.z.array(slotVariationSchema).max(VIDEO_ANALYSIS_MAX_VARIATIONS).optional()
14694
+ variations: zod.z.array(slotVariationSchema).max(VIDEO_ANALYSIS_MAX_VARIATIONS).optional(),
14695
+ /**
14696
+ * WHOSE THIS OBJECT IS (2026-09-17). An object slot that is worn, held,
14697
+ * carried, driven or ridden by a cast person or creature names that slot
14698
+ * here, with the relation as a short passive phrase ending in "by" ("worn
14699
+ * by", "held by", "driven by"). The link says the object slot IS the one on
14700
+ * that person — not a second one: a recast that saw "Man in Blue Silk
14701
+ * Shirt" AND "Blue Silk Shirt" as unrelated slots rendered two shirts.
14702
+ * Object slots only; a free-standing prop, the product on a table, a place
14703
+ * or a person never carries it. Optional/additive: producers may omit it.
14704
+ */
14705
+ owner: zod.z.object({
14706
+ slotId: zod.z.string().min(1).regex(/^[a-z0-9-]+$/),
14707
+ relation: zod.z.string().min(1)
14708
+ }).optional()
14693
14709
  });
14694
14710
  var VIDEO_ANALYSIS_AUDIO_MODES = ["speech", "music", "sfx", "ambience"];
14695
14711
  var audioLayerSchema = zod.z.object({
@@ -17495,6 +17511,168 @@ function unavailable(engine) {
17495
17511
  }
17496
17512
  var SCENE3D_BASIC_SCHEMA_VERSION = SCENE3D_SCHEMA_VERSION;
17497
17513
 
17514
+ // src/video-output-canvas.ts
17515
+ var VIDEO_OUTPUT_CANVAS = {
17516
+ "seedance-2-5": {
17517
+ "480p": { "16:9": [854, 480], "9:16": [480, 854] },
17518
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280], "1:1": [960, 960] },
17519
+ "1080p": { "16:9": [1920, 1080] }
17520
+ },
17521
+ // The 2.0 family is NOT the same as 2.5 at 480p — 864x496 vs 854x480.
17522
+ "seedance-2": {
17523
+ "480p": { "16:9": [864, 496], "9:16": [496, 864] },
17524
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280] }
17525
+ },
17526
+ "seedance-2-fast": {
17527
+ "480p": { "16:9": [864, 496], "9:16": [496, 864] },
17528
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280] }
17529
+ },
17530
+ "seedance-2-mini": {
17531
+ "480p": { "16:9": [864, 496], "9:16": [496, 864] },
17532
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280] }
17533
+ },
17534
+ "gemini-omni-video": {
17535
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280] },
17536
+ "1080p": { "16:9": [1920, 1080] }
17537
+ },
17538
+ "gemini-omni-flash": {
17539
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280] }
17540
+ },
17541
+ "veo3.1": {
17542
+ "720p": { "9:16": [720, 1280] },
17543
+ "1080p": { "16:9": [1920, 1080] }
17544
+ },
17545
+ "wan-3": {
17546
+ "480p": { "16:9": [832, 480] },
17547
+ "720p": { "16:9": [1280, 720], "9:16": [720, 1280] }
17548
+ },
17549
+ "wan-3-prime": {
17550
+ "720p": { "16:9": [1280, 720] }
17551
+ },
17552
+ // 768P's "9:16" is 0.5714, not 0.5625 — the single clearest reason this table
17553
+ // exists.
17554
+ "minimax-h3": {
17555
+ "768p": { "9:16": [768, 1344] },
17556
+ "2k": { "16:9": [2560, 1440], "9:16": [1440, 2560] }
17557
+ },
17558
+ seedance: {
17559
+ "1080p": {
17560
+ "16:9": [1920, 1080],
17561
+ "9:16": [1080, 1920],
17562
+ "1:1": [1440, 1440],
17563
+ "3:4": [1248, 1664]
17564
+ }
17565
+ }
17566
+ };
17567
+ function resolveOutputCanvas(provider, resolution, aspect) {
17568
+ if (!provider || !resolution || !aspect) return void 0;
17569
+ return VIDEO_OUTPUT_CANVAS[provider]?.[resolution.toLowerCase()]?.[aspect];
17570
+ }
17571
+ function measuredCanvasCombinations() {
17572
+ const out = [];
17573
+ for (const [provider, byResolution] of Object.entries(VIDEO_OUTPUT_CANVAS)) {
17574
+ for (const [resolution, byAspect] of Object.entries(byResolution)) {
17575
+ for (const [aspect, canvas] of Object.entries(byAspect)) {
17576
+ out.push({ provider, resolution, aspect, canvas });
17577
+ }
17578
+ }
17579
+ }
17580
+ return out;
17581
+ }
17582
+
17583
+ // src/video-frame-fit.ts
17584
+ var FRAME_FITS = ["original", "ratio", "resolution"];
17585
+ var DEFAULT_FRAME_FIT = "resolution";
17586
+ var FRAME_DELIVERIES = ["auto", "frame", "reference"];
17587
+ var DEFAULT_FRAME_DELIVERY = "auto";
17588
+ var FRAME_FIT_STRETCH_TOLERANCE = 0.05;
17589
+ var FRAME_DELIVERY_BY_PROVIDER = {
17590
+ "seedance-2": "reference",
17591
+ "seedance-2-fast": "reference",
17592
+ "seedance-2-mini": "reference"
17593
+ };
17594
+ var OPEN_ASPECT_TOKENS = /* @__PURE__ */ new Set(["adaptive", "auto"]);
17595
+ function parseAspectToken(token) {
17596
+ if (!token) return void 0;
17597
+ const m = /^(\d+(?:\.\d+)?)\s*[:x/]\s*(\d+(?:\.\d+)?)$/.exec(token.trim());
17598
+ if (!m) return void 0;
17599
+ const w = Number(m[1]);
17600
+ const h = Number(m[2]);
17601
+ if (!(w > 0) || !(h > 0)) return void 0;
17602
+ return w / h;
17603
+ }
17604
+ function resolveFrameFitAspect(args) {
17605
+ const requested = args.requestedAspect?.trim();
17606
+ if (requested && !OPEN_ASPECT_TOKENS.has(requested.toLowerCase())) return requested;
17607
+ const ratios = args.provider ? getModel(args.provider)?.aspectRatios : void 0;
17608
+ if (!ratios?.length || !(args.sourceWidth > 0) || !(args.sourceHeight > 0)) return void 0;
17609
+ const source = args.sourceWidth / args.sourceHeight;
17610
+ let best;
17611
+ for (const token of ratios) {
17612
+ const value = parseAspectToken(token);
17613
+ if (value === void 0) continue;
17614
+ const gap = Math.abs(Math.log(value / source));
17615
+ if (!best || gap < best.gap) best = { token, gap };
17616
+ }
17617
+ return best?.token;
17618
+ }
17619
+ function even(value) {
17620
+ return Math.max(2, Math.round(value / 2) * 2);
17621
+ }
17622
+ function minimalRatioDimensions(width, height, aspect) {
17623
+ const current = width / height;
17624
+ if (current > aspect) {
17625
+ return { width: even(width), height: even(width / aspect) };
17626
+ }
17627
+ return { width: even(height * aspect), height: even(height) };
17628
+ }
17629
+ function centreCropToAspect(width, height, aspect) {
17630
+ const current = width / height;
17631
+ if (current > aspect) {
17632
+ const w = even(height * aspect);
17633
+ return { left: Math.max(0, Math.round((width - w) / 2)), top: 0, width: Math.min(width, w), height };
17634
+ }
17635
+ const h = even(width / aspect);
17636
+ return { left: 0, top: Math.max(0, Math.round((height - h) / 2)), width, height: Math.min(height, h) };
17637
+ }
17638
+ function computeFrameFitPlan(args) {
17639
+ const { fit, sourceWidth, sourceHeight } = args;
17640
+ if (fit === "original") return null;
17641
+ if (!(sourceWidth > 0) || !(sourceHeight > 0)) return null;
17642
+ const aspectToken = resolveFrameFitAspect({
17643
+ provider: args.provider,
17644
+ requestedAspect: args.aspect,
17645
+ sourceWidth,
17646
+ sourceHeight
17647
+ });
17648
+ const canvas = fit === "resolution" ? args.canvas ?? resolveOutputCanvas(args.provider, args.resolution, aspectToken) : void 0;
17649
+ const targetAspect = canvas ? canvas[0] / canvas[1] : parseAspectToken(aspectToken);
17650
+ if (targetAspect === void 0 || !(targetAspect > 0)) return null;
17651
+ const sourceAspect = sourceWidth / sourceHeight;
17652
+ const gap = Math.abs(sourceAspect - targetAspect) / targetAspect;
17653
+ const tolerance = args.tolerance ?? FRAME_FIT_STRETCH_TOLERANCE;
17654
+ const crop = gap > tolerance ? centreCropToAspect(sourceWidth, sourceHeight, targetAspect) : void 0;
17655
+ const target = canvas ? { width: canvas[0], height: canvas[1] } : minimalRatioDimensions(
17656
+ crop ? crop.width : sourceWidth,
17657
+ crop ? crop.height : sourceHeight,
17658
+ targetAspect
17659
+ );
17660
+ const unchanged = target.width === sourceWidth && target.height === sourceHeight && !crop;
17661
+ if (unchanged) return null;
17662
+ return {
17663
+ width: target.width,
17664
+ height: target.height,
17665
+ ...crop ? { crop } : {},
17666
+ reason: canvas ? "resolution" : "ratio"
17667
+ };
17668
+ }
17669
+ function resolveFrameDelivery(args) {
17670
+ const requested = args.requested ?? DEFAULT_FRAME_DELIVERY;
17671
+ const wanted = requested === "auto" ? args.provider ? FRAME_DELIVERY_BY_PROVIDER[args.provider] ?? "frame" : "frame" : requested;
17672
+ if (wanted === "reference" && !args.supportsReferenceImages) return "frame";
17673
+ return wanted;
17674
+ }
17675
+
17498
17676
  exports.ACCESS_LEVELS = ACCESS_LEVELS;
17499
17677
  exports.ACTIVE_SCENE_HELPERS = ACTIVE_SCENE_HELPERS;
17500
17678
  exports.ADVANCED_MODE_UNAVAILABLE_REASON = ADVANCED_MODE_UNAVAILABLE_REASON;
@@ -17582,6 +17760,8 @@ exports.DEFAULT_CARRIED_FRACTION = DEFAULT_CARRIED_FRACTION;
17582
17760
  exports.DEFAULT_CHARACTER_ANGLE_COUNT = DEFAULT_CHARACTER_ANGLE_COUNT;
17583
17761
  exports.DEFAULT_CHARACTER_EXPRESSION_COUNT = DEFAULT_CHARACTER_EXPRESSION_COUNT;
17584
17762
  exports.DEFAULT_CHARACTER_FACET = DEFAULT_CHARACTER_FACET;
17763
+ exports.DEFAULT_FRAME_DELIVERY = DEFAULT_FRAME_DELIVERY;
17764
+ exports.DEFAULT_FRAME_FIT = DEFAULT_FRAME_FIT;
17585
17765
  exports.DEFAULT_LABEL_BY_SOURCE = DEFAULT_LABEL_BY_SOURCE;
17586
17766
  exports.DEFAULT_LOCATION_USAGE_MODE = DEFAULT_LOCATION_USAGE_MODE;
17587
17767
  exports.DEFAULT_OVERLAY_QR = DEFAULT_OVERLAY_QR;
@@ -17634,6 +17814,10 @@ exports.FILM_BASE_CREDITS = FILM_BASE_CREDITS;
17634
17814
  exports.FLEXIBLE_INPUT_LIP_SYNC_PROVIDERS = FLEXIBLE_INPUT_LIP_SYNC_PROVIDERS;
17635
17815
  exports.FLUX2_RES_MP = FLUX2_RES_MP;
17636
17816
  exports.FLUX_LORA_CHARACTER_MODEL_ID = FLUX_LORA_CHARACTER_MODEL_ID;
17817
+ exports.FRAME_DELIVERIES = FRAME_DELIVERIES;
17818
+ exports.FRAME_DELIVERY_BY_PROVIDER = FRAME_DELIVERY_BY_PROVIDER;
17819
+ exports.FRAME_FITS = FRAME_FITS;
17820
+ exports.FRAME_FIT_STRETCH_TOLERANCE = FRAME_FIT_STRETCH_TOLERANCE;
17637
17821
  exports.FRAME_MODE_ADAPTIVE_ONLY_ASPECT = FRAME_MODE_ADAPTIVE_ONLY_ASPECT;
17638
17822
  exports.FRAME_TARGET_HANDLES = FRAME_TARGET_HANDLES;
17639
17823
  exports.FREECUT_EXPORT_COMPLETE = FREECUT_EXPORT_COMPLETE;
@@ -18043,6 +18227,7 @@ exports.VIDEO_INPUT_LIP_SYNC_PROVIDERS = VIDEO_INPUT_LIP_SYNC_PROVIDERS;
18043
18227
  exports.VIDEO_MODEL_CAPS = VIDEO_MODEL_CAPS;
18044
18228
  exports.VIDEO_MODE_ALIASES = VIDEO_MODE_ALIASES;
18045
18229
  exports.VIDEO_ONLY_PARAMETER_NODE_TYPES = VIDEO_ONLY_PARAMETER_NODE_TYPES;
18230
+ exports.VIDEO_OUTPUT_CANVAS = VIDEO_OUTPUT_CANVAS;
18046
18231
  exports.VIDEO_PRODUCER_TYPES = VIDEO_PRODUCER_TYPES;
18047
18232
  exports.VIDEO_PROMPT_MAX = VIDEO_PROMPT_MAX;
18048
18233
  exports.VIDEO_PROVIDERS_REQUIRING_IMAGE = VIDEO_PROVIDERS_REQUIRING_IMAGE;
@@ -18116,6 +18301,7 @@ exports.calculateMonetizedCost = calculateMonetizedCost;
18116
18301
  exports.calculateProgress = calculateProgress;
18117
18302
  exports.canonicalScene3DPlanV2Json = canonicalScene3DPlanV2Json;
18118
18303
  exports.canonicalVarName = canonicalVarName;
18304
+ exports.centreCropToAspect = centreCropToAspect;
18119
18305
  exports.characterBoardItems = characterBoardItems;
18120
18306
  exports.characterBucketDisplayRank = characterBucketDisplayRank;
18121
18307
  exports.characterMentionSlug = characterMentionSlug;
@@ -18134,6 +18320,7 @@ exports.clipLookSchema = clipLookSchema;
18134
18320
  exports.collectAncestorRefs = collectAncestorRefs;
18135
18321
  exports.combineSameLabelRefs = combineSameLabelRefs;
18136
18322
  exports.computeAggregateLanes = computeAggregateLanes;
18323
+ exports.computeFrameFitPlan = computeFrameFitPlan;
18137
18324
  exports.computeScene3DPlanV2ContentHash = computeScene3DPlanV2ContentHash;
18138
18325
  exports.countRefModalityEdges = countRefModalityEdges;
18139
18326
  exports.creditRangesAll = creditRangesAll;
@@ -18304,11 +18491,13 @@ exports.mapShotIntentToProviderDirectives = mapShotIntentToProviderDirectives;
18304
18491
  exports.matchVariant = matchVariant;
18305
18492
  exports.maxSegmentSecFor = maxSegmentSecFor;
18306
18493
  exports.maxSegmentsFor = maxSegmentsFor;
18494
+ exports.measuredCanvasCombinations = measuredCanvasCombinations;
18307
18495
  exports.mergeClipLook = mergeClipLook;
18308
18496
  exports.mergeExposedSettings = mergeExposedSettings;
18309
18497
  exports.migrateEdgeOutputMode = migrateEdgeOutputMode;
18310
18498
  exports.migrateToItems = migrateToItems;
18311
18499
  exports.minSegmentSecFor = minSegmentSecFor;
18500
+ exports.minimalRatioDimensions = minimalRatioDimensions;
18312
18501
  exports.modelIdsByKindMode = modelIdsByKindMode;
18313
18502
  exports.modelToNodeTarget = modelToNodeTarget;
18314
18503
  exports.modelsForInputMode = modelsForInputMode;
@@ -18336,6 +18525,7 @@ exports.overlayStrokeSchema = overlayStrokeSchema;
18336
18525
  exports.overlayTextStyleSchema = overlayTextStyleSchema;
18337
18526
  exports.overlayVariantHandle = overlayVariantHandle;
18338
18527
  exports.overlayVariantIdFromHandle = overlayVariantIdFromHandle;
18528
+ exports.parseAspectToken = parseAspectToken;
18339
18529
  exports.parseAttributedDialogue = parseAttributedDialogue;
18340
18530
  exports.parseCharacterMentionToken = parseCharacterMentionToken;
18341
18531
  exports.parseEntityMentionToken = parseEntityMentionToken;
@@ -18395,6 +18585,8 @@ exports.resolveEffectiveSourceType = resolveEffectiveSourceType;
18395
18585
  exports.resolveEffectiveTier = resolveEffectiveTier;
18396
18586
  exports.resolveEntityAspect = resolveEntityAspect;
18397
18587
  exports.resolveFieldMappings = resolveFieldMappings;
18588
+ exports.resolveFrameDelivery = resolveFrameDelivery;
18589
+ exports.resolveFrameFitAspect = resolveFrameFitAspect;
18398
18590
  exports.resolveGvpAnchorWire = resolveGvpAnchorWire;
18399
18591
  exports.resolveImageGenCreditIdentifier = resolveImageGenCreditIdentifier;
18400
18592
  exports.resolveIndex = resolveIndex;
@@ -18407,6 +18599,7 @@ exports.resolveLottieOverlaySrc = resolveLottieOverlaySrc;
18407
18599
  exports.resolveNodeRefs = resolveNodeRefs;
18408
18600
  exports.resolveNormalizedImageGen = resolveNormalizedImageGen;
18409
18601
  exports.resolveObjectAspectRatio = resolveObjectAspectRatio;
18602
+ exports.resolveOutputCanvas = resolveOutputCanvas;
18410
18603
  exports.resolvePipelineModel = resolvePipelineModel;
18411
18604
  exports.resolveRelativeWindowToken = resolveRelativeWindowToken;
18412
18605
  exports.resolveScene3DAuthoringEngine = resolveScene3DAuthoringEngine;