Skip to main content

oruk — Python client for the oruk Speech API

Official Python SDK for oruk, the speech lab building audio models for English transcription, calibrated multilabel emotion detection, speaking-style classification, and unified audio analysis.

This SDK calls the file API: send a prerecorded English audio file (WAV, FLAC, MP3, M4A, OGG, or WebM; up to 30 MB / 60 minutes), get structured results back. Resonance is oruk’s flagship speech recognition model. Plans include audio minutes, measured by the second with a one-second minimum. The separate Realtime preview supports 32 locales and phrase-level emotion scores over WebSocket; see the realtime reference.

Install

python -m pip install https://oruk.ai/sdk/oruk-0.2.5-py3-none-any.whl

Quickstart

Create an account at oruk.ai (plans from $5/month, 7-day standard self-serve trial, card required, $0 today) and create an API key in the developer portal.

import os
from oruk import Oruk

with Oruk(api_key=os.environ["ORUK_API_KEY"]) as client:
    result = client.analyze("sample.wav", model="oruk-resonance")

print(result["text"])       # English transcript
print(result["emotions"])   # calibrated multilabel emotion scores
print(result["styles"])     # calibrated multilabel speaking-style scores

Endpoints

Method API endpoint Returns
client.transcribe(file) POST /v1/audio/transcriptions English transcript
client.emotions(file) POST /v1/audio/emotions 15 calibrated emotion labels, no transcription
client.styles(file) POST /v1/audio/styles 16 calibrated speaking-style labels
client.affect(file) POST /v1/audio/affect emotion + style, no transcript
client.analyze(file) POST /v1/audio/analysis transcript, labels, segments, tagged text
client.proficiency(file, transcript=None) POST /v1/audio/proficiency Preview: CEFR band, 0–5 score, fluency, transcript

Every method accepts a path, Path, or binary file object, plus optional model= (oruk-resonance, oruk-fourier) and request_id= arguments. With model="oruk-resonance", pass diarize=True (and optionally num_speakers=) to label speakers: diarization locates the speaker turns, then Resonance scores each speaker turn, so every segment carries a speaker field with its own text, emotions, and styles. Diarization is included in plan minutes.

result = client.analyze("support-call.wav", model="oruk-resonance", diarize=True)
for seg in result["segments"]:
    print(seg["speaker"], seg["text"], seg["emotions"][0]["label"])

Emotion only: client.emotions(...) on Resonance runs the encoder and affect head and never invokes the transcription decoder, so nothing is transcribed, the result has no transcript. One audio minute uses one plan minute for either emotion-only or unified analysis; calling both separately processes the audio twice.

result = client.emotions("support-call.wav", model="oruk-resonance")
print(result["emotions"][0])            # {'label': 'happy', 'score': 0.97}
print(result.get("text"))               # None: no transcript is produced

The client sends a unique request ID per call and retries only 429 and transient 5xx responses with jittered backoff. Errors raise OrukAPIError with status, code, and request_id attributes.

Links

License

MIT

Release files for oruk 0.2.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for oruk 0.2.5
File Interpreter ABI Platform
oruk-0.2.5-py3-none-any.whl Python 3 none any Details

Release files / oruk-0.2.5-py3-none-any.whl

Download URL oruk-0.2.5-py3-none-any.whl
Size 4.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
165f32c225d5d96407e010d3cb7bfd9c2b0d5605edfca4c97996b7cf9919a38a
BLAKE2b-256 checksum
How to use checksums
fa6bb51a9c9882bd1977eb1b6405126986e7aebe0ec4be4a4b0f040e72ca2c22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.10

1 release file

0.2.9

1 release file

0.2.6

1 release file

This release

0.2.5 This release

1 release file

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page