Speech Revolutions — Python SDK
Official Python client for the Speech Revolutions speech-to-text API.
Install
pip install speechrevolutions
For console progress bars, install the optional tqdm extra:
pip install "speechrevolutions[progress]"
Quick start
from speechrevolutions import SpeechRevolutions
client = SpeechRevolutions() # reads SPEECHREVOLUTIONS_API_KEY
result = client.transcribe("meeting.mp3", speaker_labels=True)
print(result.text)
for u in result.utterances:
print(f"Speaker {u.speaker}: {u.text}")
Async
from speechrevolutions import AsyncSpeechRevolutions
async with AsyncSpeechRevolutions() as client:
result = await client.transcribe("meeting.mp3", speaker_labels=True)
print(result.text)
From a URL (Deepgram-style)
result = client.transcribe_url("https://example.com/audio.mp3")
# or
result = client.transcribe("https://example.com/audio.mp3")
Options as kwargs or config object
# kwargs (ElevenLabs / Deepgram style). `diarize` is an alias for `speaker_labels`.
result = client.transcribe("a.mp3", diarize=True, output_type="json")
# config object (AssemblyAI style)
from speechrevolutions import TranscribeOptions
result = client.transcribe("a.mp3", options=TranscribeOptions(speaker_labels=True))
Defaults: output_type="json", word_timestamps, speaker_labels, nltk all
True, tier="standard", custom_vocabulary=None.
Live progress
Unlike AssemblyAI/Deepgram (which give no percentage for pre-recorded audio), you get real-time progress — for both the file upload and the transcription — as a console bar, a callback, or both.
# 1. Console bars (uses tqdm if installed: pip install "speechrevolutions[progress]")
# Shows an "Uploading" byte bar, then a "Transcribing" bar.
result = client.transcribe("meeting.mp3", progress=True)
# 2. Programmatic — read event.percent (0–100) to drive your own UI / API
def on_progress(event): # transcription
print(event.percent, event.step) # e.g. 50.0 "chunk:0"
def on_upload(event): # upload (event.step == "upload")
print("upload", event.percent)
result = client.transcribe(
"meeting.mp3",
on_progress=on_progress,
on_upload_progress=on_upload,
)
progress=True and the callbacks compose — the bars render and your callbacks
still fire for every event.
Result shape
Default output_type is json. The SDK parses it into a transcript-first object:
| Field | Like |
|---|---|
result.text |
AssemblyAI / ElevenLabs |
result.transcript |
Deepgram alias |
result.words |
word + start/end/speaker |
result.utterances |
AssemblyAI speaker turns |
result.to_deepgram() |
Deepgram-shaped dict |
result.to_dict() |
normalized JSON |
result.content / result.save() |
raw bytes / file |
dg = result.to_deepgram()
print(dg["results"]["channels"][0]["alternatives"][0]["transcript"])
Webhooks & retrieving results later
submit() uploads and enqueues a job and returns its id without waiting —
ideal for batch/background work. Collect the result later via a webhook
(callback_url, a signed POST — verify X-SR-Signature: sha256=… against the
raw bytes) or by polling:
job_id = client.submit("meeting.mp3") # returns immediately, no waiting
# ...or notify a webhook instead of polling:
client.transcribe("meeting.mp3", callback_url="https://you.example.com/hook")
status = client.get_job_status(job_id) # .status: processing|completed|failed
if status.is_completed:
result = client.get_transcript(job_id) # downloads + parses
page = client.list_jobs(limit=50) # {"jobs": [...], "next_before": ...}
The signature is HMAC-SHA256 over the raw request body, keyed with your account's own webhook signing secret — find it under API Keys in the console. Compare it with a constant-time function, and verify against the bytes you received rather than a re-serialised copy. Worked receivers for Python, Node, Go and C# are in the webhooks guide.
See examples/ for a full submit/poll/webhook walkthrough.
Robustness
SpeechRevolutions(max_retries=3, retry_backoff=0.5, proxies={"https": "..."}).
Transient 429/5xx/network errors are retried (honoring Retry-After). Errors are
typed (RateLimitError, AuthenticationError, …) and carry .status_code and
.request_id for correlating with support.
Auth
export SPEECHREVOLUTIONS_API_KEY=stt_...
Or SpeechRevolutions(api_key="stt_...").
Other languages
Speech Revolutions also publishes SDKs for JavaScript/TypeScript, Go, and C#/.NET — see docs.speechrevolutions.com for a cross-language feature comparison.
License
MIT
Metadata
Release files for speechrevolutions 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| speechrevolutions-0.3.3.tar.gz | 47.5 kB | With provenance | Details for speechrevolutions-0.3.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| speechrevolutions-0.3.3-py3-none-any.whl | Python 3 | none | any | Details for speechrevolutions-0.3.3-py3-none-any.whl |
Total release size: 82.4 kB
Release files / speechrevolutions-0.3.3.tar.gz
| Download URL | speechrevolutions-0.3.3.tar.gz |
|---|---|
| Size | 47.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
892cd398e2154e15a5e98000df1ed9a6a9be4e11d8dd1e037f2152deefa134be
|
|
BLAKE2b-256 checksum How to use checksums |
59473b99135d456c2339f6f5f80e71368b1039bad7c24eefc3ed2d23576edf5f
|
| 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 27, 2026.
Transparency logRelease files / speechrevolutions-0.3.3-py3-none-any.whl
| Download URL | speechrevolutions-0.3.3-py3-none-any.whl |
|---|---|
| Size | 34.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
383fa7288052036d020ad00e01805041ff7ca3e73fae6eaea2e80b29ab432f01
|
|
BLAKE2b-256 checksum How to use checksums |
5bdeb6490fab580ae018887582f5ef52bc5a005e619a428bb7f6aecb04d1923b
|
| 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 27, 2026.
Transparency logSecurity for speechrevolutions 0.3.3
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for speechrevolutions-0.3.3.tar.gz
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 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.