NVIDIA Nemotron 3.5 Transcribe: 40 Languages, Speaker Labels, and Local Setup
See what NVIDIA Nemotron 3.5 Transcribe (30B-A4B) actually does across 40 languages and overlapping speakers, how it compares to Whisper and Parakeet, how much VRAM you need.
Summary
- NVIDIA Nemotron 3.5 Transcribe (30B-A4B) combines 40-language transcription, overlapping speaker diarization, word-level timestamps.
- Although only 4B parameters activate per token, all 30B weights must stay in memory: 67.5 GB in BF16, 21.6 GB in NVFP4.
- Compared to Parakeet TDT v3 (~1 GB VRAM) and Whisper large-v3, Nemotron 3.5 Transcribe is heavier and slower on simple single-speaker clips.
- You can serve the model locally via SGLang-Omni or NeMo-Speech.cpp and process meeting recordings through a standard /v1/audio/transcriptions endpoint.
When NVIDIA released the open weights for NVIDIA-Nemotron-3.5-Transcribe-30B-A4B, the pitch immediately caught my attention: a single model that handles speech transcription across 40 languages, labels multiple speakers even when they talk over each other, generates word-level timestamps, and translates audio without chaining three separate tools together. Under the hood, it is a 30-billion-parameter Speech-Audio Language Model (SALM) built on a hybrid Mixture-of-Experts (MoE) architecture that activates roughly 4 billion parameters per token.
Before you start downloading 20 to 68 gigabytes of weights, there is one major boundary you need to know upfront. Nemotron 3.5 Transcribe only processes recorded audio files—such as saved meeting recordings, interviews, or call exports up to an hour long—and does not support real-time microphone streaming.
It is easy to mix this up because NVIDIA also maintains a completely separate, lightweight model named nemotron-3.5-asr-streaming-0.6b that powers low-latency dictation tools on consumer laptops. If you want live captions appearing on screen while someone is speaking in a room or on a call, this 30B model is not built for that workflow, and you are better off using one of the dedicated live caption apps for Mac or a streaming 0.6B model. If what you have is a finished recording where people interrupt each other, switch languages mid-sentence, or use specialized terminology, Nemotron 3.5 Transcribe is designed to process that file in one pass.
On this page
What the 30B-A4B Model Covers: 40 Languages, Code-Switching, and Overlapping Speakers
For the last few years, getting a speaker-labeled, translated meeting transcript locally meant building a fragile pipeline. You ran an acoustic model like Whisper or Parakeet to get the raw words, ran a second model like pyannote to cluster voices by timestamp, wrote a script to align the two outputs, and then passed the text to a local or cloud LLM for translation. Whenever two people talked at the same time during a heated meeting, the timestamp alignment drifted and attributed half a sentence to the wrong person.
Nemotron 3.5 Transcribe folds all of those stages into one model by pairing a Conformers-based audio encoder with a 30B-A4B language decoder and a dedicated Connectionist Temporal Classification (CTC) timestamp head (ctc_timestamp.*, configured via word_timestamp_config in the checkpoint). Instead of treating speaker changes as an acoustic clustering problem bolted on after transcription, the model outputs speaker tags, punctuation, and word timing directly alongside the text across recordings up to 60 minutes long.
Language support covers 40 languages out of the box, covering major European, Asian, and Middle Eastern languages alongside built-in bidirectional translation. Where the 30B language backbone makes a noticeable difference over standard acoustic models is cross-lingual code-switching—recordings where bilingual speakers naturally blend two languages inside the same sentence, such as Hindi-English or Spanish-English business calls. Standard speech recognizers usually force you to lock in a single language tag per segment or constantly drop into gibberish when a speaker switches from Hindi grammar to English technical nouns. Because Nemotron 3.5 Transcribe routes audio tokens through a 30B multilingual language model, it keeps the word error rate low across mid-sentence switches and handles complex medical or engineering terminology without spelling words phonetically.
That large language backbone comes with trade-offs when you quantize the weights down to fit on consumer hardware. In my testing with 4-bit quantized weights (Q4 and IQ4_NL), the model handles multi-speaker conversation and technical vocabulary well, but its single-pass embedded translation at 4-bit is still stiffer and more prone to phrasing errors than taking a clean transcript and feeding it to a dedicated LLM. It can also trip over music mixed with speech. Running a full anime episode through a 4-bit checkpoint—both on the raw audio track and after isolating vocals—failed three times in a row because English lyrics in the opening theme song threw off the decoder's language state for the dialogue that followed.
Nemotron 3.5 Transcribe vs. Standard Local Models and Parakeet
If you already use local transcription tools—whether through a command-line script or an app like MacWhisper—your main question is whether a 30B model is worth the jump in memory over standard local models or NVIDIA's own Parakeet family.
| Feature / Spec | Nemotron 3.5 Transcribe (30B-A4B) | NVIDIA Parakeet TDT v3 | Whisper large-v3 / large-v3-turbo |
|---|---|---|---|
| Total Parameters | 30B (approx. 4B active per token) | 0.6B to 1.1B | 1.55B (large-v3) / 0.8B (turbo) |
| Typical Memory (VRAM / Unified RAM) | 20 GB – 32 GB (quantized) / 68 GB (BF16) | ~1 GB – 2 GB | ~1.5 GB – 4 GB |
| Supported Languages | 40 languages + code-switching | 25 European languages (v3) / English | 99 languages |
| Native Speaker Diarization | Yes (including overlapping cross-talk) | No (requires external diarization) | No (requires pyannote / WhisperX) |
| Word-Level Timestamps | Yes (via built-in ctc_timestamp head) |
Yes (Token-and-Duration Transducer) | Approximation via cross-attention |
| Built-In Translation | Multi-language translation in one pass | No | Translate-to-English only |
| Best Use Case | Multi-speaker meetings, cross-talk, medical/technical terms, code-switching | Fast everyday transcription, CPU/low-VRAM machines, subtitle editors | Broad 99-language coverage on laptops with 8 GB – 16 GB RAM |
For straightforward, single-speaker English or European-language audio, Parakeet TDT v3 is still faster, lighter, and often more accurate than a 4-bit quantized run of Nemotron 3.5 Transcribe. Parakeet takes roughly 1 GB of memory, runs fast even on a CPU, and never struggles to fit alongside your other apps. That memory gap is the exact reason lightweight desktop captioning and subtitling tools—such as Subtitle Edit—continue to recommend Parakeet rather than integrating a 30B model whose decoder alone takes 15 to 20 GB of memory.
Against a tuned Whisper large-v3 stack on a Mac, Nemotron 3.5 Transcribe is noticeably slower and heavier if all you are doing is transcribing a clean podcast or voice memo. You should reach for Nemotron 3.5 Transcribe specifically when Whisper and Parakeet break down: recordings where three people talk over one another in a meeting room, bilingual interviews with constant code-switching, or domain-heavy recordings (like medical dictation or architecture reviews) where a 1B acoustic model guesses the wrong homophone every thirty seconds.
Hardware and VRAM Requirements: The 30B MoE Memory Trap
When people read "30B parameters with 4B active," it is tempting to assume the model runs on an 8 GB or 12 GB graphics card like a standard 4B model. In an MoE architecture, the 4B active count dictates how much compute happens per token, which keeps inference speed respectable once loaded. However, the router can pick different experts for every single token, meaning all 30 billion parameters still have to sit in VRAM or unified system memory at the same time. If the weights spill over onto your SSD, token generation grinds to a crawl.
Here is how much disk and memory space each format actually requires:
First, the full-precision BF16 checkpoint (nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B) weighs roughly 67.5 to 68 GB. Unless you are fine-tuning the model on a multi-GPU server node, there is no reason to download the BF16 weights for daily transcription. Even on a 128 GB workstation like an NVIDIA DGX Spark (GB10), dedicating 68 GB to the transcription model alone leaves too little headroom if you also want to keep a local LLM or voice agent loaded beside it.
Second, the official quantized NVFP4 (NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-NVFP4) and FP8 checkpoints are the ones NVIDIA intends for local deployment on modern GPUs. If you checked Hugging Face right after the initial announcement and saw 404 errors on the NVFP4 and FP8 links while only BF16 and the DFlash2 speculative decoding drafter were live, those repositories have since been published. The NVFP4 checkpoint shrinks the model down to 21.6 GB, allowing it to fit on a single 24 GB GPU (such as an RTX 3090, RTX 4090, or RTX 5090) for shorter clips, though hour-long recordings with full context comfortably push total VRAM usage into the 24 GB to 32 GB bracket.
Third, for Apple Silicon Macs and local C++ setups using GGUF (IQ4_NL + F16), the model is split into two files: a 4-bit quantized language decoder (NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-AD-IQ4_NL.gguf) and a 16-bit audio encoder (Encoder-F16.gguf). Together, those two files take about 21.35 GB on disk. When loaded on an Apple Silicon Mac (such as an M-series Max with 36 GB or 64 GB of unified memory), the active footprint sits right around 20 GB of RAM.
If you have a 12 GB GPU like an RTX 3060 or RTX 4070 and hope to offload the inactive MoE experts to system RAM the way you would in llama.cpp, watch out for a current limitation in NeMo-Speech.cpp. Passing a flag like --asr.salm.n_cpu_moe 40 to nemo-speech serve immediately fails with nemo-speech serve: unknown option: --asr.salm.n_cpu_moe. Until upstream adds an MoE CPU-offload flag or splits the GGUF cleanly across two 16 GB cards, cards with 12 GB or 16 GB of VRAM cannot hold both the decoder and the F16 encoder in GPU memory without custom patches.
How to Run Nemotron 3.5 Transcribe Locally via /v1/audio/transcriptions
Once you have a machine with at least 24 GB to 32 GB of VRAM (for Linux + NVIDIA GPUs) or 32 GB+ of unified memory
For NVIDIA GPUs, SGLang-Omni provides day-one support for serving the model with high throughput. For quantized GGUF weights on Mac or desktop workstations, NeMo-Speech.cpp exposes a local server through nemo-speech serve. Here is the step-by-step workflow to get your local endpoint running and transcribe a multi-speaker recording:
- Download the quantized weights instead of BF16. If you are running SGLang-Omni on a 24 GB+ NVIDIA GPU, pull
nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-NVFP4(or the-FP8variant) from Hugging Face. If you are usingNeMo-Speech.cppon a Mac with 32 GB+ of unified memory, download both theNVIDIA-Nemotron-3.5-Transcribe-30B-A4B-AD-IQ4_NL.ggufdecoder file and theEncoder-F16.ggufaudio encoder file. - Prepare your meeting audio file. Convert your saved Zoom, Teams, or recorder file into a standard 16 kHz mono
.wavor.mp3file (ffmpeg -i meeting.m4a -ar 16000 -ac 1 meeting.wav). Keeping individual files under 60 minutes ensures you stay within the model's trained context window and prevents KV-cache memory spikes. - Start the local transcription server. With SGLang-Omni installed in your Python environment, launch the server pointing at the checkpoint on port
8000(following the launch arguments in the SGLang-Omni Nemotron Transcribe cookbook). If you are usingNeMo-Speech.cppwith GGUF files instead, runnemo-speech serve --asr-model NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-AD-IQ4_NL.ggufalong with the F16 encoder path and wait until the ~20 GB model finishes mapping into memory. - Send the audio file to
/v1/audio/transcriptions. Once the server is listening locally, send aPOSTrequest usingcurlor a standard Python HTTP client to generate a speaker-labeled transcript:
curl http://localhost:8000/v1/audio/transcriptions \
-H "Content-Type: multipart/form-data" \
-F file="@meeting.wav" \
-F model="nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-NVFP4" \
-F response_format="verbose_json" \
-F timestamp_granularities[]="word" \
-F timestamp_granularities[]="segment"
If you want the model to translate a multilingual or code-switched recording into another target language during the same pass, pass the target language parameter in the request body or prompt configuration supported by your serving backend, and save the returned JSON output to disk.
Two Local Bugs to Watch Out For on AMD ROCm and Apple Silicon
If you deviate from a standard CUDA or NeMo-Speech.cpp Mac setup, there are two platform-specific issues you can hit right now that look like hardware failures if you do not know what is causing them.
First, if you compile NeMo-Speech.cpp with HIP/ROCm for an AMD GPU (such as a Radeon AI PRO R9700 or RX 7900 XTX on ROCm 7.x), short audio clips of 30 or 60 seconds will transcribe fine, but any audio file longer than roughly 120 to 160 seconds will hang indefinitely. When this happens, your GPU utilization drops to 0% while a single CPU thread spins at 100% inside hipStreamSynchronize, and nemo-speech serve locks up on subsequent requests. This happens because NeMo-Speech.cpp pins an older llama.cpp submodule commit from before the HIP ARGSORT fix was merged upstream; when audio length pushes the sorting matrix past 1,024 columns on a ROCm build without CUB, execution stalls. Updating or patching the underlying ggml/llama.cpp submodule to include the upstream HIP ARGSORT fix resolves the hang on files over two minutes.
Second, if you are on a Mac and try to run the model through mlx-audio instead of NeMo-Speech.cpp, do not expect .srt or .vtt subtitle exports to work yet. Even though the public Hugging Face weights include the ctc_timestamp.* head for word-level timing, mlx-audio currently drops the ctc_timestamp.* weights when loading the model. Because those timestamp weights are stripped at load time, mlx-audio can only output plain .txt or basic .json transcripts. If your end goal is generating timed SRT or VTT caption files with speaker labels, stick to SGLang-Omni or NeMo-Speech.cpp so the CTC timestamp head stays intact.