@shop-os/modelkit 0.9.0 → 0.10.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/catalog.js CHANGED
@@ -1219,303 +1219,6 @@ var VEED_SUBTITLES = {
1219
1219
  }
1220
1220
  };
1221
1221
 
1222
- // src/catalog/voices-fish.ts
1223
- var FISH_VOICES = [
1224
- {
1225
- id: "933563129e564b19a115bedd57b7406a",
1226
- name: "Sarah",
1227
- gender: "female",
1228
- languages: ["en"],
1229
- description: "An engaged speaker.",
1230
- previewUrl: "https://platform.r2.fish.audio/task/4e204945670c460c86fdab57512cb308.mp3"
1231
- },
1232
- {
1233
- id: "bf322df2096a46f18c579d0baa36f41d",
1234
- name: "Adrian",
1235
- gender: "male",
1236
- languages: ["en"],
1237
- description: "A steady and reliable narrator.",
1238
- previewUrl: "https://platform.r2.fish.audio/task/d730b09f4a484316a77ecc86137e85fb.mp3"
1239
- },
1240
- {
1241
- id: "536d3a5e000945adb7038665781a4aca",
1242
- name: "Ethan",
1243
- gender: "male",
1244
- languages: ["en"],
1245
- description: "A curious explainer.",
1246
- previewUrl: "https://platform.r2.fish.audio/task/bdd677ed767744fc91f166468786264b.mp3"
1247
- },
1248
- {
1249
- id: "b347db033a6549378b48d00acb0d06cd",
1250
- name: "Selene",
1251
- gender: "female",
1252
- languages: ["en"],
1253
- description: "A meditative female voice.",
1254
- previewUrl: "https://platform.r2.fish.audio/task/fcf629b4a0b343558f461338ba1b9da4.mp3"
1255
- },
1256
- {
1257
- id: "9a9cf47702da476aa4629e2506d4a857",
1258
- name: "Hannah",
1259
- gender: "female",
1260
- languages: ["en"],
1261
- description: "A conversation specialist.",
1262
- previewUrl: "https://platform.r2.fish.audio/task/08d658835feb427db808e37060b78eb0.mp3"
1263
- },
1264
- {
1265
- id: "79d0bd3e4e5444b18f7b6d89b5927bf1",
1266
- name: "Jordan",
1267
- gender: "male",
1268
- languages: ["en"],
1269
- description: "A motivational speaker.",
1270
- previewUrl: "https://platform.r2.fish.audio/task/edecbc0bdd4c46c39eda8520a0f729ef.mp3"
1271
- },
1272
- {
1273
- id: "e3cd384158934cc9a01029cd7d278634",
1274
- name: "Laura",
1275
- gender: "female",
1276
- languages: ["en"],
1277
- description: "A confident female narrator.",
1278
- previewUrl: "https://platform.r2.fish.audio/task/e821bef995344d519caa1c93d808db23.mp3"
1279
- },
1280
- {
1281
- id: "f3a2b90078d54a65af4b95f63bc7798e",
1282
- name: "Sheila",
1283
- gender: "female",
1284
- accent: "american",
1285
- languages: ["en"],
1286
- description: "A young American English woman's voice.",
1287
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/9bb9e1a1cf3f47f38700da1c5c0a678a.mp3"
1288
- },
1289
- {
1290
- id: "0db6e93af420470b9d9b9a886dbaa954",
1291
- name: "Kai",
1292
- gender: "male",
1293
- languages: ["en"],
1294
- description: "A friendly English man's voice for companion apps and everyday conversation.",
1295
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/13306f1172544c3ba3106d1e363feaa6.mp3"
1296
- },
1297
- {
1298
- id: "8abfa9ebd4c24a3399b68c3cdac8c7b5",
1299
- name: "Freya",
1300
- gender: "female",
1301
- accent: "british",
1302
- languages: ["en"],
1303
- description: "A natural, professional British English voice with a brisk, conversational pace. Clear and easy to follow, suited to voice assistants, customer support and everyday narration.",
1304
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/07918705a56b42daaab149f65392cea7.mp3"
1305
- },
1306
- {
1307
- id: "2f64e528a4f2406691925ab1e0ed5b7f",
1308
- name: "Ananya",
1309
- gender: "female",
1310
- languages: ["hi"],
1311
- description: "\u0938\u093E\u092B\u093C \u0914\u0930 \u0906\u0924\u094D\u092E\u0935\u093F\u0936\u094D\u0935\u093E\u0938 \u092D\u0930\u0940 \u0906\u0935\u093E\u091C\u093C, \u091C\u094B \u0935\u0949\u0907\u0938 \u0905\u0938\u093F\u0938\u094D\u091F\u0947\u0902\u091F, \u0917\u094D\u0930\u093E\u0939\u0915 \u0938\u0947\u0935\u093E \u0914\u0930 \u092A\u094D\u0930\u0938\u094D\u0924\u0941\u0924\u093F\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u0941\u0915\u094D\u0924 \u0939\u0948\u0964",
1312
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a17a700668d8405f8316db120733145c.mp3"
1313
- },
1314
- {
1315
- id: "cefd91a07b99468f9148e2580990082d",
1316
- name: "Arjun",
1317
- gender: "male",
1318
- languages: ["hi"],
1319
- description: "\u0938\u093E\u092B\u093C \u0914\u0930 \u0906\u0924\u094D\u092E\u0935\u093F\u0936\u094D\u0935\u093E\u0938 \u092D\u0930\u0940 \u0906\u0935\u093E\u091C\u093C, \u091C\u094B \u0935\u0949\u0907\u0938 \u0905\u0938\u093F\u0938\u094D\u091F\u0947\u0902\u091F, \u0917\u094D\u0930\u093E\u0939\u0915 \u0938\u0947\u0935\u093E \u0914\u0930 \u092A\u094D\u0930\u0938\u094D\u0924\u0941\u0924\u093F\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u0941\u0915\u094D\u0924 \u0939\u0948\u0964",
1320
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/a0c4a8eadb7841cdae8e5e68031a2dfb.mp3"
1321
- },
1322
- {
1323
- id: "3f065d660212478a9c697fa965b4d098",
1324
- name: "Carmen",
1325
- gender: "female",
1326
- languages: ["es"],
1327
- description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1328
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/3421be48b6cb4c28bf829c25188e7e74.mp3"
1329
- },
1330
- {
1331
- id: "ec0718028a2445fb9be8e8bfb56a0150",
1332
- name: "Rodrigo",
1333
- gender: "male",
1334
- languages: ["es"],
1335
- description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1336
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/5a77c32365604800ad5b4eb13c5585df.mp3"
1337
- },
1338
- {
1339
- id: "10a3a20742114a4ea6dd441e7591850f",
1340
- name: "Manon",
1341
- gender: "female",
1342
- languages: ["fr"],
1343
- description: "Une voix claire et vive, adapt\xE9e aux assistants vocaux et au support client.",
1344
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/f7b75ee1fa524e48a8cefb003cf72952.mp3"
1345
- },
1346
- {
1347
- id: "f69bca092b674168a8d02d61ca20943c",
1348
- name: "Lucas",
1349
- gender: "male",
1350
- languages: ["fr"],
1351
- description: "Une voix claire et assur\xE9e, adapt\xE9e aux assistants vocaux et au service client.",
1352
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/86fca3e56a014a3d8a11450854bb8311.mp3"
1353
- },
1354
- {
1355
- id: "3937b44b604249f18b94913daef94043",
1356
- name: "Lena",
1357
- gender: "female",
1358
- languages: ["de"],
1359
- description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
1360
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/8659fec80b74442dab68a7755716a401.mp3"
1361
- },
1362
- {
1363
- id: "c1e7cc926aa5469aa966c353094d4b0b",
1364
- name: "Lukas",
1365
- gender: "male",
1366
- languages: ["de"],
1367
- description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
1368
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/fb1d538126bb4fe38f8366250f6a2136.mp3"
1369
- },
1370
- {
1371
- id: "b3c060cc41544a7da94a2c487647c902",
1372
- name: "Let\xEDcia",
1373
- gender: "female",
1374
- accent: "brazilian",
1375
- languages: ["pt"],
1376
- description: "A Brazilian-accented Portuguese woman's voice, in her late twenties. Soft, warm, intimate. A freelance designer from Belo Horizonte who enjoys long walks in the park. Best suited to companion apps and casual everyday conversation.",
1377
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/13c6c0d96b5c4069951f89868ee15360.mp3"
1378
- },
1379
- {
1380
- id: "add7bcb8d3c8423bbfa152ca232aad6e",
1381
- name: "Ricardo",
1382
- gender: "male",
1383
- accent: "brazilian",
1384
- languages: ["pt"],
1385
- description: "A Brazilian-accented Portuguese man's voice, in his late forties. Clear, professional, monotone. A high school history teacher from Curitiba who loves classical music. Best suited to lessons, tutoring and explainer content.",
1386
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/67475fc717ae45cbb38e647a2dd37fe1.mp3"
1387
- },
1388
- {
1389
- id: "b2d9d8db057042688a5e318b8f405bc2",
1390
- name: "Kyoko",
1391
- gender: "female",
1392
- languages: ["ja"],
1393
- description: "\u4E01\u5BE7\u3067\u843D\u3061\u7740\u3044\u305F\u8A71\u3057\u65B9\u304C\u7279\u5FB4\u306E\u5973\u6027\u306E\u58F0\u3002\u304A\u5BA2\u69D8\u5BFE\u5FDC\u3084\u60C5\u5831\u63D0\u4F9B\u306B\u6700\u9069\u3002",
1394
- previewUrl: "https://platform.r2.fish.audio/task/993b3ccb52124341aff79580f1ce5a5a.mp3"
1395
- },
1396
- {
1397
- id: "297a6fd278df47c3b9da9bfdf55ac89a",
1398
- name: "Satoru",
1399
- gender: "male",
1400
- languages: ["ja"],
1401
- description: "\u82E5\u3005\u3057\u304F\u3082\u843D\u3061\u7740\u304D\u306E\u3042\u308B\u7537\u6027\u306E\u58F0\u3002\u65E5\u5E38\u306E\u8A9E\u308A\u3084\u30EA\u30E9\u30C3\u30AF\u30B9\u3057\u305F\u30CA\u30EC\u30FC\u30B7\u30E7\u30F3\u306B\u6700\u9069\u3002",
1402
- previewUrl: "https://platform.r2.fish.audio/task/1b4712fb831f4c149eef6b0133157418.mp3"
1403
- },
1404
- {
1405
- id: "0b14f34a13a94ed88fe6113193749bb0",
1406
- name: "Fatima",
1407
- gender: "female",
1408
- languages: ["ar"],
1409
- description: "\u0635\u0648\u062A \u0648\u0627\u0636\u062D \u0648\u0648\u0627\u062B\u0642 \u064A\u0646\u0627\u0633\u0628 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629 \u0648\u062E\u062F\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0648\u0627\u0644\u0639\u0631\u0648\u0636 \u0627\u0644\u062A\u0642\u062F\u064A\u0645\u064A\u0629.",
1410
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/93406e1b905a4c4994306e3421243390.mp3"
1411
- },
1412
- {
1413
- id: "74c6aba5cbf94a15bbdc547ffce5cb38",
1414
- name: "Yutong",
1415
- gender: "female",
1416
- languages: ["zh"],
1417
- description: "\u58F0\u97F3\u6E05\u6670\u81EA\u7136\uFF0C\u8868\u8FBE\u5229\u843D\uFF0C\u9002\u5408\u8BED\u97F3\u52A9\u624B\u3001\u5BA2\u670D\u548C\u65E5\u5E38\u64AD\u62A5\u3002",
1418
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a48320f37fe44c4699549a1afc3778e8.mp3"
1419
- }
1420
- ];
1421
-
1422
- // src/catalog/speech-fish.ts
1423
- var FISH_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/fishaudio.png";
1424
- var PER_CALL = { unit: "images" };
1425
- var PER_REQUEST = { unit: "requests" };
1426
- var TTS_MAX_CHARS = 1e4;
1427
- function fishTts(id, label, providerModelId, description) {
1428
- return {
1429
- id,
1430
- aliases: [],
1431
- label,
1432
- type: "speech",
1433
- adapter: "fish",
1434
- providerModelId,
1435
- lifecycle: "active",
1436
- exposure: [],
1437
- constraints: {
1438
- voices: FISH_VOICES,
1439
- outputFormats: ["mp3", "wav"],
1440
- supports: [],
1441
- prompt: { referenceSyntax: "numbered", maxChars: TTS_MAX_CHARS }
1442
- },
1443
- defaults: { voice: "9a9cf47702da476aa4629e2506d4a857", outputFormat: "mp3" },
1444
- usage: PER_CALL,
1445
- pricingKind: "flat",
1446
- display: { provider: "fishaudio", logo: FISH_LOGO, description },
1447
- capabilities: { customVoices: true }
1448
- };
1449
- }
1450
- var FISH_MODELS = [
1451
- fishTts(
1452
- "fish-s2.1-pro",
1453
- "Fish Audio S2.1 Pro",
1454
- "s2.1-pro",
1455
- "Fish Audio S2.1 Pro text to speech in 83 languages, with [bracket] directions and your own cloned voices."
1456
- ),
1457
- fishTts(
1458
- "fish-s2.1-pro-free",
1459
- "Fish Audio S2.1 Pro Free",
1460
- "s2.1-pro-free",
1461
- "Fish Audio S2.1 Pro on the free developer tier: the same voices at no cost, without latency or data-processing guarantees."
1462
- ),
1463
- fishTts(
1464
- "fish-drama-3",
1465
- "Fish Audio Drama 3",
1466
- "drama-3",
1467
- "Fish Audio Drama 3 text to speech you direct like an actor: [directions], sounds, pauses and per-word tags."
1468
- ),
1469
- {
1470
- id: "fish-voice-clone",
1471
- aliases: [],
1472
- label: "Fish Audio Voice Clone",
1473
- type: "voice-clone",
1474
- adapter: "fish",
1475
- providerModelId: "voice-clone",
1476
- lifecycle: "active",
1477
- exposure: [],
1478
- constraints: {
1479
- // POST /model takes 1-20 voice files; Fish advises 10 s or more of clean speech each.
1480
- references: { audios: 20, audioFormats: ["wav", "mp3", "m4a", "opus"] },
1481
- supports: []
1482
- },
1483
- defaults: {},
1484
- usage: PER_REQUEST,
1485
- pricingKind: "flat",
1486
- display: {
1487
- provider: "fishaudio",
1488
- logo: FISH_LOGO,
1489
- description: "Clone a private, reusable voice from one or more clean recordings, then speak with it on the Fish Audio speech models."
1490
- },
1491
- capabilities: {}
1492
- },
1493
- {
1494
- id: "fish-voice-design-1",
1495
- aliases: [],
1496
- label: "Fish Audio Voice Design",
1497
- type: "voice-design",
1498
- adapter: "fish",
1499
- providerModelId: "voice-design-1",
1500
- lifecycle: "active",
1501
- exposure: [],
1502
- constraints: {
1503
- voiceDesign: { maxCandidates: 4, previewMaxChars: 150 },
1504
- supports: [],
1505
- prompt: { referenceSyntax: "numbered", maxChars: 2e3 }
1506
- },
1507
- defaults: {},
1508
- usage: PER_REQUEST,
1509
- pricingKind: "flat",
1510
- display: {
1511
- provider: "fishaudio",
1512
- logo: FISH_LOGO,
1513
- description: "Describe a voice and get up to four short candidates; keep one as a cloned voice."
1514
- },
1515
- capabilities: {}
1516
- }
1517
- ];
1518
-
1519
1222
  // src/catalog/languages-audio.ts
1520
1223
  var ELEVENLABS_V4_LANGUAGES = [
1521
1224
  { code: "af", name: "Afrikaans" },
@@ -1925,96 +1628,460 @@ var ELEVENLABS_VOICES = [
1925
1628
  description: "A young adult with energy and warmth - suitable for reels and shorts.",
1926
1629
  previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/TX3LPaxmHKxFdv7VOQHJ/63148076-6363-42db-aea8-31424308b92c.mp3"
1927
1630
  },
1928
- { id: "Charlotte", name: "Charlotte" },
1631
+ { id: "Charlotte", name: "Charlotte" },
1632
+ {
1633
+ id: "Alice",
1634
+ name: "Alice",
1635
+ gender: "female",
1636
+ accent: "british",
1637
+ languages: ["en", "it", "fr", "ar", "ja", "pl", "hi"],
1638
+ description: "Clear and engaging, friendly woman with a British accent suitable for e-learning.",
1639
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/Xb7hH8MSUJpSbSDYk0k2/d10f7534-11f6-41fe-a012-2de1e482d336.mp3"
1640
+ },
1641
+ {
1642
+ id: "Matilda",
1643
+ name: "Matilda",
1644
+ gender: "female",
1645
+ accent: "american",
1646
+ languages: ["en", "it", "fr", "de", "ar", "es"],
1647
+ description: "A professional woman with a pleasing alto pitch. Suitable for many use cases.",
1648
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/XrExE9yKIg1WjnnlVkGX/b930e18d-6b4d-466e-bab2-0ae97c6d8535.mp3"
1649
+ },
1650
+ {
1651
+ id: "Will",
1652
+ name: "Will",
1653
+ gender: "male",
1654
+ accent: "american",
1655
+ languages: ["en", "fr", "de", "pt", "zh", "cs", "fil", "sk", "es", "sv"],
1656
+ description: "Conversational and laid back.",
1657
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/bIHbv24MWmeRgasZH58o/8caf8f3d-ad29-4980-af41-53f20c72d7a4.mp3"
1658
+ },
1659
+ {
1660
+ id: "Jessica",
1661
+ name: "Jessica",
1662
+ gender: "female",
1663
+ accent: "american",
1664
+ languages: ["en", "fr", "ar", "ja", "zh", "de", "cs", "hi"],
1665
+ description: "Young and popular, this playful American female voice is perfect for trendy content.",
1666
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cgSgspJ2msm6clMCkdW9/56a97bf8-b69b-448f-846c-c3a11683d45a.mp3"
1667
+ },
1668
+ {
1669
+ id: "Eric",
1670
+ name: "Eric",
1671
+ gender: "male",
1672
+ accent: "american",
1673
+ languages: ["en", "fr", "pt", "de", "sk", "es"],
1674
+ description: "A smooth tenor pitch from a man in his 40s - perfect for agentic use cases.",
1675
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cjVigY5qzO86Huf0OWal/d098fda0-6456-4030-b3d8-63aa048c9070.mp3"
1676
+ },
1677
+ {
1678
+ id: "Chris",
1679
+ name: "Chris",
1680
+ gender: "male",
1681
+ accent: "american",
1682
+ languages: ["en", "fr", "ar", "pt", "sv", "hi"],
1683
+ description: "Natural and real, this down-to-earth voice is great across many use-cases.",
1684
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/iP95p4xoKVk53GoZ742B/3f4bde72-cc48-40dd-829f-57fbf906f4d7.mp3"
1685
+ },
1686
+ {
1687
+ id: "Brian",
1688
+ name: "Brian",
1689
+ gender: "male",
1690
+ accent: "american",
1691
+ languages: ["en", "ar", "zh", "pt", "de", "nl", "sk", "ro", "hi"],
1692
+ description: "Middle-aged man with a resonant and comforting tone. Great for narrations and advertisements.",
1693
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/nPczCjzI2devNBz1zQrb/2dd3e72c-4fd3-42f1-93ea-abc5d4e5aa1d.mp3"
1694
+ },
1695
+ {
1696
+ id: "Daniel",
1697
+ name: "Daniel",
1698
+ gender: "male",
1699
+ accent: "british",
1700
+ languages: ["en", "de", "tr"],
1701
+ description: "A strong voice perfect for delivering a professional broadcast or news story.",
1702
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/onwK4e9ZLuTAKqWW03F9/7eee0236-1a72-4b86-b303-5dcadc007ba9.mp3"
1703
+ },
1704
+ {
1705
+ id: "Lily",
1706
+ name: "Lily",
1707
+ gender: "female",
1708
+ accent: "british",
1709
+ languages: ["en", "it", "de", "zh", "cs", "nl", "pl"],
1710
+ description: "Velvety British female voice delivers news and narrations with warmth and clarity.",
1711
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pFZP5JQG7iQjIQuC4Bku/89b68b35-b3dd-4348-a84a-a3c13a3c2b30.mp3"
1712
+ },
1713
+ {
1714
+ id: "Bill",
1715
+ name: "Bill",
1716
+ gender: "male",
1717
+ accent: "american",
1718
+ languages: ["en", "fr", "ar", "zh", "de", "cs"],
1719
+ description: "Friendly and comforting voice ready to narrate your stories.",
1720
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pqHfZKP75CvOlQylNhV4/d782b3ff-84ba-4029-848c-acf01285524d.mp3"
1721
+ }
1722
+ ];
1723
+ var PREMADE_ID = /\/premade\/voices\/([A-Za-z0-9]+)\//;
1724
+ var ELEVENLABS_DIRECT_VOICES = ELEVENLABS_VOICES.flatMap((v) => {
1725
+ const id = v.previewUrl ? PREMADE_ID.exec(v.previewUrl)?.[1] : void 0;
1726
+ return id ? [{ ...v, id }] : [];
1727
+ });
1728
+ var ELEVENLABS_DIRECT_DEFAULT_VOICE = "EXAVITQu4vr4xnSDxMaL";
1729
+
1730
+ // src/catalog/speech-elevenlabs-direct.ts
1731
+ var ELEVENLABS_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
1732
+ var PER_CALL = { unit: "images" };
1733
+ var PER_REQUEST = { unit: "requests" };
1734
+ var ELEVENLABS_DIRECT_MODELS = [
1735
+ {
1736
+ id: "elevenlabs-v4-direct",
1737
+ aliases: [],
1738
+ label: "ElevenLabs v4 (direct)",
1739
+ type: "speech",
1740
+ adapter: "elevenlabs",
1741
+ providerModelId: "eleven_v4",
1742
+ lifecycle: "active",
1743
+ exposure: [],
1744
+ constraints: {
1745
+ // Premade voices under their ElevenLabs ids (the direct API takes ids, not names).
1746
+ voices: ELEVENLABS_DIRECT_VOICES,
1747
+ languages: ELEVENLABS_V4_LANGUAGES,
1748
+ outputFormats: ELEVENLABS_MP3_FORMATS,
1749
+ supports: [],
1750
+ // ElevenLabs docs: 10,000 characters per request.
1751
+ prompt: { referenceSyntax: "numbered", maxChars: 1e4 }
1752
+ },
1753
+ defaults: { voice: ELEVENLABS_DIRECT_DEFAULT_VOICE, outputFormat: "mp3_44100_128" },
1754
+ usage: PER_CALL,
1755
+ pricingKind: "flat",
1756
+ display: {
1757
+ provider: "elevenlabs",
1758
+ logo: ELEVENLABS_LOGO,
1759
+ description: "ElevenLabs v4 text to speech with audio tags, in a premade voice or your own cloned voice; up to 10,000 characters."
1760
+ },
1761
+ capabilities: { customVoices: true }
1762
+ },
1763
+ {
1764
+ id: "elevenlabs-ivc",
1765
+ aliases: [],
1766
+ label: "ElevenLabs Instant Voice Clone",
1767
+ type: "voice-clone",
1768
+ adapter: "elevenlabs",
1769
+ providerModelId: "ivc",
1770
+ lifecycle: "active",
1771
+ exposure: [],
1772
+ constraints: {
1773
+ // POST /v1/voices/add; ElevenLabs takes up to 25 samples and advises 1-2 minutes of
1774
+ // clean speech in total. Each clone uses a voice slot on our plan until deleted.
1775
+ references: { audios: 25, audioFormats: ["mp3", "wav", "m4a", "webm", "ogg"] },
1776
+ supports: []
1777
+ },
1778
+ defaults: {},
1779
+ usage: PER_REQUEST,
1780
+ pricingKind: "flat",
1781
+ display: {
1782
+ provider: "elevenlabs",
1783
+ logo: ELEVENLABS_LOGO,
1784
+ description: "Clone a private, reusable voice from one or more clean recordings, then speak with it on ElevenLabs v4 (direct)."
1785
+ },
1786
+ capabilities: {}
1787
+ }
1788
+ ];
1789
+
1790
+ // src/catalog/voices-fish.ts
1791
+ var FISH_VOICES = [
1792
+ {
1793
+ id: "933563129e564b19a115bedd57b7406a",
1794
+ name: "Sarah",
1795
+ gender: "female",
1796
+ languages: ["en"],
1797
+ description: "An engaged speaker.",
1798
+ previewUrl: "https://platform.r2.fish.audio/task/4e204945670c460c86fdab57512cb308.mp3"
1799
+ },
1800
+ {
1801
+ id: "bf322df2096a46f18c579d0baa36f41d",
1802
+ name: "Adrian",
1803
+ gender: "male",
1804
+ languages: ["en"],
1805
+ description: "A steady and reliable narrator.",
1806
+ previewUrl: "https://platform.r2.fish.audio/task/d730b09f4a484316a77ecc86137e85fb.mp3"
1807
+ },
1808
+ {
1809
+ id: "536d3a5e000945adb7038665781a4aca",
1810
+ name: "Ethan",
1811
+ gender: "male",
1812
+ languages: ["en"],
1813
+ description: "A curious explainer.",
1814
+ previewUrl: "https://platform.r2.fish.audio/task/bdd677ed767744fc91f166468786264b.mp3"
1815
+ },
1816
+ {
1817
+ id: "b347db033a6549378b48d00acb0d06cd",
1818
+ name: "Selene",
1819
+ gender: "female",
1820
+ languages: ["en"],
1821
+ description: "A meditative female voice.",
1822
+ previewUrl: "https://platform.r2.fish.audio/task/fcf629b4a0b343558f461338ba1b9da4.mp3"
1823
+ },
1824
+ {
1825
+ id: "9a9cf47702da476aa4629e2506d4a857",
1826
+ name: "Hannah",
1827
+ gender: "female",
1828
+ languages: ["en"],
1829
+ description: "A conversation specialist.",
1830
+ previewUrl: "https://platform.r2.fish.audio/task/08d658835feb427db808e37060b78eb0.mp3"
1831
+ },
1832
+ {
1833
+ id: "79d0bd3e4e5444b18f7b6d89b5927bf1",
1834
+ name: "Jordan",
1835
+ gender: "male",
1836
+ languages: ["en"],
1837
+ description: "A motivational speaker.",
1838
+ previewUrl: "https://platform.r2.fish.audio/task/edecbc0bdd4c46c39eda8520a0f729ef.mp3"
1839
+ },
1840
+ {
1841
+ id: "e3cd384158934cc9a01029cd7d278634",
1842
+ name: "Laura",
1843
+ gender: "female",
1844
+ languages: ["en"],
1845
+ description: "A confident female narrator.",
1846
+ previewUrl: "https://platform.r2.fish.audio/task/e821bef995344d519caa1c93d808db23.mp3"
1847
+ },
1848
+ {
1849
+ id: "f3a2b90078d54a65af4b95f63bc7798e",
1850
+ name: "Sheila",
1851
+ gender: "female",
1852
+ accent: "american",
1853
+ languages: ["en"],
1854
+ description: "A young American English woman's voice.",
1855
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/9bb9e1a1cf3f47f38700da1c5c0a678a.mp3"
1856
+ },
1857
+ {
1858
+ id: "0db6e93af420470b9d9b9a886dbaa954",
1859
+ name: "Kai",
1860
+ gender: "male",
1861
+ languages: ["en"],
1862
+ description: "A friendly English man's voice for companion apps and everyday conversation.",
1863
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/13306f1172544c3ba3106d1e363feaa6.mp3"
1864
+ },
1865
+ {
1866
+ id: "8abfa9ebd4c24a3399b68c3cdac8c7b5",
1867
+ name: "Freya",
1868
+ gender: "female",
1869
+ accent: "british",
1870
+ languages: ["en"],
1871
+ description: "A natural, professional British English voice with a brisk, conversational pace. Clear and easy to follow, suited to voice assistants, customer support and everyday narration.",
1872
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/07918705a56b42daaab149f65392cea7.mp3"
1873
+ },
1874
+ {
1875
+ id: "2f64e528a4f2406691925ab1e0ed5b7f",
1876
+ name: "Ananya",
1877
+ gender: "female",
1878
+ languages: ["hi"],
1879
+ description: "\u0938\u093E\u092B\u093C \u0914\u0930 \u0906\u0924\u094D\u092E\u0935\u093F\u0936\u094D\u0935\u093E\u0938 \u092D\u0930\u0940 \u0906\u0935\u093E\u091C\u093C, \u091C\u094B \u0935\u0949\u0907\u0938 \u0905\u0938\u093F\u0938\u094D\u091F\u0947\u0902\u091F, \u0917\u094D\u0930\u093E\u0939\u0915 \u0938\u0947\u0935\u093E \u0914\u0930 \u092A\u094D\u0930\u0938\u094D\u0924\u0941\u0924\u093F\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u0941\u0915\u094D\u0924 \u0939\u0948\u0964",
1880
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a17a700668d8405f8316db120733145c.mp3"
1881
+ },
1882
+ {
1883
+ id: "cefd91a07b99468f9148e2580990082d",
1884
+ name: "Arjun",
1885
+ gender: "male",
1886
+ languages: ["hi"],
1887
+ description: "\u0938\u093E\u092B\u093C \u0914\u0930 \u0906\u0924\u094D\u092E\u0935\u093F\u0936\u094D\u0935\u093E\u0938 \u092D\u0930\u0940 \u0906\u0935\u093E\u091C\u093C, \u091C\u094B \u0935\u0949\u0907\u0938 \u0905\u0938\u093F\u0938\u094D\u091F\u0947\u0902\u091F, \u0917\u094D\u0930\u093E\u0939\u0915 \u0938\u0947\u0935\u093E \u0914\u0930 \u092A\u094D\u0930\u0938\u094D\u0924\u0941\u0924\u093F\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u0941\u0915\u094D\u0924 \u0939\u0948\u0964",
1888
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/a0c4a8eadb7841cdae8e5e68031a2dfb.mp3"
1889
+ },
1890
+ {
1891
+ id: "3f065d660212478a9c697fa965b4d098",
1892
+ name: "Carmen",
1893
+ gender: "female",
1894
+ languages: ["es"],
1895
+ description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1896
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/3421be48b6cb4c28bf829c25188e7e74.mp3"
1897
+ },
1898
+ {
1899
+ id: "ec0718028a2445fb9be8e8bfb56a0150",
1900
+ name: "Rodrigo",
1901
+ gender: "male",
1902
+ languages: ["es"],
1903
+ description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1904
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/5a77c32365604800ad5b4eb13c5585df.mp3"
1905
+ },
1906
+ {
1907
+ id: "10a3a20742114a4ea6dd441e7591850f",
1908
+ name: "Manon",
1909
+ gender: "female",
1910
+ languages: ["fr"],
1911
+ description: "Une voix claire et vive, adapt\xE9e aux assistants vocaux et au support client.",
1912
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/f7b75ee1fa524e48a8cefb003cf72952.mp3"
1913
+ },
1929
1914
  {
1930
- id: "Alice",
1931
- name: "Alice",
1932
- gender: "female",
1933
- accent: "british",
1934
- languages: ["en", "it", "fr", "ar", "ja", "pl", "hi"],
1935
- description: "Clear and engaging, friendly woman with a British accent suitable for e-learning.",
1936
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/Xb7hH8MSUJpSbSDYk0k2/d10f7534-11f6-41fe-a012-2de1e482d336.mp3"
1915
+ id: "f69bca092b674168a8d02d61ca20943c",
1916
+ name: "Lucas",
1917
+ gender: "male",
1918
+ languages: ["fr"],
1919
+ description: "Une voix claire et assur\xE9e, adapt\xE9e aux assistants vocaux et au service client.",
1920
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/86fca3e56a014a3d8a11450854bb8311.mp3"
1937
1921
  },
1938
1922
  {
1939
- id: "Matilda",
1940
- name: "Matilda",
1923
+ id: "3937b44b604249f18b94913daef94043",
1924
+ name: "Lena",
1941
1925
  gender: "female",
1942
- accent: "american",
1943
- languages: ["en", "it", "fr", "de", "ar", "es"],
1944
- description: "A professional woman with a pleasing alto pitch. Suitable for many use cases.",
1945
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/XrExE9yKIg1WjnnlVkGX/b930e18d-6b4d-466e-bab2-0ae97c6d8535.mp3"
1926
+ languages: ["de"],
1927
+ description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
1928
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/8659fec80b74442dab68a7755716a401.mp3"
1946
1929
  },
1947
1930
  {
1948
- id: "Will",
1949
- name: "Will",
1931
+ id: "c1e7cc926aa5469aa966c353094d4b0b",
1932
+ name: "Lukas",
1950
1933
  gender: "male",
1951
- accent: "american",
1952
- languages: ["en", "fr", "de", "pt", "zh", "cs", "fil", "sk", "es", "sv"],
1953
- description: "Conversational and laid back.",
1954
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/bIHbv24MWmeRgasZH58o/8caf8f3d-ad29-4980-af41-53f20c72d7a4.mp3"
1934
+ languages: ["de"],
1935
+ description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
1936
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/fb1d538126bb4fe38f8366250f6a2136.mp3"
1955
1937
  },
1956
1938
  {
1957
- id: "Jessica",
1958
- name: "Jessica",
1939
+ id: "b3c060cc41544a7da94a2c487647c902",
1940
+ name: "Let\xEDcia",
1959
1941
  gender: "female",
1960
- accent: "american",
1961
- languages: ["en", "fr", "ar", "ja", "zh", "de", "cs", "hi"],
1962
- description: "Young and popular, this playful American female voice is perfect for trendy content.",
1963
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cgSgspJ2msm6clMCkdW9/56a97bf8-b69b-448f-846c-c3a11683d45a.mp3"
1942
+ accent: "brazilian",
1943
+ languages: ["pt"],
1944
+ description: "A Brazilian-accented Portuguese woman's voice, in her late twenties. Soft, warm, intimate. A freelance designer from Belo Horizonte who enjoys long walks in the park. Best suited to companion apps and casual everyday conversation.",
1945
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/13c6c0d96b5c4069951f89868ee15360.mp3"
1964
1946
  },
1965
1947
  {
1966
- id: "Eric",
1967
- name: "Eric",
1948
+ id: "add7bcb8d3c8423bbfa152ca232aad6e",
1949
+ name: "Ricardo",
1968
1950
  gender: "male",
1969
- accent: "american",
1970
- languages: ["en", "fr", "pt", "de", "sk", "es"],
1971
- description: "A smooth tenor pitch from a man in his 40s - perfect for agentic use cases.",
1972
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cjVigY5qzO86Huf0OWal/d098fda0-6456-4030-b3d8-63aa048c9070.mp3"
1951
+ accent: "brazilian",
1952
+ languages: ["pt"],
1953
+ description: "A Brazilian-accented Portuguese man's voice, in his late forties. Clear, professional, monotone. A high school history teacher from Curitiba who loves classical music. Best suited to lessons, tutoring and explainer content.",
1954
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/67475fc717ae45cbb38e647a2dd37fe1.mp3"
1973
1955
  },
1974
1956
  {
1975
- id: "Chris",
1976
- name: "Chris",
1977
- gender: "male",
1978
- accent: "american",
1979
- languages: ["en", "fr", "ar", "pt", "sv", "hi"],
1980
- description: "Natural and real, this down-to-earth voice is great across many use-cases.",
1981
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/iP95p4xoKVk53GoZ742B/3f4bde72-cc48-40dd-829f-57fbf906f4d7.mp3"
1957
+ id: "b2d9d8db057042688a5e318b8f405bc2",
1958
+ name: "Kyoko",
1959
+ gender: "female",
1960
+ languages: ["ja"],
1961
+ description: "\u4E01\u5BE7\u3067\u843D\u3061\u7740\u3044\u305F\u8A71\u3057\u65B9\u304C\u7279\u5FB4\u306E\u5973\u6027\u306E\u58F0\u3002\u304A\u5BA2\u69D8\u5BFE\u5FDC\u3084\u60C5\u5831\u63D0\u4F9B\u306B\u6700\u9069\u3002",
1962
+ previewUrl: "https://platform.r2.fish.audio/task/993b3ccb52124341aff79580f1ce5a5a.mp3"
1982
1963
  },
1983
1964
  {
1984
- id: "Brian",
1985
- name: "Brian",
1965
+ id: "297a6fd278df47c3b9da9bfdf55ac89a",
1966
+ name: "Satoru",
1986
1967
  gender: "male",
1987
- accent: "american",
1988
- languages: ["en", "ar", "zh", "pt", "de", "nl", "sk", "ro", "hi"],
1989
- description: "Middle-aged man with a resonant and comforting tone. Great for narrations and advertisements.",
1990
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/nPczCjzI2devNBz1zQrb/2dd3e72c-4fd3-42f1-93ea-abc5d4e5aa1d.mp3"
1968
+ languages: ["ja"],
1969
+ description: "\u82E5\u3005\u3057\u304F\u3082\u843D\u3061\u7740\u304D\u306E\u3042\u308B\u7537\u6027\u306E\u58F0\u3002\u65E5\u5E38\u306E\u8A9E\u308A\u3084\u30EA\u30E9\u30C3\u30AF\u30B9\u3057\u305F\u30CA\u30EC\u30FC\u30B7\u30E7\u30F3\u306B\u6700\u9069\u3002",
1970
+ previewUrl: "https://platform.r2.fish.audio/task/1b4712fb831f4c149eef6b0133157418.mp3"
1991
1971
  },
1992
1972
  {
1993
- id: "Daniel",
1994
- name: "Daniel",
1995
- gender: "male",
1996
- accent: "british",
1997
- languages: ["en", "de", "tr"],
1998
- description: "A strong voice perfect for delivering a professional broadcast or news story.",
1999
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/onwK4e9ZLuTAKqWW03F9/7eee0236-1a72-4b86-b303-5dcadc007ba9.mp3"
1973
+ id: "0b14f34a13a94ed88fe6113193749bb0",
1974
+ name: "Fatima",
1975
+ gender: "female",
1976
+ languages: ["ar"],
1977
+ description: "\u0635\u0648\u062A \u0648\u0627\u0636\u062D \u0648\u0648\u0627\u062B\u0642 \u064A\u0646\u0627\u0633\u0628 \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629 \u0648\u062E\u062F\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u0621 \u0648\u0627\u0644\u0639\u0631\u0648\u0636 \u0627\u0644\u062A\u0642\u062F\u064A\u0645\u064A\u0629.",
1978
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/93406e1b905a4c4994306e3421243390.mp3"
2000
1979
  },
2001
1980
  {
2002
- id: "Lily",
2003
- name: "Lily",
1981
+ id: "74c6aba5cbf94a15bbdc547ffce5cb38",
1982
+ name: "Yutong",
2004
1983
  gender: "female",
2005
- accent: "british",
2006
- languages: ["en", "it", "de", "zh", "cs", "nl", "pl"],
2007
- description: "Velvety British female voice delivers news and narrations with warmth and clarity.",
2008
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pFZP5JQG7iQjIQuC4Bku/89b68b35-b3dd-4348-a84a-a3c13a3c2b30.mp3"
1984
+ languages: ["zh"],
1985
+ description: "\u58F0\u97F3\u6E05\u6670\u81EA\u7136\uFF0C\u8868\u8FBE\u5229\u843D\uFF0C\u9002\u5408\u8BED\u97F3\u52A9\u624B\u3001\u5BA2\u670D\u548C\u65E5\u5E38\u64AD\u62A5\u3002",
1986
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a48320f37fe44c4699549a1afc3778e8.mp3"
1987
+ }
1988
+ ];
1989
+
1990
+ // src/catalog/speech-fish.ts
1991
+ var FISH_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/fishaudio.png";
1992
+ var PER_CALL2 = { unit: "images" };
1993
+ var PER_REQUEST2 = { unit: "requests" };
1994
+ var EXPOSURE4 = ["cowork", "space_builder"];
1995
+ var TTS_MAX_CHARS = 1e4;
1996
+ function fishTts(id, label, providerModelId, description) {
1997
+ return {
1998
+ id,
1999
+ aliases: [],
2000
+ label,
2001
+ type: "speech",
2002
+ adapter: "fish",
2003
+ providerModelId,
2004
+ lifecycle: "active",
2005
+ exposure: EXPOSURE4,
2006
+ constraints: {
2007
+ voices: FISH_VOICES,
2008
+ outputFormats: ["mp3", "wav"],
2009
+ supports: [],
2010
+ prompt: { referenceSyntax: "numbered", maxChars: TTS_MAX_CHARS }
2011
+ },
2012
+ defaults: { voice: "9a9cf47702da476aa4629e2506d4a857", outputFormat: "mp3" },
2013
+ usage: PER_CALL2,
2014
+ pricingKind: "flat",
2015
+ display: { provider: "fishaudio", logo: FISH_LOGO, description },
2016
+ capabilities: { customVoices: true }
2017
+ };
2018
+ }
2019
+ var FISH_MODELS = [
2020
+ fishTts(
2021
+ "fish-s2.1-pro",
2022
+ "Fish Audio S2.1 Pro",
2023
+ "s2.1-pro",
2024
+ "Fish Audio S2.1 Pro text to speech in 83 languages, with [bracket] directions and your own cloned voices."
2025
+ ),
2026
+ fishTts(
2027
+ "fish-s2.1-pro-free",
2028
+ "Fish Audio S2.1 Pro Free",
2029
+ "s2.1-pro-free",
2030
+ "Fish Audio S2.1 Pro on the free developer tier: the same voices at no cost, without latency or data-processing guarantees."
2031
+ ),
2032
+ fishTts(
2033
+ "fish-drama-3",
2034
+ "Fish Audio Drama 3",
2035
+ "drama-3",
2036
+ "Fish Audio Drama 3 text to speech you direct like an actor: [directions], sounds, pauses and per-word tags."
2037
+ ),
2038
+ {
2039
+ id: "fish-voice-clone",
2040
+ aliases: [],
2041
+ label: "Fish Audio Voice Clone",
2042
+ type: "voice-clone",
2043
+ adapter: "fish",
2044
+ providerModelId: "voice-clone",
2045
+ lifecycle: "active",
2046
+ exposure: EXPOSURE4,
2047
+ constraints: {
2048
+ // POST /model takes 1-20 voice files; Fish advises 10 s or more of clean speech each.
2049
+ references: { audios: 20, audioFormats: ["wav", "mp3", "m4a", "opus"] },
2050
+ supports: []
2051
+ },
2052
+ defaults: {},
2053
+ usage: PER_REQUEST2,
2054
+ pricingKind: "flat",
2055
+ display: {
2056
+ provider: "fishaudio",
2057
+ logo: FISH_LOGO,
2058
+ description: "Clone a private, reusable voice from one or more clean recordings, then speak with it on the Fish Audio speech models."
2059
+ },
2060
+ capabilities: {}
2009
2061
  },
2010
2062
  {
2011
- id: "Bill",
2012
- name: "Bill",
2013
- gender: "male",
2014
- accent: "american",
2015
- languages: ["en", "fr", "ar", "zh", "de", "cs"],
2016
- description: "Friendly and comforting voice ready to narrate your stories.",
2017
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pqHfZKP75CvOlQylNhV4/d782b3ff-84ba-4029-848c-acf01285524d.mp3"
2063
+ id: "fish-voice-design-1",
2064
+ aliases: [],
2065
+ label: "Fish Audio Voice Design",
2066
+ type: "voice-design",
2067
+ adapter: "fish",
2068
+ providerModelId: "voice-design-1",
2069
+ lifecycle: "active",
2070
+ exposure: EXPOSURE4,
2071
+ constraints: {
2072
+ voiceDesign: { maxCandidates: 4, previewMaxChars: 150 },
2073
+ supports: [],
2074
+ prompt: { referenceSyntax: "numbered", maxChars: 2e3 }
2075
+ },
2076
+ defaults: {},
2077
+ usage: PER_REQUEST2,
2078
+ pricingKind: "flat",
2079
+ display: {
2080
+ provider: "fishaudio",
2081
+ logo: FISH_LOGO,
2082
+ description: "Describe a voice and get up to four short candidates; keep one as a cloned voice."
2083
+ },
2084
+ capabilities: {}
2018
2085
  }
2019
2086
  ];
2020
2087
 
@@ -3593,12 +3660,12 @@ var MINIMAX_VOICES = [
3593
3660
  ];
3594
3661
 
3595
3662
  // src/catalog/media-nodes.ts
3596
- var ELEVENLABS_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
3663
+ var ELEVENLABS_LOGO2 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
3597
3664
  var GOOGLE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
3598
3665
  var MINIMAX_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png";
3599
3666
  var SYNC_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/sync.png";
3600
- var PER_CALL2 = { unit: "images" };
3601
- var EXPOSURE4 = ["cowork", "space_builder"];
3667
+ var PER_CALL3 = { unit: "images" };
3668
+ var EXPOSURE5 = ["cowork", "space_builder"];
3602
3669
  var LIPSYNC_AUDIO = { audioSeconds: { max: 30 } };
3603
3670
  function elevenLabsTts(tts) {
3604
3671
  return {
@@ -3609,7 +3676,7 @@ function elevenLabsTts(tts) {
3609
3676
  adapter: "fal",
3610
3677
  providerModelId: tts.providerModelId,
3611
3678
  lifecycle: "active",
3612
- exposure: EXPOSURE4,
3679
+ exposure: EXPOSURE5,
3613
3680
  constraints: {
3614
3681
  voices: ELEVENLABS_VOICES,
3615
3682
  languages: tts.languages,
@@ -3618,9 +3685,9 @@ function elevenLabsTts(tts) {
3618
3685
  prompt: { referenceSyntax: "numbered", maxChars: tts.maxChars }
3619
3686
  },
3620
3687
  defaults: { voice: "Rachel", ...tts.formats && { outputFormat: "mp3_44100_128" } },
3621
- usage: PER_CALL2,
3688
+ usage: PER_CALL3,
3622
3689
  pricingKind: "flat",
3623
- display: { provider: "elevenlabs", logo: ELEVENLABS_LOGO, description: tts.description },
3690
+ display: { provider: "elevenlabs", logo: ELEVENLABS_LOGO2, description: tts.description },
3624
3691
  capabilities: {}
3625
3692
  };
3626
3693
  }
@@ -3634,7 +3701,7 @@ function geminiTts(id, label, description) {
3634
3701
  adapter: "fal",
3635
3702
  providerModelId,
3636
3703
  lifecycle: "active",
3637
- exposure: EXPOSURE4,
3704
+ exposure: EXPOSURE5,
3638
3705
  constraints: {
3639
3706
  voices: GEMINI_TTS_VOICES,
3640
3707
  supports: ["style"],
@@ -3642,7 +3709,7 @@ function geminiTts(id, label, description) {
3642
3709
  prompt: { referenceSyntax: "numbered", maxChars: 8192 }
3643
3710
  },
3644
3711
  defaults: { voice: "Kore" },
3645
- usage: PER_CALL2,
3712
+ usage: PER_CALL3,
3646
3713
  pricingKind: "flat",
3647
3714
  display: { provider: "google", logo: GOOGLE_LOGO, description },
3648
3715
  capabilities: {}
@@ -3657,7 +3724,7 @@ function syncLipsync(id, label, providerModelId, syncModel, description) {
3657
3724
  adapter: "fal",
3658
3725
  providerModelId,
3659
3726
  lifecycle: "active",
3660
- exposure: EXPOSURE4,
3727
+ exposure: EXPOSURE5,
3661
3728
  constraints: {
3662
3729
  requires: ["sourceVideo", "sourceAudio"],
3663
3730
  references: LIPSYNC_AUDIO,
@@ -3665,7 +3732,7 @@ function syncLipsync(id, label, providerModelId, syncModel, description) {
3665
3732
  },
3666
3733
  defaults: {},
3667
3734
  ...syncModel !== void 0 && { providerOptions: { fal: { model: syncModel } } },
3668
- usage: PER_CALL2,
3735
+ usage: PER_CALL3,
3669
3736
  pricingKind: "flat",
3670
3737
  display: { provider: "sync", logo: SYNC_LOGO, description },
3671
3738
  capabilities: { acceptsSourceVideo: true }
@@ -3718,7 +3785,7 @@ var MEDIA_NODE_MODELS = [
3718
3785
  adapter: "fal",
3719
3786
  providerModelId: "fal-ai/minimax/speech-2.8-hd",
3720
3787
  lifecycle: "active",
3721
- exposure: EXPOSURE4,
3788
+ exposure: EXPOSURE5,
3722
3789
  constraints: {
3723
3790
  voices: MINIMAX_VOICES,
3724
3791
  languages: MINIMAX_SPEECH_LANGUAGES,
@@ -3726,7 +3793,7 @@ var MEDIA_NODE_MODELS = [
3726
3793
  prompt: { referenceSyntax: "numbered", maxChars: 1e4 }
3727
3794
  },
3728
3795
  defaults: { voice: "Wise_Woman" },
3729
- usage: PER_CALL2,
3796
+ usage: PER_CALL3,
3730
3797
  pricingKind: "flat",
3731
3798
  display: {
3732
3799
  provider: "minimax",
@@ -3743,7 +3810,7 @@ var MEDIA_NODE_MODELS = [
3743
3810
  adapter: "fal",
3744
3811
  providerModelId: "fal-ai/elevenlabs/voice-changer",
3745
3812
  lifecycle: "active",
3746
- exposure: EXPOSURE4,
3813
+ exposure: EXPOSURE5,
3747
3814
  constraints: {
3748
3815
  requires: ["sourceAudio"],
3749
3816
  // The flat price assumes at most a minute of speech.
@@ -3753,11 +3820,11 @@ var MEDIA_NODE_MODELS = [
3753
3820
  supports: []
3754
3821
  },
3755
3822
  defaults: { voice: "Rachel", outputFormat: "mp3_44100_128" },
3756
- usage: PER_CALL2,
3823
+ usage: PER_CALL3,
3757
3824
  pricingKind: "flat",
3758
3825
  display: {
3759
3826
  provider: "elevenlabs",
3760
- logo: ELEVENLABS_LOGO,
3827
+ logo: ELEVENLABS_LOGO2,
3761
3828
  description: "ElevenLabs speech to speech; re-voices a recording in another voice and keeps its timing and delivery."
3762
3829
  },
3763
3830
  capabilities: {}
@@ -3770,7 +3837,7 @@ var MEDIA_NODE_MODELS = [
3770
3837
  adapter: "fal",
3771
3838
  providerModelId: "fal-ai/elevenlabs/dubbing",
3772
3839
  lifecycle: "active",
3773
- exposure: EXPOSURE4,
3840
+ exposure: EXPOSURE5,
3774
3841
  constraints: {
3775
3842
  requiresOneOf: ["sourceVideo", "sourceAudio"],
3776
3843
  // The flat price covers 60 s of source.
@@ -3780,11 +3847,11 @@ var MEDIA_NODE_MODELS = [
3780
3847
  supports: []
3781
3848
  },
3782
3849
  defaults: {},
3783
- usage: PER_CALL2,
3850
+ usage: PER_CALL3,
3784
3851
  pricingKind: "flat",
3785
3852
  display: {
3786
3853
  provider: "elevenlabs",
3787
- logo: ELEVENLABS_LOGO,
3854
+ logo: ELEVENLABS_LOGO2,
3788
3855
  description: "ElevenLabs dubbing; translates the speech in a video or audio file into another language in the original voices."
3789
3856
  },
3790
3857
  capabilities: { acceptsSourceVideo: true }
@@ -3818,7 +3885,7 @@ var MEDIA_NODE_MODELS = [
3818
3885
  adapter: "fal",
3819
3886
  providerModelId: "veed/lipsync/v2",
3820
3887
  lifecycle: "active",
3821
- exposure: EXPOSURE4,
3888
+ exposure: EXPOSURE5,
3822
3889
  constraints: {
3823
3890
  requires: ["sourceVideo", "sourceAudio"],
3824
3891
  references: LIPSYNC_AUDIO,
@@ -3827,7 +3894,7 @@ var MEDIA_NODE_MODELS = [
3827
3894
  supports: []
3828
3895
  },
3829
3896
  defaults: {},
3830
- usage: PER_CALL2,
3897
+ usage: PER_CALL3,
3831
3898
  pricingKind: "flat",
3832
3899
  display: {
3833
3900
  provider: "veed",
@@ -3844,7 +3911,7 @@ var MEDIA_NODE_MODELS = [
3844
3911
  adapter: "fal",
3845
3912
  providerModelId: "minimax/h3-max/lip-sync/image-to-video",
3846
3913
  lifecycle: "active",
3847
- exposure: EXPOSURE4,
3914
+ exposure: EXPOSURE5,
3848
3915
  constraints: {
3849
3916
  requires: ["firstFrame", "sourceAudio"],
3850
3917
  resolutions: ["480p", "768p", "1080p", "2k"],
@@ -3870,7 +3937,7 @@ var MEDIA_NODE_MODELS = [
3870
3937
  adapter: "fal",
3871
3938
  providerModelId: "fal-ai/elevenlabs/speech-to-text/scribe-v2",
3872
3939
  lifecycle: "active",
3873
- exposure: EXPOSURE4,
3940
+ exposure: EXPOSURE5,
3874
3941
  constraints: {
3875
3942
  requires: ["sourceAudio"],
3876
3943
  // The flat price covers 10 minutes of audio.
@@ -3879,17 +3946,18 @@ var MEDIA_NODE_MODELS = [
3879
3946
  supports: []
3880
3947
  },
3881
3948
  defaults: {},
3882
- usage: PER_CALL2,
3949
+ usage: PER_CALL3,
3883
3950
  pricingKind: "flat",
3884
3951
  display: {
3885
3952
  provider: "elevenlabs",
3886
- logo: ELEVENLABS_LOGO,
3953
+ logo: ELEVENLABS_LOGO2,
3887
3954
  description: "ElevenLabs Scribe v2 speech to text with word timings, speaker labels and audio-event tags."
3888
3955
  },
3889
3956
  capabilities: {}
3890
3957
  },
3891
3958
  SAM_3_IMAGE,
3892
- ...FISH_MODELS
3959
+ ...FISH_MODELS,
3960
+ ...ELEVENLABS_DIRECT_MODELS
3893
3961
  ];
3894
3962
 
3895
3963
  // src/catalog/model3d.ts
@@ -4085,7 +4153,7 @@ var MODEL3D_MODELS = [
4085
4153
 
4086
4154
  // src/catalog/other.ts
4087
4155
  var GOOGLE_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
4088
- var ELEVENLABS_LOGO2 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
4156
+ var ELEVENLABS_LOGO3 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
4089
4157
  var MINIMAX_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png";
4090
4158
  var OTHER_MODELS = [
4091
4159
  {
@@ -4250,7 +4318,7 @@ var OTHER_MODELS = [
4250
4318
  pricingKind: "flat",
4251
4319
  display: {
4252
4320
  provider: "elevenlabs",
4253
- logo: ELEVENLABS_LOGO2,
4321
+ logo: ELEVENLABS_LOGO3,
4254
4322
  description: "ElevenLabs Music v2.5 text-to-music; full songs or instrumentals from 3 seconds to 1 minute."
4255
4323
  },
4256
4324
  capabilities: {}
@@ -4302,7 +4370,7 @@ var OTHER_MODELS = [
4302
4370
  pricingKind: "flat",
4303
4371
  display: {
4304
4372
  provider: "elevenlabs",
4305
- logo: ELEVENLABS_LOGO2,
4373
+ logo: ELEVENLABS_LOGO3,
4306
4374
  description: "ElevenLabs Sound Effects v2; a sound effect from a text description, up to 22 seconds."
4307
4375
  },
4308
4376
  capabilities: {}
@@ -5484,7 +5552,7 @@ var VIDEO_FAMILY_MODELS = [
5484
5552
 
5485
5553
  // src/catalog/video-luma.ts
5486
5554
  var VIDEO_USAGE2 = { unit: "seconds" };
5487
- var EXPOSURE5 = ["cowork", "space_builder"];
5555
+ var EXPOSURE6 = ["cowork", "space_builder"];
5488
5556
  var LUMA_LOGO2 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/luma-color.png";
5489
5557
  var RAY_RATIOS = ["9:16", "3:4", "1:1", "4:3", "16:9", "21:9"];
5490
5558
  var RAY_RESOLUTIONS = ["360p", "720p", "1080p"];
@@ -5502,7 +5570,7 @@ var LUMA_VIDEO_MODELS = [
5502
5570
  adapter: "luma",
5503
5571
  providerModelId: "ray-3.2",
5504
5572
  lifecycle: "active",
5505
- exposure: EXPOSURE5,
5573
+ exposure: EXPOSURE6,
5506
5574
  constraints: {
5507
5575
  aspectRatios: ["adaptive", ...RAY_RATIOS],
5508
5576
  resolutions: [...RAY_RESOLUTIONS],
@@ -5534,7 +5602,7 @@ var LUMA_VIDEO_MODELS = [
5534
5602
  adapter: "luma",
5535
5603
  providerModelId: "ray-3.2",
5536
5604
  lifecycle: "active",
5537
- exposure: EXPOSURE5,
5605
+ exposure: EXPOSURE6,
5538
5606
  constraints: {
5539
5607
  resolutions: [...RAY_RESOLUTIONS],
5540
5608
  requires: ["sourceVideo"],
@@ -5567,7 +5635,7 @@ var LUMA_VIDEO_MODELS = [
5567
5635
  adapter: "luma",
5568
5636
  providerModelId: "ray-3.2",
5569
5637
  lifecycle: "active",
5570
- exposure: EXPOSURE5,
5638
+ exposure: EXPOSURE6,
5571
5639
  constraints: {
5572
5640
  aspectRatios: [...RAY_RATIOS],
5573
5641
  resolutions: [...RAY_RESOLUTIONS],
@@ -7531,7 +7599,8 @@ var ADAPTER_IDS = [
7531
7599
  "higgsfield",
7532
7600
  "xai-video",
7533
7601
  "luma",
7534
- "fish"
7602
+ "fish",
7603
+ "elevenlabs"
7535
7604
  ];
7536
7605
  var ModelTypeSchema = z3.enum([
7537
7606
  "text",