diff --git a/apps/stage-tamagotchi/package.json b/apps/stage-tamagotchi/package.json
index 0c02d099a..2f39bc074 100644
--- a/apps/stage-tamagotchi/package.json
+++ b/apps/stage-tamagotchi/package.json
@@ -105,7 +105,7 @@
"@iconify-json/vscode-icons": "^1.2.23",
"@iconify/utils": "^2.3.0",
"@intlify/unplugin-vue-i18n": "^6.0.8",
- "@proj-airi/lobe-icons": "^1.0.8",
+ "@proj-airi/lobe-icons": "^1.0.10",
"@proj-airi/ui-transitions": "workspace:^",
"@proj-airi/unplugin-fetch": "^0.1.6",
"@proj-airi/unplugin-live2d-sdk": "^0.1.5",
diff --git a/apps/stage-tamagotchi/src/pages/settings/providers/index-tts-vllm.vue b/apps/stage-tamagotchi/src/pages/settings/providers/index-tts-vllm.vue
new file mode 100644
index 000000000..75543b016
--- /dev/null
+++ b/apps/stage-tamagotchi/src/pages/settings/providers/index-tts-vllm.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ meta:
+ layout: settings
+ stageTransition:
+ name: slide
+
diff --git a/apps/stage-web/package.json b/apps/stage-web/package.json
index 0dbdfe124..fc7382ad4 100644
--- a/apps/stage-web/package.json
+++ b/apps/stage-web/package.json
@@ -97,7 +97,7 @@
"@iconify-json/svg-spinners": "^1.2.2",
"@iconify-json/vscode-icons": "^1.2.23",
"@intlify/unplugin-vue-i18n": "^6.0.8",
- "@proj-airi/lobe-icons": "^1.0.8",
+ "@proj-airi/lobe-icons": "^1.0.10",
"@proj-airi/unplugin-fetch": "^0.1.6",
"@proj-airi/unplugin-live2d-sdk": "^0.1.5",
"@shikijs/markdown-it": "^3.9.1",
diff --git a/apps/stage-web/src/pages/settings/providers/index-tts-vllm.vue b/apps/stage-web/src/pages/settings/providers/index-tts-vllm.vue
new file mode 100644
index 000000000..501588712
--- /dev/null
+++ b/apps/stage-web/src/pages/settings/providers/index-tts-vllm.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ meta:
+ layout: settings
+ stageTransition:
+ name: slide
+
diff --git a/docs/.vitepress/components/SearchTrigger.vue b/docs/.vitepress/components/SearchTrigger.vue
index 00ab21dd1..c1975b3f6 100644
--- a/docs/.vitepress/components/SearchTrigger.vue
+++ b/docs/.vitepress/components/SearchTrigger.vue
@@ -26,7 +26,7 @@ function handleClose() {
-
+
{{ t('docs.theme.search.title') }}
diff --git a/packages/i18n/src/locales/en/settings.yaml b/packages/i18n/src/locales/en/settings.yaml
index 1766bffbe..7dd1b0ecc 100644
--- a/packages/i18n/src/locales/en/settings.yaml
+++ b/packages/i18n/src/locales/en/settings.yaml
@@ -404,6 +404,9 @@ pages:
description: Speech Service region
label: Region
title: Microsoft / Azure Speech
+ index-tts-vllm:
+ description: https://index-tts.github.io/
+ title: Bilibili / IndexTTS
mistral:
description: mistral.ai
title: Mistral
diff --git a/packages/stage-ui/package.json b/packages/stage-ui/package.json
index eea1f3b2c..57f3ca9ca 100644
--- a/packages/stage-ui/package.json
+++ b/packages/stage-ui/package.json
@@ -136,7 +136,7 @@
"@iconify-json/svg-spinners": "^1.2.2",
"@iconify-json/vscode-icons": "^1.2.23",
"@moeru/std": "catalog:",
- "@proj-airi/lobe-icons": "^1.0.8",
+ "@proj-airi/lobe-icons": "^1.0.10",
"@types/culori": "^4.0.0",
"@types/three": "^0.178.1",
"@unocss/reset": "^66.3.3",
diff --git a/packages/stage-ui/src/stores/providers.ts b/packages/stage-ui/src/stores/providers.ts
index 723e82e8f..680002b11 100644
--- a/packages/stage-ui/src/stores/providers.ts
+++ b/packages/stage-ui/src/stores/providers.ts
@@ -1063,6 +1063,55 @@ export const useProvidersStore = defineStore('providers', () => {
},
},
},
+ 'index-tts-vllm': {
+ id: 'index-tts-vllm',
+ category: 'speech',
+ tasks: ['text-to-speech'],
+ nameKey: 'settings.pages.providers.provider.index-tts-vllm.title',
+ name: 'Index-TTS by Bilibili',
+ descriptionKey: 'settings.pages.providers.provider.index-tts-vllm.description',
+ description: 'index-tts.github.io',
+ iconColor: 'i-lobe-icons:bilibiliindex',
+ defaultOptions: () => ({
+ baseUrl: 'http://localhost:11996/tts',
+ }),
+ createProvider: async (config) => {
+ const provider: SpeechProvider = {
+ speech: () => {
+ const req = {
+ baseURL: config.baseUrl as string,
+ model: 'IndexTTS-1.5',
+ }
+ return req
+ },
+ }
+ return provider
+ },
+ capabilities: {
+ listVoices: async (config) => {
+ const voicesUrl = config.baseUrl as string
+ const response = await fetch(`${voicesUrl}/audio/voices`)
+ if (!response.ok) {
+ throw new Error(`Failed to fetch voices: ${response.statusText}`)
+ }
+ const voices = await response.json()
+ return Object.keys(voices).map((voice: any) => {
+ return {
+ id: voice,
+ name: voice,
+ provider: 'index-tts-vllm',
+ // previewURL: voice.preview_audio_url,
+ languages: [{ code: 'cn', title: 'Chinese' }, { code: 'en', title: 'English' }],
+ }
+ })
+ },
+ },
+ validators: {
+ validateProviderConfig: (config) => {
+ return !!config.baseUrl
+ },
+ },
+ },
'alibaba-cloud-model-studio': {
id: 'alibaba-cloud-model-studio',
category: 'speech',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9c2aa7437..70e540053 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -591,8 +591,8 @@ importers:
specifier: ^6.0.8
version: 6.0.8(@vue/compiler-dom@3.5.18)(eslint@9.32.0(jiti@2.5.1))(rollup@4.46.2)(typescript@5.9.2)(vue-i18n@11.1.11(vue@3.5.18(typescript@5.9.2)))(vue@3.5.18(typescript@5.9.2))
'@proj-airi/lobe-icons':
- specifier: ^1.0.8
- version: 1.0.8
+ specifier: ^1.0.10
+ version: 1.0.10
'@proj-airi/ui-transitions':
specifier: workspace:^
version: link:../../packages/ui-transitions
@@ -916,8 +916,8 @@ importers:
specifier: ^6.0.8
version: 6.0.8(@vue/compiler-dom@3.5.18)(eslint@9.32.0(jiti@2.5.1))(rollup@2.79.2)(typescript@5.9.2)(vue-i18n@11.1.11(vue@3.5.18(typescript@5.9.2)))(vue@3.5.18(typescript@5.9.2))
'@proj-airi/lobe-icons':
- specifier: ^1.0.8
- version: 1.0.8
+ specifier: ^1.0.10
+ version: 1.0.10
'@proj-airi/unplugin-fetch':
specifier: ^0.1.6
version: 0.1.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
@@ -1511,8 +1511,8 @@ importers:
specifier: 'catalog:'
version: 0.1.0-beta.7
'@proj-airi/lobe-icons':
- specifier: ^1.0.8
- version: 1.0.8
+ specifier: ^1.0.10
+ version: 1.0.10
'@types/culori':
specifier: ^4.0.0
version: 4.0.0
@@ -4739,8 +4739,8 @@ packages:
web-worker:
optional: true
- '@proj-airi/lobe-icons@1.0.8':
- resolution: {integrity: sha512-28EtouwEwjwOuT4eI9iSrdTyZDWHBrg5eyrZIGF8oCYRwYVsZ1Q78M2cX9faJ3XB6r4+suEbheOHbP8zj649bA==}
+ '@proj-airi/lobe-icons@1.0.10':
+ resolution: {integrity: sha512-zzQkwup4YFwheqYq5zTCMyol/Er1yP1lxdDTvrjZP3WHXop1IkOe9Jw44IG3Hsx1h/XV5WVizfELHVRFsveWQw==}
'@proj-airi/server-sdk@0.7.0-beta.1':
resolution: {integrity: sha512-g4JtWrTDFA76hZIYHz5OMa5It/0LxOrBPvbVL9D3EWYeubjzGZoBHy8ZFYWq78r7yHQScTjLl1vtagLEMLQnyA==}
@@ -15893,7 +15893,7 @@ snapshots:
transitivePeerDependencies:
- '@75lb/nature'
- '@proj-airi/lobe-icons@1.0.8': {}
+ '@proj-airi/lobe-icons@1.0.10': {}
'@proj-airi/server-sdk@0.7.0-beta.1':
dependencies: