Several model families cover different speech jobs
FunASR is a toolkit around multiple speech models rather than one recognizer. Fun-ASR-Nano covers Chinese, English, Japanese, dialect groups, and regional accents. A separate MLT Nano checkpoint covers 31 languages. SenseVoiceSmall combines five-language recognition with emotion and audio-event tags, while Paraformer has a streaming variant. Voice activity detection, punctuation, and CAM++ speaker processing can be composed around the selected recognizer.
That modularity is useful when a product needs timestamps, speaker labels, streaming partials, or training code. It also makes model selection part of engineering. Language coverage is checkpoint-specific, diarization may depend on a separate speaker model, and some output fields require timestamp-capable weights. The README's model-selection and migration guides are worth reading before downloading anything, since a successful transcript alone does not prove the pipeline can deliver subtitles or speaker attribution.
Python, OpenAI API, MCP, and llama.cpp are separate paths
The Python API uses AutoModel to load an ASR checkpoint and optional VAD, punctuation, or speaker components. A command-line client can emit text, JSON, SRT, or speaker-attributed output. For services, funasr-server exposes an OpenAI-compatible transcription endpoint on localhost port 8000, and the repository includes an MCP server for Claude, Cursor, and other compatible clients. Training examples and vLLM deployment serve larger research and batch workloads.
Edge deployment follows a different runtime. Prebuilt llama.cpp and GGUF packages run SenseVoice, Paraformer, or Nano without a Python ASR runtime. The latest runtime release provides CPU assets plus selected Vulkan and CUDA variants. These choices are alternatives, not interchangeable installation flags. A Python CUDA environment, a self-contained CPU binary, and a Windows Vulkan archive have different model formats, drivers, failure modes, and update procedures.
What happened when we ran it
Our sandbox installed 94 Python packages in 44 seconds and used 644 MB on disk. Building commit 3c58cb5 succeeded in 13 seconds. The checkout contained 3,928 files, roughly 440,080 lines of source, and 102.8 MB before dependencies. The scan found 7 CI workflow files, no Dockerfile, and a tests directory. Pip-audit reported 0 known vulnerabilities in the installed packages.
Pytest failed after 21 seconds with exit code 3. It executed 0 tests and recorded 1 collection or setup error. The log tail passes through Python 3.12's argparse code and ends with SystemExit: 2, followed by 2 warnings and the collection error. The excerpt does not show which command-line argument triggered the parser, so claiming a missing package or incompatible option would exceed the evidence.
We ran this in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. No model was downloaded, no audio was transcribed, and no GPU, OpenAI-compatible endpoint, or MCP client was exercised. The 13-second build confirms the package build path; it does not validate recognition accuracy, throughput, language coverage, timestamps, or the runtime assets described elsewhere in the repository.
Issue 3496 makes checkpoint source part of the configuration
Open issue 3496 compares the Fun-ASR-Nano checkpoint hosted by Hugging Face with the copy on ModelScope. The reporter found 86 CTC-related tensors absent from the Hugging Face model.pt. Text recognition still worked, but native character timestamps and the CAM++ diarization path did not. Replacing that file with the ModelScope checkpoint reportedly restored timestamps and speaker-attributed segments.
This is an artifact-integrity problem with a practical trap: a smoke test that checks only transcript text can pass while required metadata is missing. Pin the repository, revision, filename, and checksum for every model. Test timestamp arrays and speaker segments directly. If two hubs are offered, do not assume equivalent names mean byte-equivalent weights. Issue 3496 provides hashes and tensor counts that can support a deployment check until the published artifacts converge.
Windows GPU packages need exact hardware testing
Release runtime-llamacpp-v0.2.1 publishes self-contained binaries for SenseVoice, Paraformer, and Nano. Its Windows CUDA asset targets architecture 86, while the README tells other architectures to use CPU or build from source. Vulkan packages rely on a working driver and currently accelerate SenseVoiceSmall. Those constraints should be matched against the actual GPU before choosing an archive.
Issue 3479 reports that the v0.1.9 Windows Vulkan build crashed with access violation 0xc0000005 on an AMD RX 7600M XT and integrated 780M. The reporter tried several Vulkan settings and driver versions; CPU mode worked. A newer release may change that behavior, but the open issue had activity on August 25. Run a full audio file on the exact driver and device, then verify fallback behavior before promising GPU acceleration.
MIT toolkit code does not settle model-weight rights
The repository code uses the MIT license. The README separately says pretrained weights follow the license on each model card, and some cards link to FunASR's own model agreement. Issue 3458 asks maintainers to clarify commercial self-hosting, redistribution, quantization, fine-tuning, attribution, and whether model-card Apache terms govern four pinned checkpoints. The issue's questions are not answers.
Record the license for every fixed model revision and keep the associated notices with deployment artifacts. Redistributing weights in a container is a different act from keeping them on a server and returning transcripts. Legal review belongs before packaging, especially when several checkpoints form one pipeline. GitHub recorded 20,035 stars, 4 combined issues and pull requests, a push on August 26, 2026, and a runtime release the same day, so maintenance is active even though these artifact and licensing questions remain.

