Deployment contract
audio.cpp native Fun-ASR-Nano
Run Fun-ASR-Nano Q8_0 with native C++ and GGML on CPU or CUDA, using a CLI or local OpenAI-compatible transcription service.
Workload boundary
Decide whether it fits your production constraints
Good fit
- No Python inference environment
- Desktop, edge, and offline batch transcription
- A local OpenAI-compatible audio endpoint is required
Not a fit
- Realtime streaming results or timestamps
- FunASR model families other than Fun-ASR-Nano
- Internet-facing service before capacity and accuracy tests on target hardware
| Models | Fun-ASR-Nano-2512 |
|---|---|
| Hardware | cpu / nvidia-gpu / desktop-edge-gpu |
| Operating systems | Linux / macOS / Windows |
| Interfaces | CLI / OpenAI-compatible HTTP |
Run path
From installation to known-audio verification
These commands come from the current verification registry. Pin dependencies, model, and hardware before rollout.
Install
git clone https://github.com/0xShug0/audio.cpp.git && cd audio.cpp
bash scripts/build_linux.sh --backend cpu --model-set custom --models fun_asr_nano --target audiocpp_cli --target audiocpp_server
python3 tools/model_manager_v2.py install fun_asr_nano
Launch
build/linux-cpu-release/bin/audiocpp_cli --task asr --family fun_asr_nano --model models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf --backend cpu --audio speech.wav --text-out transcript.txt
printf '%s\n' '{"host":"127.0.0.1","port":8080,"backend":"cpu","threads":4,"lazy_load":true,"models":[{"id":"fun-asr-nano","family":"fun_asr_nano","path":"models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf","task":"asr","mode":"offline"}]}' > server.json
build/linux-cpu-release/bin/audiocpp_server --config server.json
Health check
curl -fsS http://127.0.0.1:8080/health
curl -fsS http://127.0.0.1:8080/v1/models
Smoke test
Minimum verification before promotion
curl -fsS http://127.0.0.1:8080/v1/audio/transcriptions -F model=fun-asr-nano -F language=auto -F file=@speech.wav
Operations and capacity
Move from runnable to operable
Operational checks
- Pin the audio.cpp commit and GGUF revision
- Verify a known WAV transcript before business traffic
- Measure cold start, warm RTF, memory, and concurrent queueing separately
Capacity variables
- Audio duration, language, channels, and VAD segment distribution
- Concurrency, queue time, warmup, and model-cache state
- Exact hardware, driver, runtime, and thread configuration
Troubleshooting
- Start with CPU and Q8_0 to isolate CUDA setup
- Match the compiled backend to the runtime argument
- For input failures, verify WAV decoding, mono conversion, and 16 kHz resampling
Security boundary
Treat production ingress as untrusted
- Bind the service to 127.0.0.1 or a trusted private network
- Enforce upload size, MIME, authentication, and concurrency at the proxy
- Load only GGUF and configuration files verified with SHA-256
Known limitation
The current path returns offline transcript text only and exposes neither streaming nor timestamps; use the corresponding FunASR runtime for other model families.
Public benchmarks are reproduction starting points, not substitutes for target-workload testing.
Evidence and feedback