mrkeyoor.com_
Sun 01 Nov 03:59 UTC
AI Toolsevaluationupdated 29 Sept 2026

FunASR review

FunASR is a Python toolkit for offline and streaming speech recognition, voice activity detection, punctuation, speaker pipelines, emotion tags, and speech serving. Its main README is English and links Simplified Chinese, Japanese, and Korean versions, but each checkpoint and runtime supports a different slice of those jobs.

+67stars / 7d
Verdict

Our FunASR run used 6,040 MB and built in 7 seconds, but pytest executed 0 tests because collection/setup ended with SystemExit: 2. Trial it when its Chinese and multilingual checkpoints, streaming path, or edge runtimes solve a requirement that a narrower Whisper stack does not. Do not ship until your exact checkpoint, model license, device placement, and representative audio set pass a separate acceptance suite.

We ran it

Lab card: what happened when we ran FunASRScreenshot of FunASR (github.com/modelscope/FunASR)
Install✓ · 111s155 packages · 6040 MB
Build✓ · 7s
Tests✗ · 28s0 passed · 0 failed · 1 errors of 1 (pytest)
Known vulns0(pip-audit)
Repo4118 files~459,667 lines of source · 105 MB · 16 CI workflows · tests dir

Answers from our run

Does FunASR build from source?

Dependencies installed in 111 seconds (155 packages), and the build succeeded in 7 seconds. We cloned commit 2d4566d into a clean Debian container with 3 CPUs and no project-specific setup.

Do FunASR's tests pass?

No. The project's own test command finished in 28 seconds and reported 0 passed, 0 failed, 1 collection error (pytest).

Does FunASR have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use FunASR?

Disk-constrained environments: our install added 155 packages and occupied 6,040 MB before downloading the model weights needed for inference.

What are the alternatives to FunASR?

Whisper, faster-whisper, sherpa-onnx. Our FunASR run used 6,040 MB and built in 7 seconds, but pytest executed 0 tests because collection/setup ended with SystemExit: 2.

Setup2/5111-second install used 6,040 MB and pytest never collected
Docs5/5Model, runtime, device, license, and deployment limits are explicit
Community5/520,547 stars with code and issue activity on September 29
Maturity3/5Many runtimes exist, but our full test command failed at collection

Who it’s for

Speech teams that need Chinese, English, Japanese, dialect, or broader multilingual checkpoint choices.
Developers building offline transcription, streaming recognition, subtitles, or speaker-aware file processing.
Operators who need Python, OpenAI-compatible HTTP, MCP, WebSocket, GPU, or GGUF edge paths.
Researchers and product teams willing to benchmark their own recordings and pin the exact model revision.

Who it’s NOT for

Disk-constrained environments: our install added 155 packages and occupied 6,040 MB before downloading the model weights needed for inference.
Release processes that require a clean full-suite signal: pytest exited during collection/setup with SystemExit: 2, so 0 tests passed and 0 failed.
Teams expecting one model to cover every language, timestamp, streaming, speaker, and deployment path: the README assigns those jobs to different checkpoints and runtimes.
Distributors who assume the toolkit's MIT license covers model weights: FunASR says model licenses are separate, and issue 3715 seeks clarification for SenseVoice-Small redistribution.
Ascend NPU operators who cannot pin their PyTorch stack: issue 3707 reports a default install replacing the required torch and torch_npu pairing.
Shared diarization services without CPU controls and load tests: issue 3698 reports spectral clustering saturating every CPU core on its reproduced path.

Setup reality

Our sandbox installed commit 2d4566d in 111 seconds, adding 155 packages and using 6,040 MB on disk. The build passed in 7 seconds. Pytest failed with exit 3 after 28 seconds: 0 passed, 0 failed, and 1 collection/setup error. Pip-audit found 0 known vulnerabilities.

Before FunASR, you need a PyTorch and torchaudio build matched to the chosen CPU or accelerator. Useful inference then downloads a checkpoint and may need optional packages for its backend. Public local models need no hosted speech API secret, while private model stores or remote integrations may add credentials.

The 105 MB checkout held 4,118 files and about 459,667 source lines. Checkpoint, language coverage, timestamps, streaming mode, and runtime are separate choices. The documented HTTP quick start is unauthenticated and bound to loopback; exposing it requires the project's security guidance.

FunASR is a matrix of models and runtimes

FunASR is best understood as a speech toolkit rather than one recognizer. Its catalog covers offline and streaming transcription, VAD, punctuation, speaker embeddings, emotion tags, and several serving paths. The choice starts with the job. Fun-ASR-Nano, the separate 31-language MLT-Nano checkpoint, SenseVoiceSmall, and streaming Paraformer do not promise the same languages or outputs. The README says so plainly, which saves buyers from assuming that a feature in one row exists everywhere.

That separation also explains the project's appeal. Python users get AutoModel, a CLI can emit JSON or SRT, and an OpenAI-compatible server can sit behind existing clients. An MCP example targets Claude and Cursor. Edge deployments can use GGUF with a native llama.cpp runtime, while the documented high-volume Nano path uses vLLM. A team can cover several speech products without forcing every workload through one backend.

What happened when we ran it

Our sandbox installed commit 2d4566d in 111 seconds and added 155 packages. The environment occupied 6,040 MB on disk before any model weights were counted. A build completed in 7 seconds. We used a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets. Pip-audit reported 0 known vulnerabilities.

The test command failed with exit 3 after 28 seconds. Pytest reported 0 passed, 0 failed, and 1 collection/setup error out of 1. The log tail shows pytest inside Python's argparse machinery, ending with SystemExit: 2, followed by 1 error in 20.58s. It does not identify a failed speech assertion, missing package, or defective model, so assigning a cause would go beyond the evidence.

The repository did have a tests directory and 16 CI workflow files. Our complete command simply did not reach the tests in this container. That distinction matters: FunASR did not fail an accuracy check in our run, because no accuracy check ran. It also did not give us a green source-level release signal. Teams modifying it should reproduce the collection failure and select the relevant upstream suites before relying on a fork.

The 6,040 MB install is only the base layer

The checkout itself was 105 MB across 4,118 files and roughly 459,667 source lines. Installation expanded that to 6,040 MB. Inference adds separately downloaded weights, and the model table ranges from small pipeline components to checkpoints with hundreds of millions or more than a billion parameters. We did not measure download size, transcription speed, word error rate, or memory use, so none of those belongs in a verdict about our run.

Setup begins by matching PyTorch and torchaudio to the actual hardware. The README tells CPU users to use the normal wheels and GPU users to install a CUDA-compatible build first, then confirm that PyTorch sees the device. The local SenseVoice service adds FastAPI, Uvicorn, and multipart handling. It binds to 127.0.0.1:8000 without authentication, an appropriate default for a trial and an unsafe endpoint to publish unchanged.

v1.4.16 fixes mixed-device configuration, not every device path

Release v1.4.16 shipped on September 18, 2026. Its main runtime fix preserves explicit device choices for VAD, punctuation, and speaker submodels across repeated inference calls. The notes also clarify when punctuation needs a separate CT-Transformer and add versioned guides for native Transformers. Those are useful corrections for a toolkit where the ASR model and its helper stages may belong on different processors.

The release notes carefully limit their claim. Mixed-device regressions were checked with CPU-resident stand-in weights and mocked accelerator availability, not certified on CUDA, MPS, or NPU hardware. Nine attached native archives come from a separately versioned llama.cpp source commit and do not carry Python-only fixes. Treating v1.4.16 as one interchangeable artifact would erase exactly the boundary its maintainers document.

MIT covers the toolkit code, not every checkpoint

FunASR's repository code uses the MIT license. The README says pretrained weights have separate terms and directs users to each model card. Open issue 3715 asks for an immutable license answer for a pinned SenseVoice-Small revision and an ONNX redistribution, including whether commercial use, conversion, and redistribution are permitted. The issue remains a question, not proof that those uses are forbidden.

This distinction deserves a release check, especially for desktop bundles, appliances, or hosted products that redistribute weights. Record the checkpoint revision, its license file, the download source, and the terms reviewed by your organization. A code scan that sees only MIT misses the artifact that performs the transcription.

Current reports expose CPU and NPU edges

Issue 3698 reports that CAM++ speaker clustering can saturate every CPU core on the default spectral-clustering path, including a reproduction against current main. Issue 3707 reports that installing FunASR in an Ascend NPU environment may replace the strict torch and torch_npu pairing. These are specific user reports, not results from our Debian sandbox, but both identify acceptance tests worth running on shared or specialized hardware.

GitHub showed 20,547 stars and 35 combined open issues and pull requests on September 29, 2026. The repository was pushed that day, and v1.4.16 had arrived 11 days earlier. That activity supports continued evaluation, while the failed collection in our run keeps the recommendation conditional. Pick one checkpoint and runtime, pin both, then make your own audio and hardware the gate.

Alternatives

ProjectWhat it isPick it when
Whisper gh↗OpenAI's multilingual speech-recognition and translation model with a direct Python and CLI workflow.pick this instead when one familiar multilingual model matters more than FunASR's pipeline and deployment choices.
faster-whisper gh↗A CTranslate2 implementation of Whisper for local transcription and batching.pick this instead when your application is already standardized on Whisper and wants a narrower inference stack.
sherpa-onnxAn offline ONNX speech stack covering recognition, diarization, VAD, and many device targets.pick this instead when embedded platforms, mobile SDKs, or a non-Python runtime are the main requirement.

Sources

  1. FunASR repository and README
  2. FunASR 1.4.16 release
  3. FunASR measured commit 2d4566d
  4. SenseVoice-Small license clarification issue
  5. Speaker clustering CPU saturation issue
  6. Ascend NPU installation issue

More ai tools reviews

pr-agent · agent-sprite-forge · KiroCrew · Orkas · hypit · Paradev · the whole board →