@nodaro/shared 3.7.0 → 3.8.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 +253 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +162 -9
- package/dist/index.d.ts +162 -9
- package/dist/index.js +243 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/normalize-model-input.test.ts +32 -0
- package/src/__tests__/scene3d-render-pricing.test.ts +157 -0
- package/src/__tests__/scene3d-v2.test.ts +4 -1
- package/src/index.ts +3 -0
- package/src/model-catalog.ts +106 -0
- package/src/model-constants.ts +30 -0
- package/src/node-default-mappings.ts +4 -0
- package/src/pipeline-types.ts +2 -0
- package/src/pro-3d-render.ts +55 -0
- package/src/reference-board-templates.ts +6 -1
- package/src/scene3d-render-pricing.ts +145 -0
- package/src/scene3d-v2.ts +3 -1
- package/src/scene3d.ts +19 -1
package/dist/index.cjs
CHANGED
|
@@ -74,6 +74,21 @@ var KONTEXT_RATIOS = ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9"];
|
|
|
74
74
|
var GROK_RATIOS = ["1:1", "16:9", "9:16", "3:2", "2:3"];
|
|
75
75
|
var GPT_IMAGE_RATIOS = ["1:1", "3:2", "2:3"];
|
|
76
76
|
var GPT_IMAGE_2_RATIOS = ["auto", "1:1", "16:9", "9:16", "4:3", "3:4"];
|
|
77
|
+
var GPT_IMAGE_2_5_RATIOS = [
|
|
78
|
+
"auto",
|
|
79
|
+
"1:1",
|
|
80
|
+
"3:2",
|
|
81
|
+
"2:3",
|
|
82
|
+
"4:3",
|
|
83
|
+
"3:4",
|
|
84
|
+
"16:9",
|
|
85
|
+
"9:16",
|
|
86
|
+
"21:9",
|
|
87
|
+
"27:16",
|
|
88
|
+
"16:27",
|
|
89
|
+
"9:8",
|
|
90
|
+
"8:9"
|
|
91
|
+
];
|
|
77
92
|
var IMAGEN4_RATIOS = ["1:1", "16:9", "9:16", "4:3", "3:4"];
|
|
78
93
|
var IDEOGRAM_RATIOS = ["1:1", "16:9", "9:16", "4:3", "3:4"];
|
|
79
94
|
var SEEDREAM_RATIOS = ["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "21:9"];
|
|
@@ -420,6 +435,114 @@ var IMAGE_MODELS = {
|
|
|
420
435
|
{ identifier: "gpt-image-2-i2i:4K", credits: 60, note: "4K" }
|
|
421
436
|
]
|
|
422
437
|
},
|
|
438
|
+
"gpt-image-2-5-flare": {
|
|
439
|
+
id: "gpt-image-2-5-flare",
|
|
440
|
+
kind: "image",
|
|
441
|
+
modes: ["t2i"],
|
|
442
|
+
family: "OpenAI",
|
|
443
|
+
label: "GPT Image 2.5 Flare",
|
|
444
|
+
series: "GPT Image",
|
|
445
|
+
description: "Fast everyday GPT Image 2.5 - higher quality than GPT Image 2 at about half the latency. The default of the pair: social and creator content, campaign variants, thumbnails, rapid iteration, high-volume work.",
|
|
446
|
+
useCases: ["typography", "high-res", "general", "draft"],
|
|
447
|
+
features: ["reference-image"],
|
|
448
|
+
aspectRatios: GPT_IMAGE_2_5_RATIOS,
|
|
449
|
+
resolutions: ["1K", "2K", "4K"],
|
|
450
|
+
pricing: [
|
|
451
|
+
{ identifier: "gpt-image-2-5-flare", credits: 15, note: "1K default" },
|
|
452
|
+
{ identifier: "gpt-image-2-5-flare:2K", credits: 25, note: "2K" },
|
|
453
|
+
{ identifier: "gpt-image-2-5-flare:4K", credits: 40, note: "4K" }
|
|
454
|
+
],
|
|
455
|
+
valueLabels: {
|
|
456
|
+
"3:2": "3:2 (Landscape)",
|
|
457
|
+
"2:3": "2:3 (Portrait)",
|
|
458
|
+
"27:16": "27:16 (Ultra-wide)",
|
|
459
|
+
"16:27": "16:27 (Ultra-tall)",
|
|
460
|
+
"9:8": "9:8 (Near-square)",
|
|
461
|
+
"8:9": "8:9 (Near-square)"
|
|
462
|
+
},
|
|
463
|
+
safetyFilter: { stochastic: true, fallback: "nano-banana-pro" }
|
|
464
|
+
},
|
|
465
|
+
"gpt-image-2-5-flare-i2i": {
|
|
466
|
+
id: "gpt-image-2-5-flare-i2i",
|
|
467
|
+
kind: "image",
|
|
468
|
+
modes: ["i2i"],
|
|
469
|
+
family: "OpenAI",
|
|
470
|
+
label: "GPT Image 2.5 Flare (I2I)",
|
|
471
|
+
series: "GPT Image",
|
|
472
|
+
description: "Fast GPT Image 2.5 edits (up to 16 source images) - the default when you are iterating rather than finishing.",
|
|
473
|
+
useCases: ["edit", "high-res"],
|
|
474
|
+
features: ["reference-image"],
|
|
475
|
+
aspectRatios: GPT_IMAGE_2_5_RATIOS,
|
|
476
|
+
resolutions: ["1K", "2K", "4K"],
|
|
477
|
+
pricing: [
|
|
478
|
+
{ identifier: "gpt-image-2-5-flare-i2i", credits: 15, note: "1K default" },
|
|
479
|
+
{ identifier: "gpt-image-2-5-flare-i2i:2K", credits: 25, note: "2K" },
|
|
480
|
+
{ identifier: "gpt-image-2-5-flare-i2i:4K", credits: 40, note: "4K" }
|
|
481
|
+
],
|
|
482
|
+
valueLabels: {
|
|
483
|
+
"3:2": "3:2 (Landscape)",
|
|
484
|
+
"2:3": "2:3 (Portrait)",
|
|
485
|
+
"27:16": "27:16 (Ultra-wide)",
|
|
486
|
+
"16:27": "16:27 (Ultra-tall)",
|
|
487
|
+
"9:8": "9:8 (Near-square)",
|
|
488
|
+
"8:9": "8:9 (Near-square)"
|
|
489
|
+
},
|
|
490
|
+
safetyFilter: { stochastic: true, fallback: "nano-banana-pro" }
|
|
491
|
+
},
|
|
492
|
+
"gpt-image-2-5-sunburst": {
|
|
493
|
+
id: "gpt-image-2-5-sunburst",
|
|
494
|
+
kind: "image",
|
|
495
|
+
modes: ["t2i"],
|
|
496
|
+
family: "OpenAI",
|
|
497
|
+
label: "GPT Image 2.5 Sunburst",
|
|
498
|
+
series: "GPT Image",
|
|
499
|
+
description: "Precision GPT Image 2.5 - trades generation time for tighter control and detail fidelity. Pick it for brand-sensitive and production work: packaging, diagrams, ecommerce retouching, polished campaign creative.",
|
|
500
|
+
useCases: ["typography", "high-res", "general"],
|
|
501
|
+
features: ["reference-image"],
|
|
502
|
+
aspectRatios: GPT_IMAGE_2_5_RATIOS,
|
|
503
|
+
resolutions: ["1K", "2K", "4K"],
|
|
504
|
+
pricing: [
|
|
505
|
+
{ identifier: "gpt-image-2-5-sunburst", credits: 15, note: "1K default" },
|
|
506
|
+
{ identifier: "gpt-image-2-5-sunburst:2K", credits: 25, note: "2K" },
|
|
507
|
+
{ identifier: "gpt-image-2-5-sunburst:4K", credits: 40, note: "4K" }
|
|
508
|
+
],
|
|
509
|
+
valueLabels: {
|
|
510
|
+
"3:2": "3:2 (Landscape)",
|
|
511
|
+
"2:3": "2:3 (Portrait)",
|
|
512
|
+
"27:16": "27:16 (Ultra-wide)",
|
|
513
|
+
"16:27": "16:27 (Ultra-tall)",
|
|
514
|
+
"9:8": "9:8 (Near-square)",
|
|
515
|
+
"8:9": "8:9 (Near-square)"
|
|
516
|
+
},
|
|
517
|
+
safetyFilter: { stochastic: true, fallback: "nano-banana-pro" }
|
|
518
|
+
},
|
|
519
|
+
"gpt-image-2-5-sunburst-i2i": {
|
|
520
|
+
id: "gpt-image-2-5-sunburst-i2i",
|
|
521
|
+
kind: "image",
|
|
522
|
+
modes: ["i2i"],
|
|
523
|
+
family: "OpenAI",
|
|
524
|
+
label: "GPT Image 2.5 Sunburst (I2I)",
|
|
525
|
+
series: "GPT Image",
|
|
526
|
+
description: "Precision GPT Image 2.5 edits (up to 16 source images) - the most controlled edit in the GPT family, at the cost of a longer run.",
|
|
527
|
+
useCases: ["edit", "high-res"],
|
|
528
|
+
features: ["reference-image"],
|
|
529
|
+
aspectRatios: GPT_IMAGE_2_5_RATIOS,
|
|
530
|
+
resolutions: ["1K", "2K", "4K"],
|
|
531
|
+
pricing: [
|
|
532
|
+
{ identifier: "gpt-image-2-5-sunburst-i2i", credits: 15, note: "1K default" },
|
|
533
|
+
{ identifier: "gpt-image-2-5-sunburst-i2i:2K", credits: 25, note: "2K" },
|
|
534
|
+
{ identifier: "gpt-image-2-5-sunburst-i2i:4K", credits: 40, note: "4K" }
|
|
535
|
+
],
|
|
536
|
+
valueLabels: {
|
|
537
|
+
"3:2": "3:2 (Landscape)",
|
|
538
|
+
"2:3": "2:3 (Portrait)",
|
|
539
|
+
"27:16": "27:16 (Ultra-wide)",
|
|
540
|
+
"16:27": "16:27 (Ultra-tall)",
|
|
541
|
+
"9:8": "9:8 (Near-square)",
|
|
542
|
+
"8:9": "8:9 (Near-square)"
|
|
543
|
+
},
|
|
544
|
+
safetyFilter: { stochastic: true, fallback: "nano-banana-pro" }
|
|
545
|
+
},
|
|
423
546
|
// ── Ideogram ──
|
|
424
547
|
// Ideogram models use a `rendering_speed` (TURBO / BALANCED / QUALITY)
|
|
425
548
|
// dimension that's distinct from the `quality` lever — frontend exposes
|
|
@@ -2718,7 +2841,13 @@ var IMAGE_ASPECT_RATIO_VALUES = [
|
|
|
2718
2841
|
"4:1",
|
|
2719
2842
|
"1:4",
|
|
2720
2843
|
"8:1",
|
|
2721
|
-
"1:8"
|
|
2844
|
+
"1:8",
|
|
2845
|
+
// GPT Image 2.5 (Flare + Sunburst) additions: near-square and ultra-wide/tall
|
|
2846
|
+
// cinema ratios (docs.kie.ai/market/gpt/gpt-image-2-5-*).
|
|
2847
|
+
"27:16",
|
|
2848
|
+
"16:27",
|
|
2849
|
+
"9:8",
|
|
2850
|
+
"8:9"
|
|
2722
2851
|
];
|
|
2723
2852
|
var MAX_IMAGE_PROMPT_CHARS_BY_PROVIDER = {
|
|
2724
2853
|
// ── higher than the 5000 default ──
|
|
@@ -2730,6 +2859,15 @@ var MAX_IMAGE_PROMPT_CHARS_BY_PROVIDER = {
|
|
|
2730
2859
|
// docs.kie.ai/market/google/pro-image-to-image
|
|
2731
2860
|
"gpt-image-2-i2i": 2e4,
|
|
2732
2861
|
// docs.kie.ai/market/gpt/gpt-image-2-image-to-image
|
|
2862
|
+
// GPT Image 2.5 — all four lanes document a 20000-char prompt ceiling.
|
|
2863
|
+
"gpt-image-2-5-flare": 2e4,
|
|
2864
|
+
// docs.kie.ai/market/gpt/gpt-image-2-5-flare-text-to-image
|
|
2865
|
+
"gpt-image-2-5-flare-i2i": 2e4,
|
|
2866
|
+
// docs.kie.ai/market/gpt/gpt-image-2-5-flare-image-to-image
|
|
2867
|
+
"gpt-image-2-5-sunburst": 2e4,
|
|
2868
|
+
// docs.kie.ai/market/gpt/gpt-image-2-5-sunburst-text-to-image
|
|
2869
|
+
"gpt-image-2-5-sunburst-i2i": 2e4,
|
|
2870
|
+
// docs.kie.ai/market/gpt/gpt-image-2-5-sunburst-image-to-image
|
|
2733
2871
|
// ── lower than the 5000 default (over-send risk if left at default) ──
|
|
2734
2872
|
"seedream": 3e3,
|
|
2735
2873
|
// docs.kie.ai/market/seedream/4-5-text-to-image
|
|
@@ -2921,6 +3059,8 @@ var MODELS_WITH_REFERENCE_IMAGE_SUPPORT = /* @__PURE__ */ new Set([
|
|
|
2921
3059
|
// T2I providers that auto-route to their i2i sibling when refs are attached
|
|
2922
3060
|
"gpt-image",
|
|
2923
3061
|
"gpt-image-2",
|
|
3062
|
+
"gpt-image-2-5-flare",
|
|
3063
|
+
"gpt-image-2-5-sunburst",
|
|
2924
3064
|
"grok",
|
|
2925
3065
|
"grok-2",
|
|
2926
3066
|
"qwen",
|
|
@@ -2933,6 +3073,8 @@ var MODELS_WITH_REFERENCE_IMAGE_SUPPORT = /* @__PURE__ */ new Set([
|
|
|
2933
3073
|
"nano-banana-edit",
|
|
2934
3074
|
"gpt-image-i2i",
|
|
2935
3075
|
"gpt-image-2-i2i",
|
|
3076
|
+
"gpt-image-2-5-flare-i2i",
|
|
3077
|
+
"gpt-image-2-5-sunburst-i2i",
|
|
2936
3078
|
"grok-2-i2i",
|
|
2937
3079
|
"flux-i2i",
|
|
2938
3080
|
"flux-pro-i2i",
|
|
@@ -2962,6 +3104,8 @@ var MODELS_WITH_REFERENCE_IMAGE_SUPPORT = /* @__PURE__ */ new Set([
|
|
|
2962
3104
|
var T2I_TO_I2I_VARIANT = {
|
|
2963
3105
|
"gpt-image": "gpt-image-i2i",
|
|
2964
3106
|
"gpt-image-2": "gpt-image-2-i2i",
|
|
3107
|
+
"gpt-image-2-5-flare": "gpt-image-2-5-flare-i2i",
|
|
3108
|
+
"gpt-image-2-5-sunburst": "gpt-image-2-5-sunburst-i2i",
|
|
2965
3109
|
"grok": "grok-i2i",
|
|
2966
3110
|
// grok-2's t2i takes NO image input; its "i2i" is the segment-map(image_url)
|
|
2967
3111
|
// → image-edit(task_id) chain in the KIE provider (single reference).
|
|
@@ -2987,6 +3131,8 @@ var REF_IMAGE_MAX_LIMITS = {
|
|
|
2987
3131
|
"nano-banana-edit": 8,
|
|
2988
3132
|
"gpt-image-i2i": 16,
|
|
2989
3133
|
"gpt-image-2-i2i": 16,
|
|
3134
|
+
"gpt-image-2-5-flare-i2i": 16,
|
|
3135
|
+
"gpt-image-2-5-sunburst-i2i": 16,
|
|
2990
3136
|
"flux-i2i": 4,
|
|
2991
3137
|
"flux-pro-i2i": 4,
|
|
2992
3138
|
"seedream-edit": 16,
|
|
@@ -3023,6 +3169,10 @@ var VARIABLE_PRICING_MODELS = {
|
|
|
3023
3169
|
"gpt-image-i2i": "quality",
|
|
3024
3170
|
"gpt-image-2": "resolution",
|
|
3025
3171
|
"gpt-image-2-i2i": "resolution",
|
|
3172
|
+
"gpt-image-2-5-flare": "resolution",
|
|
3173
|
+
"gpt-image-2-5-flare-i2i": "resolution",
|
|
3174
|
+
"gpt-image-2-5-sunburst": "resolution",
|
|
3175
|
+
"gpt-image-2-5-sunburst-i2i": "resolution",
|
|
3026
3176
|
"nano-banana-pro": "resolution",
|
|
3027
3177
|
"nano-banana-2": "resolution",
|
|
3028
3178
|
"flux": "resolution",
|
|
@@ -3049,6 +3199,10 @@ var RESOLUTION_2K_4K_TIERED_PROVIDERS = /* @__PURE__ */ new Set([
|
|
|
3049
3199
|
"nano-banana-2",
|
|
3050
3200
|
"gpt-image-2",
|
|
3051
3201
|
"gpt-image-2-i2i",
|
|
3202
|
+
"gpt-image-2-5-flare",
|
|
3203
|
+
"gpt-image-2-5-flare-i2i",
|
|
3204
|
+
"gpt-image-2-5-sunburst",
|
|
3205
|
+
"gpt-image-2-5-sunburst-i2i",
|
|
3052
3206
|
"wan-2.7",
|
|
3053
3207
|
"wan-2.7-pro"
|
|
3054
3208
|
]);
|
|
@@ -3063,6 +3217,8 @@ var IMAGE_GEN_PROVIDERS = [
|
|
|
3063
3217
|
"grok-2",
|
|
3064
3218
|
"gpt-image",
|
|
3065
3219
|
"gpt-image-2",
|
|
3220
|
+
"gpt-image-2-5-flare",
|
|
3221
|
+
"gpt-image-2-5-sunburst",
|
|
3066
3222
|
"imagen4",
|
|
3067
3223
|
"imagen4-fast",
|
|
3068
3224
|
"imagen4-ultra",
|
|
@@ -3092,6 +3248,8 @@ var IMAGE_I2I_PROVIDERS = [
|
|
|
3092
3248
|
"flux-pro-i2i",
|
|
3093
3249
|
"gpt-image-i2i",
|
|
3094
3250
|
"gpt-image-2-i2i",
|
|
3251
|
+
"gpt-image-2-5-flare-i2i",
|
|
3252
|
+
"gpt-image-2-5-sunburst-i2i",
|
|
3095
3253
|
"grok-2-i2i",
|
|
3096
3254
|
"ideogram-edit",
|
|
3097
3255
|
"ideogram-remix",
|
|
@@ -3450,6 +3608,8 @@ var IMAGE_MASK_MODE = {
|
|
|
3450
3608
|
"nano-banana-2-lite": "prompt",
|
|
3451
3609
|
"gpt-image": "prompt",
|
|
3452
3610
|
"gpt-image-2": "prompt",
|
|
3611
|
+
"gpt-image-2-5-flare": "prompt",
|
|
3612
|
+
"gpt-image-2-5-sunburst": "prompt",
|
|
3453
3613
|
"seedream": "prompt",
|
|
3454
3614
|
"seedream-5-lite": "prompt",
|
|
3455
3615
|
"seedream-5-pro": "prompt",
|
|
@@ -8881,6 +9041,10 @@ var QUALITY_MAP = {
|
|
|
8881
9041
|
"flux-pro-i2i": { field: "resolution", values: { low: "1K", mid: "2K", high: "2K" } },
|
|
8882
9042
|
"gpt-image-2": { field: "resolution", values: { low: "1K", mid: "2K", high: "4K" } },
|
|
8883
9043
|
"gpt-image-2-i2i": { field: "resolution", values: { low: "1K", mid: "2K", high: "4K" } },
|
|
9044
|
+
"gpt-image-2-5-flare": { field: "resolution", values: { low: "1K", mid: "2K", high: "4K" } },
|
|
9045
|
+
"gpt-image-2-5-flare-i2i": { field: "resolution", values: { low: "1K", mid: "2K", high: "4K" } },
|
|
9046
|
+
"gpt-image-2-5-sunburst": { field: "resolution", values: { low: "1K", mid: "2K", high: "4K" } },
|
|
9047
|
+
"gpt-image-2-5-sunburst-i2i": { field: "resolution", values: { low: "1K", mid: "2K", high: "4K" } },
|
|
8884
9048
|
// Image gen — quality-style (medium/high or basic/high)
|
|
8885
9049
|
"gpt-image": { field: "quality", values: { low: "medium", mid: "medium", high: "high" } },
|
|
8886
9050
|
"gpt-image-i2i": { field: "quality", values: { low: "medium", mid: "medium", high: "high" } },
|
|
@@ -11531,7 +11695,9 @@ var PIPELINE_PINNABLE_IMAGE_MODELS = [
|
|
|
11531
11695
|
"nano-banana-2",
|
|
11532
11696
|
"flux",
|
|
11533
11697
|
"gpt-image",
|
|
11534
|
-
"gpt-image-2"
|
|
11698
|
+
"gpt-image-2",
|
|
11699
|
+
"gpt-image-2-5-flare",
|
|
11700
|
+
"gpt-image-2-5-sunburst"
|
|
11535
11701
|
];
|
|
11536
11702
|
var PIPELINE_PINNABLE_VIDEO_MODELS = [
|
|
11537
11703
|
"kling-turbo",
|
|
@@ -13789,7 +13955,12 @@ function estimateSheetCost(entityKind, sections, flavour, buckets, name, perPane
|
|
|
13789
13955
|
}
|
|
13790
13956
|
|
|
13791
13957
|
// src/reference-board-templates.ts
|
|
13792
|
-
var REFERENCE_BOARD_PROVIDERS = [
|
|
13958
|
+
var REFERENCE_BOARD_PROVIDERS = [
|
|
13959
|
+
"nano-banana-pro",
|
|
13960
|
+
"gpt-image-2",
|
|
13961
|
+
"gpt-image-2-5-flare",
|
|
13962
|
+
"gpt-image-2-5-sunburst"
|
|
13963
|
+
];
|
|
13793
13964
|
var ANTI_RIGID = "Editorial reference-board layout, dark near-black background, thin yellow neon accent light, faint film-grain overlay, production-grade design UI. Organized but not rigidly locked: panels may shift position from generation to generation while staying readable, balanced and premium. Works cleanly in different aspect ratios without depending on a fixed left-column structure. All on-image labels in ENGLISH.";
|
|
13794
13965
|
var PALETTE = "A COLOR PALETTE panel: 6 swatches with HEX codes derived from the dominant tones.";
|
|
13795
13966
|
var CAPTION = (kind) => `Bottom caption: "Use this ${kind} board as a visual reference for consistent depiction across all generations." Bottom-right tags: STYLE \xB7 Modern \xB7 Realistic \xB7 Cinematic. Style: photorealistic, no illustration. 8K, fine grain, cinematic color grading.`;
|
|
@@ -14961,7 +15132,16 @@ var SCENE3D_DEFAULT_FPS = 24;
|
|
|
14961
15132
|
var SCENE3D_DEFAULT_DURATION_SECONDS = 4;
|
|
14962
15133
|
var SCENE3D_LIMITS = {
|
|
14963
15134
|
minDimensionPx: 100,
|
|
14964
|
-
|
|
15135
|
+
/** Applies to BOTH axes, so the worst admissible frame is SQUARE, not merely
|
|
15136
|
+
* wider — 2560x2560 is 3.2x the pixels of 1920x1080, and that is the frame
|
|
15137
|
+
* this bound was measured at. Raised from 1920 once that cost was measured
|
|
15138
|
+
* rather than assumed: on the software GL path a container actually uses,
|
|
15139
|
+
* an animated 2560x2560 frame costs ~154 ms/frame against ~65 ms at
|
|
15140
|
+
* 1920x1080, so even `maxDurationInFrames` (3600) lands near 9 min against
|
|
15141
|
+
* the render worker's 25-minute budget. Peak memory is the real price —
|
|
15142
|
+
* ~3.1 GB across the browser process tree versus ~1.6 GB — and is the number
|
|
15143
|
+
* to re-measure before widening this again. */
|
|
15144
|
+
maxDimensionPx: 2560,
|
|
14965
15145
|
minFps: 15,
|
|
14966
15146
|
maxFps: 60,
|
|
14967
15147
|
minDurationInFrames: 1,
|
|
@@ -15454,7 +15634,9 @@ var SCENE3D_V2_LIMITS = {
|
|
|
15454
15634
|
defaultFps: 24,
|
|
15455
15635
|
/** Even integers only — an odd axis breaks H.264 chroma subsampling. */
|
|
15456
15636
|
minDimensionPx: 100,
|
|
15457
|
-
maxDimensionPx
|
|
15637
|
+
/** Deliberately kept equal to v1's `SCENE3D_LIMITS.maxDimensionPx`: one
|
|
15638
|
+
* renderer draws both versions, so one measured ceiling bounds both. */
|
|
15639
|
+
maxDimensionPx: SCENE3D_LIMITS.maxDimensionPx,
|
|
15458
15640
|
minEntities: 1,
|
|
15459
15641
|
/** SEMANTIC entities, not exported mesh nodes. */
|
|
15460
15642
|
maxEntities: 100,
|
|
@@ -16674,11 +16856,18 @@ var pro3DRenderQuoteSchema = zod.z.object({
|
|
|
16674
16856
|
function isPro3DRenderQuote(value) {
|
|
16675
16857
|
return pro3DRenderQuoteSchema.safeParse(value).success;
|
|
16676
16858
|
}
|
|
16859
|
+
var pro3DRenderShotStillSchema = zod.z.object({
|
|
16860
|
+
shotIndex: zod.z.number().int().min(0),
|
|
16861
|
+
frame: zod.z.number().int().min(0),
|
|
16862
|
+
assetId: zod.z.string().min(1),
|
|
16863
|
+
url: zod.z.string().min(1)
|
|
16864
|
+
}).passthrough();
|
|
16677
16865
|
var pro3DRenderJobOutputSchema = zod.z.object({
|
|
16678
16866
|
videoUrl: zod.z.string().min(1),
|
|
16679
16867
|
scenePlan: scene3DAnyPlanSchema,
|
|
16680
16868
|
sceneRevisionId: zod.z.string().min(1),
|
|
16681
16869
|
posterAssetId: zod.z.string().min(1),
|
|
16870
|
+
shotStills: zod.z.array(pro3DRenderShotStillSchema).optional(),
|
|
16682
16871
|
sourceArtifactId: zod.z.string().min(1).optional(),
|
|
16683
16872
|
validation: zod.z.object({
|
|
16684
16873
|
status: zod.z.literal("passed"),
|
|
@@ -16704,6 +16893,20 @@ var pro3DRenderJobOutputSchema = zod.z.object({
|
|
|
16704
16893
|
function isPro3DRenderJobOutput(value) {
|
|
16705
16894
|
return pro3DRenderJobOutputSchema.safeParse(value).success;
|
|
16706
16895
|
}
|
|
16896
|
+
function pro3DRenderShotStills(output) {
|
|
16897
|
+
const list = output?.shotStills;
|
|
16898
|
+
if (!Array.isArray(list)) return [];
|
|
16899
|
+
const parsed = list.flatMap((entry) => {
|
|
16900
|
+
const result = pro3DRenderShotStillSchema.safeParse(entry);
|
|
16901
|
+
return result.success ? [{
|
|
16902
|
+
shotIndex: result.data.shotIndex,
|
|
16903
|
+
frame: result.data.frame,
|
|
16904
|
+
assetId: result.data.assetId,
|
|
16905
|
+
url: result.data.url
|
|
16906
|
+
}] : [];
|
|
16907
|
+
});
|
|
16908
|
+
return parsed.sort((a, b) => a.shotIndex - b.shotIndex);
|
|
16909
|
+
}
|
|
16707
16910
|
var pro3DRenderCoreOutputSchema = zod.z.object({
|
|
16708
16911
|
videoUrl: zod.z.string().min(1),
|
|
16709
16912
|
scenePlan: scene3DAnyPlanSchema
|
|
@@ -16747,6 +16950,40 @@ function pro3DRenderTimingOverrides(input) {
|
|
|
16747
16950
|
return out;
|
|
16748
16951
|
}
|
|
16749
16952
|
|
|
16953
|
+
// src/scene3d-render-pricing.ts
|
|
16954
|
+
var SCENE3D_RENDER_TIERS = ["base", "large", "xlarge"];
|
|
16955
|
+
var SCENE3D_RENDER_BASE_MAX_PX = 1920;
|
|
16956
|
+
var SCENE3D_RENDER_XLARGE_MIN_AREA_PX = 512e4;
|
|
16957
|
+
var SCENE3D_RENDER_TIER_MULTIPLIERS = {
|
|
16958
|
+
base: 1,
|
|
16959
|
+
large: 1.5,
|
|
16960
|
+
xlarge: 2.5
|
|
16961
|
+
};
|
|
16962
|
+
function scene3DRenderTier(width, height) {
|
|
16963
|
+
const w = typeof width === "number" && Number.isFinite(width) && width > 0 ? width : 0;
|
|
16964
|
+
const h = typeof height === "number" && Number.isFinite(height) && height > 0 ? height : 0;
|
|
16965
|
+
if (w === 0 || h === 0) return "base";
|
|
16966
|
+
if (Math.max(w, h) <= SCENE3D_RENDER_BASE_MAX_PX) return "base";
|
|
16967
|
+
return w * h > SCENE3D_RENDER_XLARGE_MIN_AREA_PX ? "xlarge" : "large";
|
|
16968
|
+
}
|
|
16969
|
+
function scene3DRenderTierCredits(baseCredits, tier) {
|
|
16970
|
+
return Math.ceil(baseCredits * SCENE3D_RENDER_TIER_MULTIPLIERS[tier]);
|
|
16971
|
+
}
|
|
16972
|
+
var RENDER_VIDEO_CREDIT_ID = "render-video";
|
|
16973
|
+
function renderVideoCreditId(input) {
|
|
16974
|
+
if (!input || typeof input !== "object") return RENDER_VIDEO_CREDIT_ID;
|
|
16975
|
+
const body = input;
|
|
16976
|
+
if (body.planType !== SCENE3D_PLAN_TYPE) return RENDER_VIDEO_CREDIT_ID;
|
|
16977
|
+
if (!body.plan || typeof body.plan !== "object") return RENDER_VIDEO_CREDIT_ID;
|
|
16978
|
+
const plan = body.plan;
|
|
16979
|
+
const tier = scene3DRenderTier(plan.width, plan.height);
|
|
16980
|
+
return tier === "base" ? RENDER_VIDEO_CREDIT_ID : `${RENDER_VIDEO_CREDIT_ID}:3d-${tier}`;
|
|
16981
|
+
}
|
|
16982
|
+
function pro3DRenderFrameUnit(quality, tier = "base") {
|
|
16983
|
+
const unit = `${PRO3D_RENDER_CREDIT_ID}:render-frame:${quality}`;
|
|
16984
|
+
return tier === "base" ? unit : `${unit}:${tier}`;
|
|
16985
|
+
}
|
|
16986
|
+
|
|
16750
16987
|
// src/studio-transient.ts
|
|
16751
16988
|
var STUDIO_TRANSIENT_KEYS = [
|
|
16752
16989
|
"trash",
|
|
@@ -17382,6 +17619,7 @@ exports.REF_HANDLE_CATEGORY = REF_HANDLE_CATEGORY;
|
|
|
17382
17619
|
exports.REF_IMAGE_MAX_LIMITS = REF_IMAGE_MAX_LIMITS;
|
|
17383
17620
|
exports.REF_TOKEN_NAMESPACE_PREFIXES = REF_TOKEN_NAMESPACE_PREFIXES;
|
|
17384
17621
|
exports.RENDERING_SPEED_SUPPORT = RENDERING_SPEED_SUPPORT;
|
|
17622
|
+
exports.RENDER_VIDEO_CREDIT_ID = RENDER_VIDEO_CREDIT_ID;
|
|
17385
17623
|
exports.REPEATABLE_NODE_TYPES = REPEATABLE_NODE_TYPES;
|
|
17386
17624
|
exports.REPEAT_PLACEHOLDER = REPEAT_PLACEHOLDER;
|
|
17387
17625
|
exports.REPLICATE_LIP_SYNC_PROVIDERS = REPLICATE_LIP_SYNC_PROVIDERS;
|
|
@@ -17414,6 +17652,10 @@ exports.SCENE3D_PLAN_TYPE = SCENE3D_PLAN_TYPE;
|
|
|
17414
17652
|
exports.SCENE3D_PRIMITIVES = SCENE3D_PRIMITIVES;
|
|
17415
17653
|
exports.SCENE3D_PRIMITIVE_MATERIAL_ROLE = SCENE3D_PRIMITIVE_MATERIAL_ROLE;
|
|
17416
17654
|
exports.SCENE3D_RENDERER_ASSET_KINDS = SCENE3D_RENDERER_ASSET_KINDS;
|
|
17655
|
+
exports.SCENE3D_RENDER_BASE_MAX_PX = SCENE3D_RENDER_BASE_MAX_PX;
|
|
17656
|
+
exports.SCENE3D_RENDER_TIERS = SCENE3D_RENDER_TIERS;
|
|
17657
|
+
exports.SCENE3D_RENDER_TIER_MULTIPLIERS = SCENE3D_RENDER_TIER_MULTIPLIERS;
|
|
17658
|
+
exports.SCENE3D_RENDER_XLARGE_MIN_AREA_PX = SCENE3D_RENDER_XLARGE_MIN_AREA_PX;
|
|
17417
17659
|
exports.SCENE3D_SCHEMA_VERSION = SCENE3D_SCHEMA_VERSION;
|
|
17418
17660
|
exports.SCENE3D_SCHEMA_VERSION_V2 = SCENE3D_SCHEMA_VERSION_V2;
|
|
17419
17661
|
exports.SCENE3D_SUPPORTED_SCHEMA_VERSIONS = SCENE3D_SUPPORTED_SCHEMA_VERSIONS;
|
|
@@ -17865,9 +18107,12 @@ exports.presetDataMatches = presetDataMatches;
|
|
|
17865
18107
|
exports.presetEntries = presetEntries;
|
|
17866
18108
|
exports.pricedVideoSelection = pricedVideoSelection;
|
|
17867
18109
|
exports.pro3DRenderCoreOutputSchema = pro3DRenderCoreOutputSchema;
|
|
18110
|
+
exports.pro3DRenderFrameUnit = pro3DRenderFrameUnit;
|
|
17868
18111
|
exports.pro3DRenderJobOutputSchema = pro3DRenderJobOutputSchema;
|
|
17869
18112
|
exports.pro3DRenderProducedSchemaVersion = pro3DRenderProducedSchemaVersion;
|
|
17870
18113
|
exports.pro3DRenderQuoteSchema = pro3DRenderQuoteSchema;
|
|
18114
|
+
exports.pro3DRenderShotStillSchema = pro3DRenderShotStillSchema;
|
|
18115
|
+
exports.pro3DRenderShotStills = pro3DRenderShotStills;
|
|
17871
18116
|
exports.pro3DRenderTimingOverrides = pro3DRenderTimingOverrides;
|
|
17872
18117
|
exports.qualityOptionsByKind = qualityOptionsByKind;
|
|
17873
18118
|
exports.readPromptAffixes = readPromptAffixes;
|
|
@@ -17877,6 +18122,7 @@ exports.referenceSheetCreditId = referenceSheetCreditId;
|
|
|
17877
18122
|
exports.registerCatalogSidecars = registerCatalogSidecars;
|
|
17878
18123
|
exports.registerSidecarLoaders = registerSidecarLoaders;
|
|
17879
18124
|
exports.renderAnalyzedScene = renderAnalyzedScene;
|
|
18125
|
+
exports.renderVideoCreditId = renderVideoCreditId;
|
|
17880
18126
|
exports.requiresSequenceExecution = requiresSequenceExecution;
|
|
17881
18127
|
exports.resetCatalogSidecars = resetCatalogSidecars;
|
|
17882
18128
|
exports.resolutionOptionsByKind = resolutionOptionsByKind;
|
|
@@ -17985,6 +18231,8 @@ exports.scene3DPrimitiveSchema = scene3DPrimitiveSchema;
|
|
|
17985
18231
|
exports.scene3DProjectionIssues = scene3DProjectionIssues;
|
|
17986
18232
|
exports.scene3DProvenanceSchema = scene3DProvenanceSchema;
|
|
17987
18233
|
exports.scene3DReferenceSchema = scene3DReferenceSchema;
|
|
18234
|
+
exports.scene3DRenderTier = scene3DRenderTier;
|
|
18235
|
+
exports.scene3DRenderTierCredits = scene3DRenderTierCredits;
|
|
17988
18236
|
exports.scene3DSampleForFrame = scene3DSampleForFrame;
|
|
17989
18237
|
exports.scene3DSha256Schema = scene3DSha256Schema;
|
|
17990
18238
|
exports.scene3DShotForFrame = scene3DShotForFrame;
|