@nodaro/shared 1.24.0 → 2.0.1

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
@@ -80,7 +80,7 @@ var IMAGE_MODELS = {
80
80
  useCases: ["realistic", "general", "fast"],
81
81
  features: ["reference-image"],
82
82
  aspectRatios: NANO_BANANA_RATIOS,
83
- pricing: [{ identifier: "nano-banana", credits: 1, note: "1K" }],
83
+ pricing: [{ identifier: "nano-banana", credits: 10, note: "1K" }],
84
84
  mcpHidden: true
85
85
  },
86
86
  "nano-banana-2": {
@@ -98,9 +98,9 @@ var IMAGE_MODELS = {
98
98
  aspectRatios: NANO_BANANA_RATIOS,
99
99
  resolutions: ["1K", "2K", "4K"],
100
100
  pricing: [
101
- { identifier: "nano-banana-2", credits: 4, note: "1K default" },
102
- { identifier: "nano-banana-2:2K", credits: 5, note: "2K" },
103
- { identifier: "nano-banana-2:4K", credits: 5, note: "4K" }
101
+ { identifier: "nano-banana-2", credits: 20, note: "1K default" },
102
+ { identifier: "nano-banana-2:2K", credits: 50, note: "2K" },
103
+ { identifier: "nano-banana-2:4K", credits: 50, note: "4K" }
104
104
  ]
105
105
  },
106
106
  "nano-banana-2-lite": {
@@ -117,7 +117,7 @@ var IMAGE_MODELS = {
117
117
  features: ["reference-image"],
118
118
  aspectRatios: NANO_BANANA_2_LITE_RATIOS,
119
119
  // 1K only — no resolution lever, flat pricing.
120
- pricing: [{ identifier: "nano-banana-2-lite", credits: 2, note: "1K flat" }]
120
+ pricing: [{ identifier: "nano-banana-2-lite", credits: 10, note: "1K flat" }]
121
121
  },
122
122
  "nano-banana-pro": {
123
123
  id: "nano-banana-pro",
@@ -132,8 +132,8 @@ var IMAGE_MODELS = {
132
132
  aspectRatios: NANO_BANANA_RATIOS,
133
133
  resolutions: ["1K", "2K", "4K"],
134
134
  pricing: [
135
- { identifier: "nano-banana-pro", credits: 5, note: "1K / 2K" },
136
- { identifier: "nano-banana-pro:4K", credits: 6, note: "4K" }
135
+ { identifier: "nano-banana-pro", credits: 45, note: "1K / 2K" },
136
+ { identifier: "nano-banana-pro:4K", credits: 60, note: "4K" }
137
137
  ],
138
138
  featured: true
139
139
  },
@@ -148,7 +148,7 @@ var IMAGE_MODELS = {
148
148
  useCases: ["edit", "remix", "general"],
149
149
  features: ["reference-image"],
150
150
  aspectRatios: NANO_BANANA_RATIOS,
151
- pricing: [{ identifier: "nano-banana-edit", credits: 2 }]
151
+ pricing: [{ identifier: "nano-banana-edit", credits: 10 }]
152
152
  },
153
153
  // ── Black Forest Labs (Flux) ──
154
154
  "flux": {
@@ -164,8 +164,8 @@ var IMAGE_MODELS = {
164
164
  aspectRatios: FLUX_RATIOS,
165
165
  resolutions: ["1K", "2K"],
166
166
  pricing: [
167
- { identifier: "flux", credits: 2, note: "1K default" },
168
- { identifier: "flux:2K", credits: 2, note: "2K" }
167
+ { identifier: "flux", credits: 13, note: "1K default" },
168
+ { identifier: "flux:2K", credits: 20, note: "2K" }
169
169
  ]
170
170
  },
171
171
  "flux-flex": {
@@ -181,8 +181,8 @@ var IMAGE_MODELS = {
181
181
  aspectRatios: FLUX_RATIOS,
182
182
  resolutions: ["1K", "2K"],
183
183
  pricing: [
184
- { identifier: "flux-flex", credits: 4, note: "1K default" },
185
- { identifier: "flux-flex:2K", credits: 6, note: "2K" }
184
+ { identifier: "flux-flex", credits: 35, note: "1K default" },
185
+ { identifier: "flux-flex:2K", credits: 60, note: "2K" }
186
186
  ]
187
187
  },
188
188
  "flux-i2i": {
@@ -198,8 +198,8 @@ var IMAGE_MODELS = {
198
198
  aspectRatios: FLUX_RATIOS,
199
199
  resolutions: ["1K", "2K"],
200
200
  pricing: [
201
- { identifier: "flux-i2i", credits: 4, note: "1K default" },
202
- { identifier: "flux-i2i:2K", credits: 6, note: "2K" }
201
+ { identifier: "flux-i2i", credits: 60, note: "1K default" },
202
+ { identifier: "flux-i2i:2K", credits: 60, note: "2K" }
203
203
  ]
204
204
  },
205
205
  "flux-pro-i2i": {
@@ -215,8 +215,8 @@ var IMAGE_MODELS = {
215
215
  aspectRatios: FLUX_RATIOS,
216
216
  resolutions: ["1K", "2K"],
217
217
  pricing: [
218
- { identifier: "flux-pro-i2i", credits: 2, note: "1K default" },
219
- { identifier: "flux-pro-i2i:2K", credits: 2, note: "2K" }
218
+ { identifier: "flux-pro-i2i", credits: 13, note: "1K default" },
219
+ { identifier: "flux-pro-i2i:2K", credits: 20, note: "2K" }
220
220
  ]
221
221
  },
222
222
  "flux-kontext": {
@@ -231,7 +231,7 @@ var IMAGE_MODELS = {
231
231
  useCases: ["edit", "style-transfer", "preserve-identity"],
232
232
  features: ["reference-image"],
233
233
  aspectRatios: KONTEXT_RATIOS,
234
- pricing: [{ identifier: "flux-kontext", credits: 2 }]
234
+ pricing: [{ identifier: "flux-kontext", credits: 13 }]
235
235
  },
236
236
  "flux-kontext-max": {
237
237
  id: "flux-kontext-max",
@@ -244,7 +244,7 @@ var IMAGE_MODELS = {
244
244
  useCases: ["edit", "style-transfer", "premium"],
245
245
  features: ["reference-image"],
246
246
  aspectRatios: KONTEXT_RATIOS,
247
- pricing: [{ identifier: "flux-kontext-max", credits: 4 }]
247
+ pricing: [{ identifier: "flux-kontext-max", credits: 25 }]
248
248
  },
249
249
  // ── Replicate "Open" (uncensored) — run direct via Replicate, not KIE ──
250
250
  "flux-2-klein": {
@@ -260,11 +260,11 @@ var IMAGE_MODELS = {
260
260
  aspectRatios: FLUX_RATIOS,
261
261
  resolutions: ["0.5 MP", "1 MP", "2 MP", "4 MP"],
262
262
  pricing: [
263
- { identifier: "flux-2-klein", credits: 1 },
263
+ { identifier: "flux-2-klein", credits: 10 },
264
264
  // 1MP 0ref (default)
265
- { identifier: "flux-2-klein:1MP:0ref", credits: 1 },
265
+ { identifier: "flux-2-klein:1MP:0ref", credits: 3 },
266
266
  // min
267
- { identifier: "flux-2-klein:4MP:8ref", credits: 11 }
267
+ { identifier: "flux-2-klein:4MP:8ref", credits: 108 }
268
268
  // max
269
269
  ]
270
270
  },
@@ -279,7 +279,7 @@ var IMAGE_MODELS = {
279
279
  useCases: ["edit", "multi-reference", "unfiltered"],
280
280
  features: ["reference-image"],
281
281
  aspectRatios: KONTEXT_RATIOS,
282
- pricing: [{ identifier: "kontext-multi", credits: 3 }]
282
+ pricing: [{ identifier: "kontext-multi", credits: 30 }]
283
283
  },
284
284
  "flux-2-pro": {
285
285
  id: "flux-2-pro",
@@ -294,11 +294,11 @@ var IMAGE_MODELS = {
294
294
  aspectRatios: FLUX_RATIOS,
295
295
  resolutions: ["0.5 MP", "1 MP", "2 MP", "4 MP"],
296
296
  pricing: [
297
- { identifier: "flux-2-pro", credits: 3 },
297
+ { identifier: "flux-2-pro", credits: 30 },
298
298
  // 2MP 0ref (default)
299
- { identifier: "flux-2-pro:0.5MP:0ref", credits: 2 },
299
+ { identifier: "flux-2-pro:0.5MP:0ref", credits: 12 },
300
300
  // min
301
- { identifier: "flux-2-pro:4MP:8ref", credits: 28 }
301
+ { identifier: "flux-2-pro:4MP:8ref", credits: 278 }
302
302
  // max
303
303
  ]
304
304
  },
@@ -315,11 +315,11 @@ var IMAGE_MODELS = {
315
315
  aspectRatios: FLUX_RATIOS,
316
316
  resolutions: ["0.5 MP", "1 MP", "2 MP", "4 MP"],
317
317
  pricing: [
318
- { identifier: "flux-2-max", credits: 7 },
318
+ { identifier: "flux-2-max", credits: 70 },
319
319
  // 2MP 0ref (default)
320
- { identifier: "flux-2-max:0.5MP:0ref", credits: 2 },
320
+ { identifier: "flux-2-max:0.5MP:0ref", credits: 18 },
321
321
  // min
322
- { identifier: "flux-2-max:4MP:8ref", credits: 62 }
322
+ { identifier: "flux-2-max:4MP:8ref", credits: 620 }
323
323
  // max
324
324
  ]
325
325
  },
@@ -337,8 +337,8 @@ var IMAGE_MODELS = {
337
337
  aspectRatios: GPT_IMAGE_RATIOS,
338
338
  qualities: ["medium", "high"],
339
339
  pricing: [
340
- { identifier: "gpt-image", credits: 4, note: "medium default" },
341
- { identifier: "gpt-image:high", credits: 6, note: "high quality" }
340
+ { identifier: "gpt-image", credits: 10, note: "medium default" },
341
+ { identifier: "gpt-image:high", credits: 60, note: "high quality" }
342
342
  ],
343
343
  valueLabels: { "3:2": "3:2 (Landscape)", "2:3": "2:3 (Portrait)" },
344
344
  mcpHidden: true
@@ -356,8 +356,8 @@ var IMAGE_MODELS = {
356
356
  aspectRatios: GPT_IMAGE_RATIOS,
357
357
  qualities: ["medium", "high"],
358
358
  pricing: [
359
- { identifier: "gpt-image-i2i", credits: 4, note: "medium default" },
360
- { identifier: "gpt-image-i2i:high", credits: 6, note: "high quality" }
359
+ { identifier: "gpt-image-i2i", credits: 10, note: "medium default" },
360
+ { identifier: "gpt-image-i2i:high", credits: 60, note: "high quality" }
361
361
  ],
362
362
  valueLabels: { "3:2": "3:2 (Landscape)", "2:3": "2:3 (Portrait)" },
363
363
  mcpHidden: true
@@ -375,9 +375,9 @@ var IMAGE_MODELS = {
375
375
  aspectRatios: GPT_IMAGE_2_RATIOS,
376
376
  resolutions: ["1K", "2K", "4K"],
377
377
  pricing: [
378
- { identifier: "gpt-image-2", credits: 1, note: "1K default" },
379
- { identifier: "gpt-image-2:2K", credits: 3, note: "2K" },
380
- { identifier: "gpt-image-2:4K", credits: 6, note: "4K" }
378
+ { identifier: "gpt-image-2", credits: 15, note: "1K default" },
379
+ { identifier: "gpt-image-2:2K", credits: 30, note: "2K" },
380
+ { identifier: "gpt-image-2:4K", credits: 60, note: "4K" }
381
381
  ]
382
382
  },
383
383
  "gpt-image-2-i2i": {
@@ -393,9 +393,9 @@ var IMAGE_MODELS = {
393
393
  aspectRatios: GPT_IMAGE_2_RATIOS,
394
394
  resolutions: ["1K", "2K", "4K"],
395
395
  pricing: [
396
- { identifier: "gpt-image-2-i2i", credits: 1, note: "1K default" },
397
- { identifier: "gpt-image-2-i2i:2K", credits: 3, note: "2K" },
398
- { identifier: "gpt-image-2-i2i:4K", credits: 6, note: "4K" }
396
+ { identifier: "gpt-image-2-i2i", credits: 15, note: "1K default" },
397
+ { identifier: "gpt-image-2-i2i:2K", credits: 30, note: "2K" },
398
+ { identifier: "gpt-image-2-i2i:4K", credits: 60, note: "4K" }
399
399
  ]
400
400
  },
401
401
  // ── Ideogram ──
@@ -416,9 +416,9 @@ var IMAGE_MODELS = {
416
416
  useCases: ["typography", "illustration", "stylized"],
417
417
  aspectRatios: IDEOGRAM_RATIOS,
418
418
  pricing: [
419
- { identifier: "ideogram-v3", credits: 2, note: "BALANCED default" },
420
- { identifier: "ideogram-v3:TURBO", credits: 1, note: "fastest" },
421
- { identifier: "ideogram-v3:QUALITY", credits: 3, note: "best quality" }
419
+ { identifier: "ideogram-v3", credits: 18, note: "BALANCED default" },
420
+ { identifier: "ideogram-v3:TURBO", credits: 18, note: "fastest" },
421
+ { identifier: "ideogram-v3:QUALITY", credits: 18, note: "best quality" }
422
422
  ]
423
423
  },
424
424
  "ideogram-edit": {
@@ -434,9 +434,9 @@ var IMAGE_MODELS = {
434
434
  // No aspectRatios — Ideogram Edit takes output dimensions from the input
435
435
  // image + mask. Backend strips aspect_ratio for this provider.
436
436
  pricing: [
437
- { identifier: "ideogram-edit", credits: 5, note: "BALANCED default" },
438
- { identifier: "ideogram-edit:TURBO", credits: 3, note: "fastest" },
439
- { identifier: "ideogram-edit:QUALITY", credits: 6, note: "best quality" }
437
+ { identifier: "ideogram-edit", credits: 45, note: "BALANCED default" },
438
+ { identifier: "ideogram-edit:TURBO", credits: 30, note: "fastest" },
439
+ { identifier: "ideogram-edit:QUALITY", credits: 60, note: "best quality" }
440
440
  ]
441
441
  },
442
442
  "ideogram-remix": {
@@ -451,9 +451,9 @@ var IMAGE_MODELS = {
451
451
  features: ["reference-image"],
452
452
  aspectRatios: IDEOGRAM_RATIOS,
453
453
  pricing: [
454
- { identifier: "ideogram-remix", credits: 5, note: "BALANCED default" },
455
- { identifier: "ideogram-remix:TURBO", credits: 3, note: "fastest" },
456
- { identifier: "ideogram-remix:QUALITY", credits: 6, note: "best quality" }
454
+ { identifier: "ideogram-remix", credits: 45, note: "BALANCED default" },
455
+ { identifier: "ideogram-remix:TURBO", credits: 30, note: "fastest" },
456
+ { identifier: "ideogram-remix:QUALITY", credits: 60, note: "best quality" }
457
457
  ]
458
458
  },
459
459
  "ideogram-reframe": {
@@ -468,9 +468,9 @@ var IMAGE_MODELS = {
468
468
  features: ["reference-image"],
469
469
  aspectRatios: IDEOGRAM_RATIOS,
470
470
  pricing: [
471
- { identifier: "ideogram-reframe", credits: 2, note: "BALANCED default" },
472
- { identifier: "ideogram-reframe:TURBO", credits: 1, note: "fastest" },
473
- { identifier: "ideogram-reframe:QUALITY", credits: 3, note: "best quality" }
471
+ { identifier: "ideogram-reframe", credits: 18, note: "BALANCED default" },
472
+ { identifier: "ideogram-reframe:TURBO", credits: 18, note: "fastest" },
473
+ { identifier: "ideogram-reframe:QUALITY", credits: 18, note: "best quality" }
474
474
  ]
475
475
  },
476
476
  // ── Google Imagen ──
@@ -484,7 +484,7 @@ var IMAGE_MODELS = {
484
484
  description: "Google's Imagen 4 \u2014 strong photographic quality and prompt fidelity.",
485
485
  useCases: ["photographic", "realistic"],
486
486
  aspectRatios: IMAGEN4_RATIOS,
487
- pricing: [{ identifier: "imagen4", credits: 2 }]
487
+ pricing: [{ identifier: "imagen4", credits: 20 }]
488
488
  },
489
489
  "imagen4-fast": {
490
490
  id: "imagen4-fast",
@@ -496,7 +496,7 @@ var IMAGE_MODELS = {
496
496
  description: "Cheaper / quicker Imagen 4 tier.",
497
497
  useCases: ["fast", "realistic", "general"],
498
498
  aspectRatios: IMAGEN4_RATIOS,
499
- pricing: [{ identifier: "imagen4-fast", credits: 1 }]
499
+ pricing: [{ identifier: "imagen4-fast", credits: 10 }]
500
500
  },
501
501
  "imagen4-ultra": {
502
502
  id: "imagen4-ultra",
@@ -508,7 +508,7 @@ var IMAGE_MODELS = {
508
508
  description: "Premium Imagen 4 \u2014 highest fidelity, slower / more credits.",
509
509
  useCases: ["premium", "photographic"],
510
510
  aspectRatios: IMAGEN4_RATIOS,
511
- pricing: [{ identifier: "imagen4-ultra", credits: 3 }]
511
+ pricing: [{ identifier: "imagen4-ultra", credits: 30 }]
512
512
  },
513
513
  // ── Bytedance Seedream ──
514
514
  "seedream": {
@@ -524,8 +524,8 @@ var IMAGE_MODELS = {
524
524
  aspectRatios: SEEDREAM_RATIOS,
525
525
  qualities: ["basic", "high"],
526
526
  pricing: [
527
- { identifier: "seedream", credits: 2, note: "basic / 2K default" },
528
- { identifier: "seedream:high", credits: 4, note: "high / 4K" }
527
+ { identifier: "seedream", credits: 16, note: "basic / 2K default" },
528
+ { identifier: "seedream:high", credits: 40, note: "high / 4K" }
529
529
  ],
530
530
  mcpHidden: true
531
531
  },
@@ -542,8 +542,8 @@ var IMAGE_MODELS = {
542
542
  aspectRatios: SEEDREAM_RATIOS,
543
543
  qualities: ["basic", "high"],
544
544
  pricing: [
545
- { identifier: "seedream-edit", credits: 2, note: "basic default" },
546
- { identifier: "seedream-edit:high", credits: 4, note: "high quality" }
545
+ { identifier: "seedream-edit", credits: 16, note: "basic default" },
546
+ { identifier: "seedream-edit:high", credits: 40, note: "high quality" }
547
547
  ],
548
548
  mcpHidden: true
549
549
  },
@@ -560,8 +560,8 @@ var IMAGE_MODELS = {
560
560
  aspectRatios: SEEDREAM_RATIOS,
561
561
  qualities: ["basic", "high"],
562
562
  pricing: [
563
- { identifier: "seedream-5-lite", credits: 2, note: "basic default" },
564
- { identifier: "seedream-5-lite:high", credits: 5, note: "high quality" }
563
+ { identifier: "seedream-5-lite", credits: 14, note: "basic default" },
564
+ { identifier: "seedream-5-lite:high", credits: 50, note: "high quality" }
565
565
  ]
566
566
  },
567
567
  "seedream-5-lite-i2i": {
@@ -577,8 +577,8 @@ var IMAGE_MODELS = {
577
577
  aspectRatios: SEEDREAM_RATIOS,
578
578
  qualities: ["basic", "high"],
579
579
  pricing: [
580
- { identifier: "seedream-5-lite-i2i", credits: 2, note: "basic default" },
581
- { identifier: "seedream-5-lite-i2i:high", credits: 5, note: "high quality" }
580
+ { identifier: "seedream-5-lite-i2i", credits: 14, note: "basic default" },
581
+ { identifier: "seedream-5-lite-i2i:high", credits: 50, note: "high quality" }
582
582
  ]
583
583
  },
584
584
  "seedream-5-pro": {
@@ -594,8 +594,8 @@ var IMAGE_MODELS = {
594
594
  aspectRatios: SEEDREAM_RATIOS,
595
595
  qualities: ["basic", "high"],
596
596
  pricing: [
597
- { identifier: "seedream-5-pro", credits: 3, note: "basic / 1K default" },
598
- { identifier: "seedream-5-pro:high", credits: 6, note: "high / 2K" }
597
+ { identifier: "seedream-5-pro", credits: 18, note: "basic / 1K default" },
598
+ { identifier: "seedream-5-pro:high", credits: 60, note: "high / 2K" }
599
599
  ]
600
600
  },
601
601
  "seedream-5-pro-i2i": {
@@ -611,8 +611,8 @@ var IMAGE_MODELS = {
611
611
  aspectRatios: SEEDREAM_RATIOS,
612
612
  qualities: ["basic", "high"],
613
613
  pricing: [
614
- { identifier: "seedream-5-pro-i2i", credits: 3, note: "basic / 1K default" },
615
- { identifier: "seedream-5-pro-i2i:high", credits: 6, note: "high / 2K" }
614
+ { identifier: "seedream-5-pro-i2i", credits: 19, note: "basic / 1K default" },
615
+ { identifier: "seedream-5-pro-i2i:high", credits: 60, note: "high / 2K" }
616
616
  ]
617
617
  },
618
618
  // ── Alibaba Qwen ──
@@ -627,7 +627,7 @@ var IMAGE_MODELS = {
627
627
  useCases: ["fast", "cheap", "general"],
628
628
  features: ["reference-image"],
629
629
  aspectRatios: IDEOGRAM_RATIOS,
630
- pricing: [{ identifier: "qwen", credits: 1 }]
630
+ pricing: [{ identifier: "qwen", credits: 10 }]
631
631
  },
632
632
  "qwen-i2i": {
633
633
  id: "qwen-i2i",
@@ -640,7 +640,7 @@ var IMAGE_MODELS = {
640
640
  useCases: ["edit", "fast", "cheap"],
641
641
  features: ["reference-image"],
642
642
  aspectRatios: IDEOGRAM_RATIOS,
643
- pricing: [{ identifier: "qwen-i2i", credits: 1 }]
643
+ pricing: [{ identifier: "qwen-i2i", credits: 10 }]
644
644
  },
645
645
  "qwen-edit": {
646
646
  id: "qwen-edit",
@@ -653,7 +653,7 @@ var IMAGE_MODELS = {
653
653
  useCases: ["edit", "cheap"],
654
654
  features: ["reference-image"],
655
655
  aspectRatios: IDEOGRAM_RATIOS,
656
- pricing: [{ identifier: "qwen-edit", credits: 2 }]
656
+ pricing: [{ identifier: "qwen-edit", credits: 13 }]
657
657
  },
658
658
  // ── Tongyi-MAI Z-Image ──
659
659
  "z-image": {
@@ -666,7 +666,7 @@ var IMAGE_MODELS = {
666
666
  description: "Cheapest model in catalog. Fast, stylized output. Limited aspect ratios.",
667
667
  useCases: ["cheap", "fast", "stylized"],
668
668
  aspectRatios: Z_IMAGE_RATIOS,
669
- pricing: [{ identifier: "z-image", credits: 1 }],
669
+ pricing: [{ identifier: "z-image", credits: 2 }],
670
670
  featured: true
671
671
  },
672
672
  // ── xAI Grok ──
@@ -685,7 +685,7 @@ var IMAGE_MODELS = {
685
685
  useCases: ["stylized", "expressive", "general"],
686
686
  features: ["reference-image"],
687
687
  aspectRatios: GROK_RATIOS,
688
- pricing: [{ identifier: "grok", credits: 1 }]
688
+ pricing: [{ identifier: "grok", credits: 10 }]
689
689
  },
690
690
  "grok-i2i": {
691
691
  id: "grok-i2i",
@@ -697,7 +697,7 @@ var IMAGE_MODELS = {
697
697
  description: "Image-to-image with Grok.",
698
698
  useCases: ["edit", "stylized"],
699
699
  features: ["reference-image"],
700
- pricing: [{ identifier: "grok-i2i", credits: 1 }]
700
+ pricing: [{ identifier: "grok-i2i", credits: 10 }]
701
701
  },
702
702
  "grok-upscale": {
703
703
  id: "grok-upscale",
@@ -708,7 +708,7 @@ var IMAGE_MODELS = {
708
708
  series: "Grok",
709
709
  description: "Upscale a previously-generated Grok image. Requires the prior task id.",
710
710
  useCases: ["upscale"],
711
- pricing: [{ identifier: "grok-upscale", credits: 3 }]
711
+ pricing: [{ identifier: "grok-upscale", credits: 25 }]
712
712
  },
713
713
  // ── Utilities ──
714
714
  "recraft-remove-bg": {
@@ -721,7 +721,7 @@ var IMAGE_MODELS = {
721
721
  description: "Remove image background. Cheap utility.",
722
722
  useCases: ["background-removal", "utility"],
723
723
  features: ["reference-image"],
724
- pricing: [{ identifier: "recraft-remove-bg", credits: 1 }]
724
+ pricing: [{ identifier: "recraft-remove-bg", credits: 3 }]
725
725
  },
726
726
  "recraft-upscale": {
727
727
  id: "recraft-upscale",
@@ -733,7 +733,7 @@ var IMAGE_MODELS = {
733
733
  description: "Light-weight image upscale (Recraft Crisp).",
734
734
  useCases: ["upscale", "utility"],
735
735
  features: ["reference-image"],
736
- pricing: [{ identifier: "recraft-upscale", credits: 1 }]
736
+ pricing: [{ identifier: "recraft-upscale", credits: 2 }]
737
737
  },
738
738
  "topaz-image-upscale": {
739
739
  id: "topaz-image-upscale",
@@ -747,9 +747,9 @@ var IMAGE_MODELS = {
747
747
  features: ["reference-image"],
748
748
  resolutions: ["2K", "4K", "8K"],
749
749
  pricing: [
750
- { identifier: "topaz-image-upscale", credits: 3, note: "2K default" },
751
- { identifier: "topaz-image-upscale:4K", credits: 5, note: "4K" },
752
- { identifier: "topaz-image-upscale:8K", credits: 10, note: "8K" }
750
+ { identifier: "topaz-image-upscale", credits: 25, note: "2K default" },
751
+ { identifier: "topaz-image-upscale:4K", credits: 50, note: "4K" },
752
+ { identifier: "topaz-image-upscale:8K", credits: 100, note: "8K" }
753
753
  ]
754
754
  }
755
755
  };
@@ -766,7 +766,7 @@ var VIDEO_MODELS = {
766
766
  useCases: ["realistic", "motion", "narrative"],
767
767
  features: ["end-frame"],
768
768
  durations: [5],
769
- pricing: [{ identifier: "minimax", credits: 15, note: "5s, 1080p" }]
769
+ pricing: [{ identifier: "minimax", credits: 143, note: "5s, 1080p" }]
770
770
  },
771
771
  "hailuo-2.3-pro": {
772
772
  id: "hailuo-2.3-pro",
@@ -781,9 +781,9 @@ var VIDEO_MODELS = {
781
781
  durations: [6, 10],
782
782
  resolutions: ["768P", "1080P"],
783
783
  pricing: [
784
- { identifier: "hailuo-2.3-pro", credits: 20, note: "10s default" },
785
- { identifier: "hailuo-2.3-pro:6s", credits: 13, note: "6s" },
786
- { identifier: "hailuo-2.3-pro:10s", credits: 20, note: "10s" }
784
+ { identifier: "hailuo-2.3-pro", credits: 200, note: "10s default" },
785
+ { identifier: "hailuo-2.3-pro:6s", credits: 130, note: "6s" },
786
+ { identifier: "hailuo-2.3-pro:10s", credits: 200, note: "10s" }
787
787
  ]
788
788
  },
789
789
  "hailuo-2.3": {
@@ -799,9 +799,9 @@ var VIDEO_MODELS = {
799
799
  useCases: ["realistic", "cheap"],
800
800
  durations: [6, 10],
801
801
  pricing: [
802
- { identifier: "hailuo-2.3", credits: 8, note: "6s default" },
803
- { identifier: "hailuo-2.3:6s", credits: 8, note: "6s" },
804
- { identifier: "hailuo-2.3:10s", credits: 13, note: "10s" }
802
+ { identifier: "hailuo-2.3", credits: 75, note: "6s default" },
803
+ { identifier: "hailuo-2.3:6s", credits: 80, note: "6s" },
804
+ { identifier: "hailuo-2.3:10s", credits: 130, note: "10s" }
805
805
  ]
806
806
  },
807
807
  "hailuo-standard": {
@@ -817,9 +817,9 @@ var VIDEO_MODELS = {
817
817
  durations: [6, 10],
818
818
  resolutions: ["512P", "768P"],
819
819
  pricing: [
820
- { identifier: "hailuo-standard", credits: 8, note: "6s default" },
821
- { identifier: "hailuo-standard:6s", credits: 8, note: "6s" },
822
- { identifier: "hailuo-standard:10s", credits: 13, note: "10s" }
820
+ { identifier: "hailuo-standard", credits: 75, note: "6s default" },
821
+ { identifier: "hailuo-standard:6s", credits: 80, note: "6s" },
822
+ { identifier: "hailuo-standard:10s", credits: 130, note: "10s" }
823
823
  ]
824
824
  },
825
825
  // ── Google VEO ──
@@ -839,8 +839,8 @@ var VIDEO_MODELS = {
839
839
  // KIE's /api/v1/veo/get-4k-video endpoint (worker handleImageToVideo / handleTextToVideo).
840
840
  resolutions: ["720p", "1080p", "4k"],
841
841
  pricing: [
842
- { identifier: "veo3", credits: 63, note: "4/6/8s with audio (flat per-generation)" },
843
- { identifier: "veo3:4k", credits: 93, note: "4K (base 1080p \u2192 get-4k-video)" }
842
+ { identifier: "veo3", credits: 1e3, note: "4/6/8s with audio (flat per-generation)" },
843
+ { identifier: "veo3:4k", credits: 930, note: "4K (base 1080p \u2192 get-4k-video)" }
844
844
  ],
845
845
  featured: true
846
846
  },
@@ -858,9 +858,9 @@ var VIDEO_MODELS = {
858
858
  aspectRatios: VIDEO_RATIOS_HV,
859
859
  resolutions: ["720p", "1080p", "4k"],
860
860
  pricing: [
861
- { identifier: "veo3.1", credits: 15, note: "4/6/8s with audio @ 720p (flat)" },
862
- { identifier: "veo3.1:1080p", credits: 17, note: "4/6/8s with audio @ 1080p (flat)" },
863
- { identifier: "veo3.1:4k", credits: 45, note: "4K (base 1080p \u2192 get-4k-video)" }
861
+ { identifier: "veo3.1", credits: 150, note: "4/6/8s with audio @ 720p (flat)" },
862
+ { identifier: "veo3.1:1080p", credits: 170, note: "4/6/8s with audio @ 1080p (flat)" },
863
+ { identifier: "veo3.1:4k", credits: 450, note: "4K (base 1080p \u2192 get-4k-video)" }
864
864
  ],
865
865
  featured: true
866
866
  },
@@ -878,9 +878,9 @@ var VIDEO_MODELS = {
878
878
  aspectRatios: VIDEO_RATIOS_HV,
879
879
  resolutions: ["720p", "1080p", "4k"],
880
880
  pricing: [
881
- { identifier: "veo3_lite", credits: 8, note: "4/6/8s with audio @ 720p (flat)" },
882
- { identifier: "veo3_lite:1080p", credits: 9, note: "4/6/8s with audio @ 1080p (flat)" },
883
- { identifier: "veo3_lite:4k", credits: 38, note: "4K (base 1080p \u2192 get-4k-video)" }
881
+ { identifier: "veo3_lite", credits: 75, note: "4/6/8s with audio @ 720p (flat)" },
882
+ { identifier: "veo3_lite:1080p", credits: 90, note: "4/6/8s with audio @ 1080p (flat)" },
883
+ { identifier: "veo3_lite:4k", credits: 380, note: "4K (base 1080p \u2192 get-4k-video)" }
884
884
  ],
885
885
  featured: false
886
886
  },
@@ -899,17 +899,17 @@ var VIDEO_MODELS = {
899
899
  resolutions: ["720p", "1080p", "4k"],
900
900
  durations: [4, 6, 8, 10],
901
901
  pricing: [
902
- { identifier: "gemini-omni-video", credits: 23, note: "default \u2014 720p/1080p 4s" },
903
- { identifier: "gemini-omni-video:4", credits: 23, note: "720p/1080p 4s" },
904
- { identifier: "gemini-omni-video:6", credits: 30, note: "720p/1080p 6s" },
905
- { identifier: "gemini-omni-video:8", credits: 38, note: "720p/1080p 8s" },
906
- { identifier: "gemini-omni-video:10", credits: 45, note: "720p/1080p 10s" },
907
- { identifier: "gemini-omni-video:4k:4", credits: 53, note: "4K 4s" },
908
- { identifier: "gemini-omni-video:4k:6", credits: 60, note: "4K 6s" },
909
- { identifier: "gemini-omni-video:4k:8", credits: 68, note: "4K 8s" },
910
- { identifier: "gemini-omni-video:4k:10", credits: 75, note: "4K 10s" },
911
- { identifier: "gemini-omni-video:vref", credits: 60, note: "video-edit 720p/1080p" },
912
- { identifier: "gemini-omni-video:4k:vref", credits: 90, note: "video-edit 4K" }
902
+ { identifier: "gemini-omni-video", credits: 315, note: "default \u2014 720p/1080p 4s" },
903
+ { identifier: "gemini-omni-video:4", credits: 230, note: "720p/1080p 4s" },
904
+ { identifier: "gemini-omni-video:6", credits: 300, note: "720p/1080p 6s" },
905
+ { identifier: "gemini-omni-video:8", credits: 380, note: "720p/1080p 8s" },
906
+ { identifier: "gemini-omni-video:10", credits: 450, note: "720p/1080p 10s" },
907
+ { identifier: "gemini-omni-video:4k:4", credits: 530, note: "4K 4s" },
908
+ { identifier: "gemini-omni-video:4k:6", credits: 600, note: "4K 6s" },
909
+ { identifier: "gemini-omni-video:4k:8", credits: 680, note: "4K 8s" },
910
+ { identifier: "gemini-omni-video:4k:10", credits: 750, note: "4K 10s" },
911
+ { identifier: "gemini-omni-video:vref", credits: 600, note: "video-edit 720p/1080p" },
912
+ { identifier: "gemini-omni-video:4k:vref", credits: 900, note: "video-edit 4K" }
913
913
  ]
914
914
  },
915
915
  // ── Kling ──
@@ -926,11 +926,11 @@ var VIDEO_MODELS = {
926
926
  aspectRatios: VIDEO_RATIOS_HVS,
927
927
  durations: [5, 10],
928
928
  pricing: [
929
- { identifier: "kling", credits: 28, note: "10s no audio default" },
930
- { identifier: "kling:5s", credits: 14, note: "5s no audio" },
931
- { identifier: "kling:10s", credits: 28, note: "10s no audio" },
932
- { identifier: "kling:5s:audio", credits: 28, note: "5s with audio" },
933
- { identifier: "kling:10s:audio", credits: 55, note: "10s with audio" }
929
+ { identifier: "kling", credits: 280, note: "10s no audio default" },
930
+ { identifier: "kling:5s", credits: 138, note: "5s no audio" },
931
+ { identifier: "kling:10s", credits: 275, note: "10s no audio" },
932
+ { identifier: "kling:5s:audio", credits: 275, note: "5s with audio" },
933
+ { identifier: "kling:10s:audio", credits: 550, note: "10s with audio" }
934
934
  ]
935
935
  },
936
936
  "kling-turbo": {
@@ -945,9 +945,9 @@ var VIDEO_MODELS = {
945
945
  features: ["end-frame"],
946
946
  durations: [5, 10],
947
947
  pricing: [
948
- { identifier: "kling-turbo", credits: 11, note: "5s default" },
949
- { identifier: "kling-turbo:5s", credits: 11 },
950
- { identifier: "kling-turbo:10s", credits: 21 }
948
+ { identifier: "kling-turbo", credits: 125, note: "5s default" },
949
+ { identifier: "kling-turbo:5s", credits: 110 },
950
+ { identifier: "kling-turbo:10s", credits: 210 }
951
951
  ]
952
952
  },
953
953
  "kling-3.0": {
@@ -963,13 +963,13 @@ var VIDEO_MODELS = {
963
963
  durations: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
964
964
  resolutions: ["720P", "1080P"],
965
965
  pricing: [
966
- { identifier: "kling-3.0", credits: 50, note: "5s 1080p with audio" },
967
- { identifier: "kling-3.0:5s", credits: 34, note: "5s 1080p no audio" },
968
- { identifier: "kling-3.0:10s", credits: 68, note: "10s 1080p no audio" },
969
- { identifier: "kling-3.0:15s", credits: 102, note: "15s 1080p no audio" },
970
- { identifier: "kling-3.0:5s:audio", credits: 50, note: "5s 1080p with audio" },
971
- { identifier: "kling-3.0:10s:audio", credits: 100, note: "10s 1080p with audio" },
972
- { identifier: "kling-3.0:15s:audio", credits: 150, note: "15s 1080p with audio" }
966
+ { identifier: "kling-3.0", credits: 500, note: "5s 1080p with audio" },
967
+ { identifier: "kling-3.0:5s", credits: 270, note: "5s 1080p no audio" },
968
+ { identifier: "kling-3.0:10s", credits: 680, note: "10s 1080p no audio" },
969
+ { identifier: "kling-3.0:15s", credits: 1020, note: "15s 1080p no audio" },
970
+ { identifier: "kling-3.0:5s:audio", credits: 338, note: "5s 1080p with audio" },
971
+ { identifier: "kling-3.0:10s:audio", credits: 1e3, note: "10s 1080p with audio" },
972
+ { identifier: "kling-3.0:15s:audio", credits: 1500, note: "15s 1080p with audio" }
973
973
  ],
974
974
  featured: true
975
975
  },
@@ -984,9 +984,9 @@ var VIDEO_MODELS = {
984
984
  useCases: ["cinematic", "premium"],
985
985
  durations: [5, 10],
986
986
  pricing: [
987
- { identifier: "kling-master", credits: 40, note: "5s default" },
988
- { identifier: "kling-master:5s", credits: 40 },
989
- { identifier: "kling-master:10s", credits: 80 }
987
+ { identifier: "kling-master", credits: 400, note: "5s default" },
988
+ { identifier: "kling-master:5s", credits: 400 },
989
+ { identifier: "kling-master:10s", credits: 800 }
990
990
  ]
991
991
  },
992
992
  "kling-3-omni": {
@@ -1003,10 +1003,10 @@ var VIDEO_MODELS = {
1003
1003
  resolutions: ["720p", "1080p"],
1004
1004
  aspectRatios: VIDEO_RATIOS_HVS,
1005
1005
  pricing: [
1006
- { identifier: "kling-3-omni", credits: 25, note: "5s 720p default" },
1007
- { identifier: "kling-3-omni:5s", credits: 25 },
1008
- { identifier: "kling-3-omni:10s", credits: 50 },
1009
- { identifier: "kling-3-omni:15s", credits: 75 }
1006
+ { identifier: "kling-3-omni", credits: 250, note: "5s 720p default" },
1007
+ { identifier: "kling-3-omni:5s", credits: 250 },
1008
+ { identifier: "kling-3-omni:10s", credits: 500 },
1009
+ { identifier: "kling-3-omni:15s", credits: 750 }
1010
1010
  ]
1011
1011
  },
1012
1012
  // ── xAI Grok video ──
@@ -1023,10 +1023,10 @@ var VIDEO_MODELS = {
1023
1023
  durations: [6, 10],
1024
1024
  resolutions: ["480p", "720p"],
1025
1025
  pricing: [
1026
- { identifier: "grok-i2v", credits: 5, note: "6s default" },
1027
- { identifier: "grok-i2v:6s", credits: 5 },
1028
- { identifier: "grok-i2v:10s", credits: 8 },
1029
- { identifier: "grok-i2v:15s", credits: 10 }
1026
+ { identifier: "grok-i2v", credits: 150, note: "6s default" },
1027
+ { identifier: "grok-i2v:6s", credits: 50 },
1028
+ { identifier: "grok-i2v:10s", credits: 80 },
1029
+ { identifier: "grok-i2v:15s", credits: 100 }
1030
1030
  ]
1031
1031
  },
1032
1032
  // xAI Grok Imagine Video 1.5 — KIE image-to-video (image required). True
@@ -1051,11 +1051,11 @@ var VIDEO_MODELS = {
1051
1051
  durations: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1052
1052
  resolutions: ["480p", "720p"],
1053
1053
  pricing: [
1054
- { identifier: "grok-imagine-video-1.5", credits: 30, note: "default 8s 480p \u2014 see :Ns:res variants" },
1055
- { identifier: "grok-imagine-video-1.5:8s:480p", credits: 30, note: "8s 480p" },
1056
- { identifier: "grok-imagine-video-1.5:8s:720p", credits: 51, note: "8s 720p" },
1057
- { identifier: "grok-imagine-video-1.5:15s:480p", credits: 55, note: "15s 480p (max)" },
1058
- { identifier: "grok-imagine-video-1.5:15s:720p", credits: 95, note: "15s 720p (max)" }
1054
+ { identifier: "grok-imagine-video-1.5", credits: 295, note: "default 8s 480p \u2014 see :Ns:res variants" },
1055
+ { identifier: "grok-imagine-video-1.5:8s:480p", credits: 300, note: "8s 480p" },
1056
+ { identifier: "grok-imagine-video-1.5:8s:720p", credits: 510, note: "8s 720p" },
1057
+ { identifier: "grok-imagine-video-1.5:15s:480p", credits: 550, note: "15s 480p (max)" },
1058
+ { identifier: "grok-imagine-video-1.5:15s:720p", credits: 950, note: "15s 720p (max)" }
1059
1059
  ]
1060
1060
  },
1061
1061
  // ── Bytedance Seedance ──
@@ -1072,10 +1072,10 @@ var VIDEO_MODELS = {
1072
1072
  durations: [4, 8, 12],
1073
1073
  resolutions: ["480p", "720p", "1080p"],
1074
1074
  pricing: [
1075
- { identifier: "seedance", credits: 7, note: "8s default" },
1076
- { identifier: "seedance:4s", credits: 4 },
1077
- { identifier: "seedance:8s", credits: 7 },
1078
- { identifier: "seedance:12s", credits: 15 }
1075
+ { identifier: "seedance", credits: 250, note: "8s default" },
1076
+ { identifier: "seedance:4s", credits: 40 },
1077
+ { identifier: "seedance:8s", credits: 70 },
1078
+ { identifier: "seedance:12s", credits: 150 }
1079
1079
  ],
1080
1080
  mcpHidden: true
1081
1081
  },
@@ -1093,15 +1093,15 @@ var VIDEO_MODELS = {
1093
1093
  durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1094
1094
  resolutions: ["480p", "720p", "1080p", "4k"],
1095
1095
  pricing: [
1096
- { identifier: "seedance-2", credits: 38, note: "default \u2014 see :NsR variants for exact" },
1097
- { identifier: "seedance-2:8s:480p", credits: 38, note: "8s 480p" },
1098
- { identifier: "seedance-2:8s:720p", credits: 82, note: "8s 720p" },
1099
- { identifier: "seedance-2:8s:1080p", credits: 204, note: "8s 1080p" },
1100
- { identifier: "seedance-2:8s:480p-ref", credits: 23, note: "8s 480p with reference" },
1101
- { identifier: "seedance-2:8s:720p-ref", credits: 50, note: "8s 720p with reference" },
1102
- { identifier: "seedance-2:8s:1080p-ref", credits: 124, note: "8s 1080p with reference" },
1103
- { identifier: "seedance-2:8s:4k", credits: 416, note: "8s 4k" },
1104
- { identifier: "seedance-2:8s:4k-ref", credits: 256, note: "8s 4k with reference" }
1096
+ { identifier: "seedance-2", credits: 380, note: "default \u2014 see :NsR variants for exact" },
1097
+ { identifier: "seedance-2:8s:480p", credits: 380, note: "8s 480p" },
1098
+ { identifier: "seedance-2:8s:720p", credits: 820, note: "8s 720p" },
1099
+ { identifier: "seedance-2:8s:1080p", credits: 2040, note: "8s 1080p" },
1100
+ { identifier: "seedance-2:8s:480p-ref", credits: 230, note: "8s 480p with reference" },
1101
+ { identifier: "seedance-2:8s:720p-ref", credits: 500, note: "8s 720p with reference" },
1102
+ { identifier: "seedance-2:8s:1080p-ref", credits: 1240, note: "8s 1080p with reference" },
1103
+ { identifier: "seedance-2:8s:4k", credits: 4160, note: "8s 4k" },
1104
+ { identifier: "seedance-2:8s:4k-ref", credits: 2560, note: "8s 4k with reference" }
1105
1105
  ]
1106
1106
  },
1107
1107
  "seedance-2-fast": {
@@ -1118,11 +1118,11 @@ var VIDEO_MODELS = {
1118
1118
  durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1119
1119
  resolutions: ["480p", "720p"],
1120
1120
  pricing: [
1121
- { identifier: "seedance-2-fast", credits: 31, note: "default \u2014 see :NsR variants" },
1122
- { identifier: "seedance-2-fast:8s:480p", credits: 31 },
1123
- { identifier: "seedance-2-fast:8s:720p", credits: 66 },
1124
- { identifier: "seedance-2-fast:8s:480p-ref", credits: 18 },
1125
- { identifier: "seedance-2-fast:8s:720p-ref", credits: 40 }
1121
+ { identifier: "seedance-2-fast", credits: 310, note: "default \u2014 see :NsR variants" },
1122
+ { identifier: "seedance-2-fast:8s:480p", credits: 310 },
1123
+ { identifier: "seedance-2-fast:8s:720p", credits: 660 },
1124
+ { identifier: "seedance-2-fast:8s:480p-ref", credits: 180 },
1125
+ { identifier: "seedance-2-fast:8s:720p-ref", credits: 400 }
1126
1126
  ]
1127
1127
  },
1128
1128
  "seedance-2-mini": {
@@ -1139,11 +1139,11 @@ var VIDEO_MODELS = {
1139
1139
  durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1140
1140
  resolutions: ["480p", "720p"],
1141
1141
  pricing: [
1142
- { identifier: "seedance-2-mini", credits: 19, note: "default \u2014 see :NsR variants" },
1143
- { identifier: "seedance-2-mini:8s:480p", credits: 19 },
1144
- { identifier: "seedance-2-mini:8s:720p", credits: 41 },
1145
- { identifier: "seedance-2-mini:8s:480p-ref", credits: 12 },
1146
- { identifier: "seedance-2-mini:8s:720p-ref", credits: 25 }
1142
+ { identifier: "seedance-2-mini", credits: 190, note: "default \u2014 see :NsR variants" },
1143
+ { identifier: "seedance-2-mini:8s:480p", credits: 190 },
1144
+ { identifier: "seedance-2-mini:8s:720p", credits: 410 },
1145
+ { identifier: "seedance-2-mini:8s:480p-ref", credits: 120 },
1146
+ { identifier: "seedance-2-mini:8s:720p-ref", credits: 250 }
1147
1147
  ]
1148
1148
  },
1149
1149
  // ── Wan ──
@@ -1159,10 +1159,10 @@ var VIDEO_MODELS = {
1159
1159
  durations: [5, 10, 15],
1160
1160
  resolutions: ["720p", "1080p"],
1161
1161
  pricing: [
1162
- { identifier: "wan-i2v", credits: 18, note: "5s 720p default" },
1163
- { identifier: "wan-i2v:5s", credits: 18 },
1164
- { identifier: "wan-i2v:10s", credits: 35 },
1165
- { identifier: "wan-i2v:15s", credits: 53 }
1162
+ { identifier: "wan-i2v", credits: 175, note: "5s 720p default" },
1163
+ { identifier: "wan-i2v:5s", credits: 180 },
1164
+ { identifier: "wan-i2v:10s", credits: 350 },
1165
+ { identifier: "wan-i2v:15s", credits: 530 }
1166
1166
  ]
1167
1167
  },
1168
1168
  "wan-turbo": {
@@ -1180,8 +1180,8 @@ var VIDEO_MODELS = {
1180
1180
  // Different KIE endpoints (i2v vs t2v) → different costs under
1181
1181
  // composite ids. Route picks endpoint based on whether image was supplied.
1182
1182
  pricing: [
1183
- { identifier: "wan-turbo", credits: 10, note: "i2v 5s 480p" },
1184
- { identifier: "wan-turbo-t2v", credits: 20, note: "t2v 5s 720p" }
1183
+ { identifier: "wan-turbo", credits: 100, note: "i2v 5s 480p" },
1184
+ { identifier: "wan-turbo-t2v", credits: 200, note: "t2v 5s 720p" }
1185
1185
  ]
1186
1186
  },
1187
1187
  "wan": {
@@ -1198,8 +1198,8 @@ var VIDEO_MODELS = {
1198
1198
  durations: [5],
1199
1199
  resolutions: ["720p", "1080p"],
1200
1200
  pricing: [
1201
- { identifier: "wan", credits: 18, note: "v2v 5s 720p" },
1202
- { identifier: "wan-t2v", credits: 27, note: "t2v 5s 1080p" }
1201
+ { identifier: "wan", credits: 175, note: "v2v 5s 720p" },
1202
+ { identifier: "wan-t2v", credits: 270, note: "t2v 5s 1080p" }
1203
1203
  ]
1204
1204
  },
1205
1205
  "wan-flash": {
@@ -1211,7 +1211,7 @@ var VIDEO_MODELS = {
1211
1211
  series: "Wan",
1212
1212
  description: "Faster Wan V2V variant.",
1213
1213
  useCases: ["v2v", "fast"],
1214
- pricing: [{ identifier: "wan-flash", credits: 13 }]
1214
+ pricing: [{ identifier: "wan-flash", credits: 100 }]
1215
1215
  },
1216
1216
  "wan-videoedit": {
1217
1217
  id: "wan-videoedit",
@@ -1223,7 +1223,7 @@ var VIDEO_MODELS = {
1223
1223
  description: "Guided video editing with optional reference image, audio control, and prompt expansion.",
1224
1224
  useCases: ["v2v", "restyle", "reference"],
1225
1225
  resolutions: ["720p", "1080p"],
1226
- pricing: [{ identifier: "wan-videoedit", credits: 32 }]
1226
+ pricing: [{ identifier: "wan-videoedit", credits: 320 }]
1227
1227
  },
1228
1228
  // ── Wan 2.7 ──
1229
1229
  "wan-2.7": {
@@ -1239,9 +1239,9 @@ var VIDEO_MODELS = {
1239
1239
  aspectRatios: WAN_27_IMAGE_RATIOS,
1240
1240
  resolutions: ["1K", "2K", "4K"],
1241
1241
  pricing: [
1242
- { identifier: "wan-2.7", credits: 2, note: "1K base" },
1243
- { identifier: "wan-2.7:2K", credits: 4, note: "2K" },
1244
- { identifier: "wan-2.7:4K", credits: 8, note: "4K" }
1242
+ { identifier: "wan-2.7", credits: 20, note: "1K base" },
1243
+ { identifier: "wan-2.7:2K", credits: 40, note: "2K" },
1244
+ { identifier: "wan-2.7:4K", credits: 80, note: "4K" }
1245
1245
  ]
1246
1246
  },
1247
1247
  "wan-2.7-pro": {
@@ -1256,9 +1256,9 @@ var VIDEO_MODELS = {
1256
1256
  aspectRatios: WAN_27_IMAGE_RATIOS,
1257
1257
  resolutions: ["1K", "2K", "4K"],
1258
1258
  pricing: [
1259
- { identifier: "wan-2.7-pro", credits: 3, note: "1K base" },
1260
- { identifier: "wan-2.7-pro:2K", credits: 6, note: "2K" },
1261
- { identifier: "wan-2.7-pro:4K", credits: 12, note: "4K" }
1259
+ { identifier: "wan-2.7-pro", credits: 120, note: "1K base" },
1260
+ { identifier: "wan-2.7-pro:2K", credits: 60, note: "2K" },
1261
+ { identifier: "wan-2.7-pro:4K", credits: 120, note: "4K" }
1262
1262
  ]
1263
1263
  },
1264
1264
  "wan-2.7-i2v": {
@@ -1274,7 +1274,7 @@ var VIDEO_MODELS = {
1274
1274
  resolutions: ["720p", "1080p"],
1275
1275
  features: ["end-frame"],
1276
1276
  pricing: [
1277
- { identifier: "wan-2.7-i2v", credits: 19, note: "5s 720p default" }
1277
+ { identifier: "wan-2.7-i2v", credits: 188, note: "5s 720p default" }
1278
1278
  ]
1279
1279
  },
1280
1280
  "wan-2.7-t2v": {
@@ -1290,7 +1290,7 @@ var VIDEO_MODELS = {
1290
1290
  durations: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1291
1291
  resolutions: ["720p", "1080p"],
1292
1292
  pricing: [
1293
- { identifier: "wan-2.7-t2v", credits: 19, note: "5s 720p default" }
1293
+ { identifier: "wan-2.7-t2v", credits: 188, note: "5s 720p default" }
1294
1294
  ]
1295
1295
  },
1296
1296
  // ── HappyHorse (1.1 — ids kept version-less; repointed in place when KIE
@@ -1308,7 +1308,7 @@ var VIDEO_MODELS = {
1308
1308
  durations: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1309
1309
  resolutions: ["720p", "1080p"],
1310
1310
  pricing: [
1311
- { identifier: "happyhorse", credits: 29, note: "5s 720p default \u2014 per-second: ~5.7 cr/s @720p, ~7.3 cr/s @1080p" }
1311
+ { identifier: "happyhorse", credits: 282, note: "5s 720p default \u2014 per-second: ~5.7 cr/s @720p, ~7.3 cr/s @1080p" }
1312
1312
  ]
1313
1313
  },
1314
1314
  "happyhorse-i2v": {
@@ -1323,7 +1323,7 @@ var VIDEO_MODELS = {
1323
1323
  durations: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1324
1324
  resolutions: ["720p", "1080p"],
1325
1325
  pricing: [
1326
- { identifier: "happyhorse-i2v", credits: 29, note: "5s 720p default \u2014 per-second: ~5.7 cr/s @720p, ~7.3 cr/s @1080p" }
1326
+ { identifier: "happyhorse-i2v", credits: 282, note: "5s 720p default \u2014 per-second: ~5.7 cr/s @720p, ~7.3 cr/s @1080p" }
1327
1327
  ]
1328
1328
  },
1329
1329
  "happyhorse-ref2v": {
@@ -1340,7 +1340,7 @@ var VIDEO_MODELS = {
1340
1340
  resolutions: ["720p", "1080p"],
1341
1341
  features: ["reference-image"],
1342
1342
  pricing: [
1343
- { identifier: "happyhorse-ref2v", credits: 29, note: "5s 720p default \u2014 per-second: ~5.7 cr/s @720p, ~7.3 cr/s @1080p" }
1343
+ { identifier: "happyhorse-ref2v", credits: 282, note: "5s 720p default \u2014 per-second: ~5.7 cr/s @720p, ~7.3 cr/s @1080p" }
1344
1344
  ]
1345
1345
  },
1346
1346
  "happyhorse-edit": {
@@ -1354,7 +1354,7 @@ var VIDEO_MODELS = {
1354
1354
  useCases: ["v2v", "restyle"],
1355
1355
  resolutions: ["720p", "1080p"],
1356
1356
  pricing: [
1357
- { identifier: "happyhorse-edit", credits: 35, note: "720p default (5s-equivalent flat rate)" }
1357
+ { identifier: "happyhorse-edit", credits: 350, note: "720p default (5s-equivalent flat rate)" }
1358
1358
  ]
1359
1359
  },
1360
1360
  // ── Bytedance video lite/pro ──
@@ -1371,7 +1371,7 @@ var VIDEO_MODELS = {
1371
1371
  aspectRatios: VIDEO_RATIOS_HVS,
1372
1372
  durations: [5, 10],
1373
1373
  resolutions: ["480p", "720p", "1080p"],
1374
- pricing: [{ identifier: "bytedance-lite", credits: 6 }]
1374
+ pricing: [{ identifier: "bytedance-lite", credits: 57 }]
1375
1375
  },
1376
1376
  "bytedance-pro": {
1377
1377
  id: "bytedance-pro",
@@ -1385,7 +1385,7 @@ var VIDEO_MODELS = {
1385
1385
  aspectRatios: VIDEO_RATIOS_HVS,
1386
1386
  durations: [5, 10],
1387
1387
  resolutions: ["480p", "720p", "1080p"],
1388
- pricing: [{ identifier: "bytedance-pro", credits: 18 }]
1388
+ pricing: [{ identifier: "bytedance-pro", credits: 175 }]
1389
1389
  },
1390
1390
  "bytedance-pro-fast": {
1391
1391
  id: "bytedance-pro-fast",
@@ -1398,7 +1398,7 @@ var VIDEO_MODELS = {
1398
1398
  useCases: ["fast", "motion"],
1399
1399
  durations: [5, 10],
1400
1400
  resolutions: ["720p", "1080p"],
1401
- pricing: [{ identifier: "bytedance-pro-fast", credits: 9 }]
1401
+ pricing: [{ identifier: "bytedance-pro-fast", credits: 90 }]
1402
1402
  },
1403
1403
  // ── OpenAI Sora ──
1404
1404
  // (Sora2 / Sora2-Pro are listed in KIE models but not in STATIC_CREDIT_COSTS;
@@ -1417,7 +1417,7 @@ var VIDEO_MODELS = {
1417
1417
  useCases: ["motion", "narrative"],
1418
1418
  durations: [5, 10],
1419
1419
  resolutions: ["720p", "1080p"],
1420
- pricing: [{ identifier: "runway-kie", credits: 3, note: "5s 720p" }]
1420
+ pricing: [{ identifier: "runway-kie", credits: 30, note: "5s 720p" }]
1421
1421
  },
1422
1422
  "runway-aleph": {
1423
1423
  id: "runway-aleph",
@@ -1428,7 +1428,7 @@ var VIDEO_MODELS = {
1428
1428
  series: "Runway",
1429
1429
  description: "Runway Aleph \u2014 video-to-video conversion.",
1430
1430
  useCases: ["v2v", "restyle"],
1431
- pricing: [{ identifier: "runway-aleph", credits: 35, note: "5s clip" }]
1431
+ pricing: [{ identifier: "runway-aleph", credits: 350, note: "5s clip" }]
1432
1432
  },
1433
1433
  // ── Extend / Upscale ──
1434
1434
  "veo-extend": {
@@ -1441,8 +1441,8 @@ var VIDEO_MODELS = {
1441
1441
  description: "Extend an existing VEO 3.1 clip by another segment.",
1442
1442
  useCases: ["extend"],
1443
1443
  pricing: [
1444
- { identifier: "veo-extend", credits: 19, note: "VEO 3.1 Fast default" },
1445
- { identifier: "veo-extend:quality", credits: 79, note: "VEO 3.1 Quality" }
1444
+ { identifier: "veo-extend", credits: 190, note: "VEO 3.1 Fast default" },
1445
+ { identifier: "veo-extend:quality", credits: 790, note: "VEO 3.1 Quality" }
1446
1446
  ]
1447
1447
  },
1448
1448
  "runway-extend": {
@@ -1454,7 +1454,7 @@ var VIDEO_MODELS = {
1454
1454
  series: "Runway",
1455
1455
  description: "Extend a Runway video by another clip.",
1456
1456
  useCases: ["extend"],
1457
- pricing: [{ identifier: "runway-extend", credits: 32 }]
1457
+ pricing: [{ identifier: "runway-extend", credits: 320 }]
1458
1458
  },
1459
1459
  "seedance-2-extend": {
1460
1460
  id: "seedance-2-extend",
@@ -1468,10 +1468,10 @@ var VIDEO_MODELS = {
1468
1468
  durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1469
1469
  resolutions: ["480p", "720p", "1080p"],
1470
1470
  pricing: [
1471
- { identifier: "seedance-2-extend", credits: 53, note: "default 8s 720p (ref-mode 50 + 3 stitch) \u2014 see :NsR variants" },
1472
- { identifier: "seedance-2-extend:8s:480p", credits: 26, note: "8s 480p (23+3)" },
1473
- { identifier: "seedance-2-extend:8s:720p", credits: 53, note: "8s 720p (50+3)" },
1474
- { identifier: "seedance-2-extend:8s:1080p", credits: 78, note: "8s 1080p (75+3)" }
1471
+ { identifier: "seedance-2-extend", credits: 530, note: "default 8s 720p (ref-mode 50 + 3 stitch) \u2014 see :NsR variants" },
1472
+ { identifier: "seedance-2-extend:8s:480p", credits: 260, note: "8s 480p (23+3)" },
1473
+ { identifier: "seedance-2-extend:8s:720p", credits: 530, note: "8s 720p (50+3)" },
1474
+ { identifier: "seedance-2-extend:8s:1080p", credits: 780, note: "8s 1080p (75+3)" }
1475
1475
  ]
1476
1476
  },
1477
1477
  "veo-1080p": {
@@ -1483,7 +1483,7 @@ var VIDEO_MODELS = {
1483
1483
  series: "VEO",
1484
1484
  description: "Upscale VEO output to 1080p.",
1485
1485
  useCases: ["upscale"],
1486
- pricing: [{ identifier: "veo-1080p", credits: 2 }]
1486
+ pricing: [{ identifier: "veo-1080p", credits: 20 }]
1487
1487
  },
1488
1488
  "veo-4k": {
1489
1489
  id: "veo-4k",
@@ -1494,7 +1494,7 @@ var VIDEO_MODELS = {
1494
1494
  series: "VEO",
1495
1495
  description: "Upscale VEO output to 4K.",
1496
1496
  useCases: ["upscale", "high-res"],
1497
- pricing: [{ identifier: "veo-4k", credits: 38 }]
1497
+ pricing: [{ identifier: "veo-4k", credits: 380 }]
1498
1498
  },
1499
1499
  "topaz-video": {
1500
1500
  id: "topaz-video",
@@ -1505,7 +1505,7 @@ var VIDEO_MODELS = {
1505
1505
  series: "Topaz",
1506
1506
  description: "High-quality video upscale and enhancement.",
1507
1507
  useCases: ["upscale", "premium"],
1508
- pricing: [{ identifier: "topaz-video", credits: 19, note: "~5s clip" }]
1508
+ pricing: [{ identifier: "topaz-video", credits: 190, note: "~5s clip" }]
1509
1509
  },
1510
1510
  // ── Motion transfer ──
1511
1511
  "motion-transfer": {
@@ -1520,12 +1520,12 @@ var VIDEO_MODELS = {
1520
1520
  durations: [5, 10, 15, 30],
1521
1521
  resolutions: ["720p", "1080p"],
1522
1522
  pricing: [
1523
- { identifier: "motion-transfer", credits: 15, note: "10s 720p default" },
1524
- { identifier: "motion-transfer:5s", credits: 8 },
1525
- { identifier: "motion-transfer:10s", credits: 15 },
1526
- { identifier: "motion-transfer:15s", credits: 23 },
1527
- { identifier: "motion-transfer:30s", credits: 45 },
1528
- { identifier: "motion-transfer:1080p:10s", credits: 23 }
1523
+ { identifier: "motion-transfer", credits: 150, note: "10s 720p default" },
1524
+ { identifier: "motion-transfer:5s", credits: 80 },
1525
+ { identifier: "motion-transfer:10s", credits: 150 },
1526
+ { identifier: "motion-transfer:15s", credits: 230 },
1527
+ { identifier: "motion-transfer:30s", credits: 450 },
1528
+ { identifier: "motion-transfer:1080p:10s", credits: 230 }
1529
1529
  ]
1530
1530
  },
1531
1531
  "kling-3.0-motion": {
@@ -1540,10 +1540,10 @@ var VIDEO_MODELS = {
1540
1540
  durations: [5, 10, 15, 30],
1541
1541
  resolutions: ["720p", "1080p"],
1542
1542
  pricing: [
1543
- { identifier: "kling-3.0-motion", credits: 30, note: "10s 720p default" },
1544
- { identifier: "kling-3.0-motion:5s", credits: 15 },
1545
- { identifier: "kling-3.0-motion:10s", credits: 30 },
1546
- { identifier: "kling-3.0-motion:1080p:10s", credits: 50 }
1543
+ { identifier: "kling-3.0-motion", credits: 300, note: "10s 720p default" },
1544
+ { identifier: "kling-3.0-motion:5s", credits: 150 },
1545
+ { identifier: "kling-3.0-motion:10s", credits: 300 },
1546
+ { identifier: "kling-3.0-motion:1080p:10s", credits: 500 }
1547
1547
  ]
1548
1548
  },
1549
1549
  // ── Lip sync / talking-head ──
@@ -1556,7 +1556,7 @@ var VIDEO_MODELS = {
1556
1556
  series: "Kling",
1557
1557
  description: "Lip-sync a still portrait to driving audio. Standard quality.",
1558
1558
  useCases: ["lip-sync", "talking-head"],
1559
- pricing: [{ identifier: "kling-avatar", credits: 28, note: "~14s default" }]
1559
+ pricing: [{ identifier: "kling-avatar", credits: 280, note: "~14s default" }]
1560
1560
  },
1561
1561
  "kling-avatar-pro": {
1562
1562
  id: "kling-avatar-pro",
@@ -1567,7 +1567,7 @@ var VIDEO_MODELS = {
1567
1567
  series: "Kling",
1568
1568
  description: "Premium lip-sync \u2014 better mouth shape and timing.",
1569
1569
  useCases: ["lip-sync", "talking-head", "premium"],
1570
- pricing: [{ identifier: "kling-avatar-pro", credits: 56 }]
1570
+ pricing: [{ identifier: "kling-avatar-pro", credits: 560 }]
1571
1571
  },
1572
1572
  "infinitalk": {
1573
1573
  id: "infinitalk",
@@ -1580,9 +1580,9 @@ var VIDEO_MODELS = {
1580
1580
  useCases: ["lip-sync", "talking-head"],
1581
1581
  resolutions: ["480p", "720p"],
1582
1582
  pricing: [
1583
- { identifier: "infinitalk", credits: 42, note: "720p default" },
1584
- { identifier: "infinitalk:480p", credits: 11 },
1585
- { identifier: "infinitalk:720p", credits: 42 }
1583
+ { identifier: "infinitalk", credits: 420, note: "720p default" },
1584
+ { identifier: "infinitalk:480p", credits: 110 },
1585
+ { identifier: "infinitalk:720p", credits: 420 }
1586
1586
  ]
1587
1587
  },
1588
1588
  "omnihuman-1-5": {
@@ -1596,10 +1596,10 @@ var VIDEO_MODELS = {
1596
1596
  useCases: ["lip-sync", "talking-head", "premium"],
1597
1597
  resolutions: ["720p", "1080p"],
1598
1598
  pricing: [
1599
- { identifier: "omnihuman-1-5", credits: 405, note: "60s ceiling (no duration given)" },
1600
- { identifier: "omnihuman-1-5:15s", credits: 102 },
1601
- { identifier: "omnihuman-1-5:30s", credits: 203 },
1602
- { identifier: "omnihuman-1-5:60s", credits: 405 }
1599
+ { identifier: "omnihuman-1-5", credits: 4050, note: "60s ceiling (no duration given)" },
1600
+ { identifier: "omnihuman-1-5:15s", credits: 1020 },
1601
+ { identifier: "omnihuman-1-5:30s", credits: 2030 },
1602
+ { identifier: "omnihuman-1-5:60s", credits: 4050 }
1603
1603
  ]
1604
1604
  },
1605
1605
  "hailuo-avatar": {
@@ -1611,7 +1611,7 @@ var VIDEO_MODELS = {
1611
1611
  series: "Hailuo",
1612
1612
  description: "MiniMax avatar lip-sync.",
1613
1613
  useCases: ["lip-sync", "talking-head"],
1614
- pricing: [{ identifier: "hailuo-avatar", credits: 19 }],
1614
+ pricing: [{ identifier: "hailuo-avatar", credits: 190 }],
1615
1615
  // Not wired in any provider / not in LIP_SYNC_PROVIDERS — hide from MCP
1616
1616
  // list_models so the lip_sync tool can't advertise a model its route
1617
1617
  // rejects with a 400. Re-expose when the provider lands.
@@ -1627,12 +1627,12 @@ var VIDEO_MODELS = {
1627
1627
  description: "Dub existing footage \u2014 re-syncs lips to a new audio track. Video input, billed per second.",
1628
1628
  useCases: ["lip-sync", "dubbing", "video-to-video"],
1629
1629
  pricing: [
1630
- { identifier: "sync-lipsync-v3", credits: 2e3, note: "5-min ceiling (no duration given)" },
1631
- { identifier: "sync-lipsync-v3:15s", credits: 100 },
1632
- { identifier: "sync-lipsync-v3:30s", credits: 200 },
1633
- { identifier: "sync-lipsync-v3:60s", credits: 400 },
1634
- { identifier: "sync-lipsync-v3:120s", credits: 800 },
1635
- { identifier: "sync-lipsync-v3:300s", credits: 2e3, note: "5-min ceiling" }
1630
+ { identifier: "sync-lipsync-v3", credits: 2e4, note: "5-min ceiling (no duration given)" },
1631
+ { identifier: "sync-lipsync-v3:15s", credits: 1e3 },
1632
+ { identifier: "sync-lipsync-v3:30s", credits: 2e3 },
1633
+ { identifier: "sync-lipsync-v3:60s", credits: 4e3 },
1634
+ { identifier: "sync-lipsync-v3:120s", credits: 8e3 },
1635
+ { identifier: "sync-lipsync-v3:300s", credits: 2e4, note: "5-min ceiling" }
1636
1636
  ]
1637
1637
  },
1638
1638
  "volcengine-lipsync": {
@@ -1645,12 +1645,12 @@ var VIDEO_MODELS = {
1645
1645
  description: "Video-to-video AI dubbing \u2014 re-syncs lips to a new vocal track. Multi-speaker (scene detection + speaker ID) in basic mode. Video input, billed per second.",
1646
1646
  useCases: ["lip-sync", "dubbing", "video-to-video"],
1647
1647
  pricing: [
1648
- { identifier: "volcengine-lipsync", credits: 600, note: "5-min ceiling (no duration given)" },
1649
- { identifier: "volcengine-lipsync:15s", credits: 30 },
1650
- { identifier: "volcengine-lipsync:30s", credits: 60 },
1651
- { identifier: "volcengine-lipsync:60s", credits: 120 },
1652
- { identifier: "volcengine-lipsync:120s", credits: 240 },
1653
- { identifier: "volcengine-lipsync:300s", credits: 600, note: "5-min ceiling" }
1648
+ { identifier: "volcengine-lipsync", credits: 6e3, note: "5-min ceiling (no duration given)" },
1649
+ { identifier: "volcengine-lipsync:15s", credits: 300 },
1650
+ { identifier: "volcengine-lipsync:30s", credits: 600 },
1651
+ { identifier: "volcengine-lipsync:60s", credits: 1200 },
1652
+ { identifier: "volcengine-lipsync:120s", credits: 2400 },
1653
+ { identifier: "volcengine-lipsync:300s", credits: 6e3, note: "5-min ceiling" }
1654
1654
  ]
1655
1655
  },
1656
1656
  // ── Gemini video analysis ── (Gemini-only; billed per duration bucket — the
@@ -1667,11 +1667,11 @@ var VIDEO_MODELS = {
1667
1667
  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.",
1668
1668
  useCases: ["video-analysis", "shot-list", "fast"],
1669
1669
  pricing: [
1670
- { identifier: "video-analysis:gemini-3-flash", credits: 14, note: "10-min ceiling (no duration given)" },
1671
- { identifier: "video-analysis:gemini-3-flash:60s", credits: 3 },
1672
- { identifier: "video-analysis:gemini-3-flash:180s", credits: 4 },
1673
- { identifier: "video-analysis:gemini-3-flash:360s", credits: 9 },
1674
- { identifier: "video-analysis:gemini-3-flash:600s", credits: 14, note: "10-min ceiling" }
1670
+ { identifier: "video-analysis:gemini-3-flash", credits: 136, note: "10-min ceiling (no duration given)" },
1671
+ { identifier: "video-analysis:gemini-3-flash:60s", credits: 23 },
1672
+ { identifier: "video-analysis:gemini-3-flash:180s", credits: 32 },
1673
+ { identifier: "video-analysis:gemini-3-flash:360s", credits: 81 },
1674
+ { identifier: "video-analysis:gemini-3-flash:600s", credits: 136, note: "10-min ceiling" }
1675
1675
  ]
1676
1676
  },
1677
1677
  "gemini-3.6-flash-video-analysis": {
@@ -1684,11 +1684,11 @@ var VIDEO_MODELS = {
1684
1684
  description: "Analyze a video into a structured shot list (scenes, camera, audio) \u2014 fast, economy tier. Billed per duration bucket.",
1685
1685
  useCases: ["video-analysis", "shot-list", "fast"],
1686
1686
  pricing: [
1687
- { identifier: "video-analysis:gemini-3.6-flash", credits: 38, note: "10-min ceiling (no duration given)" },
1688
- { identifier: "video-analysis:gemini-3.6-flash:60s", credits: 7 },
1689
- { identifier: "video-analysis:gemini-3.6-flash:180s", credits: 9 },
1690
- { identifier: "video-analysis:gemini-3.6-flash:360s", credits: 23 },
1691
- { identifier: "video-analysis:gemini-3.6-flash:600s", credits: 38, note: "10-min ceiling" }
1687
+ { identifier: "video-analysis:gemini-3.6-flash", credits: 374, note: "10-min ceiling (no duration given)" },
1688
+ { identifier: "video-analysis:gemini-3.6-flash:60s", credits: 61 },
1689
+ { identifier: "video-analysis:gemini-3.6-flash:180s", credits: 88 },
1690
+ { identifier: "video-analysis:gemini-3.6-flash:360s", credits: 224 },
1691
+ { identifier: "video-analysis:gemini-3.6-flash:600s", credits: 374, note: "10-min ceiling" }
1692
1692
  ]
1693
1693
  },
1694
1694
  "gemini-3.1-pro-video-analysis": {
@@ -1701,11 +1701,11 @@ var VIDEO_MODELS = {
1701
1701
  description: "Analyze a video into a structured shot list (scenes, camera, audio) \u2014 higher-fidelity, default tier. Billed per duration bucket.",
1702
1702
  useCases: ["video-analysis", "shot-list", "cinematic"],
1703
1703
  pricing: [
1704
- { identifier: "video-analysis:gemini-3.1-pro", credits: 49, note: "10-min ceiling (no duration given)" },
1705
- { identifier: "video-analysis:gemini-3.1-pro:60s", credits: 9 },
1706
- { identifier: "video-analysis:gemini-3.1-pro:180s", credits: 12 },
1707
- { identifier: "video-analysis:gemini-3.1-pro:360s", credits: 30 },
1708
- { identifier: "video-analysis:gemini-3.1-pro:600s", credits: 49, note: "10-min ceiling" }
1704
+ { identifier: "video-analysis:gemini-3.1-pro", credits: 486, note: "10-min ceiling (no duration given)" },
1705
+ { identifier: "video-analysis:gemini-3.1-pro:60s", credits: 82 },
1706
+ { identifier: "video-analysis:gemini-3.1-pro:180s", credits: 111 },
1707
+ { identifier: "video-analysis:gemini-3.1-pro:360s", credits: 291 },
1708
+ { identifier: "video-analysis:gemini-3.1-pro:600s", credits: 486, note: "10-min ceiling" }
1709
1709
  ]
1710
1710
  },
1711
1711
  // Both mixed tiers are variants of the same advanced multi-engine analysis
@@ -1721,11 +1721,11 @@ var VIDEO_MODELS = {
1721
1721
  description: "Our most advanced analysis tier \u2014 multiple analysis engines combined into one result for maximum completeness and accuracy. Billed per duration bucket.",
1722
1722
  useCases: ["video-analysis", "shot-list", "premium", "most-complete"],
1723
1723
  pricing: [
1724
- { identifier: "video-analysis:mixed", credits: 63, note: "10-min ceiling (no duration given)" },
1725
- { identifier: "video-analysis:mixed:60s", credits: 11 },
1726
- { identifier: "video-analysis:mixed:180s", credits: 15 },
1727
- { identifier: "video-analysis:mixed:360s", credits: 38 },
1728
- { identifier: "video-analysis:mixed:600s", credits: 63, note: "10-min ceiling" }
1724
+ { identifier: "video-analysis:mixed", credits: 630, note: "10-min ceiling (no duration given)" },
1725
+ { identifier: "video-analysis:mixed:60s", credits: 110 },
1726
+ { identifier: "video-analysis:mixed:180s", credits: 150 },
1727
+ { identifier: "video-analysis:mixed:360s", credits: 380 },
1728
+ { identifier: "video-analysis:mixed:600s", credits: 630, note: "10-min ceiling" }
1729
1729
  ]
1730
1730
  },
1731
1731
  // SMART — the accuracy tier, and the only one that does not rely on voting.
@@ -1742,11 +1742,11 @@ var VIDEO_MODELS = {
1742
1742
  description: "Highest-accuracy analysis \u2014 a single deep pass that reads the footage frame by frame, finds its own shot boundaries, and identifies the cast by appearance. Best choice when the shot list will drive regeneration. Billed per duration bucket.",
1743
1743
  useCases: ["video-analysis", "shot-list", "premium", "most-accurate"],
1744
1744
  pricing: [
1745
- { identifier: "video-analysis:smart", credits: 346, note: "10-min ceiling (no duration given)" },
1746
- { identifier: "video-analysis:smart:60s", credits: 42 },
1747
- { identifier: "video-analysis:smart:180s", credits: 94 },
1748
- { identifier: "video-analysis:smart:360s", credits: 207 },
1749
- { identifier: "video-analysis:smart:600s", credits: 346, note: "10-min ceiling" }
1745
+ { identifier: "video-analysis:smart", credits: 3500, note: "10-min ceiling (no duration given)" },
1746
+ { identifier: "video-analysis:smart:60s", credits: 460 },
1747
+ { identifier: "video-analysis:smart:180s", credits: 980 },
1748
+ { identifier: "video-analysis:smart:360s", credits: 2110 },
1749
+ { identifier: "video-analysis:smart:600s", credits: 3500, note: "10-min ceiling" }
1750
1750
  ]
1751
1751
  }
1752
1752
  };
@@ -1762,7 +1762,7 @@ var AUDIO_MODELS = {
1762
1762
  description: "Latest ElevenLabs TTS \u2014 supports [audio tags] for emotion / pacing. Direct API.",
1763
1763
  useCases: ["tts", "voice-over", "narration", "expressive"],
1764
1764
  features: ["audio-tags", "voice-cloning"],
1765
- pricing: [{ identifier: "elevenlabs-v3", credits: 3 }],
1765
+ pricing: [{ identifier: "elevenlabs-v3", credits: 30 }],
1766
1766
  featured: true
1767
1767
  },
1768
1768
  "elevenlabs-turbo": {
@@ -1774,7 +1774,7 @@ var AUDIO_MODELS = {
1774
1774
  series: "ElevenLabs",
1775
1775
  description: "Fast, cheap ElevenLabs TTS via the direct ElevenLabs API. Good for narration.",
1776
1776
  useCases: ["tts", "narration", "fast"],
1777
- pricing: [{ identifier: "elevenlabs-turbo", credits: 2, note: "per 1K chars" }]
1777
+ pricing: [{ identifier: "elevenlabs-turbo", credits: 15, note: "per 1K chars" }]
1778
1778
  },
1779
1779
  "elevenlabs-multilingual": {
1780
1780
  id: "elevenlabs-multilingual",
@@ -1785,7 +1785,7 @@ var AUDIO_MODELS = {
1785
1785
  series: "ElevenLabs",
1786
1786
  description: "Multi-language ElevenLabs TTS via the direct ElevenLabs API.",
1787
1787
  useCases: ["tts", "multilingual"],
1788
- pricing: [{ identifier: "elevenlabs-multilingual", credits: 3, note: "per 1K chars" }]
1788
+ pricing: [{ identifier: "elevenlabs-multilingual", credits: 30, note: "per 1K chars" }]
1789
1789
  },
1790
1790
  "elevenlabs-dialogue": {
1791
1791
  id: "elevenlabs-dialogue",
@@ -1796,7 +1796,7 @@ var AUDIO_MODELS = {
1796
1796
  series: "ElevenLabs",
1797
1797
  description: "Multi-speaker dialogue TTS \u2014 give it a script, it voices each role.",
1798
1798
  useCases: ["tts", "dialogue", "multi-speaker"],
1799
- pricing: [{ identifier: "elevenlabs-dialogue", credits: 4, note: "per 1K chars" }],
1799
+ pricing: [{ identifier: "elevenlabs-dialogue", credits: 25, note: "per 1K chars" }],
1800
1800
  // Driven only via the dialogue/character-voice path (multi-speaker script
1801
1801
  // shape), NOT the single-text generate_speech verb. Hide from MCP
1802
1802
  // list_models so generate_speech (TTS_PROVIDERS) can't advertise it and
@@ -1813,7 +1813,7 @@ var AUDIO_MODELS = {
1813
1813
  series: "ElevenLabs",
1814
1814
  description: "Clone a voice from a short reference clip. Instant clone via direct ElevenLabs API.",
1815
1815
  useCases: ["voice-clone", "personalization"],
1816
- pricing: [{ identifier: "voice-clone", credits: 5 }]
1816
+ pricing: [{ identifier: "voice-clone", credits: 50 }]
1817
1817
  },
1818
1818
  "elevenlabs-voice-design": {
1819
1819
  id: "elevenlabs-voice-design",
@@ -1824,7 +1824,7 @@ var AUDIO_MODELS = {
1824
1824
  series: "ElevenLabs",
1825
1825
  description: "Design a synthetic voice from a description (no reference clip needed).",
1826
1826
  useCases: ["voice-design", "synthetic"],
1827
- pricing: [{ identifier: "elevenlabs-voice-design", credits: 5 }]
1827
+ pricing: [{ identifier: "elevenlabs-voice-design", credits: 50 }]
1828
1828
  },
1829
1829
  "elevenlabs-voice-changer": {
1830
1830
  id: "elevenlabs-voice-changer",
@@ -1835,7 +1835,7 @@ var AUDIO_MODELS = {
1835
1835
  series: "ElevenLabs",
1836
1836
  description: "Speech-to-speech: convert one voice to another while preserving prosody.",
1837
1837
  useCases: ["voice-conversion", "dubbing"],
1838
- pricing: [{ identifier: "elevenlabs-voice-changer", credits: 4 }]
1838
+ pricing: [{ identifier: "elevenlabs-voice-changer", credits: 40 }]
1839
1839
  },
1840
1840
  "elevenlabs-stt": {
1841
1841
  id: "elevenlabs-stt",
@@ -1846,7 +1846,7 @@ var AUDIO_MODELS = {
1846
1846
  series: "ElevenLabs",
1847
1847
  description: "Speech-to-text \u2014 transcribe audio with timestamps.",
1848
1848
  useCases: ["transcription", "stt"],
1849
- pricing: [{ identifier: "elevenlabs-stt", credits: 3 }]
1849
+ pricing: [{ identifier: "elevenlabs-stt", credits: 22 }]
1850
1850
  },
1851
1851
  "elevenlabs-isolation": {
1852
1852
  id: "elevenlabs-isolation",
@@ -1857,7 +1857,7 @@ var AUDIO_MODELS = {
1857
1857
  series: "ElevenLabs",
1858
1858
  description: "Strip background noise / music from a vocal track.",
1859
1859
  useCases: ["cleanup", "isolation"],
1860
- pricing: [{ identifier: "elevenlabs-isolation", credits: 8, note: "variable per second" }]
1860
+ pricing: [{ identifier: "elevenlabs-isolation", credits: 74, note: "variable per second" }]
1861
1861
  },
1862
1862
  "elevenlabs-dubbing": {
1863
1863
  id: "elevenlabs-dubbing",
@@ -1868,7 +1868,7 @@ var AUDIO_MODELS = {
1868
1868
  series: "ElevenLabs",
1869
1869
  description: "Translate + dub a video into a new language. Async.",
1870
1870
  useCases: ["dubbing", "multilingual"],
1871
- pricing: [{ identifier: "elevenlabs-dubbing", credits: 8 }]
1871
+ pricing: [{ identifier: "elevenlabs-dubbing", credits: 80 }]
1872
1872
  },
1873
1873
  "elevenlabs-forced-alignment": {
1874
1874
  id: "elevenlabs-forced-alignment",
@@ -1879,7 +1879,7 @@ var AUDIO_MODELS = {
1879
1879
  series: "ElevenLabs",
1880
1880
  description: "Align an existing transcript to audio with word-level timestamps.",
1881
1881
  useCases: ["alignment", "captions"],
1882
- pricing: [{ identifier: "elevenlabs-forced-alignment", credits: 3 }]
1882
+ pricing: [{ identifier: "elevenlabs-forced-alignment", credits: 30 }]
1883
1883
  },
1884
1884
  // ── ElevenLabs SFX ──
1885
1885
  "elevenlabs-sfx": {
@@ -1891,7 +1891,7 @@ var AUDIO_MODELS = {
1891
1891
  series: "ElevenLabs",
1892
1892
  description: "Generate short sound effects from a text prompt.",
1893
1893
  useCases: ["sfx", "ambient"],
1894
- pricing: [{ identifier: "elevenlabs-sfx", credits: 1, note: "~5s clip" }]
1894
+ pricing: [{ identifier: "elevenlabs-sfx", credits: 3, note: "~5s clip" }]
1895
1895
  },
1896
1896
  // ── Suno music ──
1897
1897
  "suno": {
@@ -1904,7 +1904,7 @@ var AUDIO_MODELS = {
1904
1904
  dataValue: "V4",
1905
1905
  description: "Suno v4 music generation \u2014 full songs with vocals, multiple genres.",
1906
1906
  useCases: ["music", "song", "vocals"],
1907
- pricing: [{ identifier: "suno", credits: 3, note: "per generation" }]
1907
+ pricing: [{ identifier: "suno", credits: 30, note: "per generation" }]
1908
1908
  },
1909
1909
  "suno-v5": {
1910
1910
  id: "suno-v5",
@@ -1916,7 +1916,7 @@ var AUDIO_MODELS = {
1916
1916
  dataValue: "V5",
1917
1917
  description: "Newer Suno v5 \u2014 better vocal quality, more genres. Same price as v4.",
1918
1918
  useCases: ["music", "song", "vocals", "premium"],
1919
- pricing: [{ identifier: "suno-v5", credits: 3, note: "per generation" }]
1919
+ pricing: [{ identifier: "suno-v5", credits: 30, note: "per generation" }]
1920
1920
  },
1921
1921
  "suno-v5_5": {
1922
1922
  id: "suno-v5_5",
@@ -1928,7 +1928,7 @@ var AUDIO_MODELS = {
1928
1928
  dataValue: "V5_5",
1929
1929
  description: "Suno v5.5 \u2014 latest model with improved audio quality and expressiveness.",
1930
1930
  useCases: ["music", "song", "vocals", "premium"],
1931
- pricing: [{ identifier: "suno-v5_5", credits: 3, note: "per generation" }],
1931
+ pricing: [{ identifier: "suno-v5_5", credits: 30, note: "per generation" }],
1932
1932
  featured: true
1933
1933
  }
1934
1934
  };
@@ -2167,7 +2167,7 @@ function modelIdsByKindMode(kind, modes, opts = {}) {
2167
2167
  }
2168
2168
 
2169
2169
  // src/model-constants.ts
2170
- var CREDIT_BASE_USD = 0.02;
2170
+ var CREDIT_BASE_USD = 2e-3;
2171
2171
  var IMAGE_PROMPT_MAX = 5e3;
2172
2172
  var MAX_IMAGE_PROMPT_CHARS_BY_PROVIDER = {
2173
2173
  // ── higher than the 5000 default ──
@@ -3358,6 +3358,22 @@ function applyDefaultVideoSelection(input) {
3358
3358
  };
3359
3359
  }
3360
3360
 
3361
+ // src/credit-conversion.ts
3362
+ var CREDIT_ROUNDING_RESOLUTION = 1e3;
3363
+ function assertUsableUsd(usd) {
3364
+ if (!Number.isFinite(usd)) throw new Error(`usdToCredits: cost must be finite, got ${usd}`);
3365
+ if (usd < 0) throw new Error(`usdToCredits: cost must not be negative, got ${usd}`);
3366
+ }
3367
+ function usdToCredits(usd) {
3368
+ assertUsableUsd(usd);
3369
+ const milliCredits = Math.round(usd / CREDIT_BASE_USD * CREDIT_ROUNDING_RESOLUTION);
3370
+ return Math.ceil(milliCredits / CREDIT_ROUNDING_RESOLUTION);
3371
+ }
3372
+ function creditsToUsd(credits) {
3373
+ if (!Number.isFinite(credits)) throw new Error(`creditsToUsd: credits must be finite, got ${credits}`);
3374
+ return credits * CREDIT_BASE_USD;
3375
+ }
3376
+
3361
3377
  // src/film-pricing.ts
3362
3378
  var FILM_BASE_CREDITS = 45;
3363
3379
  var KEYFRAME_CREDITS_PER_SHOT = 2;
@@ -12595,35 +12611,35 @@ var WINDOW_OVERLAP = 5;
12595
12611
  var VIDEO_ANALYSIS_WINDOW = { LEN: WINDOW_LEN, STRIDE: WINDOW_STRIDE, OVERLAP: WINDOW_OVERLAP, SINGLE_MAX: 180 };
12596
12612
  var VIDEO_ANALYSIS_BUCKET_CREDITS = {
12597
12613
  // Legacy fast-tier model (pre-2026-07) — kept for stored raw-id configs.
12598
- "video-analysis:gemini-3-flash:60s": 3,
12599
- "video-analysis:gemini-3-flash:180s": 4,
12600
- "video-analysis:gemini-3-flash:360s": 9,
12601
- "video-analysis:gemini-3-flash:600s": 14,
12614
+ "video-analysis:gemini-3-flash:60s": 23,
12615
+ "video-analysis:gemini-3-flash:180s": 32,
12616
+ "video-analysis:gemini-3-flash:360s": 81,
12617
+ "video-analysis:gemini-3-flash:600s": 136,
12602
12618
  // Current fast tier — regenerated from the private formula for its backing
12603
12619
  // model; higher than the legacy fast schedule but still ≤ pro per bucket.
12604
- "video-analysis:gemini-3.6-flash:60s": 7,
12605
- "video-analysis:gemini-3.6-flash:180s": 9,
12606
- "video-analysis:gemini-3.6-flash:360s": 23,
12607
- "video-analysis:gemini-3.6-flash:600s": 38,
12608
- "video-analysis:gemini-3.1-pro:60s": 9,
12609
- "video-analysis:gemini-3.1-pro:180s": 12,
12610
- "video-analysis:gemini-3.1-pro:360s": 30,
12611
- "video-analysis:gemini-3.1-pro:600s": 49,
12620
+ "video-analysis:gemini-3.6-flash:60s": 61,
12621
+ "video-analysis:gemini-3.6-flash:180s": 88,
12622
+ "video-analysis:gemini-3.6-flash:360s": 224,
12623
+ "video-analysis:gemini-3.6-flash:600s": 374,
12624
+ "video-analysis:gemini-3.1-pro:60s": 82,
12625
+ "video-analysis:gemini-3.1-pro:180s": 111,
12626
+ "video-analysis:gemini-3.1-pro:360s": 291,
12627
+ "video-analysis:gemini-3.1-pro:600s": 486,
12612
12628
  // Mixed tiers (`mixed` + `mixed-fast`) share ONE credit family — they are
12613
12629
  // variants of the same engine plan (plan internals live in the private
12614
12630
  // analysis plugin). Admin-tunable via model_pricing like every other row.
12615
- "video-analysis:mixed:60s": 11,
12616
- "video-analysis:mixed:180s": 15,
12617
- "video-analysis:mixed:360s": 38,
12618
- "video-analysis:mixed:600s": 63,
12631
+ "video-analysis:mixed:60s": 110,
12632
+ "video-analysis:mixed:180s": 150,
12633
+ "video-analysis:mixed:360s": 380,
12634
+ "video-analysis:mixed:600s": 630,
12619
12635
  // SMART — the one native-transport plan: a single pass with reasoning and
12620
12636
  // frame sampling turned all the way up. Priced well above the economy tiers
12621
12637
  // because it genuinely costs more to run, and it is the only tier whose
12622
12638
  // accuracy was measured against a hand-counted edit list.
12623
- "video-analysis:smart:60s": 42,
12624
- "video-analysis:smart:180s": 94,
12625
- "video-analysis:smart:360s": 207,
12626
- "video-analysis:smart:600s": 346
12639
+ "video-analysis:smart:60s": 460,
12640
+ "video-analysis:smart:180s": 980,
12641
+ "video-analysis:smart:360s": 2110,
12642
+ "video-analysis:smart:600s": 3500
12627
12643
  };
12628
12644
  function videoAnalysisCreditSegment(modelOrSentinel) {
12629
12645
  return modelOrSentinel === "mixed-fast" ? "mixed" : modelOrSentinel;
@@ -12729,6 +12745,7 @@ exports.COMPOSER_PLAN_MAP = COMPOSER_PLAN_MAP;
12729
12745
  exports.CONTENT_TYPES_BY_PLATFORM = CONTENT_TYPES_BY_PLATFORM;
12730
12746
  exports.CREATURE_ATTACH_COLUMNS = CREATURE_ATTACH_COLUMNS;
12731
12747
  exports.CREDIT_BASE_USD = CREDIT_BASE_USD;
12748
+ exports.CREDIT_ROUNDING_RESOLUTION = CREDIT_ROUNDING_RESOLUTION;
12732
12749
  exports.CastCoverageCriticVerdictSchema = CastCoverageCriticVerdictSchema;
12733
12750
  exports.CharacterImageCriticVerdictSchema = CharacterImageCriticVerdictSchema;
12734
12751
  exports.CharacterMetadataSchema = CharacterMetadataSchema;
@@ -13129,6 +13146,7 @@ exports.collectAncestorRefs = collectAncestorRefs;
13129
13146
  exports.combineSameLabelRefs = combineSameLabelRefs;
13130
13147
  exports.countRefModalityEdges = countRefModalityEdges;
13131
13148
  exports.creditRangesAll = creditRangesAll;
13149
+ exports.creditsToUsd = creditsToUsd;
13132
13150
  exports.decodeProviderItem = decodeProviderItem;
13133
13151
  exports.defaultCarriedFraction = defaultCarriedFraction;
13134
13152
  exports.defaultRoleForSource = defaultRoleForSource;
@@ -13361,6 +13379,7 @@ exports.unwrapUnresolvedTokens = unwrapUnresolvedTokens;
13361
13379
  exports.usageModeDirective = usageModeDirective;
13362
13380
  exports.usageModeIncludesName = usageModeIncludesName;
13363
13381
  exports.usageModeLabel = usageModeLabel;
13382
+ exports.usdToCredits = usdToCredits;
13364
13383
  exports.validateAiAvatarPayload = validateAiAvatarPayload;
13365
13384
  exports.validateCinematicAvatarPayload = validateCinematicAvatarPayload;
13366
13385
  exports.validateDurationForFormat = validateDurationForFormat;