Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/community_projects.md
Original file line number Diff line number Diff line change
Expand Up @@ -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). |
Expand Down
2 changes: 1 addition & 1 deletion docs/community_projects_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)。 |
Expand Down
2 changes: 2 additions & 0 deletions scripts/check_funasr_website_static.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ class StaticAssetContract:
"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+",),
),
Expand All @@ -94,6 +95,7 @@ class StaticAssetContract:
"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+",),
),
Expand Down
4 changes: 2 additions & 2 deletions web-pages/product-site/content/legacy-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions web-pages/product-site/legacy/ecosystem.html
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,8 @@ <h2>AI 平台与框架</h2>
<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>
Expand Down
4 changes: 2 additions & 2 deletions web-pages/product-site/legacy/en/ecosystem.html
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,8 @@ <h2>AI Platforms & Frameworks</h2>
<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>
Expand Down
29 changes: 29 additions & 0 deletions web-pages/product-site/tests/browser/product-site.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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/');
Expand Down
18 changes: 18 additions & 0 deletions web-pages/product-site/tests/test_legacy.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand All @@ -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 = {
Expand Down
22 changes: 22 additions & 0 deletions web-pages/product-site/tests/test_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'),
(
Expand Down
Loading