Generated banner for Nemotron Speech
Generated logo for Nemotron Speech

Nemotron Speech

NVIDIAOfficialCreated by Nemotron Speech TeamDistributed by NVIDIA

  • Skill
  • Tool integration
  • Data and AI
  • Apache-2.0
  • Medium risk
  • Has scripts

From the author

Routes NVIDIA Nemotron Speech (Formerly Riva) NIM tasks — deploys, runs, and tests ASR, TTS, and NMT NIMs on build.nvidia.com or self-hosted.
— the description by Nemotron Speech Team

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

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/nvidia/nemotron-speech/download
  2. Unzip 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-client and a valid NVIDIA_API_KEY from https://build.nvidia.com.

  • Treat NVIDIA_API_KEY and NGC_API_KEY as secrets: never print, paste, commit, or log real key values. Prefer --password-stdin for Docker login and store persistent keys in a credential manager or a chmod 600 env file rather than world-readable shell startup files.

  • For self-hosted Docker model caching: host directories mounted at /opt/nim/.cache must be writable by the container user (the NIM container runs as nvs:1000 internally), not just the host user. Run sudo chown 1000:1000 $LOCAL_NIM_CACHE after 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/workspace inside the container isn't writable to arbitrary UIDs. If you see I/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) to references/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) to references/tts-custom.md.

  • Route TTS synthesis pipeline configuration — SSML, zero-shot voice cloning, applying an existing pronunciation dictionary, audio encoding, sample rate, custom_configuration keys — to references/tts-pipelines.md. (For discovering and constructing the pronunciation itself, use tts-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:

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_KEY and internet access

  • Public 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

Files

scripts/main.py

#!/usr/bin/env python3

# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Route Nemotron Speech prompts to the right bundled reference file.

This helper is intentionally small and deterministic. It does not fetch current
model catalogs or product facts; the skill still requires the agent to consult
the canonical NVIDIA docs for release-specific details.
"""

from __future__ import annotations

import argparse
import json
import re
import sys
from dataclasses import dataclass
from typing import Iterable


SKILL_NAME = "nemotron-speech"


@dataclass(frozen=True)
class Route:
    name: str
    reference: str
    reason: str
    patterns: tuple[str, ...]
    next_steps: tuple[str, ...]


DOMAIN_CUES = (
    r"\briva\b",
    r"\bnemotron speech\b",
    r"\bspeech nim\b",
    r"\basr nim\b",
    r"\btts nim\b",
    r"\bnmt nim\b",
    r"\bparakeet\b",
    r"\bcanary\b",
    r"\bmagpie\b",
    r"\briva-build\b",
    r"\briva-deploy\b",
    r"\bnemo2riva\b",
    r"\brmir\b",
    r"\briva\.client\b",
    r"\bnvcr\.io/nim/nvidia\b",
    r"\bgrpc\.nvcf\.nvidia\.com\b",
    r"\bbuild\.nvidia\.com\b",
    r"\bforce_eou\b",
    r"\bsilero vad\b",
    r"\bsortformer\b",
    r"\bphoneme\b",
)


ROUTES: tuple[Route, ...] = (
    Route(
        name="asr-custom",
        reference="references/asr-custom.md",
        reason="Custom ASR model packaging or deployment request.",
        patterns=(
            r"\bnemo2riva\b",
            r"\briva-build\b",
            r"\briva-deploy\b",
            r"\brmir\b",
            r"\.nemo\b",
            r"\.riva\b",
            r"\bfine[- ]tuned\b",
            r"\bcustom (?:asr|model)\b",
        ),
        next_steps=(
            "Read references/asr-custom.md.",
            "Verify the exact base image, model family, and riva-build inline block from current NVIDIA docs.",
            "Keep commands and artifacts named Riva unless upstream docs say otherwise.",
        ),
    ),
    Route(
        name="tts-custom",
        reference="references/tts-custom.md",
        reason="Custom or fine-tuned TTS model packaging or deployment request.",
        patterns=(
            r"\bnemo2riva\b",
            r"\briva-build\b",
            r"\briva-deploy\b",
            r"\brmir\b",
            r"\.nemo\b",
            r"\.riva\b",
            r"\bfine[- ]tuned\b",
            r"\bcustom (?:tts|voice)\b",
            r"\btts\b",
            r"\btext[- ]to[- ]speech\b",
            r"\bspeech synthesis\b",
        ),
        next_steps=(
            "Read references/tts-custom.md.",
            "Verify the exact base image, model family, and riva-build inline block from current NVIDIA TTS docs.",
            "Keep commands and artifacts named Riva unless upstream docs say otherwise.",
        ),
    ),
    Route(
        name="pipelines",
        reference="references/pipelines.md",
        reason="Advanced ASR pipeline configuration request.",
        patterns=(
            r"\bsilero\b",
            r"\bvad\b",
            r"\bdiari[sz]ation\b",
            r"\bsortformer\b",
            r"\blanguage model\b",
            r"\barpa\b",
            r"\bkenlm\b",
            r"\bchunk size\b",
            r"\bendpoint(?:ing)?\b",
            r"\bforce_eou\b",
            r"\bstop_history\b",
            r"\bruntime_config\b",
            r"\bcustom_configuration\b",
            r"\bflashlight\b",
        ),
        next_steps=(
            "Read references/pipelines.md.",
            "Separate build-time riva-build settings from runtime custom_configuration values.",
            "Verify parameter names against the current ASR pipeline configuration docs.",
        ),
    ),
    Route(
        name="tts-pipelines",
        reference="references/tts-pipelines.md",
        reason="TTS synthesis pipeline configuration, runtime features, or advanced synthesis options request.",
        patterns=(
            r"\bssml\b",
            r"\bzero[- ]shot\b",
            r"\bvoice clon\w*\b",
            r"\bpronunciat\w*\b",
            r"\bcustom.?dict(?:ionary)?\b",
            r"\bexaggeration\b",
            r"\bcustom_configuration\b",
            r"\blpcm\b",
            r"\bogg.?opus\b",
            r"\baudio encoding\b",
            r"\bsample rate\b",
            r"\btts.*stream\w*\b",
            r"\bstream\w*.*synthesis\b",
            r"\bemotional (?:style|tts)\b",
            r"\btts\b",
        ),
        next_steps=(
            "Read references/tts-pipelines.md.",
            "Separate runtime-only options (zero-shot, SSML, custom_configuration) from build-time options that require riva-build.",
            "Verify custom_configuration key names and SSML support on the current TTS customization docs.",
        ),
    ),
    Route(
        name="tts-pronunciation",
        reference="references/tts-pronunciation.md",
        reason="TTS pronunciation discovery, IPA candidate generation, or custom dictionary construction request.",
        patterns=(
            r"\bphoneme\b",
            r"\bipa\b",
            r"\bpronunc(?:iation|e|ing)?\b",
            r"\bmispronounce\w*\b",
            r"\bsounds? (?:wrong|off|bad|correct|right)\b",
            r"\baccent\b",
            r"\bg2p\b",
            r"\bgrapheme\b",
            r"\bvariant[_\s][abc]\.wav\b",
            r"\btts\b",
        ),
        next_steps=(
            "Read references/tts-pronunciation.md.",
            "Generate 2-3 IPA candidates using linguistic knowledge; do not use phone symbols outside the model's supported set.",
            "Synthesize variant_a.wav, variant_b.wav, etc. using the inline script; wait for user choice before outputting final formats.",
            "Output the chosen pronunciation in all three formats: custom_dictionary wire string, SSML <phoneme> tag, and session dict file.",
            "Verify SSML <phoneme> support on the TTS customization page before recommending SSML as the delivery format.",
        ),
    ),
    Route(
        name="readiness",
        reference="references/deployment-readiness-checks.md",
        reason="System compatibility, GPU, container, or health-check request.",
        patterns=(
            r"\bcan my .*(?:gpu|system|machine|server)\b",
            r"\bgpu\b",
            r"\bvram\b",
            r"\bcompute capability\b",
            r"\bdriver\b",
            r"\bcontainer toolkit\b",
            r"\bhealth\b",
            r"\bready\b",
            r"\bcompatib(?:le|ility)\b",
            r"\brequirements?\b",
            r"\bfails? to (?:start|become ready|load)\b",
            r"\bwsl2\b",
            r"\bpodman\b",
        ),
        next_steps=(
            "Read references/deployment-readiness-checks.md.",
            "Check architecture, driver, GPU capability, VRAM, container toolkit, and NGC auth.",
            "Fetch the current support matrix before giving minimums or model-specific requirements.",
        ),
    ),
    Route(
        name="setup",
        reference="references/setup.md",
        reason="Environment setup or prerequisite installation request.",
        patterns=(
            r"\bsetup\b",
            r"\bset up\b",
            r"\bget started\b",
            r"\binstall\b",
            r"\bprereq",
            r"\bdocker login\b",
            r"\bngc api key\b",
            r"\bnvidia container toolkit\b",
            r"\briva client\b",
            r"\bnvidia-riva-client\b",
        ),
        next_steps=(
            "Read references/setup.md.",
            "Walk through drivers, Docker, NVIDIA Container Toolkit, NGC credentials, and the Python client.",
            "Never echo, log, or ask the user to paste an API key value into chat.",
        ),
    ),
    Route(
        name="model-selection",
        reference="references/model-selection.md",
        reason="Model choice or cloud-vs-self-hosted routing request.",
        patterns=(
            r"\bwhich\b.*\bmodel\b",
            r"\bbest\b.*\bmodel\b",
            r"\bchoose\b.*\bmodel\b",
            r"\brecommend\b.*\bmodel\b",
            r"\bmodel selection\b",
            r"\bparakeet\b.*\bcanary\b",
            r"\bcanary\b.*\bparakeet\b",
            r"\bvoice cloning\b",
            r"\blow[- ]latency\b",
            r"\breal[- ]time\b",
            r"\bcloud\b.*\bself[- ]host",
        ),
        next_steps=(
            "Read references/model-selection.md.",
            "Detect NVIDIA_API_KEY and reusable local NIMs before recommending a deployment path when local context is available.",
            "Fetch current support matrices or build.nvidia.com model pages before naming exact model IDs.",
        ),
    ),
    Route(
        name="tts",
        reference="references/tts.md",
        reason="Text-to-speech or voice synthesis request.",
        patterns=(
            r"\btts\b",
            r"\btext[- ]to[- ]speech\b",
            r"\bspeech synthesis\b",
            r"\bsynthesi[sz]e\b",
            r"\bvoice\b",
            r"\bmagpie\b",
        ),
        next_steps=(
            "Read references/tts.md.",
            "Choose cloud or self-hosted flow based on the user's environment and privacy constraints.",
            "Fetch current voices and model support before hardcoding voice names.",
        ),
    ),
    Route(
        name="nmt",
        reference="references/nmt.md",
        reason="Translation or neural machine translation request.",
        patterns=(
            r"\bnmt\b",
            r"\btranslate\b",
            r"\btranslation\b",
            r"\blanguage pairs?\b",
            r"\bdnt\b",
            r"\bdo[- ]not[- ]translate\b",
            r"<dnt>",
        ),
        next_steps=(
            "Read references/nmt.md.",
            "Verify the requested language pair against the current support matrix.",
            "Use DNT tags for protected terms when requested.",
        ),
    ),
    Route(
        name="asr",
        reference="references/asr.md",
        reason="Automatic speech recognition deployment or inference request.",
        patterns=(
            r"\basr\b",
            r"\bspeech[- ]to[- ]text\b",
            r"\btranscri(?:be|ption)\b",
            r"\boffline\b",
            r"\bstreaming\b",
            r"\bwebsocket\b",
            r"\bhttp\b",
            r"\bgrpc\b",
            r"\bparakeet\b",
            r"\bcanary\b",
            r"\bwhisper\b",
            r"\bword boosting\b",
            r"\bpunctuation\b",
        ),
        next_steps=(
            "Read references/asr.md.",
            "Select cloud, self-hosted, streaming, offline, gRPC, HTTP, or WebSocket path from the user context.",
            "Verify current model names, function IDs, and feature support before giving release-specific values.",
        ),
    ),
)


def any_match(patterns: Iterable[str], text: str) -> bool:
    return any(re.search(pattern, text, flags=re.IGNORECASE) for pattern in patterns)


def score_route(route: Route, text: str) -> int:
    return sum(1 for pattern in route.patterns if re.search(pattern, text, flags=re.IGNORECASE))


def classify(question: str) -> dict[str, object]:
    text = " ".join(question.strip().split())
    if not text:
        return {
            "expected_skill": None,
            "route": None,
            "reference": None,
            "confidence": "low",
            "reason": "Empty prompt.",
            "next_steps": ["Do not activate nemotron-speech without a concrete Riva/Nemotron Speech task."],
        }

    if not any_match(DOMAIN_CUES, text):
        return {
            "expected_skill": None,
            "route": None,
            "reference": None,
            "confidence": "low",
            "reason": "No Nemotron Speech, Riva, or Speech NIM cue was found.",
            "next_steps": ["Keep the nemotron-speech skill silent and use a more relevant workflow."],
        }

    scored = [(score_route(route, text), index, route) for index, route in enumerate(ROUTES)]
    scored.sort(key=lambda item: (-item[0], item[1]))
    score, _, route = scored[0]

    confidence = "high" if score >= 2 else "medium"
    return {
        "expected_skill": SKILL_NAME,
        "route": route.name,
        "reference": route.reference,
        "confidence": confidence,
        "reason": route.reason,
        "next_steps": list(route.next_steps),
    }


def parse_args(argv: list[str]) -> argparse.Namespace:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("question", nargs="*", help="User prompt to classify.")
    parser.add_argument("--pretty", action="store_true", help="Pretty-print JSON.")
    return parser.parse_args(argv)


def main(argv: list[str] | None = None) -> int:
    args = parse_args(sys.argv[1:] if argv is None else argv)
    question = " ".join(args.question) if args.question else sys.stdin.read()
    result = classify(question)
    print(json.dumps(result, indent=2 if args.pretty else None, sort_keys=True))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

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