Python · Local ASR · September 11, 2026
Run Orukeet locally: Python speech recognition
Orukeet transcribes recordings in 25 languages on your own computer. This walkthrough installs the published native package, runs a supplied recording, and shows how to keep the recognizer loaded for a batch. You do not need an Oruk account or API key.
Orukeet produces text and segment times. If you need emotion or speaking-style scores, use the hosted speech API. Those outputs are separate from this open model.
Install the model and runtime
Start with Python 3.12 or newer. The commands below use a macOS or Linux shell. Allow space for the 714 MB Q8 model, the native runtime and Python dependencies. The prebuilt runtime does not require a compiler.
python3 --version # Python 3.12 or newer
python3 -m venv .venv
source .venv/bin/activate
python -m pip install https://github.com/Oruk-AI/orukeet/releases/download/v0.1.1/orukeet-0.1.1-py3-none-any.whl
orukeet install --device auto --cache ./orukeet-cache --output installation.jsonThe installer checks artifact hashes and saves absolute paths in installation.json. Automatic selection uses Metal on Apple silicon, CUDA when an NVIDIA device is detected, and CPU otherwise, subject to the published runtime support for your platform. The run recorded below used Metal on Apple silicon.
Installation downloads the weights and runtime. Keep those files and the receipt together; transcription then runs locally. If you move the installation to another computer, run the installer there to select its runtime and regenerate the paths.
Transcribe a recording you can check
Download the short public quickstart recording and the complete runner. Listen to the audio, then compare it with the returned text.
curl --fail --location --output sample.wav https://oruk.ai/samples/oruk-quickstart.wav
curl --fail --location --output orukeet-local.py https://oruk.ai/examples/orukeet-local.py
python orukeet-local.py sample.wav --installation installation.json{
"file": "sample.wav",
"text": "I am genuinely excited that this is finally working.",
"segments": [
{
"text": "I am genuinely excited that this is finally working.",
"start": 0,
"end": 3.84
}
],
"language": null
}We recorded this output on September 11, 2026 using the published package in a fresh virtual environment. This one recording checks installation and the response format; it is not an accuracy benchmark. Verification record and hashes · Download the output.
Keep one recognizer loaded
Replace the filenames with your own recordings. The runner accepts several paths, processes them in order, and prints one JSON object per file. Redirect its output when you want to save the results.
python orukeet-local.py interview.wav lecture.flac --installation installation.json > transcripts.jsonlIn your own Python worker, create the recognizer outside the per-file loop. Construction verifies and loads the model. Repeating it for every recording adds startup work to every job.
import json
from pathlib import Path
from orukeet import Orukeet
config = json.loads(Path("installation.json").read_text(encoding="utf-8-sig"))
with Orukeet(config["model"], config["runtime"], device=config["device"]) as asr:
for audio in ["interview.wav", "lecture.flac"]:
result = asr.transcribe(audio)
print(json.dumps({"file": audio, **result}, ensure_ascii=False))A worker serializes its requests. Several workers each need their own model memory; this example is sequential, not vectorized batch inference. For a service, add your own job queue, upload limits and authentication.
Read the output at the right granularity
textcontains the transcription. Check unfamiliar names and domain vocabulary against your audio.segmentscontain text and start/end seconds on the original recording timeline. The native runner uses bounded windows for long inputs; these times are not word-level alignment or speaker turns.languageisnull. The native interface does not return a detected language or calibrated confidence.- Emotion, speaking style and diarization are not part of this local response. Do not infer them from missing fields.
When something fails
- The package will not install
- Check
python --versioninside the activated environment. Orukeet 0.1.1 needs Python 3.12+. Use the versioned wheel above; the hosted client package namedorukis a different package. - No pinned runtime for this platform
- The installer has no matching prebuilt artifact. Check the runtime support and build instructions. Selecting
--device cpumay work on supported CPU platforms; it does not add support for an unlisted platform. - Missing file or installation receipt
- Pass a real local audio path and the receipt produced by the installer. The runner exits with an error rather than downloading an unknown model or treating a failed file as a blank transcript.
- Hash mismatch
- Keep checksum validation enabled. Check which cached artifact failed, replace that incomplete download and rerun installation. A GGUF from another project is not interchangeable with this speech runtime.
- Slow first request
- Separate download, model loading, warmup and recognition when measuring. Keep the worker alive for subsequent files. Published warm timings exclude some of these costs and are not a promise for your hardware.
Choose the format for your application
Native Q8 is the compact path used here. F16 uses the same native stack. The ONNX INT8 export fits sherpa-onnx’s Parakeet TDT loader and is the format used by the OpenWhispr integration. NeMo source weights are available for inspection and further adaptation. All derive from the r3 release checkpoint; runtime formats need their own performance checks.
Code is MIT. Weights and fitted kernels are CC BY-SA 4.0, retaining NVIDIA’s foundation attribution. See the licenses and full evaluation protocolbefore reusing the model or quoting results. The release discloses checkpoint-selection and adaptation overlap; this installation test does not add independent accuracy evidence.