Skip to content

Try Resonance 2 early.

Tell us a little about yourself and what you’re building.

A brief description of your use case.

We’ll use these details to review your application and contact you about access. Privacy policy

Explore oruk

Migration guide

Move a legacy Hume speech workflow to oruk

If your application used HumeBatchClient to submit recordings and poll for prosody predictions, you can move the file-analysis step to a synchronous oruk request. The code change is small. Adapting score selection, timestamps, and application rules takes more care.

Product scope and local comparison reviewed · Legacy batch workflow

Hume EVI and TTS have an announced cutoff

Hume says EVI and TTS API access ends November 13, 2026 at 12:01 a.m. EST (November 12, 2026 at 9:01 p.m. PST). Complete and verify your replacement before that time.

Hume’s notice says account data is permanently deleted after November 13, 2026. Export the data you need and verify your archive before access ends.

This is a separate notice about EVI and TTS, not a new deadline for the legacy batch workflow below.

Read Hume’s official notice

Correction retained from July 20, 2026. An earlier version incorrectly treated changes to the legacy API as the end of all Hume expression measurement. Hume’s current product page describes offline Tagger and real-time Prosody. This guide covers the older workflow only.

Choose the output your application needs

The runnable example below uses English Resonance 1 with timed segments. Multilingual file analysis and acoustic-only analysis are available through different models. Changing a model ID can change the input limits, response shape and billing lifecycle.

Resonance 1

Stable

Synchronous file request

Input
English WAV, FLAC, MP3, M4A, OGG or WebM; up to 30 MB and 60 minutes.
Output
Transcript and timed segments with selected scores from 15 emotions and 16 speaking styles. Optional speaker labels are local to the recording.
Interpretation
Selected emotions use thresholds with a highest-score fallback; styles can be empty. Missing labels are not zero. Use /emotions or /affect without a transcript.
Access
Server-side bearer API key and available account usage.

Best starting point for an English legacy batch workflow that needs timed results. Validate the new vocabulary and decision rules.

Read the Resonance 1 contract

Spectra-2

Stable

File request or WebSocket upload, followed by finish

Input
Automatic transcription in 25 languages. Mono 16 kHz WAV, finalized FLAC, PCM16 or float32le; 45 ms–60 seconds, up to 4 MiB.
Output
Final transcript and all 15 emotion and 16 style scores for the whole recording. No timed segments, word timestamps, speaker labels or partial transcript.
Interpretation
Language coverage describes transcription support, not a guarantee of equal expression accuracy by language. Scores are independent and do not sum to one.
Access
Server-side bearer API key; account access and usage checks apply. Prepared browser connections use short-lived tickets issued by your server.

For short multilingual recordings. Streaming uploads audio as it arrives; analysis returns after finish. This is not the Realtime phrase-event protocol.

Read the Spectra-2 contract

Resonance 2

Preview

File request or explicit sample-range WebSocket commits

Input
Files: 0.1–120 seconds, up to 30 MiB. WebSocket: mono 16 kHz float32le PCM.
Output
31 category scores, 6 signed axes and 19 independent scores for each requested range. No transcript, diarization or model-generated timestamps.
Interpretation
Selected labels may be empty; no forced top label. Signed expression axes are not validated valence/arousal coordinates. Keep model and calibration revisions with results.
Access
Server-side bearer API key and approved organization model access; a paid plan alone does not grant approval.

For acoustic expression analysis beside your existing transcription/agent stack. Measure full request latency and validate language/domain performance.

Read the Resonance 2 contract

Realtime

Preview

WebSocket transcript deltas and independent phrase events

Input
Mono 16 kHz PCM16; transcription in 32 locales. Sessions are limited to 10 minutes.
Output
Live transcript deltas and independently timed phrase emotion events. Read the variable-length label/score arrays; do not hard-code seven labels.
Interpretation
A phrase result can arrive after final text or fail independently. Join by request/turn/phrase identity. Locale support is not per-language emotion validation.
Access
Authenticated WebSocket handshake. Keep permanent keys server-side; do not put keys in URLs or public browser bundles.

For live transcripts with phrase-level signals. Its PCM format, events and turn lifecycle differ from Resonance 2 and Spectra-2.

Read the Realtime contract

These routes use existing Oruk account access and shared speech-understanding plan minutes. Check entitlement before sending customer audio. Usage receipts are not a final invoice; overlapping Resonance 2 commits are separate analyses and can consume minutes separately.

What this migration does not supply

  • Hume-compatible scores, thresholds or a 48/600-dimension taxonomy
  • EVI session, tool, voice or audio-generation compatibility
  • First-party text-to-speech or automatic voice portability
  • Face/image analysis, text sentiment or a dedicated vocal-burst API

If you are replacing a voice agent, start with the EVI planning guide. To assess your requirements, use the migration hub.

A dimension inventory, with the gaps visible

The versioned inventory covers the 48 dimensions in Hume’s legacy EVI chat-event example: 20 have candidates for investigation and 28 remain unmapped. Zero mappings are validated. Candidate names are hypotheses; the file supplies no conversion formula, score equivalence or missing-as-zero values.

Before comparing measurements, establish recording and annotation permissions, the selected model and revision, an annotation protocol and a separate held-out evaluation set. Preserve unmeasured outputs and uncertainty. This inventory describes legacy EVI dimensions; it is not a map of Hume’s current 600-plus-dimension Tagger product.

For a research project, describe the study and required measurements. Data access, capacity, model-version support and any academic allowance need confirmation before processing. No free-minute entitlement or response-time commitment is offered on this page.

Replace upload-and-poll with a file request

Install the SDK and set ORUK_API_KEY in your shell using a key from the developer portal. This example requests a transcript, emotion, speaking style, and speaker turns together. It saves the complete response before your application interprets it.

Terminal · install the oruk SDK
python3 -m venv .venv
# macOS / Linux. On Windows: .venv\Scripts\activate
source .venv/bin/activate
python -m pip install https://oruk.ai/sdk/oruk-0.2.15-py3-none-any.whl

Save the code below as migrate.py, put your English recording beside it as recording.wav, and run python migrate.py.

Python · one synchronous analysis request
import json
import os
from pathlib import Path
from oruk import Oruk

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

Path("analysis.json").write_text(
    json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8"
)
for segment in result["segments"]:
    print(segment["start"], segment["end"], segment.get("speaker"))
    print("Words:", segment.get("text"))
    print("Emotion scores:", segment["emotions"])
    print("Speaking styles:", segment["styles"])

Use client.emotions for emotion alone, or client.affect for emotion and speaking style without transcription. Diarization requires oruk-resonance. These Resonance 1 requests use English recordings. For short multilingual recordings, choose Spectra-2 and adapt to its recording-level output; it does not return these timed segments.

A successful request uses plan minutes. The example disables automatic retries; if a response is interrupted, check request details and usage before resending the recording. For a saved response you can inspect without a key, use the Python walkthrough.

Review label meaning before changing rules

The legacy Hume prosody output exposed 48 dimensions. The Resonance 1 example scores 15 emotion labels and 16 speaking styles, then returns selected labels. These names are useful starting points for a review; they are not a conversion table for scores or thresholds.

Legacy Hume label names and oruk candidates that require separate validation
Legacy Hume nameoruk candidate to review
Angerangry
Sadnesssad
Fearscared
Disgustdisgusted
Excitementexcited
Joyhappy
Disappointmentdisappointed
Reliefrelieved

Do not turn Calmness into neutral, or Interest into energetic, simply because those labels seem related. Dimensions such as awe, nostalgia, or craving have no direct Oruk equivalent. Keep them explicitly unsupported in your application unless you build and validate a separate feature.

In this Resonance 1 response, a missing label is not a zero score. An emotion can also be returned as the highest-score fallback when no label passes its threshold. Speaking styles have no fallback and may be empty. The label and score reference defines the model-specific behavior. Resonance 2 does not force a top label; Spectra-2 returns every recording-level score.

Compare saved responses by time

Keep your archived legacy batch predictions as hume-predictions.json and the Oruk response above as analysis.json. The command below assumes you have checked that both use the same untrimmed recording and time origin. The local tool finds overlapping intervals and saves a JSON report. It requires Python 3.10+ and no additional packages, API key, or uploads.

Terminal · compare your saved responses locally
curl --fail --location -o compare-legacy-hume.py \
  https://oruk.ai/examples/compare-legacy-hume.py
python3 compare-legacy-hume.py \
  --hume hume-predictions.json --oruk analysis.json \
  --output migration-review.json

Use the JSON array saved by the legacy job.download_predictions method, containing results.predictions[].models.prosody.grouped_predictions. If the export contains several sources, add --source-index 0 to select the first; a source with several files also requires --file-index. Choose the entries for your recording. Current Tagger responses, EVI messages, and streaming payloads use different contracts and are outside this tool’s scope.

Read the matching intervals
Each alignment entry points from an Oruk segment to every Hume interval with positive time overlap. For example, an interval from 4–6 seconds overlaps both 3–5 and 5–7 seconds by one second each. Intervals that only touch at an endpoint do not match. Overlap alone does not mean the same speaker or emotion was detected.
Keep the original evidence
The report includes the selected Hume source, complete Oruk response, original group and prediction indices, and hashes of the two input JSON files. It preserves scores and empty arrays. It does not rename labels, fill missing scores with zero, average overlapping predictions, or infer whether Oruk used a fallback.
Review what did not match
Unmatched intervals remain listed on both sides, including zero-duration intervals. A failed Hume source or missing prosody result stays visible with a note. Malformed timestamps and invalid scores stop the comparison; existing output files are never overwritten.

For an explicit local recording check, add --audio and --manifest using the comparison operator guide. The manifest binds recording and response hashes, the selected Hume entry, and each declared time origin. These checks do not prove which audio the providers processed or verify the declared alignment. Observed native labels remain unmapped, including shared names; unsupported Hume modalities and unhandled fields stay visible. The report contains your transcript and returned labels, so store it with the recording’s access permissions. This is an inspection aid, not an accuracy score or a measurement of current Hume products.

Format reference: Hume’s versioned batch response types. Download the standalone Python tool. Download the manifest template.

Validate the migration on the same recordings

  1. 1. Freeze the inputs. Keep the same untrimmed audio, source hash, permitted-use record, and original responses. Exclude development speakers from the final evaluation.
  2. 2. Preserve each response’s timing. Compare overlapping intervals. Do not attach labels by array position, reuse a score for every word, or treat a speaker label as a permanent identity.
  3. 3. Review the application’s actual decisions. Measure precision, recall, and missed events for the labels you use. Tune thresholds on development audio and report the untouched evaluation separately.
  4. 4. Keep failed and unscored cases visible. Track decode failures, timeouts, rate limits, empty style arrays, and weak fallback emotions. Dropping difficult recordings makes the migration look more reliable than it is.
  5. 5. Check the full user experience. Verify request handling, response parsing, account usage, and how a person reviews an uncertain result before changing a production rule.

The local call-review example lets you replay each returned interval beside its transcript and scores. The evaluation guide explains how to measure the results. Neither replaces a study on your own workload.

Where the products differ

Hume currently advertises Tagger across 600+ expression dimensions and Prosody for real-time expression measurement. Oruk’s file API provides a smaller, selected vocabulary for English speech. Oruk does not replace facial expression measurement, a vocal-burst taxonomy, or text sentiment analysis. Review the current capabilities of both products against your requirements.

The legacy Hume benchmark row on this site is not an evaluation of today’s Tagger or Prosody. The historical Oruk checkpoint score also does not establish the current endpoint’s accuracy on your audio. Dates, datasets, and comparison limits are in the methodology.

Migration questions

Is this about Hume’s current Tagger or Prosody products?
No. Hume currently offers Tagger for offline analysis across 600+ expression dimensions and Prosody for real-time measurement. This guide covers the older HumeBatchClient workflow and its legacy 48-dimension prosody output. Assess current Hume products separately.
Is oruk a drop-in replacement?
No. The request lifecycle, output vocabulary, selection thresholds, and interval boundaries differ. You can replace a legacy batch upload and polling loop with one synchronous request, but the application still needs to validate the new response and decision rules.
Can I transfer Hume score thresholds?
No. Similar label names do not make scores comparable. The Resonance 1 example here returns threshold-selected emotions with a highest-score fallback; styles may be empty. Missing labels have no returned raw score. Spectra-2 and Resonance 2 have different output/selection contracts. Validate thresholds for your chosen model on representative annotated audio.
What does it cost?
Oruk plans start at $9/month for 250 audio minutes. Each audio minute uses one plan minute for emotion or unified analysis. Standard self-serve trials last 7 days and require a card. Hume’s current Expression Measurement page directs prospective users to contact Research; this guide does not assert a comparable current Hume price.

Current product claims were checked against Hume’s Expression Measurement page on September 11, 2026. Oruk is not affiliated with Hume AI. Report a factual issue to access@oruk.ai.

Try your recording Current product comparison Plans and trial terms