Overview
FunASR is an end-to-end speech recognition toolkit maintained by ModelScope. Rather than shipping a single model, it is a framework in which you pick a task, a checkpoint and a runtime separately — so the same Python API covers offline file transcription, streaming recognition and edge deployment.
Around plain transcription it bundles the pieces a production pipeline normally needs: voice-activity detection (FSMN-VAD), punctuation restoration, speaker models such as CAM++ for speaker-aware segmentation, and checkpoints that also emit emotion and audio-event tags. The AutoModel class composes these into one call, returning VAD segments with timestamps and speaker indices rather than a flat block of text.
The model zoo spans several families. Fun-ASR-Nano covers Chinese, English, Japanese plus Chinese dialect groups and regional accents, with a separate Fun-ASR-MLT-Nano checkpoint for 31 languages; SenseVoiceSmall is a five-language CPU-first option that adds emotion and audio-event tags, and ships a GGUF build for edge devices. For serving, FunASR offers an OpenAI-compatible API path, an MCP server, and vLLM-accelerated batch inference.
What it does
- One AutoModel API composing ASR with VAD, punctuation, speaker and emotion models into a single pipeline call
- Offline, streaming and edge deployment paths from the same toolkit, with a published deployment matrix per checkpoint
- Model zoo including Fun-ASR-Nano, the 31-language Fun-ASR-MLT-Nano, and the CPU-first SenseVoiceSmall with emotion and audio-event tags
- Speaker-aware output: CAM++ speaker embeddings are clustered and assigned to VAD segments with per-recording speaker indices
- vLLM-accelerated batch inference via AutoModelVLLM for high-throughput transcription jobs
- Agent-facing serving options — an MCP server and an OpenAI-compatible API — alongside a GGUF edge checkpoint
Getting started
FunASR installs from PyPI on top of PyTorch. CPU-only installs can use the default PyPI wheels; for GPU, install the torch and torchaudio wheels matching your NVIDIA driver from pytorch.org first, and only pass device="cuda" once torch.cuda.is_available() prints True.
Install FunASR
Install PyTorch and torchaudio, then the toolkit itself.
# CPU-only installs can use the default PyPI wheels.
pip install torch torchaudio
pip install funasrTranscribe a file with Fun-ASR-Nano
Load a checkpoint through AutoModel and call generate on an audio path or URL.
from funasr import AutoModel
model = AutoModel(model="FunAudioLLM/Fun-ASR-Nano-2512", device="cuda")
result = model.generate(input="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav")
print(result[0]["text"])Add VAD and speaker segmentation on CPU
SenseVoiceSmall covers five languages and emits emotion and audio-event tags. Combining it with FSMN-VAD and CAM++ returns segments carrying start times and speaker indices; the indices are local to the recording, not known identities.
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
model = AutoModel(model="iic/SenseVoiceSmall", vad_model="fsmn-vad", spk_model="cam++", device="cpu")
result = model.generate(
input="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav",
batch_size_s=300,
)
for seg in result[0]["sentence_info"]:
print(f"[{seg['start']/1000:.1f}s] Speaker {seg['spk']}: {rich_transcription_postprocess(seg['sentence'])}")Scale up with vLLM
For batch throughput, run the flagship checkpoint through the vLLM-backed entrypoint.
from funasr.auto.auto_model_vllm import AutoModelVLLM
model = AutoModelVLLM(model="FunAudioLLM/Fun-ASR-Nano-2512", tensor_parallel_size=1)
results = model.generate(["audio1.wav", "audio2.wav"], language="auto")Commands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Transcribe Chinese, English and Japanese audio — including dialects and regional accents — with one toolkit rather than a per-language stack
- Build a speaker-aware transcription pipeline where VAD, punctuation and speaker clustering are composed in a single call
- Run five-language ASR with emotion and audio-event tags on CPU, or on edge hardware via the GGUF checkpoint
- Expose transcription to agents through FunASR's MCP server or its OpenAI-compatible API endpoint
How FunASR compares
FunASR alongside other open-source audio, music & voice tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| Whisper | ★ 109k | OpenAI's speech recognition model that transcribes and translates audio across many languages. |
| GPT-SoVITS | ★ 61.8k | An open-source WebUI that clones a voice from a short audio sample and turns text into speech, with zero-shot and few-shot fine-tuning. |
| VibeVoice | ★ 54.3k | Microsoft's text-to-speech model for generating long, expressive multi-speaker audio like podcasts. |
| Voicebox | ★ 54.3k | Local-first voice studio that clones a voice from a short sample, generates speech across seven TTS engines and 23 languages, handles system-wide dictation, and speaks for agents over MCP. |
| whisper.cpp | ★ 53.7k | A dependency-free C/C++ port of Whisper built on ggml, running speech recognition on CPU, Metal, CUDA, Vulkan and NPUs from phones to servers. |
| Coqui TTS | ★ 46k | A library of text-to-speech models including the multilingual XTTS voice-cloning model. |
| ChatTTS | ★ 39.8k | ChatTTS is an open-source text-to-speech model tuned for dialogue, with multi-speaker support and fine-grained control over laughter, pauses, and prosody. |
| FunASR | ★ 20.4k | Industrial speech toolkit: ASR, VAD, punctuation and speaker pipelines |