Text-to-Speech
Transformers
ONNX
GGUF
Chinese
English
voice-dialogue
speech-recognition
large-language-model
asr
tts
llm
chinese
english
real-time
conversational
Instructions to use MoYoYoTech/VoiceDialogue with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use MoYoYoTech/VoiceDialogue with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="MoYoYoTech/VoiceDialogue")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("MoYoYoTech/VoiceDialogue", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use MoYoYoTech/VoiceDialogue with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: llama cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: llama cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: ./build/bin/llama cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Use Docker
docker model run hf.co/MoYoYoTech/VoiceDialogue:Q6_K
- Llama new
- LM Studio
- Jan
- Ollama
How to use MoYoYoTech/VoiceDialogue with Ollama:
ollama run hf.co/MoYoYoTech/VoiceDialogue:Q6_K
- Unsloth Desktop
- Pi
How to use MoYoYoTech/VoiceDialogue with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "MoYoYoTech/VoiceDialogue:Q6_K" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use MoYoYoTech/VoiceDialogue with Docker Model Runner:
docker model run hf.co/MoYoYoTech/VoiceDialogue:Q6_K
- Lemonade
How to use MoYoYoTech/VoiceDialogue with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull MoYoYoTech/VoiceDialogue:Q6_K
Run and chat with the model
lemonade run user.VoiceDialogue-Q6_K
List all available models
lemonade list
- Hermes Agent
How to use MoYoYoTech/VoiceDialogue with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default MoYoYoTech/VoiceDialogue:Q6_K
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use MoYoYoTech/VoiceDialogue with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "MoYoYoTech/VoiceDialogue:Q6_K" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Commit History
-
README: drop DMG section (installer not publicly hosted)
hzeng412 +1: Claude Fable 5Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>9dca1cb -
README: fix model-download instructions for clone install
hzeng412 +1: Claude Fable 5The repo no longer bundles the ASR model: Qwen3-ASR is now the default and is downloaded from HuggingFace on first launch. The old README claimed 'all models bundled via Git LFS, no download needed', which contradicted the auto-download step and left fresh-clone users stuck. - Split models into 'bundled via LFS (~12GB)' vs 'Qwen3-ASR auto- downloaded (~4.4GB) on first run' - Require + verify Git LFS (clone yields pointer files otherwise) - Correct first-launch note (4.4GB, prints progress, needs network) - Add a DMG section for the fully-offline prebuilt installer Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>040114b
-
Bundle Qwen3-ASR weights in packaged app; slim PyInstaller assets
hzeng412 +1: Claude Fable 5- qwen.py resolves model from env var > bundled assets dir > HF download - PyInstaller hook: include assets/models/asr/qwen3-asr-1.7b, exclude legacy funasr/whisper models and superseded TTS .bin weights (weights are not committed; copy to assets/models/asr/qwen3-asr-1.7b before packaging) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>2e4bd5d
-
ASR: use auto language detection to reject non-speech (fixes hallucination)
hzeng412 +1: Claude Fable 5Forcing a language makes Qwen3-ASR output transcription text unconditionally, so silence/noise segments that slip through VAD produce hallucinated words (FunASR/Whisper do this on every such segment). In auto mode the model returns an empty string for non-speech, which the pipeline already drops. Verified: silence, low and medium noise -> '' ; zh/en speech unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>21dbad4
-
Make Qwen3-ASR the default on main; bump to 1.2.0
hzeng412 +1: Claude Fable 5- pyproject/uv.lock: add qwen-asr, transformers 4.57.6, fastapi 0.136.3 (torch stays 2.3.1) so a fresh clone + uv sync just works - TTS weights: auto-convert .bin -> safetensors on first launch (required by transformers >= 4.56 on torch < 2.6) - ASR manager falls back to funasr/whisper if qwen-asr is unavailable - README: Qwen3-ASR description, first-launch download note, v1.2.0 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>3c70498 -
Add audio output device (speaker) selection
hzeng412 +1: Claude Fable 5- devices.py: enumerate output devices, default lookup, validation - player.py: PyAudio playback path for an explicit output device with sample-rate fallback (soxr resample); default device keeps playsound - AudioPlayerService reads the saved output index per sentence, so a settings change applies to the next utterance without restart - API: /system/audio-devices now includes output devices; POST /system/audio-output-device persists immediately; /system/start accepts output_device_index - UI: speaker select in settings (main tab), persisted in store, sent on start Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>a3bf559 -
Show the active ASR engine in the UI
hzeng412 +1: Claude Fable 5- New GET /api/v1/system/asr-engine returns language mappings + display name - Welcome page: glass chip left of the settings button with the engine name - About tab: ASR model line and repo links now reflect the running engine (Qwen3-ASR-1.7B vs FunASR Paraformer + Whisper medium) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>c3f5082 -
Add script to convert TTS .bin weights to safetensors
hzeng412 +1: Claude Fable 5Needed on this branch: qwen-asr upgrades transformers to 4.57, which refuses torch.load of .bin files on torch < 2.6 (CVE-2025-32434). The converted model.safetensors files are generated locally and are intentionally not committed (~840MB). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>e73f2e4 -
Fix websocket route registration for starlette >= 1.0
hzeng412 +1: Claude Fable 5add_websocket_route was removed; the ws APIRouter already declares its full path, so include_router is the correct registration. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>a17b420 -
ASR: add Qwen3-ASR engine, default zh/en to it on this branch
hzeng412 +1: Claude Fable 5- New QwenASRClient (Qwen/Qwen3-ASR-1.7B via qwen-asr, transformers backend, MPS bf16) - Language mapping zh/en -> qwen; VOICE_DIALOGUE_ASR=legacy restores funasr/whisper - ASRService now passes session language to transcribe() Requires: uv pip install qwen-asr (upgrades transformers to 4.57) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>417ffa1
-
README: lead with GUI (clone-and-run) quick start, move CLI after
hzeng412 +1: Claude Opus 4.8 (1M context)Restructure 快速开始: clone (models bundled via LFS) -> install -> start API server -> open http://localhost:8000/app/ GUI as the primary, recommended path. CLI moved to section 3 (incl. --list-audio-devices/--input-device). Add GUI feature bullet, fix Qwen2.5->Qwen3, bump version badge to 1.1.0, note Git LFS + macOS Apple Silicon. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>3c3f610 -
Electron: open external links in system browser
hzeng412 +1: Claude Opus 4.8 (1M context)Add setWindowOpenHandler so target=_blank links (e.g. the About tab's model/repo links) open in the default browser instead of navigating inside the app. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>89dd896 -
Add About tab in settings (models used + repo links)
hzeng412 +1: Claude Opus 4.8 (1M context)New 'About' tab (last) showing the models in use (Qwen3-8B LLM, Whisper/FunASR ASR, MoYoYo TTS/Kokoro) with upstream links, plus the MoYoYoTech/VoiceDialogue and tone-models repo links and copyright. Bilingual (zh/en). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>45d25d1 -
Add external mic array support, UI i18n, glass settings redesign, and fixes
hzeng412 +1: Claude Opus 4.8 (1M context)Backend: - Audio: input-device selection + multichannel downmix/resample to 16k mono (devices.py, pyaudio_capture.py); facade routes default-device to native macOS AEC, external device to PyAudio (capture/__init__.py) - API: GET /system/audio-devices, input_device_index in /system/start with persistence (audio_config.py); default system/ASR language set to Chinese (lifespan.py) - CLI: --input-device and --list-audio-devices Frontend: - vue-i18n setup (en/zh), default UI + ASR language Chinese - Unified tabbed Settings dialog (Main/Language/Prompt) replacing scattered modals; fixed-height tabs; mic + interface/recognition language icons - Liquid-glass styling (frosted modal, glass buttons, smooth ant-fade open with backdrop-blur background) - Wider caption area; unified bottom action-button height across Welcome and Home Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>afd6c89
-
Update project docs.
liumaolin2f3888a -
refactor(core): Architecturally decouple Audio, ASR, and TTS modules
liumaolinThis major refactoring decouples core functionalities from the services layer, establishing clearer architectural boundaries and improving modularity. The changes adhere to the principles of Separation of Concerns and single-responsibility, making the system more maintainable and extensible. Key changes include: 1. **Decoupled Audio Subsystem (Strategy Pattern)**: - The monolithic `AudioCapture` class has been split into multiple, single-responsibility components within the `audio/` directory. - `base_capture.py` introduces an abstract base class for all capture strategies. - `pyaudio_capture.py` and `aec_capture.py` provide concrete implementations for standard and echo-cancelled audio capture. - The main `capture.py` now acts as a Facade, selecting the appropriate capture strategy at runtime, hiding implementation details from the rest of the application. 2. **Introduced PlayerService to Separate Concerns**: - Resolved a reverse dependency where `audio/player…60f8238
-
简化LLM模型路径管理。
liumaolin2baeba2
-
打包Python时默认激活Python虚拟环境
liumaolinb319d19 -
修复electron app打包时,需要notary两次的问题
liumaolin00c731a -
[fix]: notarize debug info.
Xin Zhang0d40789
-
更新前端资源文件
liumaolinf7c398e -
[fix]: role bugfix.
Xin Zhang6883144
-
为LLMResponseGenerator类添加TaskStatusMixin混入,以增强任务有效性检查功能,确保在生成回答时任务状态的有效性。
liumaolind205383 -
Update frontend assets.
liumaolineeb7fe5
-
Merge branches 'main' and 'main' of hf.co:MoYoYoTech/VoiceDialogue
Xin Zhang4029b29 -
[fix]: voice selection bugfix.
Xin Zhang797cd52 -
更新音频任务处理逻辑,使用模型副本替代原始任务对象,以确保数据一致性和完整性。
liumaolin2c7e742 -
重构处理LLM生成chunk内容的方法,以提高文本生成的准确性。
liumaoline3d17e2 -
去除对 LLM 输出的处理
liumaolin08fc60d
-
更新LLM模型参数,调整top_p值为0.8,并添加max_tokens参数,设置为32768。
liumaolinc531bfc -
更新用户配置文件,修复logger导入路径以确保正确加载日志记录功能。
liumaolinbbf79f2
-
更新加载页面图标路径,添加新的图标文件至assets/images目录。
liumaolinfb2e3d6 -
更新前端文件
liumaolin1cc5d82 -
[fix]: improve style.
Xin Zhang31e11af -
[fix]: remove frontend ref audio.
Xin Zhang8ba9c84 -
Merge branch 'main' of hf.co:MoYoYoTech/VoiceDialogue
Xin Zhang* 'main' of hf.co:MoYoYoTech/VoiceDialogue: 添加获取TTS模型参考音频的API路由,支持通过模型ID获取音频文件。f71be4e -
[feature]: update prompt config.
Xin Zhangd35a0ba -
添加获取TTS模型参考音频的API路由,支持通过模型ID获取音频文件。
liumaolin226effc -
Merge branch 'main' of hf.co:MoYoYoTech/VoiceDialogue
Xin Zhang* 'main' of hf.co:MoYoYoTech/VoiceDialogue: 更新API文档 缓存user_prompts以提高性能 调整prompt的逻辑,确保展示的提示词中不包含/no_think指令 添加设置相关的API路由 在测试文件中添加对中文和英文系统提示的导入检查,以确保在未定义时能够正确加载配置。 调整LLM prompt的存放位置 增强任务有效性检查,添加日志记录以便于调试。 在生成TTS音频时始终记录生成信息。8ead306 -
[feature]:prompt config.
Xin Zhang73e6ae0
-
更新API文档
liumaolin5258538 -
缓存user_prompts以提高性能
liumaolind12af4f -
调整prompt的逻辑,确保展示的提示词中不包含/no_think指令
liumaolin22a06c4 -
添加设置相关的API路由
liumaolin- 支持用户自定义提示词的获取、更新和重置功能 - 同时更新应用数据存储路径的获取逻辑。15ab478 -
在测试文件中添加对中文和英文系统提示的导入检查,以确保在未定义时能够正确加载配置。
liumaolin1816130 -
调整LLM prompt的存放位置
liumaolin310c0ba -
增强任务有效性检查,添加日志记录以便于调试。
liumaolinb7ae839 -
在生成TTS音频时始终记录生成信息。
liumaolin3a6b6fc -
在`SpeechStateMonitor`类的初始化过程中调用该方法,确保在创建新语音任务时中断任务ID被正确重置。
liumaolin259c23b
-
更新electron-app的package.json文件,设置版本号为日期。
liumaolin5f0761d