@nodaro/shared 2.3.0 → 2.7.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 +176 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +220 -21
- package/dist/index.d.ts +220 -21
- package/dist/index.js +167 -25
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/effective-tier.test.ts +116 -0
- package/src/__tests__/entity-image-handle.test.ts +33 -1
- package/src/__tests__/group-aggregation.test.ts +39 -0
- package/src/__tests__/infer-music-video.test.ts +76 -0
- package/src/__tests__/llm-models.test.ts +3 -2
- package/src/__tests__/seedance-2-5-catalog.test.ts +16 -8
- package/src/effective-tier.ts +72 -0
- package/src/entity-image-handle.ts +37 -3
- package/src/group-aggregation.ts +32 -0
- package/src/index.ts +9 -0
- package/src/llm-models.ts +5 -0
- package/src/model-catalog.ts +48 -3
- package/src/model-constants.ts +29 -1
- package/src/node-default-mappings.ts +3 -2
- package/src/pipeline-defaults.ts +2 -0
- package/src/reduce-strategy-registry.ts +31 -13
- package/src/video-analysis.ts +70 -0
package/dist/index.cjs
CHANGED
|
@@ -729,6 +729,44 @@ var IMAGE_MODELS = {
|
|
|
729
729
|
useCases: ["upscale"],
|
|
730
730
|
pricing: [{ identifier: "grok-upscale", credits: 25 }]
|
|
731
731
|
},
|
|
732
|
+
// Grok Imagine Image 2.0 — t2i plus task-chained region editing. The edit
|
|
733
|
+
// and segment-map endpoints take a PRIOR grok-2 generation's task id (the
|
|
734
|
+
// job's `kieTaskId` output), not an image URL — same contract as
|
|
735
|
+
// grok-upscale (see TASK_CHAINED_EDIT_PROVIDERS in model-constants).
|
|
736
|
+
"grok-2": {
|
|
737
|
+
id: "grok-2",
|
|
738
|
+
kind: "image",
|
|
739
|
+
modes: ["t2i"],
|
|
740
|
+
family: "xAI",
|
|
741
|
+
label: "Grok Imagine 2",
|
|
742
|
+
series: "Grok",
|
|
743
|
+
description: "Grok Imagine Image 2.0 \u2014 expressive, high-contrast t2i. Generations chain into grok-2-segment (free named region masks) and grok-2-edit (region-targeted edits).",
|
|
744
|
+
useCases: ["stylized", "expressive", "general"],
|
|
745
|
+
aspectRatios: GROK_RATIOS,
|
|
746
|
+
pricing: [{ identifier: "grok-2", credits: 10 }]
|
|
747
|
+
},
|
|
748
|
+
"grok-2-edit": {
|
|
749
|
+
id: "grok-2-edit",
|
|
750
|
+
kind: "image",
|
|
751
|
+
modes: ["edit"],
|
|
752
|
+
family: "xAI",
|
|
753
|
+
label: "Grok Imagine 2 Edit",
|
|
754
|
+
series: "Grok",
|
|
755
|
+
description: "Prompt-edit a prior grok-2 generation by task id. Optional mask indexes (from grok-2-segment) restrict the edit to named regions.",
|
|
756
|
+
useCases: ["edit", "region-edit"],
|
|
757
|
+
pricing: [{ identifier: "grok-2-edit", credits: 10 }]
|
|
758
|
+
},
|
|
759
|
+
"grok-2-segment": {
|
|
760
|
+
id: "grok-2-segment",
|
|
761
|
+
kind: "image",
|
|
762
|
+
modes: ["edit"],
|
|
763
|
+
family: "xAI",
|
|
764
|
+
label: "Grok Imagine 2 Segment Map",
|
|
765
|
+
series: "Grok",
|
|
766
|
+
description: "FREE semantic segment map of a prior grok-2 generation \u2014 named region masks whose indexes feed grok-2-edit's region targeting.",
|
|
767
|
+
useCases: ["segmentation", "region-edit"],
|
|
768
|
+
pricing: [{ identifier: "grok-2-segment", credits: 0, note: "free" }]
|
|
769
|
+
},
|
|
732
770
|
// ── Utilities ──
|
|
733
771
|
"recraft-remove-bg": {
|
|
734
772
|
id: "recraft-remove-bg",
|
|
@@ -1203,7 +1241,8 @@ var VIDEO_MODELS = {
|
|
|
1203
1241
|
},
|
|
1204
1242
|
// Seedance 2.5 — the next Seedance generation, not a tier of the 2.0 ladder.
|
|
1205
1243
|
// Two levers differ from every 2.0 SKU and drive its own entries throughout:
|
|
1206
|
-
// durations run to 30s (2.0 caps at 15s) and there is NO
|
|
1244
|
+
// durations run to 30s (2.0 caps at 15s) and there is NO 4K tier (1080p
|
|
1245
|
+
// arrived on KIE 2026-08-17 — probe-verified; 4k/2k/1440p still rejected).
|
|
1207
1246
|
// Reference caps are also wider (30 images / 10 videos / 10 audio) — see
|
|
1208
1247
|
// SEEDANCE_2_5_REF_LIMITS in model-constants.
|
|
1209
1248
|
"seedance-2-5": {
|
|
@@ -1213,20 +1252,23 @@ var VIDEO_MODELS = {
|
|
|
1213
1252
|
family: "Bytedance",
|
|
1214
1253
|
label: "Seedance 2.5",
|
|
1215
1254
|
series: "Seedance",
|
|
1216
|
-
description: "Seedance 2.5 \u2014 up to 30s in one shot, native audio, wide multimodal references. 480p/720p.",
|
|
1255
|
+
description: "Seedance 2.5 \u2014 up to 30s in one shot, native audio, wide multimodal references. 480p/720p/1080p.",
|
|
1217
1256
|
useCases: ["premium", "narrative", "long-form"],
|
|
1218
1257
|
features: ["end-frame", "audio", "reference-image", "video-reference"],
|
|
1219
1258
|
aspectRatios: VIDEO_RATIOS_SEEDANCE_2,
|
|
1220
1259
|
durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
|
|
1221
|
-
resolutions: ["480p", "720p"],
|
|
1260
|
+
resolutions: ["480p", "720p", "1080p"],
|
|
1222
1261
|
pricing: [
|
|
1223
1262
|
{ identifier: "seedance-2-5", credits: 1260, note: "default 8s 720p \u2014 see :Ns:res variants for exact" },
|
|
1224
1263
|
{ identifier: "seedance-2-5:8s:480p", credits: 560, note: "8s 480p" },
|
|
1225
1264
|
{ identifier: "seedance-2-5:8s:720p", credits: 1260, note: "8s 720p" },
|
|
1265
|
+
{ identifier: "seedance-2-5:8s:1080p", credits: 2280, note: "8s 1080p" },
|
|
1226
1266
|
{ identifier: "seedance-2-5:8s:480p-ref", credits: 340, note: "8s 480p with reference video" },
|
|
1227
1267
|
{ identifier: "seedance-2-5:8s:720p-ref", credits: 760, note: "8s 720p with reference video" },
|
|
1268
|
+
{ identifier: "seedance-2-5:8s:1080p-ref", credits: 1370, note: "8s 1080p with reference video" },
|
|
1228
1269
|
{ identifier: "seedance-2-5:30s:480p", credits: 2100, note: "30s 480p (max)" },
|
|
1229
|
-
{ identifier: "seedance-2-5:30s:720p", credits: 4730, note: "30s 720p (max)" }
|
|
1270
|
+
{ identifier: "seedance-2-5:30s:720p", credits: 4730, note: "30s 720p (max)" },
|
|
1271
|
+
{ identifier: "seedance-2-5:30s:1080p", credits: 8550, note: "30s 1080p (max)" }
|
|
1230
1272
|
]
|
|
1231
1273
|
},
|
|
1232
1274
|
// ── Wan ──
|
|
@@ -2688,6 +2730,7 @@ var IMAGE_GEN_PROVIDERS = [
|
|
|
2688
2730
|
"nano-banana-2",
|
|
2689
2731
|
"nano-banana-2-lite",
|
|
2690
2732
|
"grok",
|
|
2733
|
+
"grok-2",
|
|
2691
2734
|
"gpt-image",
|
|
2692
2735
|
"gpt-image-2",
|
|
2693
2736
|
"imagen4",
|
|
@@ -2733,8 +2776,13 @@ var IMAGE_I2I_PROVIDERS = [
|
|
|
2733
2776
|
"kontext-multi",
|
|
2734
2777
|
// BFL Flux 2 Pro — runs through Replicate with safety_tolerance=5 (max for Pro)
|
|
2735
2778
|
"flux-2-pro",
|
|
2779
|
+
// BFL FLUX Fill Pro — dedicated masked inpainting via Replicate (white = edit area)
|
|
2780
|
+
"flux-fill",
|
|
2736
2781
|
// BFL Flux 2 Max — runs through Replicate with safety_tolerance=5, up to 8 refs
|
|
2737
|
-
"flux-2-max"
|
|
2782
|
+
"flux-2-max",
|
|
2783
|
+
// BFL FLUX Fill Pro — dedicated inpainting via Replicate (image + mask + prompt,
|
|
2784
|
+
// white = edit area). Second mask-capable i2i provider alongside ideogram-edit.
|
|
2785
|
+
"flux-fill"
|
|
2738
2786
|
];
|
|
2739
2787
|
var IMAGE_EDIT_PROVIDERS = [
|
|
2740
2788
|
"recraft-upscale",
|
|
@@ -2743,8 +2791,19 @@ var IMAGE_EDIT_PROVIDERS = [
|
|
|
2743
2791
|
"topaz-image-upscale",
|
|
2744
2792
|
// grok-upscale takes a prior Grok generation's task_id (NOT an image URL) —
|
|
2745
2793
|
// see edit-image route for the taskId-vs-imageUrl branching.
|
|
2746
|
-
"grok-upscale"
|
|
2794
|
+
"grok-upscale",
|
|
2795
|
+
// Grok Imagine 2 task-chained ops — same task_id contract as grok-upscale.
|
|
2796
|
+
// grok-2-edit: prompt edit of a prior grok-2 generation, optionally region-
|
|
2797
|
+
// targeted via mask indexes from grok-2-segment. grok-2-segment: FREE named
|
|
2798
|
+
// segment-mask map of a prior grok-2 generation.
|
|
2799
|
+
"grok-2-edit",
|
|
2800
|
+
"grok-2-segment"
|
|
2747
2801
|
];
|
|
2802
|
+
var TASK_CHAINED_EDIT_PROVIDERS = /* @__PURE__ */ new Set([
|
|
2803
|
+
"grok-upscale",
|
|
2804
|
+
"grok-2-edit",
|
|
2805
|
+
"grok-2-segment"
|
|
2806
|
+
]);
|
|
2748
2807
|
var MODIFY_IMAGE_PROVIDERS = [
|
|
2749
2808
|
...IMAGE_I2I_PROVIDERS,
|
|
2750
2809
|
"nano-banana-edit"
|
|
@@ -3026,7 +3085,7 @@ var VOICE_DESIGN_MODELS = [
|
|
|
3026
3085
|
"eleven_multilingual_ttv_v2"
|
|
3027
3086
|
];
|
|
3028
3087
|
var DEFAULT_VOICE_DESIGN_MODEL = "eleven_ttv_v3";
|
|
3029
|
-
var I2I_MASK_SUPPORT = /* @__PURE__ */ new Set(["ideogram-edit"]);
|
|
3088
|
+
var I2I_MASK_SUPPORT = /* @__PURE__ */ new Set(["ideogram-edit", "flux-fill"]);
|
|
3030
3089
|
var IMAGE_MASK_MODE = {
|
|
3031
3090
|
"nano-banana": "prompt",
|
|
3032
3091
|
"nano-banana-pro": "prompt",
|
|
@@ -3043,6 +3102,7 @@ var IMAGE_MASK_MODE = {
|
|
|
3043
3102
|
"flux": "composite",
|
|
3044
3103
|
"flux-flex": "composite",
|
|
3045
3104
|
"grok": "composite",
|
|
3105
|
+
"grok-2": "composite",
|
|
3046
3106
|
"imagen4": "composite",
|
|
3047
3107
|
"imagen4-fast": "composite",
|
|
3048
3108
|
"imagen4-ultra": "composite",
|
|
@@ -4693,6 +4753,16 @@ function buildChildrenByParent(nodes) {
|
|
|
4693
4753
|
function isCollectInEdge(e) {
|
|
4694
4754
|
return (e.targetHandle ?? COLLECT_IN_HANDLE) === COLLECT_IN_HANDLE;
|
|
4695
4755
|
}
|
|
4756
|
+
function computeAggregateLanes(nodeId, wiredTypes, buckets, edges) {
|
|
4757
|
+
const present = new Set(wiredTypes);
|
|
4758
|
+
for (const t2 of presentTypes(buckets)) present.add(t2);
|
|
4759
|
+
for (const e of edges) {
|
|
4760
|
+
if (e.source !== nodeId) continue;
|
|
4761
|
+
const lane = parseGroupHandle(e.sourceHandle);
|
|
4762
|
+
if (lane) present.add(lane);
|
|
4763
|
+
}
|
|
4764
|
+
return AGGREGATEABLE_TYPES.filter((t2) => present.has(t2));
|
|
4765
|
+
}
|
|
4696
4766
|
|
|
4697
4767
|
// src/llm-models.ts
|
|
4698
4768
|
var LLM_REASONING_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
|
|
@@ -5004,7 +5074,8 @@ var LLM_FEATURE_DEFAULTS = {
|
|
|
5004
5074
|
"qa-check": "gemini-3.6-flash",
|
|
5005
5075
|
"generate-script": "gemini-3.6-flash",
|
|
5006
5076
|
"translate": "gemini-3.6-flash",
|
|
5007
|
-
"image-critic": "claude-sonnet-4.6"
|
|
5077
|
+
"image-critic": "claude-sonnet-4.6",
|
|
5078
|
+
"pick-best-llm": "claude-sonnet-4.6"
|
|
5008
5079
|
};
|
|
5009
5080
|
var LLM_MODALITY_CAPS = {
|
|
5010
5081
|
"gemini-3-flash": { image: true, video: true, audio: true },
|
|
@@ -7634,6 +7705,29 @@ var SOCIAL_POST_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
|
7634
7705
|
var INSTAGRAM_CAROUSEL_MIN_ITEMS = 2;
|
|
7635
7706
|
var INSTAGRAM_CAROUSEL_MAX_ITEMS = 10;
|
|
7636
7707
|
|
|
7708
|
+
// src/effective-tier.ts
|
|
7709
|
+
function resolveStoredTier(p) {
|
|
7710
|
+
return p.tier ?? p.subscription_tier ?? "free";
|
|
7711
|
+
}
|
|
7712
|
+
function resolveEffectiveTier(p) {
|
|
7713
|
+
const stored = resolveStoredTier(p);
|
|
7714
|
+
if (stored === "free" && p.lifetime_topup_credits > 0) return "payg";
|
|
7715
|
+
return stored;
|
|
7716
|
+
}
|
|
7717
|
+
var PAYG_RETENTION_DAYS = 90;
|
|
7718
|
+
function isPaygRetentionActive(p, now) {
|
|
7719
|
+
if (p.lifetimeTopupCredits <= 0) return false;
|
|
7720
|
+
const cutoff = now.getTime() - PAYG_RETENTION_DAYS * 24 * 60 * 60 * 1e3;
|
|
7721
|
+
const at = (v) => {
|
|
7722
|
+
if (v === null) return null;
|
|
7723
|
+
const t2 = v instanceof Date ? v.getTime() : new Date(v).getTime();
|
|
7724
|
+
return Number.isFinite(t2) ? t2 : null;
|
|
7725
|
+
};
|
|
7726
|
+
const topup = at(p.lastTopupAt);
|
|
7727
|
+
const spend = at(p.lastSpendAt);
|
|
7728
|
+
return topup !== null && topup >= cutoff || spend !== null && spend >= cutoff;
|
|
7729
|
+
}
|
|
7730
|
+
|
|
7637
7731
|
// src/node-default-mappings.ts
|
|
7638
7732
|
var NODE_DEFAULT_TYPES = [
|
|
7639
7733
|
// Image
|
|
@@ -7725,8 +7819,9 @@ var QUALITY_MAP = {
|
|
|
7725
7819
|
"seedance-2": { field: "resolution", values: { low: "720p", mid: "1080p", high: "1080p" } },
|
|
7726
7820
|
"seedance-2-fast": { field: "resolution", values: { low: "480p", mid: "720p", high: "720p" } },
|
|
7727
7821
|
"seedance-2-mini": { field: "resolution", values: { low: "480p", mid: "720p", high: "720p" } },
|
|
7728
|
-
// Seedance 2.5
|
|
7729
|
-
|
|
7822
|
+
// Seedance 2.5 spans 480p/720p/1080p on KIE (1080p accepted since the
|
|
7823
|
+
// 2026-08-17 re-probe; 4k still rejected), so each quality rung gets its own tier.
|
|
7824
|
+
"seedance-2-5": { field: "resolution", values: { low: "480p", mid: "720p", high: "1080p" } },
|
|
7730
7825
|
"wan-2.7-i2v": { field: "resolution", values: { low: "720p", mid: "1080p", high: "1080p" } },
|
|
7731
7826
|
"wan-2.7-t2v": { field: "resolution", values: { low: "720p", mid: "1080p", high: "1080p" } },
|
|
7732
7827
|
"happyhorse": { field: "resolution", values: { low: "720p", mid: "1080p", high: "1080p" } },
|
|
@@ -9867,6 +9962,8 @@ function validateModeActivation(mode, activation) {
|
|
|
9867
9962
|
}
|
|
9868
9963
|
var TIER_PIPELINE_PARALLELISM = {
|
|
9869
9964
|
free: 0,
|
|
9965
|
+
payg: 1,
|
|
9966
|
+
// derived tier — pipeline entitlements copy basic's
|
|
9870
9967
|
basic: 1,
|
|
9871
9968
|
standard: 2,
|
|
9872
9969
|
pro: 3,
|
|
@@ -9874,6 +9971,8 @@ var TIER_PIPELINE_PARALLELISM = {
|
|
|
9874
9971
|
};
|
|
9875
9972
|
var TIER_MAX_PIPELINE_COST_CREDITS = {
|
|
9876
9973
|
free: 0,
|
|
9974
|
+
payg: 3e3,
|
|
9975
|
+
// derived tier — copies basic
|
|
9877
9976
|
basic: 3e3,
|
|
9878
9977
|
standard: 8e3,
|
|
9879
9978
|
pro: 2e4,
|
|
@@ -11190,24 +11289,31 @@ function selectLoraRoutingForMentions(refs) {
|
|
|
11190
11289
|
}
|
|
11191
11290
|
var PICK_BEST_LLM_STRATEGY = {
|
|
11192
11291
|
id: "pick-best-llm",
|
|
11193
|
-
label: "
|
|
11194
|
-
description: "
|
|
11292
|
+
label: "AI picks the best",
|
|
11293
|
+
description: "AI compares every candidate against your criteria and picks one.",
|
|
11195
11294
|
configSchema: zod.z.object({
|
|
11196
11295
|
// Default to the sensible "best quality" criteria when omitted (matches
|
|
11197
11296
|
// defaultConfig) so a reduce({strategyId:"pick-best-llm"}) call with no
|
|
11198
11297
|
// criteria degrades gracefully instead of erroring. An explicit "" still
|
|
11199
11298
|
// rejects via min(1).
|
|
11200
11299
|
criteria: zod.z.string().min(1, "criteria cannot be empty").default("Pick the highest-quality result."),
|
|
11201
|
-
inputKind: zod.z.enum(["text", "image-url"]).default("text")
|
|
11300
|
+
inputKind: zod.z.enum(["text", "image-url"]).default("text"),
|
|
11301
|
+
// The judge model, like every other LLM node (llmModel + LlmModelSelect).
|
|
11302
|
+
// Optional: omitted → LLM_FEATURE_DEFAULTS["pick-best-llm"]. Validated
|
|
11303
|
+
// against LLM_MODEL_IDS at the route (the registry can't import the model
|
|
11304
|
+
// list without a cycle), and its tier drives the credit price via
|
|
11305
|
+
// buildLlmCreditIdentifier — economy / standard / premium.
|
|
11306
|
+
llmModel: zod.z.string().optional()
|
|
11202
11307
|
}),
|
|
11203
11308
|
defaultConfig: { criteria: "Pick the highest-quality result.", inputKind: "text" },
|
|
11204
11309
|
outputType: "text",
|
|
11205
|
-
creditCostKey: "reduce:pick-best-llm"
|
|
11310
|
+
creditCostKey: "reduce:pick-best-llm",
|
|
11311
|
+
usesLlm: true
|
|
11206
11312
|
};
|
|
11207
11313
|
var CONCAT_STRATEGY = {
|
|
11208
11314
|
id: "concat",
|
|
11209
|
-
label: "
|
|
11210
|
-
description: "
|
|
11315
|
+
label: "Join into one text",
|
|
11316
|
+
description: "Puts every candidate into a single text, one after another, with a separator between them.",
|
|
11211
11317
|
configSchema: zod.z.object({ separator: zod.z.string().default("\n\n") }),
|
|
11212
11318
|
defaultConfig: { separator: "\n\n" },
|
|
11213
11319
|
outputType: "text",
|
|
@@ -11215,8 +11321,8 @@ var CONCAT_STRATEGY = {
|
|
|
11215
11321
|
};
|
|
11216
11322
|
var FIRST_NON_EMPTY_STRATEGY = {
|
|
11217
11323
|
id: "first-non-empty",
|
|
11218
|
-
label: "First
|
|
11219
|
-
description: "
|
|
11324
|
+
label: "First that has content",
|
|
11325
|
+
description: "Takes the first candidate that is not empty and ignores the rest.",
|
|
11220
11326
|
configSchema: zod.z.object({}),
|
|
11221
11327
|
defaultConfig: {},
|
|
11222
11328
|
outputType: "text",
|
|
@@ -11224,8 +11330,8 @@ var FIRST_NON_EMPTY_STRATEGY = {
|
|
|
11224
11330
|
};
|
|
11225
11331
|
var COUNT_STRATEGY = {
|
|
11226
11332
|
id: "count",
|
|
11227
|
-
label: "Count",
|
|
11228
|
-
description: "
|
|
11333
|
+
label: "Count them",
|
|
11334
|
+
description: "Outputs how many candidates arrived.",
|
|
11229
11335
|
configSchema: zod.z.object({}),
|
|
11230
11336
|
defaultConfig: {},
|
|
11231
11337
|
outputType: "data",
|
|
@@ -11233,8 +11339,8 @@ var COUNT_STRATEGY = {
|
|
|
11233
11339
|
};
|
|
11234
11340
|
var VOTE_STRATEGY = {
|
|
11235
11341
|
id: "vote",
|
|
11236
|
-
label: "
|
|
11237
|
-
description: "
|
|
11342
|
+
label: "Most common answer",
|
|
11343
|
+
description: "Picks the candidate that appears most often (ties go to the first).",
|
|
11238
11344
|
configSchema: zod.z.object({ caseSensitive: zod.z.boolean().default(false) }),
|
|
11239
11345
|
defaultConfig: { caseSensitive: false },
|
|
11240
11346
|
outputType: "text",
|
|
@@ -11242,8 +11348,8 @@ var VOTE_STRATEGY = {
|
|
|
11242
11348
|
};
|
|
11243
11349
|
var MERGE_JSON_STRATEGY = {
|
|
11244
11350
|
id: "merge-json",
|
|
11245
|
-
label: "Merge JSON",
|
|
11246
|
-
description: "
|
|
11351
|
+
label: "Merge JSON objects",
|
|
11352
|
+
description: "Reads every candidate as JSON and merges them into one object.",
|
|
11247
11353
|
configSchema: zod.z.object({ strategy: zod.z.enum(["deep", "shallow"]).default("deep") }),
|
|
11248
11354
|
defaultConfig: { strategy: "deep" },
|
|
11249
11355
|
outputType: "data",
|
|
@@ -12668,10 +12774,21 @@ var ENTITY_IMAGE_HANDLE_TYPES = /* @__PURE__ */ new Set([
|
|
|
12668
12774
|
"object",
|
|
12669
12775
|
"creature"
|
|
12670
12776
|
]);
|
|
12777
|
+
var AGGREGATE_LANE_SOURCE_TYPES = /* @__PURE__ */ new Set(["group", "collect"]);
|
|
12778
|
+
var AGGREGATE_LANE_EFFECTIVE_TYPE = {
|
|
12779
|
+
"out-image": "upload-image",
|
|
12780
|
+
"out-video": "upload-video",
|
|
12781
|
+
"out-audio": "upload-audio",
|
|
12782
|
+
"out-text": "list"
|
|
12783
|
+
};
|
|
12671
12784
|
function resolveEffectiveSourceType(rawSourceType, sourceHandleId) {
|
|
12672
12785
|
if (sourceHandleId === "image" && ENTITY_IMAGE_HANDLE_TYPES.has(rawSourceType ?? "")) {
|
|
12673
12786
|
return "upload-image";
|
|
12674
12787
|
}
|
|
12788
|
+
if (AGGREGATE_LANE_SOURCE_TYPES.has(rawSourceType ?? "")) {
|
|
12789
|
+
const effective = AGGREGATE_LANE_EFFECTIVE_TYPE[sourceHandleId ?? ""];
|
|
12790
|
+
if (effective) return effective;
|
|
12791
|
+
}
|
|
12675
12792
|
return rawSourceType ?? "";
|
|
12676
12793
|
}
|
|
12677
12794
|
function sourceRefKey(nodeId, sourceHandleId, rawSourceType) {
|
|
@@ -12756,6 +12873,8 @@ var VIDEO_ANALYSIS_VISUAL_EFFECTS = [
|
|
|
12756
12873
|
];
|
|
12757
12874
|
var VIDEO_ANALYSIS_TRANSITIONS = ["cut", "fade", "dissolve", "wipe", "whip"];
|
|
12758
12875
|
var VIDEO_ANALYSIS_SPEED_EFFECTS = ["slow-motion", "ramp-in", "ramp-out", "timelapse", "freeze", "reverse"];
|
|
12876
|
+
var VIDEO_ANALYSIS_TIMES_OF_DAY = ["dawn", "day", "dusk", "night", "ambiguous"];
|
|
12877
|
+
var VIDEO_ANALYSIS_STORY_JUMPS = ["continuous", "same-day", "another-day", "years-later", "unclear"];
|
|
12759
12878
|
var clipLookSchema = zod.z.object({
|
|
12760
12879
|
/**
|
|
12761
12880
|
* The rendering MEDIUM — "live-action photoreal", "2D anime", "stop-motion
|
|
@@ -12880,6 +12999,12 @@ var windowSceneBase = zod.z.object({
|
|
|
12880
12999
|
angle: zod.z.enum(VIDEO_ANALYSIS_SHOT_ANGLES).optional(),
|
|
12881
13000
|
/** Time manipulation. Absent ⇒ normal speed. */
|
|
12882
13001
|
speed: zod.z.enum(VIDEO_ANALYSIS_SPEED_EFFECTS).optional(),
|
|
13002
|
+
/** CHRONICLE TIME (2026-08-17) — see the consts' docstrings. Both optional:
|
|
13003
|
+
* absent on every pre-2.6.0 analysis, and legitimately absent when the
|
|
13004
|
+
* analyser cannot read the clock. Enum + optional keeps the window decode
|
|
13005
|
+
* grammar congruence-safe (no ints, no maxItems). */
|
|
13006
|
+
timeOfDay: zod.z.enum(VIDEO_ANALYSIS_TIMES_OF_DAY).optional(),
|
|
13007
|
+
storyJump: zod.z.enum(VIDEO_ANALYSIS_STORY_JUMPS).optional(),
|
|
12883
13008
|
visual: zod.z.string().min(1),
|
|
12884
13009
|
/**
|
|
12885
13010
|
* Text burned into the PICTURE of this shot — titles, captions, lower-thirds,
|
|
@@ -13047,6 +13172,23 @@ function aspectRatioFromDims(w, h) {
|
|
|
13047
13172
|
const g = gcd(Math.round(w), Math.round(h));
|
|
13048
13173
|
return `${Math.round(w) / g}:${Math.round(h) / g}`;
|
|
13049
13174
|
}
|
|
13175
|
+
var MUSIC_VOCAL_RE = /\b(?:lyrics?|sung|sings?|singing|vocals?|chorus|verse|rap(?:ping|ped)?|a cappella)\b/i;
|
|
13176
|
+
var MUSIC_VOCAL_QUOTE_RE = /["\u201c][^"\u201d]{6,}["\u201d]/;
|
|
13177
|
+
var MUSIC_NO_VOCAL_RE = /\b(?:no|without|non)[- ](?:vocals?|lyrics?|singing)\b|\binstrumental\b|\bwordless\b/i;
|
|
13178
|
+
function inferMusicVideo(analysis) {
|
|
13179
|
+
const scenes = analysis?.scenes ?? [];
|
|
13180
|
+
if (scenes.length < 4) return false;
|
|
13181
|
+
const musicLayers = (sc) => (sc.audio ?? []).filter((a) => a?.mode === "music");
|
|
13182
|
+
const withMusic = scenes.filter((sc) => musicLayers(sc).length > 0).length;
|
|
13183
|
+
if (withMusic / scenes.length < 0.8) return false;
|
|
13184
|
+
return scenes.some(
|
|
13185
|
+
(sc) => musicLayers(sc).some((a) => {
|
|
13186
|
+
const content = typeof a.content === "string" ? a.content : "";
|
|
13187
|
+
if (MUSIC_NO_VOCAL_RE.test(content)) return false;
|
|
13188
|
+
return MUSIC_VOCAL_RE.test(content) || MUSIC_VOCAL_QUOTE_RE.test(content);
|
|
13189
|
+
})
|
|
13190
|
+
);
|
|
13191
|
+
}
|
|
13050
13192
|
|
|
13051
13193
|
// src/video-analysis-pricing.ts
|
|
13052
13194
|
var VIDEO_ANALYSIS_DURATION_BUCKETS = [60, 180, 360, 600];
|
|
@@ -13149,6 +13291,7 @@ function clampSmartCutWindow(value) {
|
|
|
13149
13291
|
exports.ACTIVE_SCENE_HELPERS = ACTIVE_SCENE_HELPERS;
|
|
13150
13292
|
exports.ADVANCED_MODE_UNAVAILABLE_REASON = ADVANCED_MODE_UNAVAILABLE_REASON;
|
|
13151
13293
|
exports.AGGREGATEABLE_TYPES = AGGREGATEABLE_TYPES;
|
|
13294
|
+
exports.AGGREGATE_LANE_SOURCE_TYPES = AGGREGATE_LANE_SOURCE_TYPES;
|
|
13152
13295
|
exports.AI_AVATAR_DURATION_BUCKETS = AI_AVATAR_DURATION_BUCKETS;
|
|
13153
13296
|
exports.AI_AVATAR_MAX_AUDIO_SEC = AI_AVATAR_MAX_AUDIO_SEC;
|
|
13154
13297
|
exports.AI_AVATAR_MAX_DURATION_SEC = AI_AVATAR_MAX_DURATION_SEC;
|
|
@@ -13396,6 +13539,7 @@ exports.OptimizeForModelInputSchema = OptimizeForModelInputSchema;
|
|
|
13396
13539
|
exports.OptimizeForModelResultSchema = OptimizeForModelResultSchema;
|
|
13397
13540
|
exports.PARAMETER_NODE_TYPES = PARAMETER_NODE_TYPES;
|
|
13398
13541
|
exports.PASSTHROUGH_TYPES = PASSTHROUGH_TYPES;
|
|
13542
|
+
exports.PAYG_RETENTION_DAYS = PAYG_RETENTION_DAYS;
|
|
13399
13543
|
exports.PER_FORMAT_DURATION_BOUNDS = PER_FORMAT_DURATION_BOUNDS;
|
|
13400
13544
|
exports.PIPELINE_ACTIVATION_MODES = PIPELINE_ACTIVATION_MODES;
|
|
13401
13545
|
exports.PIPELINE_FORMATS = PIPELINE_FORMATS;
|
|
@@ -13503,6 +13647,7 @@ exports.StoryboardCohesionCriticVerdictSchema = StoryboardCohesionCriticVerdictS
|
|
|
13503
13647
|
exports.StyleDirectivesSchema = StyleDirectivesSchema;
|
|
13504
13648
|
exports.SubGateNameSchema = SubGateNameSchema;
|
|
13505
13649
|
exports.T2I_TO_I2I_VARIANT = T2I_TO_I2I_VARIANT;
|
|
13650
|
+
exports.TASK_CHAINED_EDIT_PROVIDERS = TASK_CHAINED_EDIT_PROVIDERS;
|
|
13506
13651
|
exports.TEXT_TO_AUDIO_PROVIDERS = TEXT_TO_AUDIO_PROVIDERS;
|
|
13507
13652
|
exports.TEXT_TO_VIDEO_PROVIDERS = TEXT_TO_VIDEO_PROVIDERS;
|
|
13508
13653
|
exports.TIER_MAX_PIPELINE_COST_CREDITS = TIER_MAX_PIPELINE_COST_CREDITS;
|
|
@@ -13536,9 +13681,11 @@ exports.VIDEO_ANALYSIS_MAX_VARIATIONS = VIDEO_ANALYSIS_MAX_VARIATIONS;
|
|
|
13536
13681
|
exports.VIDEO_ANALYSIS_MIXED_TIERS = VIDEO_ANALYSIS_MIXED_TIERS;
|
|
13537
13682
|
exports.VIDEO_ANALYSIS_SHOT_ANGLES = VIDEO_ANALYSIS_SHOT_ANGLES;
|
|
13538
13683
|
exports.VIDEO_ANALYSIS_SPEED_EFFECTS = VIDEO_ANALYSIS_SPEED_EFFECTS;
|
|
13684
|
+
exports.VIDEO_ANALYSIS_STORY_JUMPS = VIDEO_ANALYSIS_STORY_JUMPS;
|
|
13539
13685
|
exports.VIDEO_ANALYSIS_TIERS = VIDEO_ANALYSIS_TIERS;
|
|
13540
13686
|
exports.VIDEO_ANALYSIS_TIER_LABELS = VIDEO_ANALYSIS_TIER_LABELS;
|
|
13541
13687
|
exports.VIDEO_ANALYSIS_TIER_ORDER = VIDEO_ANALYSIS_TIER_ORDER;
|
|
13688
|
+
exports.VIDEO_ANALYSIS_TIMES_OF_DAY = VIDEO_ANALYSIS_TIMES_OF_DAY;
|
|
13542
13689
|
exports.VIDEO_ANALYSIS_TRANSITIONS = VIDEO_ANALYSIS_TRANSITIONS;
|
|
13543
13690
|
exports.VIDEO_ANALYSIS_VARIATION_SLUGS = VIDEO_ANALYSIS_VARIATION_SLUGS;
|
|
13544
13691
|
exports.VIDEO_ANALYSIS_VISUAL_EFFECTS = VIDEO_ANALYSIS_VISUAL_EFFECTS;
|
|
@@ -13633,6 +13780,7 @@ exports.clearVideoCriticMetadata = clearVideoCriticMetadata;
|
|
|
13633
13780
|
exports.clipLookSchema = clipLookSchema;
|
|
13634
13781
|
exports.collectAncestorRefs = collectAncestorRefs;
|
|
13635
13782
|
exports.combineSameLabelRefs = combineSameLabelRefs;
|
|
13783
|
+
exports.computeAggregateLanes = computeAggregateLanes;
|
|
13636
13784
|
exports.countRefModalityEdges = countRefModalityEdges;
|
|
13637
13785
|
exports.creditRangesAll = creditRangesAll;
|
|
13638
13786
|
exports.creditsToUsd = creditsToUsd;
|
|
@@ -13732,6 +13880,7 @@ exports.hasFeature = hasFeature;
|
|
|
13732
13880
|
exports.hexToRgbaArray = hexToRgbaArray;
|
|
13733
13881
|
exports.humanizeSlotSid = humanizeSlotSid;
|
|
13734
13882
|
exports.imageReferenceLimit = imageReferenceLimit;
|
|
13883
|
+
exports.inferMusicVideo = inferMusicVideo;
|
|
13735
13884
|
exports.isAggregateableType = isAggregateableType;
|
|
13736
13885
|
exports.isCharacterAspectRatio = isCharacterAspectRatio;
|
|
13737
13886
|
exports.isCollectInEdge = isCollectInEdge;
|
|
@@ -13745,6 +13894,7 @@ exports.isLocationUsageMode = isLocationUsageMode;
|
|
|
13745
13894
|
exports.isMinimaxH3Provider = isMinimaxH3Provider;
|
|
13746
13895
|
exports.isObjectAspectRatio = isObjectAspectRatio;
|
|
13747
13896
|
exports.isOversizedScene = isOversizedScene;
|
|
13897
|
+
exports.isPaygRetentionActive = isPaygRetentionActive;
|
|
13748
13898
|
exports.isPerSecondLipSyncProvider = isPerSecondLipSyncProvider;
|
|
13749
13899
|
exports.isScraperActor = isScraperActor;
|
|
13750
13900
|
exports.isSeedance2Provider = isSeedance2Provider;
|
|
@@ -13818,6 +13968,7 @@ exports.resolveDefaultRole = resolveDefaultRole;
|
|
|
13818
13968
|
exports.resolveDescription = resolveDescription;
|
|
13819
13969
|
exports.resolveDialogueVoices = resolveDialogueVoices;
|
|
13820
13970
|
exports.resolveEffectiveSourceType = resolveEffectiveSourceType;
|
|
13971
|
+
exports.resolveEffectiveTier = resolveEffectiveTier;
|
|
13821
13972
|
exports.resolveEntityAspect = resolveEntityAspect;
|
|
13822
13973
|
exports.resolveFieldMappings = resolveFieldMappings;
|
|
13823
13974
|
exports.resolveGvpAnchorWire = resolveGvpAnchorWire;
|
|
@@ -13838,6 +13989,7 @@ exports.resolveSelectorRefs = resolveSelectorRefs;
|
|
|
13838
13989
|
exports.resolveSeparator = resolveSeparator;
|
|
13839
13990
|
exports.resolveSheetSections = resolveSheetSections;
|
|
13840
13991
|
exports.resolveSourceThroughConnectedList = resolveSourceThroughConnectedList;
|
|
13992
|
+
exports.resolveStoredTier = resolveStoredTier;
|
|
13841
13993
|
exports.resolveSwitchXCreditId = resolveSwitchXCreditId;
|
|
13842
13994
|
exports.resolveVideoAnalysisModel = resolveVideoAnalysisModel;
|
|
13843
13995
|
exports.resolveVideoProviderForMode = resolveVideoProviderForMode;
|