Recursive AI

Command line and offline model packages

All onespeech docs

Speech recognition for .NET. onespeech --help lists commands, positional arguments, options and exit codes. The tool accepts standalone audio and OneMedia containers. transcribe and align emit text, schema-v1 JSON, SRT or VTT (--format); --output selects a UTF-8 file instead of stdout. align reads its second argument as a UTF-8 text file. Model and language options are passed to the library, with unsupported requests reported as typed errors rather than ignored.

diarize uses the low-level clustering defaults and returns turns without speech recognition. Its text output is start seconds, end seconds and speaker ID, separated by tabs. JSON uses the same Transcript schema; SRT/VTT contain speaker-label cues, not recognized words. --model nvidia/Nemotron-3-Diarization selects the overlap-aware alternative. The default clustering method does not detect overlap.

identify query.wav alice enrollment.wav bob another.wav holds all enrollments only until that invocation exits. verify first.wav second.wav prints a cosine score, not a probability or a calibrated decision. enroll alice enrollment.wav checks enrollment and discards it on exit; it does not create a database. Speaker samples are limited to 60 seconds per file. These commands use the Speech speaker helpers by default; identification uses their development-fitted operating points. An explicit --threshold uses the low-level registry instead and accepts a finite cosine in [-1,1]. Neither setting is a population authentication guarantee. Obtain informed consent and check local law (including BIPA and GDPR Art. 9) before processing voices.

models list is offline. models pull <id> prefetches a pinned model; gate tokens are read from ONESPEECH_MODEL_TOKEN, never a command-line argument or saved file. Exit codes are 0 (success), 1 (model/audio/I/O failure), 2 (usage), 130 (cancelled). Errors print their typed name and message to stderr; inference never writes logs or progress to stdout. Ctrl+C cancels through the library's cancellation points.

Offline packages

Reference RecursiveAI.OneSpeech.Models.CamPlusEnglish, .MoonshineTiny, .MoonshineBase, or .MoonshineStreamingTiny alongside core. Each contains only approved, pinned tier-1 publisher files, its notices and an AOT-safe transitive build target. No reflection or assembly registration is used. Build and publish copy the files into onespeech-models/<catalog SHA-256> beside the executable. Keep that directory, including when deploying NativeAOT or a single-file app.

The loader tries these files before its configured ModelSource, verifies their size and SHA-256, copies them atomically into the per-user cache, then performs normal local conversion and verifies converted hashes. Corrupt package content fails rather than falling back to network. Tier-2 models never read package content. A package covers only its own model, not all roles in Speech.Transcribe (which may also need an aligner and diarizer). tests/OfflinePackageSmoke demonstrates low-level transcription with network access explicitly refused by its ModelSource. NuGet restore itself needs the packages and their dependencies in a local feed/cache.

Maintainers prepare and pack via tools/models/pack-model-packages.sh. Set ONESPEECH_ARTIFACTS, MODEL_PACKAGE_CACHE and MODEL_PACKAGE_FEED to external directories. Optionally set MODEL_PUBLISHER_CACHE to an existing publisher-file cache. The C# preparer fetches missing files, validates each against the embedded catalog, and revalidates immediately before pack. No weights are stored in git. All packages share the repository version and metadata; each archive must remain below 250 MB. Nothing is published by the script.

Unaffiliated with other products or companies named OneSpeech.

Command examples

After installing the tool from a feed containing its package and dependencies:

Terminal
onespeech --help
onespeech models list
onespeech models pull openai/whisper-tiny
onespeech transcribe meeting.m4a --language en --format json --output meeting.json
onespeech align short.wav words.txt --language en --format vtt --output short.vtt
onespeech diarize meeting.wav --model nvidia/Nemotron-3-Diarization
onespeech identify query.wav alice enrollment.wav --threshold 0.3
onespeech verify first.wav second.wav

Model IDs select roles, not filenames. An ASR model passed to diarize is not a speaker embedder. First use may download additional models for alignment and diarization; pre-fetch those as well for a disconnected host. Gate tokens must be injected through the environment, never added to these command lines. Enrollment and query files must be obtained with appropriate consent.