Metadata-Version: 2.4
Name: oruk
Version: 0.1.0
Summary: Official Python client for the oruk Speech API: English transcription, calibrated multilabel emotion and speaking-style labels, and unified audio analysis.
Project-URL: Homepage, https://oruk.ai
Project-URL: Documentation, https://oruk.ai/docs
Project-URL: Changelog, https://oruk.ai/changelog
Project-URL: Source, https://github.com/Oruk-AI/oruk-speech-lab
Project-URL: Pricing, https://oruk.ai/pricing
Author-email: oruk labs <access@oruk.ai>
License: MIT
Keywords: audio analysis,emotion detection,oruk,paralinguistics,speech,speech emotion recognition,speech understanding,speech-to-text,transcription
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Multimedia :: Sound/Audio :: Analysis
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: httpx<1,>=0.27
Description-Content-Type: text/markdown

# oruk — Python client for the oruk Speech API

Official Python SDK for [oruk](https://oruk.ai), the speech lab building audio
models for English transcription, calibrated multilabel emotion detection,
speaking-style classification, and unified audio analysis.

The API is file-based: send a prerecorded English audio file (WAV, FLAC, MP3,
M4A, OGG, or WebM; up to 30 MB / 60 minutes), get structured results back.
Usage is metered per second of audio.

## Install

```bash
pip install oruk
```

## Quickstart

Create an account at [oruk.ai](https://oruk.ai/auth/signup) ($5 trial credit,
no card required) and create an API key in the developer portal.

```python
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 |
| `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 |

Every method accepts a path, `Path`, or binary file object, plus optional
`model=` (`oruk-resonance`, `oruk-spectra-1`) and `request_id=` arguments.

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
