Nemotron Speech
NVIDIAOfficialCreated by Nemotron Speech TeamDistributed by NVIDIA
- Skill
- Tool integration
- Data and AI
- Apache-2.0
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Nemotron Speech acts as a central command interface for managing NVIDIA's speech AI NIMs. It provides a structured workflow for users to navigate deployment options, whether using cloud-hosted inference via build.nvidia.com or self-hosted Docker containers. The skill handles the routing of tasks across ASR, TTS, and NMT modalities, ensuring users follow the correct procedures for model selection, pipeline configuration, and system readiness checks.
What it does
- Routes users to specific workflows for ASR, TTS, and NMT deployment.
- Provides guidance on self-hosted Docker deployment and cloud-hosted inference.
- Assists with custom model builds using riva-build and riva-deploy.
- Facilitates ASR pipeline tuning including VAD, diarization, and language models.
- Supports TTS customization such as SSML, zero-shot voice cloning, and pronunciation dictionaries.
- Directs users to authoritative documentation for version-specific model and hardware requirements.
When to use it
- When you need to deploy or test NVIDIA Riva/Nemotron Speech NIMs.
- When configuring custom ASR or TTS pipelines for specific accuracy or vocabulary needs.
- When troubleshooting deployment readiness, GPU compatibility, or container health.
- When integrating speech-to-text, text-to-speech, or translation into an application.
Advantages
- Centralizes complex speech AI workflows into a single, navigable interface.
- Ensures adherence to official NVIDIA documentation and best practices.
- Simplifies the transition between cloud-hosted and self-hosted environments.
- Provides clear, step-by-step procedures for custom model deployment.
Usage examples
- “Deploy a Parakeet ASR NIM”
- The agent loads the ASR reference file and guides the user through the self-hosted deployment steps.
- “How do I fix the pronunciation of NIM in Riva TTS?”
- The agent loads the TTS pronunciation reference, suggests IPA candidates, and provides the necessary gRPC snippet.
- “Can my GPU run this?”
- The agent initiates the deployment readiness check workflow to verify system requirements.
- “Translate English to German”
- The agent loads the NMT reference file and walks the user through the translation deployment flow.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/nemotron-speech/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip nemotron-speech.zip -d .agents/skills
Documentation by Nemotron Speech Team
Nemotron Speech Skills
Note: "Nemotron Speech" is the public-facing name for what NVIDIA documents today as Riva / Riva NIM. All commands, container images, gRPC APIs, Python imports, and documentation URLs still use "Riva" — the rename is brand-only. Do not rename commands, images, or doc URLs.
Agent: When walking the user through a multi-step workflow, announce each step before presenting it: Step N/M — Step Title (e.g., "Step 1/4 — Deploy the Container").
Purpose
Single entry point for all NVIDIA Nemotron Speech (Riva) NIM workflows: ASR (speech-to-text), TTS (text-to-speech), and NMT (translation). Covers cloud-hosted inference via build.nvidia.com, self-hosted Docker deployment, client-protocol choice for ASR (gRPC, HTTP, WebSocket), custom NeMo model deployment via riva-build, ASR pipeline tuning (VAD, diarization, language models), and the prerequisite Docker / NGC / driver setup.
When to Use This Skill
Use this skill for any Nemotron Speech / Riva NIM task — deployment, testing, custom model build, system requirements check, or model selection across ASR / TTS / NMT modalities.
Workflow
Identify the user's task type, then load the corresponding reference file from references/. The reference files contain the detailed per-workflow content; this SKILL.md is a routing surface. Load only the reference relevant to the task at hand.
Prerequisites
For self-hosted deployment: NVIDIA AI Enterprise (NVAIE) entitlement, then complete the environment setup — NVIDIA drivers, Docker, Container Toolkit, NGC API key, Riva Python client. See
references/setup.md.For cloud-hosted inference:
pip install -U nvidia-riva-clientand a validNVIDIA_API_KEYfrom https://build.nvidia.com.Treat
NVIDIA_API_KEYandNGC_API_KEYas secrets: never print, paste, commit, or log real key values. Prefer--password-stdinfor Docker login and store persistent keys in a credential manager or achmod 600env file rather than world-readable shell startup files.For self-hosted Docker model caching: host directories mounted at
/opt/nim/.cachemust be writable by the container user (the NIM container runs asnvs:1000internally), not just the host user. Runsudo chown 1000:1000 $LOCAL_NIM_CACHEafter creating the directory so the container can write to it. Avoid world-writable modes — they let any local user replace cached model artifacts. Also avoid-u "$(id -u):$(id -g)"on the docker run —/opt/nim/workspaceinside the container isn't writable to arbitrary UIDs. If you seeI/O error Permission denied (os error 13)during model download, the host directory ownership is the issue.
Instructions
Match the user's task to one reference file and load only that file; the references are detailed, so progressive disclosure keeps context tight.
Route setup requests for drivers, Docker, Container Toolkit, and NGC to
references/setup.md.Route GPU compatibility, deployment readiness, and container health checks to
references/deployment-readiness-checks.md.Route model choice across ASR, TTS, and NMT to
references/model-selection.md.Route ASR deployment or inference for Parakeet, Canary, Whisper, and Nemotron ASR Streaming to
references/asr.md.Route custom-trained NeMo ASR deployment (
.nemo→ RMIR → NIM) toreferences/asr-custom.md.Route ASR pipeline configuration for VAD, diarization, language models, and chunk size to
references/pipelines.md.Route TTS deployment or inference for Magpie to
references/tts.md.Route custom or fine-tuned TTS model deployment (
.nemo→ RMIR → NIM) toreferences/tts-custom.md.Route TTS synthesis pipeline configuration — SSML, zero-shot voice cloning, applying an existing pronunciation dictionary, audio encoding, sample rate,
custom_configurationkeys — toreferences/tts-pipelines.md. (For discovering and constructing the pronunciation itself, usetts-pronunciation.md.)Route TTS pronunciation discovery — finding, testing, and applying IPA pronunciations for specific words or phrases — to
references/tts-pronunciation.md.Route NMT deployment or inference for Riva Translate, language pairs, and DNT tags to
references/nmt.md.
Source of truth
For per-release detail — current model catalog, container IDs, function IDs, voice lists, VRAM minimums, per-model feature support — fetch or open the canonical NVIDIA doc rather than relying on text in this SKILL.md or the references. Each reference file includes its own routing table to the relevant doc pages.
Top-level landing pages:
Examples
"Deploy a Parakeet ASR NIM" → load references/asr.md, follow Option B (self-hosted), Steps 1–4.
"Synthesize speech with Magpie" → load references/tts.md, follow Option A (cloud) or Option B (self-hosted).
"Translate English to German" → load references/nmt.md, follow the 4-step flow.
"Convert my fine-tuned .nemo to a NIM" → load references/asr-custom.md for the 4-phase pipeline and references/pipelines.md for build-time config.
"Deploy a custom fine-tuned TTS voice as a NIM" → load references/tts-custom.md for the 4-phase pipeline.
"Use zero-shot voice cloning with Magpie" → load references/tts-pipelines.md.
"Add SSML emphasis tags to my TTS request" → load references/tts-pipelines.md.
"'NVIDIA' sounds wrong in my Magpie TTS output — suggest a few IPA options to test" → load references/tts-pronunciation.md, generate IPA candidates, synthesize variants, then output all three delivery formats.
"How do I fix the pronunciation of 'NIM' in Riva TTS with a custom_dictionary in gRPC Python?" → load references/tts-pronunciation.md, propose IPA for 'NIM', show wire format and gRPC snippet.
"Can my GPU run this?" → load references/deployment-readiness-checks.md and run the 6-step system check.
"Which Riva model should I use?" → load references/model-selection.md, apply the decision framework, then fetch the support matrix for the specific current model name.
Naming & Terminology
Skill brand: Nemotron Speech (public-facing name).
Internal naming preserved: commands (
riva-build,riva-deploy,riva_streaming_asr_client), Python client (riva.client), gRPC namespace (nvidia.riva.asr.*), container registry (nvcr.io/nim/nvidia/*), and all NVIDIA documentation URLs still use "Riva". Do not rename these in code, commands, or docs.
Troubleshooting
For task-specific runtime or modality issues, use the relevant reference file (references/<task>.md). Cross-cutting readiness checks:
Container does not become ready →
references/deployment-readiness-checks.md(system check + health check table)Health check fails →
references/deployment-readiness-checks.mddocker pullfromnvcr.ioreturns 403 →references/setup.md(Step 5 — Docker login)Wrong base image / model architecture mismatch →
references/asr-custom.md(Phase 2 base image)VRAM / GPU compatibility →
references/deployment-readiness-checks.md, then verify on the support matrix
Limitations
x86_64 architecture only — WSL2 on Windows requires Podman and supports a subset of NIMs (see
references/setup.md)Self-hosted deployment requires an NVIDIA AI Enterprise license
Cloud-hosted inference requires an active
NVIDIA_API_KEYand internet accessPublic skill branding is "Nemotron Speech"; commands, container images, Python imports (
riva.client), gRPC services (nvidia.riva.*), and NVIDIA documentation URLs still use "Riva" — follow official docs and catalogs for naming, do not rename these in commands or code
Next Steps
Verify hardware compatibility:
references/deployment-readiness-checks.mdSet up the environment:
references/setup.mdPick a model:
references/model-selection.mdDeploy:
references/asr.md,references/tts.md, orreferences/nmt.md
Files
- ATTRIBUTION.mdAdded by AutoGineer917 B
- BENCHMARK.md10.7 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md11.7 KiB
- evals/EVAL.md1.2 KiB
- evals/evals.json17.3 KiB
- references/asr-custom.md14.6 KiB
- references/asr.md26.4 KiB
- references/deployment-readiness-checks.md7.8 KiB
- references/model-selection.md19.2 KiB
- references/nmt.md15.5 KiB
- references/pipelines.md16.3 KiB
- references/setup.md7.2 KiB
- references/tts-custom.md14.1 KiB
- references/tts-pipelines.md21.5 KiB
- references/tts-pronunciation.md13.3 KiB
- references/tts.md17.1 KiB
- scripts/main.pyScript13.3 KiB
- skill-card.md4.1 KiB
- skill.oms.sig7.5 KiB
references/tts-pronunciation.md
Riva TTS Pronunciation Discovery and Dictionary Application
Agent: When walking the user through the discovery workflow, announce each step: Step N/3 — Step Title (e.g., "Step 1/3 — Generate IPA Candidates").
Source of truth. This skill describes a stable workflow for discovering and applying pronunciations. For per-release detail — which models support
custom_dictionary, the exact IPA phone set for a given model, SSML<phoneme>tag support,--phone_dictionary_fileriva-build parameter name — fetch or open the canonical doc page and answer from that, not from this skill's text. See Looking up current information below.
Purpose
Discover and apply the correct pronunciation for a specific word or phrase in Riva TTS. Covers the full workflow: generating IPA candidates using the agent's linguistic knowledge, synthesizing audio variants so the user can compare and choose, and then applying the chosen pronunciation in all three delivery formats.
Use this reference when: the user does not know the phoneme sequence for their word and needs to find it through listening and iteration.
Use tts-pipelines.md instead when: the user already knows the phoneme string and just needs help with the wire format or application method.
Looking up current information
| Question type | Fetch this page |
|---|---|
| IPA phone set for current Riva TTS models | https://docs.nvidia.com/nim/speech/latest/tts/phoneme-support.html |
<phoneme> tag support and runtime custom-dictionary format | https://docs.nvidia.com/nim/speech/latest/tts/customization.html |
Build-time dictionary configuration and riva-build workflow | https://docs.nvidia.com/nim/speech/latest/tts/custom-deployment.html |
gRPC proto contract — SynthesizeSpeechRequest.custom_dictionary field | https://docs.nvidia.com/nim/speech/latest/reference/api-references/tts/protos.html |
--custom-dictionary CLI flag format for talk.py | https://docs.nvidia.com/nim/speech/latest/tts/customization.html |
Do not infer from this skill's text: which IPA phone symbols a specific model supports, whether SSML <phoneme> is supported for the deployed model, or whether custom_dictionary is accepted. Use the phoneme-support page for the IPA inventory and the customization page for request-time feature support.
Prerequisites
A running TTS NIM (see
tts.md)pip install nvidia-riva-clientA voice name discovered via
--list-voices(seetts.mdStep 3)The word or phrase to fix, and a short carrier sentence that contains it
IPA Phoneme Notation
Modern Riva / Nemotron Speech TTS models use IPA (International Phonetic Alphabet), not ARPABET/CMU, unless the model was built with --phone_set arpabet at riva-build time. The agent generates IPA candidates using its own linguistic knowledge — no external lookup tool is required for common English words.
Worked example — "NVIDIA":
| Label | IPA | Character difference |
|---|---|---|
| A | ɛnˈvɪdiə | Initial vowel ɛ (as in "bed"), primary stress on second syllable |
| B | ɪnˈvɪdiə | Initial vowel ɪ (as in "it"), same stress |
| C | ɛnˈvidɪə | Variant vowel in third syllable |
Two key conventions:
ˈmarks primary stress on the following syllable;ˌmarks secondary stress. Omitting stress marks lets the model infer, but including them produces more consistent output.ʌandɚare not natively in modern models' phone sets — they are auto-converted toəandɝrespectively. Useəandɝdirectly.
For the authoritative phone inventory, fetch the phoneme-support page from the routing table above.
Step 1 — Generate IPA Candidates
The agent produces 2–3 distinct IPA strings for the target word, labeled A, B, C. Each variant should differ in a meaningful and audible way — typically stress placement, initial or final vowel choice, or syllable reduction. Present them as a short table so the user can read the differences before listening.
Agent instruction: Generate variants using your linguistic knowledge. Do not use phone symbols that are absent from the model's phone set. Fetch the phoneme-support page if uncertain whether a specific symbol is supported.
Step 2 — Synthesize Audio Variants
Run this script to produce one WAV file per candidate. The user listens to each and picks the one that sounds correct.
Prerequisites: set SERVER and VOICE environment variables (or edit inline), then run:
export SERVER=0.0.0.0:50051 # or grpc.nvcf.nvidia.com:443 for cloud
export VOICE="<voice-name-from-list-voices>"#!/usr/bin/env python3
import os, wave, riva.client
from riva.client.proto import riva_tts_pb2
SERVER = os.getenv("SERVER", "0.0.0.0:50051")
VOICE = os.getenv("VOICE", "")
is_cloud = "nvcf" in SERVER
WORD = "NVIDIA" # word to fix
SENTENCE = f"Welcome to {WORD} neural inference." # short carrier sentence
# Agent fills in these IPA candidates for the word above
CANDIDATES = {
"A": "ɛnˈvɪdiə",
"B": "ɪnˈvɪdiə",
"C": "ɛnˈvidɪə",
}
md = None
if is_cloud:
fid = os.environ["FUNCTION_ID"]
md = [["function-id", fid],
["authorization", f"Bearer {os.environ['NVIDIA_API_KEY']}"]]
auth = riva.client.Auth(uri=SERVER, use_ssl=is_cloud, metadata_args=md)
tts = riva.client.SpeechSynthesisService(auth)
SR = 44100
for label, ipa in CANDIDATES.items():
# custom_dictionary wire format: "WORD IPA" ← double space between word and phonemes
# Multiple entries: "WORD1 IPA1,WORD2 IPA2" ← comma-separated, no spaces around comma
req = riva_tts_pb2.SynthesizeSpeechRequest(
text=SENTENCE,
language_code="en-US",
encoding=riva.client.AudioEncoding.LINEAR_PCM,
sample_rate_hz=SR,
voice_name=VOICE,
custom_dictionary=f"{WORD} {ipa}",
)
resp = tts.stub.Synthesize(req, metadata=auth.get_auth_metadata())
fname = f"variant_{label.lower()}.wav"
with wave.open(fname, "wb") as w:
w.setnchannels(1); w.setsampwidth(2); w.setframerate(SR)
w.writeframes(resp.audio)
print(f"Wrote {fname} (/{ipa}/)")
print("\nListen to variant_a.wav, variant_b.wav, variant_c.wav and tell me which sounds correct.")Double-space rule: The
custom_dictionaryfield uses two spaces between the word and its phoneme string:"WORD IPA". A single space silently misparses the entry, and the model falls back to its default G2P without error.
Step 3 — Apply the Chosen Pronunciation
After the user identifies their preferred variant, output all three delivery formats. The user can choose whichever fits their workflow.
Format 1 — Per-request custom_dictionary (runtime, no rebuild)
Pass the dictionary string directly in each synthesis request. No riva-build or riva-deploy needed.
Wire format:
Single word: "NVIDIA ɛnˈvɪdiə"
Multiple words: "NVIDIA ɛnˈvɪdiə,NIM nɪm"Rules: double space between word and phonemes; comma-separated entries with no spaces around the comma; no trailing comma.
gRPC (inline quick path):
import os, wave, riva.client
from riva.client.proto import riva_tts_pb2
auth = riva.client.Auth(uri="0.0.0.0:50051")
tts = riva.client.SpeechSynthesisService(auth)
req = riva_tts_pb2.SynthesizeSpeechRequest(
text="Welcome to NVIDIA.",
language_code="en-US",
encoding=riva.client.AudioEncoding.LINEAR_PCM,
sample_rate_hz=44100,
voice_name="<voice-name-from-list-voices>",
custom_dictionary="NVIDIA ɛnˈvɪdiə",
)
resp = tts.stub.Synthesize(req, metadata=auth.get_auth_metadata())
with wave.open("output.wav", "wb") as w:
w.setnchannels(1); w.setsampwidth(2); w.setframerate(44100)
w.writeframes(resp.audio)talk.py equivalent (reads from a file — see Format 3):
python3 python-clients/scripts/tts/talk.py \
--server 0.0.0.0:50051 \
--text "Welcome to NVIDIA." \
--voice <VOICE_NAME> \
--custom-dictionary my_pronunciations.txt \
--output output.wavFormat 2 — SSML <phoneme> inline tag
Override pronunciation for a single occurrence of a word directly in the synthesis text, without a dictionary file.
<speak>
Welcome to <phoneme alphabet="ipa" ph="ɛnˈvɪdiə">NVIDIA</phoneme> neural inference.
</speak>import wave, riva.client
auth = riva.client.Auth(uri="0.0.0.0:50051")
tts = riva.client.SpeechSynthesisService(auth)
ssml = '<speak>Welcome to <phoneme alphabet="ipa" ph="ɛnˈvɪdiə">NVIDIA</phoneme>.</speak>'
resp = tts.synthesize(
text=ssml,
voice_name="<voice-name-from-list-voices>",
language_code="en-US",
encoding=riva.client.AudioEncoding.LINEAR_PCM,
sample_rate_hz=44100,
)
with wave.open("output.wav", "wb") as w:
w.setnchannels(1); w.setsampwidth(2); w.setframerate(44100)
w.writeframes(resp.audio)SSML
<phoneme>support is per-model. Fetch the customization page to confirm your deployed model accepts SSML and specifically<phoneme alphabet="ipa">. A model that does not support SSML will silently ignore the tag and fall back to its default G2P pronunciation — no error is raised.
Format 3 — Session dictionary file (reuse across requests)
Build a persistent file of pronunciation overrides and load it for every request, or share it across team members.
File format — one entry per line, double space between word and IPA, UTF-8 encoding:
# Pronunciation dictionary — one WORD IPA entry per line
# Lines starting with # and blank lines are ignored
NVIDIA ɛnˈvɪdiə
NIM nɪm
Riva ˈɹiːvəLoad helper (Python):
def load_dict_file(path: str) -> str:
"""Read a session dictionary file and return the custom_dictionary wire string."""
entries = []
with open(path, encoding="utf-8") as f:
for line in f:
line = line.strip()
if line and not line.startswith("#"):
entries.append(line)
return ",".join(entries)
# Usage:
custom_dictionary = load_dict_file("my_pronunciations.txt")
req = riva_tts_pb2.SynthesizeSpeechRequest(
text="...",
custom_dictionary=custom_dictionary,
...
)talk.py usage — pass the file path directly (talk.py reads and formats it internally):
python3 python-clients/scripts/tts/talk.py \
--server 0.0.0.0:50051 \
--text "Welcome to NVIDIA NIM." \
--voice <VOICE_NAME> \
--custom-dictionary my_pronunciations.txt \
--output output.wavBuild-time Option (Permanent Embedding)
If every request to a self-hosted NIM needs the same pronunciation overrides, bake the dictionary into the RMIR at build time using --phone_dictionary_file <path> in riva-build. This removes the need to pass custom_dictionary per-request but requires a full riva-build + riva-deploy cycle (see tts-custom.md).
The phone set selected at riva-build time must match the phoneme alphabet used in the dictionary file. Fetch the custom-deployment page and confirm the exact parameter name and accepted format with the matching image's riva-build ... -h output.
Troubleshooting
Pronunciation unchanged despite
custom_dictionary— verify the double-space delimiter is present (not single space or tab); verify the model supportscustom_dictionaryfor the deployed version by fetching the customization page; confirm the word spelling in the dictionary matches the exact spelling in the synthesis text (case-sensitive on some models).SSML
<phoneme>tag silently ignored — the model may not support SSML or may not support the<phoneme>tag specifically. Fetch the customization page and confirm SSML support for your model before debugging further.IPA character causes synthesis error or unexpected sound — the IPA symbol may not be in the model's phone set, or a Unicode lookalike may have been substituted (e.g., Latin
ɛU+025B vs a visually similar character from another Unicode block). Copy IPA symbols from a verified source; check the phoneme-support page for the authoritative symbol list.Multiple entries: last entry silently dropped — check for spaces around the comma separator or a trailing comma. Correct format:
"WORD1 IPA1,WORD2 IPA2"— no whitespace around commas, no trailing comma.Phone set mismatch at build time —
--phone_setinriva-buildmust match the alphabet used in--phone_dictionary_file. Mixing IPA strings into an ARPABET-configured model produces garbled or default-G2P output.
Limitations
custom_dictionaryand SSML<phoneme>support are per-model and per-release — verify feature support on the customization page and symbols on the phoneme-support pageIPA candidates are generated from the agent's linguistic knowledge; for high-stakes or unusual terms, cross-validate against a phonetic dictionary (e.g., CMU Pronouncing Dictionary) or a native-speaker reference recording
custom_dictionaryapplies per-request only; it does not persist across sessions unless included in every request or loaded from a session fileBuild-time dictionary embedding requires
riva-build+riva-deploy; seetts-custom.mdAll phoneme strings must use UTF-8 encoding; ASCII-lookalike substitutions silently produce incorrect phonemes
x86_64 architecture only for self-hosted deployment
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an API key, Needs Python
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
- Instructions that use the network
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Nemotron Speech Team
- Publisher
- NVIDIA (Official)
- Distributed by
- NVIDIA
- Source
- NVIDIA/skills · skills/nemotron-speech · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Nemotron Speech Team or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download nemotron-speech.zip