@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.cjs CHANGED
@@ -1304,303 +1304,6 @@ var VEED_SUBTITLES = {
1304
1304
  }
1305
1305
  };
1306
1306
 
1307
- // src/catalog/voices-fish.ts
1308
- var FISH_VOICES = [
1309
- {
1310
- id: "933563129e564b19a115bedd57b7406a",
1311
- name: "Sarah",
1312
- gender: "female",
1313
- languages: ["en"],
1314
- description: "An engaged speaker.",
1315
- previewUrl: "https://platform.r2.fish.audio/task/4e204945670c460c86fdab57512cb308.mp3"
1316
- },
1317
- {
1318
- id: "bf322df2096a46f18c579d0baa36f41d",
1319
- name: "Adrian",
1320
- gender: "male",
1321
- languages: ["en"],
1322
- description: "A steady and reliable narrator.",
1323
- previewUrl: "https://platform.r2.fish.audio/task/d730b09f4a484316a77ecc86137e85fb.mp3"
1324
- },
1325
- {
1326
- id: "536d3a5e000945adb7038665781a4aca",
1327
- name: "Ethan",
1328
- gender: "male",
1329
- languages: ["en"],
1330
- description: "A curious explainer.",
1331
- previewUrl: "https://platform.r2.fish.audio/task/bdd677ed767744fc91f166468786264b.mp3"
1332
- },
1333
- {
1334
- id: "b347db033a6549378b48d00acb0d06cd",
1335
- name: "Selene",
1336
- gender: "female",
1337
- languages: ["en"],
1338
- description: "A meditative female voice.",
1339
- previewUrl: "https://platform.r2.fish.audio/task/fcf629b4a0b343558f461338ba1b9da4.mp3"
1340
- },
1341
- {
1342
- id: "9a9cf47702da476aa4629e2506d4a857",
1343
- name: "Hannah",
1344
- gender: "female",
1345
- languages: ["en"],
1346
- description: "A conversation specialist.",
1347
- previewUrl: "https://platform.r2.fish.audio/task/08d658835feb427db808e37060b78eb0.mp3"
1348
- },
1349
- {
1350
- id: "79d0bd3e4e5444b18f7b6d89b5927bf1",
1351
- name: "Jordan",
1352
- gender: "male",
1353
- languages: ["en"],
1354
- description: "A motivational speaker.",
1355
- previewUrl: "https://platform.r2.fish.audio/task/edecbc0bdd4c46c39eda8520a0f729ef.mp3"
1356
- },
1357
- {
1358
- id: "e3cd384158934cc9a01029cd7d278634",
1359
- name: "Laura",
1360
- gender: "female",
1361
- languages: ["en"],
1362
- description: "A confident female narrator.",
1363
- previewUrl: "https://platform.r2.fish.audio/task/e821bef995344d519caa1c93d808db23.mp3"
1364
- },
1365
- {
1366
- id: "f3a2b90078d54a65af4b95f63bc7798e",
1367
- name: "Sheila",
1368
- gender: "female",
1369
- accent: "american",
1370
- languages: ["en"],
1371
- description: "A young American English woman's voice.",
1372
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/9bb9e1a1cf3f47f38700da1c5c0a678a.mp3"
1373
- },
1374
- {
1375
- id: "0db6e93af420470b9d9b9a886dbaa954",
1376
- name: "Kai",
1377
- gender: "male",
1378
- languages: ["en"],
1379
- description: "A friendly English man's voice for companion apps and everyday conversation.",
1380
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/13306f1172544c3ba3106d1e363feaa6.mp3"
1381
- },
1382
- {
1383
- id: "8abfa9ebd4c24a3399b68c3cdac8c7b5",
1384
- name: "Freya",
1385
- gender: "female",
1386
- accent: "british",
1387
- languages: ["en"],
1388
- 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.",
1389
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/07918705a56b42daaab149f65392cea7.mp3"
1390
- },
1391
- {
1392
- id: "2f64e528a4f2406691925ab1e0ed5b7f",
1393
- name: "Ananya",
1394
- gender: "female",
1395
- languages: ["hi"],
1396
- 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",
1397
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a17a700668d8405f8316db120733145c.mp3"
1398
- },
1399
- {
1400
- id: "cefd91a07b99468f9148e2580990082d",
1401
- name: "Arjun",
1402
- gender: "male",
1403
- languages: ["hi"],
1404
- 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",
1405
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/a0c4a8eadb7841cdae8e5e68031a2dfb.mp3"
1406
- },
1407
- {
1408
- id: "3f065d660212478a9c697fa965b4d098",
1409
- name: "Carmen",
1410
- gender: "female",
1411
- languages: ["es"],
1412
- description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1413
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/3421be48b6cb4c28bf829c25188e7e74.mp3"
1414
- },
1415
- {
1416
- id: "ec0718028a2445fb9be8e8bfb56a0150",
1417
- name: "Rodrigo",
1418
- gender: "male",
1419
- languages: ["es"],
1420
- description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1421
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/5a77c32365604800ad5b4eb13c5585df.mp3"
1422
- },
1423
- {
1424
- id: "10a3a20742114a4ea6dd441e7591850f",
1425
- name: "Manon",
1426
- gender: "female",
1427
- languages: ["fr"],
1428
- description: "Une voix claire et vive, adapt\xE9e aux assistants vocaux et au support client.",
1429
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/f7b75ee1fa524e48a8cefb003cf72952.mp3"
1430
- },
1431
- {
1432
- id: "f69bca092b674168a8d02d61ca20943c",
1433
- name: "Lucas",
1434
- gender: "male",
1435
- languages: ["fr"],
1436
- description: "Une voix claire et assur\xE9e, adapt\xE9e aux assistants vocaux et au service client.",
1437
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/86fca3e56a014a3d8a11450854bb8311.mp3"
1438
- },
1439
- {
1440
- id: "3937b44b604249f18b94913daef94043",
1441
- name: "Lena",
1442
- gender: "female",
1443
- languages: ["de"],
1444
- description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
1445
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/8659fec80b74442dab68a7755716a401.mp3"
1446
- },
1447
- {
1448
- id: "c1e7cc926aa5469aa966c353094d4b0b",
1449
- name: "Lukas",
1450
- gender: "male",
1451
- languages: ["de"],
1452
- description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
1453
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/fb1d538126bb4fe38f8366250f6a2136.mp3"
1454
- },
1455
- {
1456
- id: "b3c060cc41544a7da94a2c487647c902",
1457
- name: "Let\xEDcia",
1458
- gender: "female",
1459
- accent: "brazilian",
1460
- languages: ["pt"],
1461
- 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.",
1462
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/13c6c0d96b5c4069951f89868ee15360.mp3"
1463
- },
1464
- {
1465
- id: "add7bcb8d3c8423bbfa152ca232aad6e",
1466
- name: "Ricardo",
1467
- gender: "male",
1468
- accent: "brazilian",
1469
- languages: ["pt"],
1470
- 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.",
1471
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/67475fc717ae45cbb38e647a2dd37fe1.mp3"
1472
- },
1473
- {
1474
- id: "b2d9d8db057042688a5e318b8f405bc2",
1475
- name: "Kyoko",
1476
- gender: "female",
1477
- languages: ["ja"],
1478
- 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",
1479
- previewUrl: "https://platform.r2.fish.audio/task/993b3ccb52124341aff79580f1ce5a5a.mp3"
1480
- },
1481
- {
1482
- id: "297a6fd278df47c3b9da9bfdf55ac89a",
1483
- name: "Satoru",
1484
- gender: "male",
1485
- languages: ["ja"],
1486
- 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",
1487
- previewUrl: "https://platform.r2.fish.audio/task/1b4712fb831f4c149eef6b0133157418.mp3"
1488
- },
1489
- {
1490
- id: "0b14f34a13a94ed88fe6113193749bb0",
1491
- name: "Fatima",
1492
- gender: "female",
1493
- languages: ["ar"],
1494
- 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.",
1495
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/93406e1b905a4c4994306e3421243390.mp3"
1496
- },
1497
- {
1498
- id: "74c6aba5cbf94a15bbdc547ffce5cb38",
1499
- name: "Yutong",
1500
- gender: "female",
1501
- languages: ["zh"],
1502
- 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",
1503
- previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a48320f37fe44c4699549a1afc3778e8.mp3"
1504
- }
1505
- ];
1506
-
1507
- // src/catalog/speech-fish.ts
1508
- var FISH_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/fishaudio.png";
1509
- var PER_CALL = { unit: "images" };
1510
- var PER_REQUEST = { unit: "requests" };
1511
- var TTS_MAX_CHARS = 1e4;
1512
- function fishTts(id, label, providerModelId, description) {
1513
- return {
1514
- id,
1515
- aliases: [],
1516
- label,
1517
- type: "speech",
1518
- adapter: "fish",
1519
- providerModelId,
1520
- lifecycle: "active",
1521
- exposure: [],
1522
- constraints: {
1523
- voices: FISH_VOICES,
1524
- outputFormats: ["mp3", "wav"],
1525
- supports: [],
1526
- prompt: { referenceSyntax: "numbered", maxChars: TTS_MAX_CHARS }
1527
- },
1528
- defaults: { voice: "9a9cf47702da476aa4629e2506d4a857", outputFormat: "mp3" },
1529
- usage: PER_CALL,
1530
- pricingKind: "flat",
1531
- display: { provider: "fishaudio", logo: FISH_LOGO, description },
1532
- capabilities: { customVoices: true }
1533
- };
1534
- }
1535
- var FISH_MODELS = [
1536
- fishTts(
1537
- "fish-s2.1-pro",
1538
- "Fish Audio S2.1 Pro",
1539
- "s2.1-pro",
1540
- "Fish Audio S2.1 Pro text to speech in 83 languages, with [bracket] directions and your own cloned voices."
1541
- ),
1542
- fishTts(
1543
- "fish-s2.1-pro-free",
1544
- "Fish Audio S2.1 Pro Free",
1545
- "s2.1-pro-free",
1546
- "Fish Audio S2.1 Pro on the free developer tier: the same voices at no cost, without latency or data-processing guarantees."
1547
- ),
1548
- fishTts(
1549
- "fish-drama-3",
1550
- "Fish Audio Drama 3",
1551
- "drama-3",
1552
- "Fish Audio Drama 3 text to speech you direct like an actor: [directions], sounds, pauses and per-word tags."
1553
- ),
1554
- {
1555
- id: "fish-voice-clone",
1556
- aliases: [],
1557
- label: "Fish Audio Voice Clone",
1558
- type: "voice-clone",
1559
- adapter: "fish",
1560
- providerModelId: "voice-clone",
1561
- lifecycle: "active",
1562
- exposure: [],
1563
- constraints: {
1564
- // POST /model takes 1-20 voice files; Fish advises 10 s or more of clean speech each.
1565
- references: { audios: 20, audioFormats: ["wav", "mp3", "m4a", "opus"] },
1566
- supports: []
1567
- },
1568
- defaults: {},
1569
- usage: PER_REQUEST,
1570
- pricingKind: "flat",
1571
- display: {
1572
- provider: "fishaudio",
1573
- logo: FISH_LOGO,
1574
- description: "Clone a private, reusable voice from one or more clean recordings, then speak with it on the Fish Audio speech models."
1575
- },
1576
- capabilities: {}
1577
- },
1578
- {
1579
- id: "fish-voice-design-1",
1580
- aliases: [],
1581
- label: "Fish Audio Voice Design",
1582
- type: "voice-design",
1583
- adapter: "fish",
1584
- providerModelId: "voice-design-1",
1585
- lifecycle: "active",
1586
- exposure: [],
1587
- constraints: {
1588
- voiceDesign: { maxCandidates: 4, previewMaxChars: 150 },
1589
- supports: [],
1590
- prompt: { referenceSyntax: "numbered", maxChars: 2e3 }
1591
- },
1592
- defaults: {},
1593
- usage: PER_REQUEST,
1594
- pricingKind: "flat",
1595
- display: {
1596
- provider: "fishaudio",
1597
- logo: FISH_LOGO,
1598
- description: "Describe a voice and get up to four short candidates; keep one as a cloned voice."
1599
- },
1600
- capabilities: {}
1601
- }
1602
- ];
1603
-
1604
1307
  // src/catalog/languages-audio.ts
1605
1308
  var ELEVENLABS_V4_LANGUAGES = [
1606
1309
  { code: "af", name: "Afrikaans" },
@@ -2010,96 +1713,460 @@ var ELEVENLABS_VOICES = [
2010
1713
  description: "A young adult with energy and warmth - suitable for reels and shorts.",
2011
1714
  previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/TX3LPaxmHKxFdv7VOQHJ/63148076-6363-42db-aea8-31424308b92c.mp3"
2012
1715
  },
2013
- { id: "Charlotte", name: "Charlotte" },
1716
+ { id: "Charlotte", name: "Charlotte" },
1717
+ {
1718
+ id: "Alice",
1719
+ name: "Alice",
1720
+ gender: "female",
1721
+ accent: "british",
1722
+ languages: ["en", "it", "fr", "ar", "ja", "pl", "hi"],
1723
+ description: "Clear and engaging, friendly woman with a British accent suitable for e-learning.",
1724
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/Xb7hH8MSUJpSbSDYk0k2/d10f7534-11f6-41fe-a012-2de1e482d336.mp3"
1725
+ },
1726
+ {
1727
+ id: "Matilda",
1728
+ name: "Matilda",
1729
+ gender: "female",
1730
+ accent: "american",
1731
+ languages: ["en", "it", "fr", "de", "ar", "es"],
1732
+ description: "A professional woman with a pleasing alto pitch. Suitable for many use cases.",
1733
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/XrExE9yKIg1WjnnlVkGX/b930e18d-6b4d-466e-bab2-0ae97c6d8535.mp3"
1734
+ },
1735
+ {
1736
+ id: "Will",
1737
+ name: "Will",
1738
+ gender: "male",
1739
+ accent: "american",
1740
+ languages: ["en", "fr", "de", "pt", "zh", "cs", "fil", "sk", "es", "sv"],
1741
+ description: "Conversational and laid back.",
1742
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/bIHbv24MWmeRgasZH58o/8caf8f3d-ad29-4980-af41-53f20c72d7a4.mp3"
1743
+ },
1744
+ {
1745
+ id: "Jessica",
1746
+ name: "Jessica",
1747
+ gender: "female",
1748
+ accent: "american",
1749
+ languages: ["en", "fr", "ar", "ja", "zh", "de", "cs", "hi"],
1750
+ description: "Young and popular, this playful American female voice is perfect for trendy content.",
1751
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cgSgspJ2msm6clMCkdW9/56a97bf8-b69b-448f-846c-c3a11683d45a.mp3"
1752
+ },
1753
+ {
1754
+ id: "Eric",
1755
+ name: "Eric",
1756
+ gender: "male",
1757
+ accent: "american",
1758
+ languages: ["en", "fr", "pt", "de", "sk", "es"],
1759
+ description: "A smooth tenor pitch from a man in his 40s - perfect for agentic use cases.",
1760
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cjVigY5qzO86Huf0OWal/d098fda0-6456-4030-b3d8-63aa048c9070.mp3"
1761
+ },
1762
+ {
1763
+ id: "Chris",
1764
+ name: "Chris",
1765
+ gender: "male",
1766
+ accent: "american",
1767
+ languages: ["en", "fr", "ar", "pt", "sv", "hi"],
1768
+ description: "Natural and real, this down-to-earth voice is great across many use-cases.",
1769
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/iP95p4xoKVk53GoZ742B/3f4bde72-cc48-40dd-829f-57fbf906f4d7.mp3"
1770
+ },
1771
+ {
1772
+ id: "Brian",
1773
+ name: "Brian",
1774
+ gender: "male",
1775
+ accent: "american",
1776
+ languages: ["en", "ar", "zh", "pt", "de", "nl", "sk", "ro", "hi"],
1777
+ description: "Middle-aged man with a resonant and comforting tone. Great for narrations and advertisements.",
1778
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/nPczCjzI2devNBz1zQrb/2dd3e72c-4fd3-42f1-93ea-abc5d4e5aa1d.mp3"
1779
+ },
1780
+ {
1781
+ id: "Daniel",
1782
+ name: "Daniel",
1783
+ gender: "male",
1784
+ accent: "british",
1785
+ languages: ["en", "de", "tr"],
1786
+ description: "A strong voice perfect for delivering a professional broadcast or news story.",
1787
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/onwK4e9ZLuTAKqWW03F9/7eee0236-1a72-4b86-b303-5dcadc007ba9.mp3"
1788
+ },
1789
+ {
1790
+ id: "Lily",
1791
+ name: "Lily",
1792
+ gender: "female",
1793
+ accent: "british",
1794
+ languages: ["en", "it", "de", "zh", "cs", "nl", "pl"],
1795
+ description: "Velvety British female voice delivers news and narrations with warmth and clarity.",
1796
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pFZP5JQG7iQjIQuC4Bku/89b68b35-b3dd-4348-a84a-a3c13a3c2b30.mp3"
1797
+ },
1798
+ {
1799
+ id: "Bill",
1800
+ name: "Bill",
1801
+ gender: "male",
1802
+ accent: "american",
1803
+ languages: ["en", "fr", "ar", "zh", "de", "cs"],
1804
+ description: "Friendly and comforting voice ready to narrate your stories.",
1805
+ previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pqHfZKP75CvOlQylNhV4/d782b3ff-84ba-4029-848c-acf01285524d.mp3"
1806
+ }
1807
+ ];
1808
+ var PREMADE_ID = /\/premade\/voices\/([A-Za-z0-9]+)\//;
1809
+ var ELEVENLABS_DIRECT_VOICES = ELEVENLABS_VOICES.flatMap((v) => {
1810
+ const id = v.previewUrl ? PREMADE_ID.exec(v.previewUrl)?.[1] : void 0;
1811
+ return id ? [{ ...v, id }] : [];
1812
+ });
1813
+ var ELEVENLABS_DIRECT_DEFAULT_VOICE = "EXAVITQu4vr4xnSDxMaL";
1814
+
1815
+ // src/catalog/speech-elevenlabs-direct.ts
1816
+ var ELEVENLABS_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
1817
+ var PER_CALL = { unit: "images" };
1818
+ var PER_REQUEST = { unit: "requests" };
1819
+ var ELEVENLABS_DIRECT_MODELS = [
1820
+ {
1821
+ id: "elevenlabs-v4-direct",
1822
+ aliases: [],
1823
+ label: "ElevenLabs v4 (direct)",
1824
+ type: "speech",
1825
+ adapter: "elevenlabs",
1826
+ providerModelId: "eleven_v4",
1827
+ lifecycle: "active",
1828
+ exposure: [],
1829
+ constraints: {
1830
+ // Premade voices under their ElevenLabs ids (the direct API takes ids, not names).
1831
+ voices: ELEVENLABS_DIRECT_VOICES,
1832
+ languages: ELEVENLABS_V4_LANGUAGES,
1833
+ outputFormats: ELEVENLABS_MP3_FORMATS,
1834
+ supports: [],
1835
+ // ElevenLabs docs: 10,000 characters per request.
1836
+ prompt: { referenceSyntax: "numbered", maxChars: 1e4 }
1837
+ },
1838
+ defaults: { voice: ELEVENLABS_DIRECT_DEFAULT_VOICE, outputFormat: "mp3_44100_128" },
1839
+ usage: PER_CALL,
1840
+ pricingKind: "flat",
1841
+ display: {
1842
+ provider: "elevenlabs",
1843
+ logo: ELEVENLABS_LOGO,
1844
+ description: "ElevenLabs v4 text to speech with audio tags, in a premade voice or your own cloned voice; up to 10,000 characters."
1845
+ },
1846
+ capabilities: { customVoices: true }
1847
+ },
1848
+ {
1849
+ id: "elevenlabs-ivc",
1850
+ aliases: [],
1851
+ label: "ElevenLabs Instant Voice Clone",
1852
+ type: "voice-clone",
1853
+ adapter: "elevenlabs",
1854
+ providerModelId: "ivc",
1855
+ lifecycle: "active",
1856
+ exposure: [],
1857
+ constraints: {
1858
+ // POST /v1/voices/add; ElevenLabs takes up to 25 samples and advises 1-2 minutes of
1859
+ // clean speech in total. Each clone uses a voice slot on our plan until deleted.
1860
+ references: { audios: 25, audioFormats: ["mp3", "wav", "m4a", "webm", "ogg"] },
1861
+ supports: []
1862
+ },
1863
+ defaults: {},
1864
+ usage: PER_REQUEST,
1865
+ pricingKind: "flat",
1866
+ display: {
1867
+ provider: "elevenlabs",
1868
+ logo: ELEVENLABS_LOGO,
1869
+ description: "Clone a private, reusable voice from one or more clean recordings, then speak with it on ElevenLabs v4 (direct)."
1870
+ },
1871
+ capabilities: {}
1872
+ }
1873
+ ];
1874
+
1875
+ // src/catalog/voices-fish.ts
1876
+ var FISH_VOICES = [
1877
+ {
1878
+ id: "933563129e564b19a115bedd57b7406a",
1879
+ name: "Sarah",
1880
+ gender: "female",
1881
+ languages: ["en"],
1882
+ description: "An engaged speaker.",
1883
+ previewUrl: "https://platform.r2.fish.audio/task/4e204945670c460c86fdab57512cb308.mp3"
1884
+ },
1885
+ {
1886
+ id: "bf322df2096a46f18c579d0baa36f41d",
1887
+ name: "Adrian",
1888
+ gender: "male",
1889
+ languages: ["en"],
1890
+ description: "A steady and reliable narrator.",
1891
+ previewUrl: "https://platform.r2.fish.audio/task/d730b09f4a484316a77ecc86137e85fb.mp3"
1892
+ },
1893
+ {
1894
+ id: "536d3a5e000945adb7038665781a4aca",
1895
+ name: "Ethan",
1896
+ gender: "male",
1897
+ languages: ["en"],
1898
+ description: "A curious explainer.",
1899
+ previewUrl: "https://platform.r2.fish.audio/task/bdd677ed767744fc91f166468786264b.mp3"
1900
+ },
1901
+ {
1902
+ id: "b347db033a6549378b48d00acb0d06cd",
1903
+ name: "Selene",
1904
+ gender: "female",
1905
+ languages: ["en"],
1906
+ description: "A meditative female voice.",
1907
+ previewUrl: "https://platform.r2.fish.audio/task/fcf629b4a0b343558f461338ba1b9da4.mp3"
1908
+ },
1909
+ {
1910
+ id: "9a9cf47702da476aa4629e2506d4a857",
1911
+ name: "Hannah",
1912
+ gender: "female",
1913
+ languages: ["en"],
1914
+ description: "A conversation specialist.",
1915
+ previewUrl: "https://platform.r2.fish.audio/task/08d658835feb427db808e37060b78eb0.mp3"
1916
+ },
1917
+ {
1918
+ id: "79d0bd3e4e5444b18f7b6d89b5927bf1",
1919
+ name: "Jordan",
1920
+ gender: "male",
1921
+ languages: ["en"],
1922
+ description: "A motivational speaker.",
1923
+ previewUrl: "https://platform.r2.fish.audio/task/edecbc0bdd4c46c39eda8520a0f729ef.mp3"
1924
+ },
1925
+ {
1926
+ id: "e3cd384158934cc9a01029cd7d278634",
1927
+ name: "Laura",
1928
+ gender: "female",
1929
+ languages: ["en"],
1930
+ description: "A confident female narrator.",
1931
+ previewUrl: "https://platform.r2.fish.audio/task/e821bef995344d519caa1c93d808db23.mp3"
1932
+ },
1933
+ {
1934
+ id: "f3a2b90078d54a65af4b95f63bc7798e",
1935
+ name: "Sheila",
1936
+ gender: "female",
1937
+ accent: "american",
1938
+ languages: ["en"],
1939
+ description: "A young American English woman's voice.",
1940
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/9bb9e1a1cf3f47f38700da1c5c0a678a.mp3"
1941
+ },
1942
+ {
1943
+ id: "0db6e93af420470b9d9b9a886dbaa954",
1944
+ name: "Kai",
1945
+ gender: "male",
1946
+ languages: ["en"],
1947
+ description: "A friendly English man's voice for companion apps and everyday conversation.",
1948
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/13306f1172544c3ba3106d1e363feaa6.mp3"
1949
+ },
1950
+ {
1951
+ id: "8abfa9ebd4c24a3399b68c3cdac8c7b5",
1952
+ name: "Freya",
1953
+ gender: "female",
1954
+ accent: "british",
1955
+ languages: ["en"],
1956
+ 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.",
1957
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/07918705a56b42daaab149f65392cea7.mp3"
1958
+ },
1959
+ {
1960
+ id: "2f64e528a4f2406691925ab1e0ed5b7f",
1961
+ name: "Ananya",
1962
+ gender: "female",
1963
+ languages: ["hi"],
1964
+ 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",
1965
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a17a700668d8405f8316db120733145c.mp3"
1966
+ },
1967
+ {
1968
+ id: "cefd91a07b99468f9148e2580990082d",
1969
+ name: "Arjun",
1970
+ gender: "male",
1971
+ languages: ["hi"],
1972
+ 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",
1973
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/a0c4a8eadb7841cdae8e5e68031a2dfb.mp3"
1974
+ },
1975
+ {
1976
+ id: "3f065d660212478a9c697fa965b4d098",
1977
+ name: "Carmen",
1978
+ gender: "female",
1979
+ languages: ["es"],
1980
+ description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1981
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/3421be48b6cb4c28bf829c25188e7e74.mp3"
1982
+ },
1983
+ {
1984
+ id: "ec0718028a2445fb9be8e8bfb56a0150",
1985
+ name: "Rodrigo",
1986
+ gender: "male",
1987
+ languages: ["es"],
1988
+ description: "Una voz clara y segura para asistentes de voz, atenci\xF3n al cliente y presentaciones.",
1989
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/5a77c32365604800ad5b4eb13c5585df.mp3"
1990
+ },
1991
+ {
1992
+ id: "10a3a20742114a4ea6dd441e7591850f",
1993
+ name: "Manon",
1994
+ gender: "female",
1995
+ languages: ["fr"],
1996
+ description: "Une voix claire et vive, adapt\xE9e aux assistants vocaux et au support client.",
1997
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/f7b75ee1fa524e48a8cefb003cf72952.mp3"
1998
+ },
2014
1999
  {
2015
- id: "Alice",
2016
- name: "Alice",
2017
- gender: "female",
2018
- accent: "british",
2019
- languages: ["en", "it", "fr", "ar", "ja", "pl", "hi"],
2020
- description: "Clear and engaging, friendly woman with a British accent suitable for e-learning.",
2021
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/Xb7hH8MSUJpSbSDYk0k2/d10f7534-11f6-41fe-a012-2de1e482d336.mp3"
2000
+ id: "f69bca092b674168a8d02d61ca20943c",
2001
+ name: "Lucas",
2002
+ gender: "male",
2003
+ languages: ["fr"],
2004
+ description: "Une voix claire et assur\xE9e, adapt\xE9e aux assistants vocaux et au service client.",
2005
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/86fca3e56a014a3d8a11450854bb8311.mp3"
2022
2006
  },
2023
2007
  {
2024
- id: "Matilda",
2025
- name: "Matilda",
2008
+ id: "3937b44b604249f18b94913daef94043",
2009
+ name: "Lena",
2026
2010
  gender: "female",
2027
- accent: "american",
2028
- languages: ["en", "it", "fr", "de", "ar", "es"],
2029
- description: "A professional woman with a pleasing alto pitch. Suitable for many use cases.",
2030
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/XrExE9yKIg1WjnnlVkGX/b930e18d-6b4d-466e-bab2-0ae97c6d8535.mp3"
2011
+ languages: ["de"],
2012
+ description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
2013
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/8659fec80b74442dab68a7755716a401.mp3"
2031
2014
  },
2032
2015
  {
2033
- id: "Will",
2034
- name: "Will",
2016
+ id: "c1e7cc926aa5469aa966c353094d4b0b",
2017
+ name: "Lukas",
2035
2018
  gender: "male",
2036
- accent: "american",
2037
- languages: ["en", "fr", "de", "pt", "zh", "cs", "fil", "sk", "es", "sv"],
2038
- description: "Conversational and laid back.",
2039
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/bIHbv24MWmeRgasZH58o/8caf8f3d-ad29-4980-af41-53f20c72d7a4.mp3"
2019
+ languages: ["de"],
2020
+ description: "Eine klare, souver\xE4ne Stimme f\xFCr Sprachassistenten, Kundenservice und Pr\xE4sentationen.",
2021
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/fb1d538126bb4fe38f8366250f6a2136.mp3"
2040
2022
  },
2041
2023
  {
2042
- id: "Jessica",
2043
- name: "Jessica",
2024
+ id: "b3c060cc41544a7da94a2c487647c902",
2025
+ name: "Let\xEDcia",
2044
2026
  gender: "female",
2045
- accent: "american",
2046
- languages: ["en", "fr", "ar", "ja", "zh", "de", "cs", "hi"],
2047
- description: "Young and popular, this playful American female voice is perfect for trendy content.",
2048
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cgSgspJ2msm6clMCkdW9/56a97bf8-b69b-448f-846c-c3a11683d45a.mp3"
2027
+ accent: "brazilian",
2028
+ languages: ["pt"],
2029
+ 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.",
2030
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/13c6c0d96b5c4069951f89868ee15360.mp3"
2049
2031
  },
2050
2032
  {
2051
- id: "Eric",
2052
- name: "Eric",
2033
+ id: "add7bcb8d3c8423bbfa152ca232aad6e",
2034
+ name: "Ricardo",
2053
2035
  gender: "male",
2054
- accent: "american",
2055
- languages: ["en", "fr", "pt", "de", "sk", "es"],
2056
- description: "A smooth tenor pitch from a man in his 40s - perfect for agentic use cases.",
2057
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/cjVigY5qzO86Huf0OWal/d098fda0-6456-4030-b3d8-63aa048c9070.mp3"
2036
+ accent: "brazilian",
2037
+ languages: ["pt"],
2038
+ 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.",
2039
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-10-12/67475fc717ae45cbb38e647a2dd37fe1.mp3"
2058
2040
  },
2059
2041
  {
2060
- id: "Chris",
2061
- name: "Chris",
2062
- gender: "male",
2063
- accent: "american",
2064
- languages: ["en", "fr", "ar", "pt", "sv", "hi"],
2065
- description: "Natural and real, this down-to-earth voice is great across many use-cases.",
2066
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/iP95p4xoKVk53GoZ742B/3f4bde72-cc48-40dd-829f-57fbf906f4d7.mp3"
2042
+ id: "b2d9d8db057042688a5e318b8f405bc2",
2043
+ name: "Kyoko",
2044
+ gender: "female",
2045
+ languages: ["ja"],
2046
+ 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",
2047
+ previewUrl: "https://platform.r2.fish.audio/task/993b3ccb52124341aff79580f1ce5a5a.mp3"
2067
2048
  },
2068
2049
  {
2069
- id: "Brian",
2070
- name: "Brian",
2050
+ id: "297a6fd278df47c3b9da9bfdf55ac89a",
2051
+ name: "Satoru",
2071
2052
  gender: "male",
2072
- accent: "american",
2073
- languages: ["en", "ar", "zh", "pt", "de", "nl", "sk", "ro", "hi"],
2074
- description: "Middle-aged man with a resonant and comforting tone. Great for narrations and advertisements.",
2075
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/nPczCjzI2devNBz1zQrb/2dd3e72c-4fd3-42f1-93ea-abc5d4e5aa1d.mp3"
2053
+ languages: ["ja"],
2054
+ 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",
2055
+ previewUrl: "https://platform.r2.fish.audio/task/1b4712fb831f4c149eef6b0133157418.mp3"
2076
2056
  },
2077
2057
  {
2078
- id: "Daniel",
2079
- name: "Daniel",
2080
- gender: "male",
2081
- accent: "british",
2082
- languages: ["en", "de", "tr"],
2083
- description: "A strong voice perfect for delivering a professional broadcast or news story.",
2084
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/onwK4e9ZLuTAKqWW03F9/7eee0236-1a72-4b86-b303-5dcadc007ba9.mp3"
2058
+ id: "0b14f34a13a94ed88fe6113193749bb0",
2059
+ name: "Fatima",
2060
+ gender: "female",
2061
+ languages: ["ar"],
2062
+ 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.",
2063
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-24/93406e1b905a4c4994306e3421243390.mp3"
2085
2064
  },
2086
2065
  {
2087
- id: "Lily",
2088
- name: "Lily",
2066
+ id: "74c6aba5cbf94a15bbdc547ffce5cb38",
2067
+ name: "Yutong",
2089
2068
  gender: "female",
2090
- accent: "british",
2091
- languages: ["en", "it", "de", "zh", "cs", "nl", "pl"],
2092
- description: "Velvety British female voice delivers news and narrations with warmth and clarity.",
2093
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pFZP5JQG7iQjIQuC4Bku/89b68b35-b3dd-4348-a84a-a3c13a3c2b30.mp3"
2069
+ languages: ["zh"],
2070
+ 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",
2071
+ previewUrl: "https://platform.r2.fish.audio/tasks/2026-08-25/a48320f37fe44c4699549a1afc3778e8.mp3"
2072
+ }
2073
+ ];
2074
+
2075
+ // src/catalog/speech-fish.ts
2076
+ var FISH_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/fishaudio.png";
2077
+ var PER_CALL2 = { unit: "images" };
2078
+ var PER_REQUEST2 = { unit: "requests" };
2079
+ var EXPOSURE4 = ["cowork", "space_builder"];
2080
+ var TTS_MAX_CHARS = 1e4;
2081
+ function fishTts(id, label, providerModelId, description) {
2082
+ return {
2083
+ id,
2084
+ aliases: [],
2085
+ label,
2086
+ type: "speech",
2087
+ adapter: "fish",
2088
+ providerModelId,
2089
+ lifecycle: "active",
2090
+ exposure: EXPOSURE4,
2091
+ constraints: {
2092
+ voices: FISH_VOICES,
2093
+ outputFormats: ["mp3", "wav"],
2094
+ supports: [],
2095
+ prompt: { referenceSyntax: "numbered", maxChars: TTS_MAX_CHARS }
2096
+ },
2097
+ defaults: { voice: "9a9cf47702da476aa4629e2506d4a857", outputFormat: "mp3" },
2098
+ usage: PER_CALL2,
2099
+ pricingKind: "flat",
2100
+ display: { provider: "fishaudio", logo: FISH_LOGO, description },
2101
+ capabilities: { customVoices: true }
2102
+ };
2103
+ }
2104
+ var FISH_MODELS = [
2105
+ fishTts(
2106
+ "fish-s2.1-pro",
2107
+ "Fish Audio S2.1 Pro",
2108
+ "s2.1-pro",
2109
+ "Fish Audio S2.1 Pro text to speech in 83 languages, with [bracket] directions and your own cloned voices."
2110
+ ),
2111
+ fishTts(
2112
+ "fish-s2.1-pro-free",
2113
+ "Fish Audio S2.1 Pro Free",
2114
+ "s2.1-pro-free",
2115
+ "Fish Audio S2.1 Pro on the free developer tier: the same voices at no cost, without latency or data-processing guarantees."
2116
+ ),
2117
+ fishTts(
2118
+ "fish-drama-3",
2119
+ "Fish Audio Drama 3",
2120
+ "drama-3",
2121
+ "Fish Audio Drama 3 text to speech you direct like an actor: [directions], sounds, pauses and per-word tags."
2122
+ ),
2123
+ {
2124
+ id: "fish-voice-clone",
2125
+ aliases: [],
2126
+ label: "Fish Audio Voice Clone",
2127
+ type: "voice-clone",
2128
+ adapter: "fish",
2129
+ providerModelId: "voice-clone",
2130
+ lifecycle: "active",
2131
+ exposure: EXPOSURE4,
2132
+ constraints: {
2133
+ // POST /model takes 1-20 voice files; Fish advises 10 s or more of clean speech each.
2134
+ references: { audios: 20, audioFormats: ["wav", "mp3", "m4a", "opus"] },
2135
+ supports: []
2136
+ },
2137
+ defaults: {},
2138
+ usage: PER_REQUEST2,
2139
+ pricingKind: "flat",
2140
+ display: {
2141
+ provider: "fishaudio",
2142
+ logo: FISH_LOGO,
2143
+ description: "Clone a private, reusable voice from one or more clean recordings, then speak with it on the Fish Audio speech models."
2144
+ },
2145
+ capabilities: {}
2094
2146
  },
2095
2147
  {
2096
- id: "Bill",
2097
- name: "Bill",
2098
- gender: "male",
2099
- accent: "american",
2100
- languages: ["en", "fr", "ar", "zh", "de", "cs"],
2101
- description: "Friendly and comforting voice ready to narrate your stories.",
2102
- previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pqHfZKP75CvOlQylNhV4/d782b3ff-84ba-4029-848c-acf01285524d.mp3"
2148
+ id: "fish-voice-design-1",
2149
+ aliases: [],
2150
+ label: "Fish Audio Voice Design",
2151
+ type: "voice-design",
2152
+ adapter: "fish",
2153
+ providerModelId: "voice-design-1",
2154
+ lifecycle: "active",
2155
+ exposure: EXPOSURE4,
2156
+ constraints: {
2157
+ voiceDesign: { maxCandidates: 4, previewMaxChars: 150 },
2158
+ supports: [],
2159
+ prompt: { referenceSyntax: "numbered", maxChars: 2e3 }
2160
+ },
2161
+ defaults: {},
2162
+ usage: PER_REQUEST2,
2163
+ pricingKind: "flat",
2164
+ display: {
2165
+ provider: "fishaudio",
2166
+ logo: FISH_LOGO,
2167
+ description: "Describe a voice and get up to four short candidates; keep one as a cloned voice."
2168
+ },
2169
+ capabilities: {}
2103
2170
  }
2104
2171
  ];
2105
2172
 
@@ -3678,12 +3745,12 @@ var MINIMAX_VOICES = [
3678
3745
  ];
3679
3746
 
3680
3747
  // src/catalog/media-nodes.ts
3681
- var ELEVENLABS_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
3748
+ var ELEVENLABS_LOGO2 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
3682
3749
  var GOOGLE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
3683
3750
  var MINIMAX_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png";
3684
3751
  var SYNC_LOGO = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/sync.png";
3685
- var PER_CALL2 = { unit: "images" };
3686
- var EXPOSURE4 = ["cowork", "space_builder"];
3752
+ var PER_CALL3 = { unit: "images" };
3753
+ var EXPOSURE5 = ["cowork", "space_builder"];
3687
3754
  var LIPSYNC_AUDIO = { audioSeconds: { max: 30 } };
3688
3755
  function elevenLabsTts(tts) {
3689
3756
  return {
@@ -3694,7 +3761,7 @@ function elevenLabsTts(tts) {
3694
3761
  adapter: "fal",
3695
3762
  providerModelId: tts.providerModelId,
3696
3763
  lifecycle: "active",
3697
- exposure: EXPOSURE4,
3764
+ exposure: EXPOSURE5,
3698
3765
  constraints: {
3699
3766
  voices: ELEVENLABS_VOICES,
3700
3767
  languages: tts.languages,
@@ -3703,9 +3770,9 @@ function elevenLabsTts(tts) {
3703
3770
  prompt: { referenceSyntax: "numbered", maxChars: tts.maxChars }
3704
3771
  },
3705
3772
  defaults: { voice: "Rachel", ...tts.formats && { outputFormat: "mp3_44100_128" } },
3706
- usage: PER_CALL2,
3773
+ usage: PER_CALL3,
3707
3774
  pricingKind: "flat",
3708
- display: { provider: "elevenlabs", logo: ELEVENLABS_LOGO, description: tts.description },
3775
+ display: { provider: "elevenlabs", logo: ELEVENLABS_LOGO2, description: tts.description },
3709
3776
  capabilities: {}
3710
3777
  };
3711
3778
  }
@@ -3719,7 +3786,7 @@ function geminiTts(id, label, description) {
3719
3786
  adapter: "fal",
3720
3787
  providerModelId,
3721
3788
  lifecycle: "active",
3722
- exposure: EXPOSURE4,
3789
+ exposure: EXPOSURE5,
3723
3790
  constraints: {
3724
3791
  voices: GEMINI_TTS_VOICES,
3725
3792
  supports: ["style"],
@@ -3727,7 +3794,7 @@ function geminiTts(id, label, description) {
3727
3794
  prompt: { referenceSyntax: "numbered", maxChars: 8192 }
3728
3795
  },
3729
3796
  defaults: { voice: "Kore" },
3730
- usage: PER_CALL2,
3797
+ usage: PER_CALL3,
3731
3798
  pricingKind: "flat",
3732
3799
  display: { provider: "google", logo: GOOGLE_LOGO, description },
3733
3800
  capabilities: {}
@@ -3742,7 +3809,7 @@ function syncLipsync(id, label, providerModelId, syncModel, description) {
3742
3809
  adapter: "fal",
3743
3810
  providerModelId,
3744
3811
  lifecycle: "active",
3745
- exposure: EXPOSURE4,
3812
+ exposure: EXPOSURE5,
3746
3813
  constraints: {
3747
3814
  requires: ["sourceVideo", "sourceAudio"],
3748
3815
  references: LIPSYNC_AUDIO,
@@ -3750,7 +3817,7 @@ function syncLipsync(id, label, providerModelId, syncModel, description) {
3750
3817
  },
3751
3818
  defaults: {},
3752
3819
  ...syncModel !== void 0 && { providerOptions: { fal: { model: syncModel } } },
3753
- usage: PER_CALL2,
3820
+ usage: PER_CALL3,
3754
3821
  pricingKind: "flat",
3755
3822
  display: { provider: "sync", logo: SYNC_LOGO, description },
3756
3823
  capabilities: { acceptsSourceVideo: true }
@@ -3803,7 +3870,7 @@ var MEDIA_NODE_MODELS = [
3803
3870
  adapter: "fal",
3804
3871
  providerModelId: "fal-ai/minimax/speech-2.8-hd",
3805
3872
  lifecycle: "active",
3806
- exposure: EXPOSURE4,
3873
+ exposure: EXPOSURE5,
3807
3874
  constraints: {
3808
3875
  voices: MINIMAX_VOICES,
3809
3876
  languages: MINIMAX_SPEECH_LANGUAGES,
@@ -3811,7 +3878,7 @@ var MEDIA_NODE_MODELS = [
3811
3878
  prompt: { referenceSyntax: "numbered", maxChars: 1e4 }
3812
3879
  },
3813
3880
  defaults: { voice: "Wise_Woman" },
3814
- usage: PER_CALL2,
3881
+ usage: PER_CALL3,
3815
3882
  pricingKind: "flat",
3816
3883
  display: {
3817
3884
  provider: "minimax",
@@ -3828,7 +3895,7 @@ var MEDIA_NODE_MODELS = [
3828
3895
  adapter: "fal",
3829
3896
  providerModelId: "fal-ai/elevenlabs/voice-changer",
3830
3897
  lifecycle: "active",
3831
- exposure: EXPOSURE4,
3898
+ exposure: EXPOSURE5,
3832
3899
  constraints: {
3833
3900
  requires: ["sourceAudio"],
3834
3901
  // The flat price assumes at most a minute of speech.
@@ -3838,11 +3905,11 @@ var MEDIA_NODE_MODELS = [
3838
3905
  supports: []
3839
3906
  },
3840
3907
  defaults: { voice: "Rachel", outputFormat: "mp3_44100_128" },
3841
- usage: PER_CALL2,
3908
+ usage: PER_CALL3,
3842
3909
  pricingKind: "flat",
3843
3910
  display: {
3844
3911
  provider: "elevenlabs",
3845
- logo: ELEVENLABS_LOGO,
3912
+ logo: ELEVENLABS_LOGO2,
3846
3913
  description: "ElevenLabs speech to speech; re-voices a recording in another voice and keeps its timing and delivery."
3847
3914
  },
3848
3915
  capabilities: {}
@@ -3855,7 +3922,7 @@ var MEDIA_NODE_MODELS = [
3855
3922
  adapter: "fal",
3856
3923
  providerModelId: "fal-ai/elevenlabs/dubbing",
3857
3924
  lifecycle: "active",
3858
- exposure: EXPOSURE4,
3925
+ exposure: EXPOSURE5,
3859
3926
  constraints: {
3860
3927
  requiresOneOf: ["sourceVideo", "sourceAudio"],
3861
3928
  // The flat price covers 60 s of source.
@@ -3865,11 +3932,11 @@ var MEDIA_NODE_MODELS = [
3865
3932
  supports: []
3866
3933
  },
3867
3934
  defaults: {},
3868
- usage: PER_CALL2,
3935
+ usage: PER_CALL3,
3869
3936
  pricingKind: "flat",
3870
3937
  display: {
3871
3938
  provider: "elevenlabs",
3872
- logo: ELEVENLABS_LOGO,
3939
+ logo: ELEVENLABS_LOGO2,
3873
3940
  description: "ElevenLabs dubbing; translates the speech in a video or audio file into another language in the original voices."
3874
3941
  },
3875
3942
  capabilities: { acceptsSourceVideo: true }
@@ -3903,7 +3970,7 @@ var MEDIA_NODE_MODELS = [
3903
3970
  adapter: "fal",
3904
3971
  providerModelId: "veed/lipsync/v2",
3905
3972
  lifecycle: "active",
3906
- exposure: EXPOSURE4,
3973
+ exposure: EXPOSURE5,
3907
3974
  constraints: {
3908
3975
  requires: ["sourceVideo", "sourceAudio"],
3909
3976
  references: LIPSYNC_AUDIO,
@@ -3912,7 +3979,7 @@ var MEDIA_NODE_MODELS = [
3912
3979
  supports: []
3913
3980
  },
3914
3981
  defaults: {},
3915
- usage: PER_CALL2,
3982
+ usage: PER_CALL3,
3916
3983
  pricingKind: "flat",
3917
3984
  display: {
3918
3985
  provider: "veed",
@@ -3929,7 +3996,7 @@ var MEDIA_NODE_MODELS = [
3929
3996
  adapter: "fal",
3930
3997
  providerModelId: "minimax/h3-max/lip-sync/image-to-video",
3931
3998
  lifecycle: "active",
3932
- exposure: EXPOSURE4,
3999
+ exposure: EXPOSURE5,
3933
4000
  constraints: {
3934
4001
  requires: ["firstFrame", "sourceAudio"],
3935
4002
  resolutions: ["480p", "768p", "1080p", "2k"],
@@ -3955,7 +4022,7 @@ var MEDIA_NODE_MODELS = [
3955
4022
  adapter: "fal",
3956
4023
  providerModelId: "fal-ai/elevenlabs/speech-to-text/scribe-v2",
3957
4024
  lifecycle: "active",
3958
- exposure: EXPOSURE4,
4025
+ exposure: EXPOSURE5,
3959
4026
  constraints: {
3960
4027
  requires: ["sourceAudio"],
3961
4028
  // The flat price covers 10 minutes of audio.
@@ -3964,17 +4031,18 @@ var MEDIA_NODE_MODELS = [
3964
4031
  supports: []
3965
4032
  },
3966
4033
  defaults: {},
3967
- usage: PER_CALL2,
4034
+ usage: PER_CALL3,
3968
4035
  pricingKind: "flat",
3969
4036
  display: {
3970
4037
  provider: "elevenlabs",
3971
- logo: ELEVENLABS_LOGO,
4038
+ logo: ELEVENLABS_LOGO2,
3972
4039
  description: "ElevenLabs Scribe v2 speech to text with word timings, speaker labels and audio-event tags."
3973
4040
  },
3974
4041
  capabilities: {}
3975
4042
  },
3976
4043
  SAM_3_IMAGE,
3977
- ...FISH_MODELS
4044
+ ...FISH_MODELS,
4045
+ ...ELEVENLABS_DIRECT_MODELS
3978
4046
  ];
3979
4047
 
3980
4048
  // src/catalog/model3d.ts
@@ -4170,7 +4238,7 @@ var MODEL3D_MODELS = [
4170
4238
 
4171
4239
  // src/catalog/other.ts
4172
4240
  var GOOGLE_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
4173
- var ELEVENLABS_LOGO2 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
4241
+ var ELEVENLABS_LOGO3 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/elevenlabs.png";
4174
4242
  var MINIMAX_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png";
4175
4243
  var OTHER_MODELS = [
4176
4244
  {
@@ -4335,7 +4403,7 @@ var OTHER_MODELS = [
4335
4403
  pricingKind: "flat",
4336
4404
  display: {
4337
4405
  provider: "elevenlabs",
4338
- logo: ELEVENLABS_LOGO2,
4406
+ logo: ELEVENLABS_LOGO3,
4339
4407
  description: "ElevenLabs Music v2.5 text-to-music; full songs or instrumentals from 3 seconds to 1 minute."
4340
4408
  },
4341
4409
  capabilities: {}
@@ -4387,7 +4455,7 @@ var OTHER_MODELS = [
4387
4455
  pricingKind: "flat",
4388
4456
  display: {
4389
4457
  provider: "elevenlabs",
4390
- logo: ELEVENLABS_LOGO2,
4458
+ logo: ELEVENLABS_LOGO3,
4391
4459
  description: "ElevenLabs Sound Effects v2; a sound effect from a text description, up to 22 seconds."
4392
4460
  },
4393
4461
  capabilities: {}
@@ -5569,7 +5637,7 @@ var VIDEO_FAMILY_MODELS = [
5569
5637
 
5570
5638
  // src/catalog/video-luma.ts
5571
5639
  var VIDEO_USAGE2 = { unit: "seconds" };
5572
- var EXPOSURE5 = ["cowork", "space_builder"];
5640
+ var EXPOSURE6 = ["cowork", "space_builder"];
5573
5641
  var LUMA_LOGO2 = "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/luma-color.png";
5574
5642
  var RAY_RATIOS = ["9:16", "3:4", "1:1", "4:3", "16:9", "21:9"];
5575
5643
  var RAY_RESOLUTIONS = ["360p", "720p", "1080p"];
@@ -5587,7 +5655,7 @@ var LUMA_VIDEO_MODELS = [
5587
5655
  adapter: "luma",
5588
5656
  providerModelId: "ray-3.2",
5589
5657
  lifecycle: "active",
5590
- exposure: EXPOSURE5,
5658
+ exposure: EXPOSURE6,
5591
5659
  constraints: {
5592
5660
  aspectRatios: ["adaptive", ...RAY_RATIOS],
5593
5661
  resolutions: [...RAY_RESOLUTIONS],
@@ -5619,7 +5687,7 @@ var LUMA_VIDEO_MODELS = [
5619
5687
  adapter: "luma",
5620
5688
  providerModelId: "ray-3.2",
5621
5689
  lifecycle: "active",
5622
- exposure: EXPOSURE5,
5690
+ exposure: EXPOSURE6,
5623
5691
  constraints: {
5624
5692
  resolutions: [...RAY_RESOLUTIONS],
5625
5693
  requires: ["sourceVideo"],
@@ -5652,7 +5720,7 @@ var LUMA_VIDEO_MODELS = [
5652
5720
  adapter: "luma",
5653
5721
  providerModelId: "ray-3.2",
5654
5722
  lifecycle: "active",
5655
- exposure: EXPOSURE5,
5723
+ exposure: EXPOSURE6,
5656
5724
  constraints: {
5657
5725
  aspectRatios: [...RAY_RATIOS],
5658
5726
  resolutions: [...RAY_RESOLUTIONS],
@@ -7616,7 +7684,8 @@ var ADAPTER_IDS = [
7616
7684
  "higgsfield",
7617
7685
  "xai-video",
7618
7686
  "luma",
7619
- "fish"
7687
+ "fish",
7688
+ "elevenlabs"
7620
7689
  ];
7621
7690
  var ModelTypeSchema = import_zod3.z.enum([
7622
7691
  "text",