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
- Documentation and API reference: https://oruk.ai/docs
- Capabilities and scope: https://oruk.ai/capabilities
- Pricing: https://oruk.ai/pricing
- Benchmarks: https://oruk.ai/benchmarks/methodology
- Service status: https://oruk.ai/status
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)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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