Skip to content

Explore oruk

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.

Terminal · fresh virtual environment
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.json

The 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.

Terminal · first transcription
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
Actual output · Orukeet 0.1.1, native Q8 / Metal
{
  "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.

Terminal · save a batch as JSON Lines
python orukeet-local.py interview.wav lecture.flac --installation installation.json > transcripts.jsonl

In 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.

Python · persistent local worker
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

  • text contains the transcription. Check unfamiliar names and domain vocabulary against your audio.
  • segments contain 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.
  • language is null. 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 --version inside the activated environment. Orukeet 0.1.1 needs Python 3.12+. Use the versioned wheel above; the hosted client package named oruk is 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 cpu may 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.