docs(site): publish GPT-SoVITS Fun-ASR runtime contract (#3537)

Signed-off-by: LauraGPT <[email protected]>
This commit is contained in:
zhifu gao
2026-08-28 08:54:05 +08:00
committed by GitHub
parent 803ae33eeb
commit 3f0ed67e91
9 changed files with 79 additions and 8 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ These integrations are community-maintained. Their release cadence, hardware sup
| [QuQu](https://github.com/yan5xu/ququ) | A Chinese desktop voice-to-text workflow and open-source Wispr Flow alternative with a local FunASR Paraformer pipeline, bundled `funasr_server.py`, VAD, punctuation restoration, and optional LLM text optimization. | [Project README](https://github.com/yan5xu/ququ#readme), [FunASR server](https://github.com/yan5xu/ququ/blob/main/funasr_server.py), and [package metadata](https://github.com/yan5xu/ququ/blob/main/package.json). |
| [OpenLess](https://github.com/Open-Less/openless) | An open-source macOS and Windows voice input app whose unified Bailian ASR provider exposes Fun-ASR-Flash recorded-file transcription alongside realtime ASR choices for cursor dictation and AI-prompt workflows. | [Project README](https://github.com/Open-Less/openless#readme), [DashScope multimodal ASR provider](https://github.com/Open-Less/openless/blob/beta/openless-all/app/src-tauri/src/asr/dashscope_multimodal.rs), [provider settings copy](https://github.com/Open-Less/openless/blob/beta/openless-all/app/src/i18n/en.ts), and merged [#793](https://github.com/Open-Less/openless/pull/793). |
| [OmniVoice Studio](https://github.com/debpalash/OmniVoice-Studio) | A local voice-cloning, dubbing, dictation, and audiobook app with both an OpenAI-compatible remote ASR backend for self-hosted FunASR/SenseVoice servers and a native FunASR/SenseVoice + CAM++ path that keeps speaker identities consistent across whole recordings. | [OpenAI-compatible ASR guide](https://github.com/debpalash/OmniVoice-Studio/blob/main/docs/engines/openai-compatible-asr.md), [FunASR backend](https://github.com/debpalash/OmniVoice-Studio/blob/main/backend/services/asr_backend.py), merged [#1003](https://github.com/debpalash/OmniVoice-Studio/pull/1003), and merged [#1167](https://github.com/debpalash/OmniVoice-Studio/pull/1167). |
| [GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS) | Dataset preparation and WebUI transcription with Fun-ASR-Nano, SenseVoice, and classic FunASR models. | [`funasr_asr.py`](https://github.com/RVC-Boss/GPT-SoVITS/blob/main/tools/asr/funasr_asr.py), runtime fallback [#2801](https://github.com/RVC-Boss/GPT-SoVITS/pull/2801), and backend documentation [#2803](https://github.com/RVC-Boss/GPT-SoVITS/pull/2803). |
| [GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS) | Dataset preparation and WebUI transcription with Fun-ASR-Nano, SenseVoice, and classic FunASR models. Its merged Qwen3 dependency fix requires `Transformers >=4.51,<5`, preventing `KeyError: qwen3` before Nano transcription starts. | [`funasr_asr.py`](https://github.com/RVC-Boss/GPT-SoVITS/blob/main/tools/asr/funasr_asr.py), runtime fallback [#2801](https://github.com/RVC-Boss/GPT-SoVITS/pull/2801), backend documentation [#2803](https://github.com/RVC-Boss/GPT-SoVITS/pull/2803), and merged Transformers fix [#2824](https://github.com/RVC-Boss/GPT-SoVITS/pull/2824). |
| [AudioNotes](https://github.com/harry0703/AudioNotes) | Audio and video note extraction to structured Markdown with Fun-ASR-MLT-Nano routed through the Fun-ASR Nano inference profile, including cache, batch size, and list-based hotwords. | [Project README](https://github.com/harry0703/AudioNotes#readme), [FunASR service](https://github.com/harry0703/AudioNotes/blob/main/app/services/asr_funasr.py), and merged [#65](https://github.com/harry0703/AudioNotes/pull/65). |
| [Stet](https://github.com/DengNaichen/Stet) | A macOS local dictation app with an in-process Fun-ASR Nano engine, a universal static runtime derived from FunASR's `llama.cpp` path, Settings-managed encoder/decoder/VAD downloads, runtime reuse, and hotword support from the personal dictionary. | [FunASR package notes](https://github.com/DengNaichen/Stet/blob/main/Packages/StetEngine/Vendor/FunASRPackage/README.md), [Fun-ASR Nano spec](https://github.com/DengNaichen/Stet/blob/main/specs/009-fun-asr-nano/spec.md), and merged release [#44](https://github.com/DengNaichen/Stet/pull/44). |
| [NarratoAI](https://github.com/linyqh/NarratoAI) | An AI video narration and editing app whose OpenAI-compatible transcription endpoint can point subtitle generation at a self-hosted FunASR service. | [FunASR subtitle service](https://github.com/linyqh/NarratoAI/blob/main/app/services/fun_asr_subtitle.py), [configuration example](https://github.com/linyqh/NarratoAI/blob/main/config.example.toml), and merged [#259](https://github.com/linyqh/NarratoAI/pull/259). |
+1 -1
View File
@@ -20,7 +20,7 @@
| [蛐蛐 / QuQu](https://github.com/yan5xu/ququ) | 中文桌面语音转文字工作流,也是 Wispr Flow 的开源替代方案;内置本地 FunASR Paraformer pipeline、`funasr_server.py`、VAD、标点恢复,并可接入 LLM 文本优化。 | [项目 README](https://github.com/yan5xu/ququ#readme)、[FunASR server](https://github.com/yan5xu/ququ/blob/main/funasr_server.py) 和 [package metadata](https://github.com/yan5xu/ququ/blob/main/package.json)。 |
| [OpenLess](https://github.com/Open-Less/openless) | macOS 与 Windows 开源语音输入应用;统一 Bailian ASR provider 暴露 Fun-ASR-Flash 录音文件转写,并与实时 ASR 选项一起服务于光标听写和 AI prompt 工作流。 | [项目 README](https://github.com/Open-Less/openless#readme)、[DashScope multimodal ASR provider](https://github.com/Open-Less/openless/blob/beta/openless-all/app/src-tauri/src/asr/dashscope_multimodal.rs)、[provider settings copy](https://github.com/Open-Less/openless/blob/beta/openless-all/app/src/i18n/zh-CN.ts) 和已合并 [#793](https://github.com/Open-Less/openless/pull/793)。 |
| [OmniVoice Studio](https://github.com/debpalash/OmniVoice-Studio) | 本地语音克隆、配音、听写和有声书应用;既可通过 OpenAI 兼容远程 ASR backend 连接自托管 FunASR/SenseVoice 服务,也提供原生 FunASR/SenseVoice + CAM++ 路径,让整段录音里的 speaker identity 保持一致。 | [OpenAI 兼容 ASR 指南](https://github.com/debpalash/OmniVoice-Studio/blob/main/docs/engines/openai-compatible-asr.md)、[FunASR backend](https://github.com/debpalash/OmniVoice-Studio/blob/main/backend/services/asr_backend.py)、已合并 [#1003](https://github.com/debpalash/OmniVoice-Studio/pull/1003) 和已合并 [#1167](https://github.com/debpalash/OmniVoice-Studio/pull/1167)。 |
| [GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS) | 使用 Fun-ASR-Nano、SenseVoice 和经典 FunASR 模型完成数据集预处理与 WebUI 转写。 | [`funasr_asr.py`](https://github.com/RVC-Boss/GPT-SoVITS/blob/main/tools/asr/funasr_asr.py)、runtime fallback [#2801](https://github.com/RVC-Boss/GPT-SoVITS/pull/2801) 和 backend 文档 [#2803](https://github.com/RVC-Boss/GPT-SoVITS/pull/2803)。 |
| [GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS) | 使用 Fun-ASR-Nano、SenseVoice 和经典 FunASR 模型完成数据集预处理与 WebUI 转写。已合并的 Qwen3 依赖修复要求 `Transformers >=4.51,<5`,避免 Nano 转写开始前触发 `KeyError: qwen3`。 | [`funasr_asr.py`](https://github.com/RVC-Boss/GPT-SoVITS/blob/main/tools/asr/funasr_asr.py)、runtime fallback [#2801](https://github.com/RVC-Boss/GPT-SoVITS/pull/2801)、backend 文档 [#2803](https://github.com/RVC-Boss/GPT-SoVITS/pull/2803) 和已合并 Transformers 修复 [#2824](https://github.com/RVC-Boss/GPT-SoVITS/pull/2824)。 |
| [AudioNotes](https://github.com/harry0703/AudioNotes) | 将音视频内容提取为结构化 Markdown 笔记,并把 Fun-ASR-MLT-Nano 路由到 Fun-ASR Nano 推理配置,保留 cache、batch size 和列表式 hotwords。 | [项目 README](https://github.com/harry0703/AudioNotes#readme)、[FunASR 服务](https://github.com/harry0703/AudioNotes/blob/main/app/services/asr_funasr.py) 和已合并 [#65](https://github.com/harry0703/AudioNotes/pull/65)。 |
| [Stet](https://github.com/DengNaichen/Stet) | macOS 本地听写应用,内置 in-process Fun-ASR Nano 引擎;其 universal static runtime 源自 FunASR `llama.cpp` 路径,并通过 Settings 管理 encoder、decoder、VAD 下载,支持 runtime 复用和个人词典 hotwords。 | [FunASR package 说明](https://github.com/DengNaichen/Stet/blob/main/Packages/StetEngine/Vendor/FunASRPackage/README.md)、[Fun-ASR Nano spec](https://github.com/DengNaichen/Stet/blob/main/specs/009-fun-asr-nano/spec.md) 和已合并 release [#44](https://github.com/DengNaichen/Stet/pull/44)。 |
| [NarratoAI](https://github.com/linyqh/NarratoAI) | AI 视频解说与剪辑应用,可通过 OpenAI 兼容转写 endpoint,把字幕生成连接到自托管 FunASR 服务。 | [FunASR 字幕服务](https://github.com/linyqh/NarratoAI/blob/main/app/services/fun_asr_subtitle.py)、[配置示例](https://github.com/linyqh/NarratoAI/blob/main/config.example.toml) 和已合并 [#259](https://github.com/linyqh/NarratoAI/pull/259)。 |
+2
View File
@@ -73,6 +73,7 @@ PAGE_CONTRACTS: dict[str, PageContract] = {
"https://github.com/0xShug0/audio.cpp",
"https://github.com/0xShug0/audio.cpp/pull/155",
"https://github.com/0xShug0/audio.cpp/blob/1778b23a5f6a4951c788e4bb0e7baa04f20012a2/docs/models/fun_asr_nano.md",
"https://github.com/RVC-Boss/GPT-SoVITS/pull/2824",
),
forbidden=("16K+",),
),
@@ -94,6 +95,7 @@ PAGE_CONTRACTS: dict[str, PageContract] = {
"https://github.com/0xShug0/audio.cpp",
"https://github.com/0xShug0/audio.cpp/pull/155",
"https://github.com/0xShug0/audio.cpp/blob/1778b23a5f6a4951c788e4bb0e7baa04f20012a2/docs/models/fun_asr_nano.md",
"https://github.com/RVC-Boss/GPT-SoVITS/pull/2824",
),
forbidden=("16K+",),
),
@@ -41,7 +41,7 @@
"css/index.1682178c.css": "b5f6034ce886c25773928c114e4290d1c491a3d081677b488810198efd76b4e1",
"decoder.js": "f2023a28036b1ff58e5bdabbb72ea427f8faaf60e89acd78ff183c313bdb0a2c",
"donors.html": "eec6b789b29c27d372925ae0ad3e13d4c6e62978b3c38c4da9e3aec129f10934",
"ecosystem.html": "31d47b029688be0d76b78472e2c880bcdaa1ea6d7bfb42bc35fe4d4850d2359a",
"ecosystem.html": "ed798d76a2ece6140695f76097299d04187c7844c8575b16132d2aadbda96d76",
"en/blog/cantonese-speech-recognition.html": "b9bd146198206f781c37f341c370a690dc83cd7163334e34b4e7f65e69af8ff2",
"en/blog/chinese-speech-recognition.html": "16b68bd2a1122236c580c62275002ae2c0875ca14e32686e88d3b5ccfa9f56ef",
"en/blog/fun-asr-nano-guide.html": "1746c708bd0606188de4266d8255984dd9e14634af33c54ad65a5f05b767be1b",
@@ -75,7 +75,7 @@
"en/blog/voice-activity-detection-python.html": "d12f5d0f4ae07c3434f6188d12f5603b8abb9578413b79133668638d1c5e18a7",
"en/blog/which-funasr-model.html": "1207180aa929a3aa51db136c1098f4edc8f07405e2b56fe033998bf996f8ec7f",
"en/donors.html": "eacb7f9434b1b29e13e9b0175bb9680556ee72ab4dbd155e68f9c912eb0212b1",
"en/ecosystem.html": "8995530458be152971aba62ff6a4004af8d309ecafee82d9807746d058bde1ab",
"en/ecosystem.html": "7fca42c76c1884f26847884c32d29fddc5c020b208979dee0930009d65533c0d",
"en/index.html": "d86effc3bf4d218eabd465cbbe026f62c98dd50110ddd58251d9d271a64882a2",
"en/llama-cpp.html": "dbfbd125ebbf07f7d923c91b122818f8b09484ce54c1e80eba66a89d22dfb5b4",
"en/models.html": "321a63caace107d5ce6d470948c2f5954f2d8e25306d8227b4a85ec3663ad49e",
+2 -2
View File
@@ -258,8 +258,8 @@ footer a{color:#60a5fa}
<div class="card">
<div class="card-title"><a href="https://github.com/RVC-Boss/GPT-SoVITS">GPT-SoVITS</a></div>
<div class="card-stars">58K stars</div>
<div class="card-desc">一分钟语音数据即可训练 TTS。使用 FunASR 进行训练数据标注。</div>
<div><span class="card-tag">TTS</span><span class="card-tag">训练</span></div>
<div class="card-desc">训练数据标注与 WebUI 转写支持 Fun-ASR-Nano、SenseVoice 和经典 FunASR 模型。已合并的 <a href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2824">#2824</a> 将项目依赖修正为 <code>Transformers &gt;=4.51,&lt;5</code>:4.51 是其验证矩阵中首个可构建 Qwen3 的版本,避免选择 Fun-ASR-Nano 后在转写前触发 <code>KeyError: qwen3</code>。另见 <a href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2801">runtime fallback</a> 与 <a href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2803">backend 文档</a>。</div>
<div><span class="card-tag">TTS</span><span class="card-tag">数据集转写</span><span class="card-tag">Qwen3</span></div>
</div>
<div class="card">
<div class="card-title"><a href="https://github.com/mudler/LocalAI">LocalAI</a></div>
@@ -259,8 +259,8 @@ footer a{color:#60a5fa}
<div class="card">
<div class="card-title"><a href="https://github.com/RVC-Boss/GPT-SoVITS">GPT-SoVITS</a></div>
<div class="card-stars">58K stars</div>
<div class="card-desc">1-minute voice data TTS. Uses FunASR for training data annotation — automatic speech-to-text labeling.</div>
<div><span class="card-tag">TTS</span><span class="card-tag">Training</span></div>
<div class="card-desc">Dataset annotation and WebUI transcription support Fun-ASR-Nano, SenseVoice, and classic FunASR models. Merged <a href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2824">#2824</a> corrects the project requirement to <code>Transformers &gt;=4.51,&lt;5</code>: 4.51 is the first version in its validation matrix that constructs Qwen3, preventing <code>KeyError: qwen3</code> before Fun-ASR-Nano transcription starts. See also the <a href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2801">runtime fallback</a> and <a href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2803">backend guide</a>.</div>
<div><span class="card-tag">TTS</span><span class="card-tag">Dataset transcription</span><span class="card-tag">Qwen3</span></div>
</div>
<div class="card">
<div class="card-title"><a href="https://github.com/mudler/LocalAI">LocalAI</a></div>
@@ -293,6 +293,35 @@ for (const viewport of [
});
}
for (const viewport of [
{ name: 'mobile', width: 390, height: 844 },
{ name: 'desktop', width: 1440, height: 900 },
]) {
test(`GPT-SoVITS dependency contract is stable at ${viewport.name}`, async ({ page }, testInfo) => {
await page.setViewportSize(viewport);
for (const route of ['/ecosystem.html', '/en/ecosystem.html']) {
await page.goto(route);
const card = page.locator('.card').filter({ hasText: 'GPT-SoVITS' });
await expect(card).toHaveCount(1);
await expect(card).toContainText('Transformers >=4.51,<5');
await expect(card.locator('.card-tag', { hasText: 'Qwen3' })).toBeVisible();
await expect(card.locator('a[href="https://github.com/RVC-Boss/GPT-SoVITS/pull/2824"]')).toBeVisible();
const layout = await page.evaluate(() => ({
overflow: document.documentElement.scrollWidth - document.documentElement.clientWidth,
}));
expect(layout.overflow).toBeLessThanOrEqual(1);
}
await page.screenshot({
path: testInfo.outputPath(`gpt-sovits-ecosystem-${viewport.name}.png`),
fullPage: true,
});
});
}
test('reduced motion disables smooth scrolling', async ({ page }) => {
await page.emulateMedia({ reducedMotion: 'reduce' });
await page.goto('/en/');
@@ -219,6 +219,13 @@ def test_recent_merged_ecosystem_integrations_are_bilingual_and_attributed():
'pull': 'https://github.com/OpenBMB/UltraEval-Audio/pull/47',
'terms': ('Fun-ASR-Nano', 'revision'),
},
'GPT-SoVITS': {
'repo': 'https://github.com/RVC-Boss/GPT-SoVITS',
'pull': 'https://github.com/RVC-Boss/GPT-SoVITS/pull/2824',
'terms': ('Fun-ASR-Nano', 'Transformers', '4.51', '<5'),
'zh_terms': ('Qwen3', '转写'),
'en_terms': ('Qwen3', 'transcription'),
},
}
for language, path in pages.items():
@@ -239,6 +246,17 @@ def test_recent_merged_ecosystem_integrations_are_bilingual_and_attributed():
assert all(term in text for term in language_terms)
def test_gpt_sovits_community_docs_track_the_merged_qwen3_dependency_fix():
for relative in ('community_projects.md', 'community_projects_zh.md'):
text = (Path(__file__).resolve().parents[3] / 'docs' / relative).read_text(
encoding='utf-8'
)
assert 'https://github.com/RVC-Boss/GPT-SoVITS/pull/2824' in text
assert 'Transformers' in text
assert '4.51' in text
assert '<5' in text
def test_v140_release_pages_are_bilingual_indexed_and_precise():
slug = 'funasr-v1-4-0-pypi-release.html'
pages = {
@@ -393,6 +393,28 @@ def test_ecosystem_refresh_tracks_current_release_and_merged_native_runtime(
assert marker in card_text
@pytest.mark.parametrize('relative', ('ecosystem.html', 'en/ecosystem.html'))
def test_gpt_sovits_card_exposes_the_merged_qwen3_runtime_contract(
built_site, relative
):
soup = read_soup(built_site / relative)
anchor = soup.select_one(
'.card-title a[href="https://github.com/RVC-Boss/GPT-SoVITS"]'
)
assert anchor
card = anchor.find_parent(class_='card')
assert card
links = {link.get('href') for link in card.select('a[href]')}
assert {
'https://github.com/RVC-Boss/GPT-SoVITS/pull/2801',
'https://github.com/RVC-Boss/GPT-SoVITS/pull/2803',
'https://github.com/RVC-Boss/GPT-SoVITS/pull/2824',
} <= links
text = card.get_text(' ', strip=True)
for marker in ('Fun-ASR-Nano', 'Transformers', '>=4.51,<5', 'Qwen3', 'KeyError'):
assert marker in text
@pytest.mark.parametrize(
('relative', 'peer', 'markers'),
(