audio/whisper-large-v3@1
One audio file in, a transcript with timed segments out, from Whisper large-v3 run by faster-whisper in half precision on the GPU. A voice-activity filter skips silence.
A unit
Section titled “A unit”One audio file that ffmpeg can read, of up to 600 s. A longer file, or one ffmpeg cannot decode, fails; the length is measured by decoding the audio with the reason; nothing is cut.
Manifest fields
Section titled “Manifest fields”| Field | Required | Meaning |
|---|---|---|
url |
yes | an http or https address the worker downloads the audio from, or the key of a file your org uploaded (unitfabric upload, or POST /v1/uploads with "kind": "input"), which the node fetches before the worker begins the unit, so the worker reads it as a file under /in; anything else is refused when you submit |
language |
no | the spoken language as an ISO code (en, de, …); detected when absent |
word_timestamps |
no | true adds each segment’s words with their times; the benchmark behind the price runs with it on, so it costs nothing extra |
unit_id |
no | your name for the unit: 1 to 64 letters, digits, ., _ or -, starting with a letter or digit; its results are stored under it. By default units are numbered by line: 000000, 000001, … |
Example
Section titled “Example”calls.jsonl:
{"url": "https://example.com/calls/2026-10-01-0915.mp3"}{"unit_id": "standup-de", "url": "https://example.com/meetings/standup.m4a", "language": "de"}job.yaml:
name: call transcriptstemplate: audio/whisper-large-v3@1input: calls.jsonlWhat comes back
Section titled “What comes back”transcript.json for each unit:
{"language": "en", "language_probability": 0.98, "duration": 312.4, "segments": [{"start": 0.0, "end": 4.2, "text": "Thanks for calling."}], "text": "Thanks for calling. ..."}duration is the file’s length in seconds, each segment’s start and end are in seconds, and text joins the segments. With word_timestamps, each segment also carries "words": [{"start": 0.0, "end": 0.42, "word": " Thanks", "probability": 0.98}, ...], each word with the space before it. Each unit’s directory also holds done.json: {"unit_id": ..., "artifacts": ["transcript.json"], "seconds": ...}.
Limits
Section titled “Limits”- A GPU with at least 12 GB of memory, 4 CPUs, 16 GB of memory and 20 GB of scratch disk.
- 600 s per unit. A unit still running then is stopped and tried again, up to the job’s attempts (
unit.max_attempts: 3 by default, 1 to 10), and a unit that never completes is not billed. A file over the bound fails each attempt the same way. - A URL the worker downloads is at most 4 GiB and must come within 300 s (half the unit’s time), with no 60 s stretch without data, through our gateway, which allows ports 80 and 443 only. An uploaded file is fetched by the node itself before the unit begins, not through the gateway, within 600 s that are not the unit’s, and is held to the same 4 GiB.
- Checkpointing is off: a unit cut short by a node failure starts again from the beginning, and is billed once.
- A manifest line is at most 65,536 characters and a manifest at most 32 MiB.
Price per unit: see pricing.
Benchmarks
Section titled “Benchmarks”The price is measured on full units: the first 600 s of the LibriVox recording of Pride and Prejudice, chapters 1 to 3 (public domain), read speech at the unit’s bound, with word timestamps, on each GPU class in the fleet. The timings are measured on GPU hosts at launch.