@nodaro/shared 2.11.0 → 2.12.2
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 +67 -57
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -1
- package/dist/index.d.ts +52 -1
- package/dist/index.js +66 -58
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/video-analysis-catalog-sync.test.ts +6 -2
- package/src/__tests__/video-analysis-pricing.test.ts +8 -8
- package/src/__tests__/video-analysis-shot-craft.test.ts +38 -0
- package/src/i18n/framing.ar.ts +0 -1
- package/src/i18n/framing.de.ts +0 -1
- package/src/i18n/framing.es.ts +0 -1
- package/src/i18n/framing.fr.ts +0 -1
- package/src/i18n/framing.he.ts +0 -1
- package/src/i18n/framing.hi.ts +0 -1
- package/src/i18n/framing.ja.ts +0 -1
- package/src/i18n/framing.ko.ts +0 -1
- package/src/i18n/framing.pt-BR.ts +0 -1
- package/src/i18n/framing.ru.ts +0 -1
- package/src/i18n/framing.zh-CN.ts +0 -1
- package/src/model-catalog.ts +32 -32
- package/src/video-analysis-pricing.ts +36 -25
- package/src/video-analysis.ts +21 -0
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:
|
|
1813
|
+
{ identifier: "video-analysis:gemini-3-flash", credits: 847, note: "10-min ceiling (no duration given)" },
|
|
1814
1814
|
{ identifier: "video-analysis:gemini-3-flash:60s", credits: 180 },
|
|
1815
1815
|
{ identifier: "video-analysis:gemini-3-flash:180s", credits: 185 },
|
|
1816
|
-
{ identifier: "video-analysis:gemini-3-flash:360s", credits:
|
|
1817
|
-
{ identifier: "video-analysis:gemini-3-flash:600s", credits:
|
|
1816
|
+
{ identifier: "video-analysis:gemini-3-flash:360s", credits: 515 },
|
|
1817
|
+
{ identifier: "video-analysis:gemini-3-flash:600s", credits: 847, 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:
|
|
1831
|
-
{ identifier: "video-analysis:gemini-3.6-flash:60s", credits:
|
|
1830
|
+
{ identifier: "video-analysis:gemini-3.6-flash", credits: 990, note: "10-min ceiling (no duration given)" },
|
|
1831
|
+
{ identifier: "video-analysis:gemini-3.6-flash:60s", credits: 204 },
|
|
1832
1832
|
{ identifier: "video-analysis:gemini-3.6-flash:180s", credits: 218 },
|
|
1833
|
-
{ identifier: "video-analysis:gemini-3.6-flash:360s", credits:
|
|
1834
|
-
{ identifier: "video-analysis:gemini-3.6-flash:600s", credits:
|
|
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" }
|
|
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:
|
|
1848
|
-
{ identifier: "video-analysis:gemini-3.1-pro:60s", credits:
|
|
1849
|
-
{ identifier: "video-analysis:gemini-3.1-pro:180s", credits:
|
|
1850
|
-
{ identifier: "video-analysis:gemini-3.1-pro:360s", credits:
|
|
1851
|
-
{ identifier: "video-analysis:gemini-3.1-pro:600s", credits:
|
|
1847
|
+
{ identifier: "video-analysis:gemini-3.1-pro", credits: 1053, note: "10-min ceiling (no duration given)" },
|
|
1848
|
+
{ identifier: "video-analysis:gemini-3.1-pro:60s", credits: 216 },
|
|
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" }
|
|
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:
|
|
1868
|
-
{ identifier: "video-analysis:mixed:60s", credits:
|
|
1869
|
-
{ identifier: "video-analysis:mixed:180s", credits:
|
|
1870
|
-
{ identifier: "video-analysis:mixed:360s", credits:
|
|
1871
|
-
{ identifier: "video-analysis:mixed:600s", credits:
|
|
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" }
|
|
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:
|
|
1890
|
-
{ identifier: "video-analysis:smart:60s", credits:
|
|
1891
|
-
{ identifier: "video-analysis:smart:180s", credits:
|
|
1892
|
-
{ identifier: "video-analysis:smart:360s", credits:
|
|
1893
|
-
{ identifier: "video-analysis:smart:600s", credits:
|
|
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" }
|
|
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:
|
|
1918
|
-
{ identifier: "video-audit:60s", credits:
|
|
1919
|
-
{ identifier: "video-audit:180s", credits:
|
|
1920
|
-
{ identifier: "video-audit:360s", credits:
|
|
1921
|
-
{ identifier: "video-audit:600s", credits:
|
|
1917
|
+
{ identifier: "video-audit", credits: 1070, note: "10-min ceiling (no duration given)" },
|
|
1918
|
+
{ identifier: "video-audit:60s", credits: 214 },
|
|
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" }
|
|
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:
|
|
1934
|
-
{ identifier: "video-audit:auto:60s", credits:
|
|
1935
|
-
{ identifier: "video-audit:auto:180s", credits:
|
|
1936
|
-
{ identifier: "video-audit:auto:360s", credits:
|
|
1937
|
-
{ identifier: "video-audit:auto:600s", credits:
|
|
1933
|
+
{ identifier: "video-audit:auto", credits: 1917, note: "10-min ceiling (no duration given)" },
|
|
1934
|
+
{ identifier: "video-audit:auto:60s", credits: 394 },
|
|
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" }
|
|
1938
1938
|
]
|
|
1939
1939
|
}
|
|
1940
1940
|
};
|
|
@@ -13027,6 +13027,8 @@ var VIDEO_ANALYSIS_VISUAL_EFFECTS = [
|
|
|
13027
13027
|
"double-exposure"
|
|
13028
13028
|
];
|
|
13029
13029
|
var VIDEO_ANALYSIS_TRANSITIONS = ["cut", "fade", "dissolve", "wipe", "whip"];
|
|
13030
|
+
var VIDEO_ANALYSIS_TEXT_KINDS = ["title", "caption", "lower-third", "subtitle", "logo", "other"];
|
|
13031
|
+
var VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN = ["fade"];
|
|
13030
13032
|
var VIDEO_ANALYSIS_SPEED_EFFECTS = ["slow-motion", "ramp-in", "ramp-out", "timelapse", "freeze", "reverse"];
|
|
13031
13033
|
var VIDEO_ANALYSIS_TIMES_OF_DAY = ["dawn", "day", "dusk", "night", "ambiguous"];
|
|
13032
13034
|
var VIDEO_ANALYSIS_STORY_JUMPS = ["continuous", "same-day", "another-day", "years-later", "unclear"];
|
|
@@ -13173,6 +13175,8 @@ var windowSceneBase = zod.z.object({
|
|
|
13173
13175
|
* earlier scene's speech means the shot is replayed footage under a voice-over.
|
|
13174
13176
|
*/
|
|
13175
13177
|
onScreenText: zod.z.string().optional(),
|
|
13178
|
+
/** What the on-screen text IS. Meaningful only when `onScreenText` is non-empty. */
|
|
13179
|
+
onScreenTextKind: zod.z.enum(VIDEO_ANALYSIS_TEXT_KINDS).optional(),
|
|
13176
13180
|
/** Effects on this shot's PICTURE. Absent ⇒ a clean image. */
|
|
13177
13181
|
effects: zod.z.array(zod.z.enum(VIDEO_ANALYSIS_VISUAL_EFFECTS)).optional(),
|
|
13178
13182
|
transitionOut: zod.z.enum(VIDEO_ANALYSIS_TRANSITIONS).optional(),
|
|
@@ -13190,6 +13194,8 @@ var windowAnalysisSchema = zod.z.object({
|
|
|
13190
13194
|
/** The clip-level look as read from THIS window. Merge folds the windows
|
|
13191
13195
|
* field-by-field (first non-empty wins), like `language`. */
|
|
13192
13196
|
look: clipLookSchema.optional(),
|
|
13197
|
+
/** The clip opens with a fade-in. Folded from window 0 only. */
|
|
13198
|
+
transitionIn: zod.z.enum(VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN).optional(),
|
|
13193
13199
|
slots: zod.z.array(entitySlotSchema),
|
|
13194
13200
|
scenes: zod.z.array(windowSceneSchema)
|
|
13195
13201
|
});
|
|
@@ -13212,6 +13218,8 @@ var videoAnalysisResultSchema = zod.z.object({
|
|
|
13212
13218
|
* rather than a member: `meta` is probed fact (ffprobe dimensions, probed
|
|
13213
13219
|
* duration), while this is the model's reading of the photography. */
|
|
13214
13220
|
look: clipLookSchema.optional(),
|
|
13221
|
+
/** The clip opens with a fade-in. Folded from window 0 only. */
|
|
13222
|
+
transitionIn: zod.z.enum(VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN).optional(),
|
|
13215
13223
|
slots: zod.z.array(entitySlotSchema),
|
|
13216
13224
|
scenes: zod.z.array(analyzedSceneSchema).min(1),
|
|
13217
13225
|
/** CAST VARIATIONS (§4 cap handling): looks the analyzer's merge FOLDED into
|
|
@@ -13357,35 +13365,35 @@ var VIDEO_ANALYSIS_BUCKET_CREDITS = {
|
|
|
13357
13365
|
// Legacy fast-tier model (pre-2026-07) — kept for stored raw-id configs.
|
|
13358
13366
|
"video-analysis:gemini-3-flash:60s": 180,
|
|
13359
13367
|
"video-analysis:gemini-3-flash:180s": 185,
|
|
13360
|
-
"video-analysis:gemini-3-flash:360s":
|
|
13361
|
-
"video-analysis:gemini-3-flash:600s":
|
|
13368
|
+
"video-analysis:gemini-3-flash:360s": 515,
|
|
13369
|
+
"video-analysis:gemini-3-flash:600s": 847,
|
|
13362
13370
|
// Current fast tier — regenerated from the private formula for its backing
|
|
13363
13371
|
// model; higher than the legacy fast schedule but still ≤ pro per bucket.
|
|
13364
|
-
"video-analysis:gemini-3.6-flash:60s":
|
|
13372
|
+
"video-analysis:gemini-3.6-flash:60s": 204,
|
|
13365
13373
|
"video-analysis:gemini-3.6-flash:180s": 218,
|
|
13366
|
-
"video-analysis:gemini-3.6-flash:360s":
|
|
13367
|
-
"video-analysis:gemini-3.6-flash:600s":
|
|
13368
|
-
"video-analysis:gemini-3.1-pro:60s":
|
|
13369
|
-
"video-analysis:gemini-3.1-pro:180s":
|
|
13370
|
-
"video-analysis:gemini-3.1-pro:360s":
|
|
13371
|
-
"video-analysis:gemini-3.1-pro:600s":
|
|
13374
|
+
"video-analysis:gemini-3.6-flash:360s": 600,
|
|
13375
|
+
"video-analysis:gemini-3.6-flash:600s": 990,
|
|
13376
|
+
"video-analysis:gemini-3.1-pro:60s": 216,
|
|
13377
|
+
"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,
|
|
13372
13380
|
// Mixed tiers (`mixed` + `mixed-fast`) share ONE credit family — they are
|
|
13373
13381
|
// variants of the same engine plan (plan internals live in the private
|
|
13374
13382
|
// analysis plugin). Admin-tunable via model_pricing like every other row.
|
|
13375
|
-
"video-analysis:mixed:60s":
|
|
13376
|
-
"video-analysis:mixed:180s":
|
|
13377
|
-
"video-analysis:mixed:360s":
|
|
13378
|
-
"video-analysis:mixed:600s":
|
|
13383
|
+
"video-analysis:mixed:60s": 269,
|
|
13384
|
+
"video-analysis:mixed:180s": 290,
|
|
13385
|
+
"video-analysis:mixed:360s": 727,
|
|
13386
|
+
"video-analysis:mixed:600s": 1174,
|
|
13379
13387
|
// SMART — the accuracy tier, and since the 2026-08-03 re-plan a multi-roll
|
|
13380
13388
|
// plan like the others, always refined (`selectionMode` does not apply
|
|
13381
13389
|
// here — smart always refines; it never offers a cheaper "choose" path).
|
|
13382
13390
|
// Priced above the economy tiers because it genuinely costs more to run;
|
|
13383
13391
|
// the only tier whose accuracy is validated against a hand-counted edit
|
|
13384
13392
|
// list, re-validated at the current plan before this schedule shipped.
|
|
13385
|
-
"video-analysis:smart:60s":
|
|
13386
|
-
"video-analysis:smart:180s":
|
|
13387
|
-
"video-analysis:smart:360s":
|
|
13388
|
-
"video-analysis:smart:600s":
|
|
13393
|
+
"video-analysis:smart:60s": 412,
|
|
13394
|
+
"video-analysis:smart:180s": 502,
|
|
13395
|
+
"video-analysis:smart:360s": 1264,
|
|
13396
|
+
"video-analysis:smart:600s": 2071
|
|
13389
13397
|
};
|
|
13390
13398
|
function videoAnalysisCreditSegment(modelOrSentinel) {
|
|
13391
13399
|
return modelOrSentinel === "mixed-fast" ? "mixed" : modelOrSentinel;
|
|
@@ -13406,14 +13414,14 @@ function videoAnalysisNumWindows(bucketSec) {
|
|
|
13406
13414
|
return bucketSec <= VIDEO_ANALYSIS_WINDOW.SINGLE_MAX ? 1 : 1 + Math.ceil((bucketSec - WINDOW_LEN) / WINDOW_STRIDE);
|
|
13407
13415
|
}
|
|
13408
13416
|
var VIDEO_AUDIT_BUCKET_CREDITS = {
|
|
13409
|
-
"video-audit:60s":
|
|
13410
|
-
"video-audit:180s":
|
|
13411
|
-
"video-audit:360s":
|
|
13412
|
-
"video-audit:600s":
|
|
13413
|
-
"video-audit:auto:60s":
|
|
13414
|
-
"video-audit:auto:180s":
|
|
13415
|
-
"video-audit:auto:360s":
|
|
13416
|
-
"video-audit:auto:600s":
|
|
13417
|
+
"video-audit:60s": 214,
|
|
13418
|
+
"video-audit:180s": 290,
|
|
13419
|
+
"video-audit:360s": 661,
|
|
13420
|
+
"video-audit:600s": 1070,
|
|
13421
|
+
"video-audit:auto:60s": 394,
|
|
13422
|
+
"video-audit:auto:180s": 475,
|
|
13423
|
+
"video-audit:auto:360s": 1176,
|
|
13424
|
+
"video-audit:auto:600s": 1917
|
|
13417
13425
|
};
|
|
13418
13426
|
function buildVideoAuditCreditId(args) {
|
|
13419
13427
|
const { analysisProvided, durationSec } = args;
|
|
@@ -14013,6 +14021,7 @@ exports.VEHICLE_SUBCATEGORY_LABELS = VEHICLE_SUBCATEGORY_LABELS;
|
|
|
14013
14021
|
exports.VEHICLE_SUBCATEGORY_ORDER = VEHICLE_SUBCATEGORY_ORDER;
|
|
14014
14022
|
exports.VEO_PROVIDERS = VEO_PROVIDERS;
|
|
14015
14023
|
exports.VIDEO_ANALYSIS_BUCKET_CREDITS = VIDEO_ANALYSIS_BUCKET_CREDITS;
|
|
14024
|
+
exports.VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN = VIDEO_ANALYSIS_CLIP_TRANSITIONS_IN;
|
|
14016
14025
|
exports.VIDEO_ANALYSIS_DEFAULT_VARIATION = VIDEO_ANALYSIS_DEFAULT_VARIATION;
|
|
14017
14026
|
exports.VIDEO_ANALYSIS_DURATION_BUCKETS = VIDEO_ANALYSIS_DURATION_BUCKETS;
|
|
14018
14027
|
exports.VIDEO_ANALYSIS_DURATION_TOLERANCE_SEC = VIDEO_ANALYSIS_DURATION_TOLERANCE_SEC;
|
|
@@ -14027,6 +14036,7 @@ exports.VIDEO_ANALYSIS_MIXED_TIERS = VIDEO_ANALYSIS_MIXED_TIERS;
|
|
|
14027
14036
|
exports.VIDEO_ANALYSIS_SHOT_ANGLES = VIDEO_ANALYSIS_SHOT_ANGLES;
|
|
14028
14037
|
exports.VIDEO_ANALYSIS_SPEED_EFFECTS = VIDEO_ANALYSIS_SPEED_EFFECTS;
|
|
14029
14038
|
exports.VIDEO_ANALYSIS_STORY_JUMPS = VIDEO_ANALYSIS_STORY_JUMPS;
|
|
14039
|
+
exports.VIDEO_ANALYSIS_TEXT_KINDS = VIDEO_ANALYSIS_TEXT_KINDS;
|
|
14030
14040
|
exports.VIDEO_ANALYSIS_TIERS = VIDEO_ANALYSIS_TIERS;
|
|
14031
14041
|
exports.VIDEO_ANALYSIS_TIER_LABELS = VIDEO_ANALYSIS_TIER_LABELS;
|
|
14032
14042
|
exports.VIDEO_ANALYSIS_TIER_ORDER = VIDEO_ANALYSIS_TIER_ORDER;
|