Accept the Arc licence (non-commercial use only)
This repository is publicly accessible, but you have to accept the conditions to access its files and content.
Arc is licensed by Whissle Inc. under CC BY-NC 4.0 and the Whissle terms in LICENSE, for non-commercial use only. Commercial use (in or with a product or service, paid or hosted services, business use, or commercial use of outputs) requires a separate written licence from Whissle Inc.: contact ksingla@whissle.ai. Whissle Inc. keeps all rights not expressly granted; no patent or trademark rights are granted.
Log in or Sign Up to review the conditions and access this model content.
Arc v1.2 (Arc Mini and Arc Transcriber): one streaming model for transcript, names, numbers, speakers, tags and events
Arc is an all-in-one streaming audio model. You give it audio and, optionally, your list of names and some context. One model then returns, as the audio plays:
- a transcript with inline tags on names, numbers and entities (
[Theo Brandt](name: Theo Brandt),[102 to 98](score: 102-98)); - names linked to your own list (people, teams, organisations, places, ...), and numbers with their values (scores, clocks, money, dates, durations, percentages, ...);
- speakers and their roles, and per-utterance acts, intents and segment labels;
- sound and channel events (silence, telephone / narrowband audio, degraded audio, clipping, plus many experimental labels);
- device-directed speech (is this utterance addressed to an assistant?);
- context memory: the decoder can take your names, terms, a topic and the text said so far.
This repository holds two models. Both use the same Python package and the same output schema.
| model | version in v1.2.0 |
--backbone |
folder | download | runs on | choose it when |
|---|---|---|---|---|---|---|
| Arc Mini | 1.1.1 (unchanged) | mini (alias edge) |
mini/ |
about 71 MB | CPU (files at about 0.3x real time on 4 cores, live streaming real time on 4 cores without partials); GPU optional | apps, laptops, on-device, low latency |
| Arc Transcriber (full) | 1.2.0 (new) | full (aliases parakeet, server) |
full/ |
about 77 MB + NVIDIA Parakeet-TDT 0.6B v2 encoder (about 2.5 GB, fetched from Hugging Face on first use) | GPU recommended; CPU works for files | best transcript and name accuracy |
Coming next: Arc Transcriber Edge, a 4-bit version of the full model for Android, Mac and low-cost cloud serving. It will be published in this repository as a new revision.
Revisions (git tags of this repository):
| revision | Arc Mini (mini/) |
Arc Transcriber (full/) |
notes |
|---|---|---|---|
v1.2.0 (current) |
1.1.1 | 1.2.0 | new Arc Transcriber files; use with arc-transcriber 1.2.0 |
v1.1.2 |
1.1.1 | 1.1.1 | licence text updated, same weight files as v1.1.1 |
v1.1.1 |
1.1.1 | 1.1.1 | folders mini/ and full/ |
v1.1.0 |
1.1.0 (folder edge/) |
1.1.0 (folder server/) |
earlier folder names, kept so installs pinned to v1.1.0 keep working |
The arc-transcriber package pins the model revision that matches its version (arc-transcriber 1.2.0 loads v1.2.0). Pin
revision= yourself if you load the model from your own code.
English, 16 kHz mono (other rates are resampled). Licence: CC BY-NC 4.0, non-commercial use only (see Licence).
Quick start
pip install "arc-transcriber @ git+https://github.com/WhissleAI/arc_transcriber@v1.2.0"
hf auth login # accept the terms on this page first (approval is automatic)
arc-transcribe meeting.wav # Arc Mini, CPU
arc-transcribe game.wav --domain nba --names roster.txt # with your name list
arc-transcribe call.wav --backbone full --device cuda # Arc Transcriber (full)
arc-transcribe --mic --context "Whissle, Arc, Jane Doe" # live microphone, with context terms
arc-transcribe meeting.wav --format json -o meeting.json # full records
from arc_audio import Arc, load_audio
arc = Arc.from_pretrained("WhissleAI/arc-v1.1", backbone="mini", revision="v1.2.0", threads=4)
# Arc Transcriber: Arc.from_pretrained("WhissleAI/arc-v1.1", backbone="full", revision="v1.2.0", device="cuda")
names = ["Jane Doe", {"name": "Harbor City Hawks", "kind": "team", "aliases": ["Hawks"]}]
# whole file
out = arc.predict("game.wav", domain="nba", names=names)
for u in out["transcript"]:
print(u["start"], u["text"], u.get("device_directed"))
print(out["names"], out["numbers"], out["audio_events"])
# live: feed 100 ms chunks, get new records back
s = arc.stream(domain="meeting", names=names, auto_prev=True)
s.set_context(kb=["Whissle", "Arc"], kb_type=["org", "product"]) # context for the decoder (names, terms)
wav = load_audio("meeting.wav")
for i in range(0, len(wav), 1600):
new = s.feed(wav[i:i + 1600]) # dict of new transcript lines, names, numbers, events, ...
final = s.flush()
Context for the decoder (both models):
arc.set_context(names=[...], terms=[...], topic="meeting", previous_text="...", auto_prev=True)applies to every later call.Stream.set_context(...)changes it mid-stream.names/termsare things the speakers may say;topicis a short domain hint;auto_prev=Truefeeds back what was already said (context memory).- Separately,
names=onpredict()/stream()is your name list for linking. Mentions are linked to it, and a fuzzy / phonetic snap step fills links the model missed (via: "snap"; turn it off withkb_snap=False).
What's new in v1.2.0
Only Arc Transcriber changes (1.1.1 -> 1.2.0). Arc Mini is unchanged (the mini/ files are byte-identical to v1.1.1).
The full/ folder keeps the same file names, tensor names and packed 4-bit format, so existing integrations and ports load it
without code changes. Updated files: full/config.json (version, event and device-directed thresholds), full/adapters.safetensors
and full/decoder/model.q4.safetensors.
- Better transcripts: word error rate 15.7 % -> 13.7 % on our held-out multi-domain dev set, with gains in every content type (sports commentary, meetings, news, talk shows, court hearings), and fewer repetition loops (4 of 255 windows, down from 11).
- More names and numbers found in the transcript, better assistant intents and lower diarization error (table below).
- Device-directed speech: the default threshold moves from 0.50 to 0.85 (fewer false triggers at the same recall; see below).
- Audio events: per-label thresholds re-calibrated; safety labels (
scene.gunshot_explosion,scene.scream,scene.glass_break,scene.distress,scene.crying) are now set for a low false-alarm rate. They stay experimental and off by default. - Tag thresholds, tag offsets, the label list and the default-on event labels are unchanged.
- Weaker: short assistant commands (word error rate 7.0 % -> 10.9 % on 20 short-command windows).
Results
Arc Transcriber 1.2.0 vs 1.1.1 (our held-out dev sets)
Both versions run on the same audio with the same scoring. These are our own held-out multi-domain dev sets (sports commentary, meetings, news, talk shows, court hearings, voice-assistant commands), not public benchmarks. Brackets are 95 % paired bootstrap intervals of the difference. Public-set numbers for v1.2 will follow; the public-set tables further down were measured on the 1.1.1 models.
| measure | Arc Transcriber 1.1.1 | Arc Transcriber 1.2.0 |
|---|---|---|
| word error rate, % (255 windows, about 22,900 words; lower is better) | 15.7 | 13.7 [-2.6, -1.5] |
| name span recall, overlap / exact, % | 76.4 / 67.4 | 80.2 / 71.8 |
| number span recall, overlap / exact, % | 85.0 / 75.3 | 86.8 / 76.9 |
| assistant intents, top-1 accuracy, % (60 classes; small set) | 48.3 | 53.2 [+2.6, +7.9] |
| diarization error rate, % (34 long windows; lower is better) | 40.8 | 38.8 [-3.8, -0.5] |
| device-directed false-positive rate at the default threshold, % (1,650 clips; recall 90.7 % for both) | 2.6 (threshold 0.50) | 2.3 (threshold 0.85) |
scene.gunshot_explosion false alarms on clean speech, % |
3.4 | 0.2 |
| word error rate on short assistant commands, % (20 windows; lower is better) | 7.0 | 10.9 |
Device-directed operating points of Arc Transcriber 1.2.0 on the same dev set (set device_directed.threshold in
full/config.json to trade recall for fewer false triggers):
| threshold | false-positive rate | true-positive rate |
|---|---|---|
| 0.50 | 4.4 % | 96.0 % |
| 0.70 | 3.7 % | 93.7 % |
| 0.85 (default) | 2.3 % | 90.7 % |
| 0.95 | 1.3 % | 86.3 % |
Public test sets (measured on Arc Mini 1.1.1 and Arc Transcriber 1.1.1)
These tables were measured on the 1.1.1 models (revision v1.1.1). Arc Mini is unchanged in v1.2.0, so its rows still apply;
Arc Transcriber 1.2.0 numbers on these sets will be added here. What they show, including where Arc is behind:
- Arc Mini has a higher word error rate than Moonshine base and Whisper base.en on every set, and than Moonshine tiny on most sets; it beats Moonshine tiny on SLURP and matches or improves on Arc v1.0 on every set. Its value is in the extra outputs from one small streaming model, not in raw word error rate.
- Arc Transcriber 1.1.1 trails raw Parakeet-TDT 0.6B v2 (the encoder it uses) and Whisper large-v3-turbo on LibriSpeech; it is close to them on SLURP and AMI.
- Whisper large-v3-turbo + a separate NER model finds number values on Earnings-21 clearly better than Arc (value recall 84.1 % vs 67.2 % for Arc Transcriber 1.1.1) and has a higher name F1. On SLURP intents, a text classifier on the transcript of any of the ASR systems tested beats Arc's streaming intent read-out.
- pyannote 3.1 is far ahead of Arc on speaker diarization (AMI DER 10.2 % vs about 45 %).
All numbers below were measured by us with one shared protocol for every system (same audio, same reference, same normaliser, same scorer). Every set is evaluated on its public test split (subsets as stated). 95% confidence intervals are paired bootstrap intervals over test items. 'n/c' = not computed.
Word error rate (%, lower is better)
| system | LibriSpeech test-clean | LibriSpeech test-other | VoxPopuli test | SLURP test | Earnings-21 (long-form) | AMI test (long-form, headset mix) |
|---|---|---|---|---|---|---|
| Arc Mini 1.1.1 (on-device, streaming) | 8.5 | 22.9 | 12.4 | 39.9 | 24.8 | 35.3 |
| Arc Transcriber 1.1.1 (Parakeet encoder) | 5.5 | 7.8 | 8.1 | 16.9 | 13.2 | 23.9 |
| Arc v1.0 | 8.7 | 23.7 | 15.2 | 43.3 | 32.1 | 38.8 |
| Parakeet-TDT 0.6B v2 | 1.6 | 3.3 | 5.0 | 16.2 | 11.1 | 24.6 |
| Whisper large-v3-turbo | 1.8 | 4.0 | 9.6 | 15.6 | 11.7 | 24.8 |
| Whisper small.en | 2.9 | 6.7 | 6.8 | 21.5 | 14.1 | 29.1 |
| Whisper base.en | 4.2 | 9.8 | 8.2 | 29.2 | 16.0 | 29.5 |
| Moonshine base | 3.2 | 8.2 | 9.0 | 33.5 | 16.6 | 28.3 |
| Moonshine tiny | 4.6 | 11.8 | 11.8 | 45.3 | 22.6 | 31.9 |
| test items / hours | 500 / 1.09 h | 500 / 0.90 h | 400 / 0.77 h | 600 / 0.47 h | 39 / 3.25 h | 12 / 1.00 h |
Paired differences (percentage points, A minus B; negative = A better):
| comparison | LibriSpeech test-clean | LibriSpeech test-other | VoxPopuli test | SLURP test | Earnings-21 (long-form) | AMI test (long-form, headset mix) |
|---|---|---|---|---|---|---|
| Arc Transcriber 1.1.1 vs Parakeet-TDT 0.6B v2 | +3.9 [3.3, 4.5] | +4.5 [3.7, 5.3] | +3.0 [2.2, 4.1] | +0.7 [-0.8, 2.2] | +2.1 [1.5, 2.7] | -0.7 [-2.0, 0.8] |
| Arc Transcriber 1.1.1 vs Whisper large-v3-turbo | +3.8 [3.2, 4.4] | +3.9 [3.1, 4.7] | -1.6 [-3.9, 0.5] | +1.3 [-0.5, 3.2] | +1.5 [0.7, 2.3] | -0.9 [-2.7, 0.9] |
| Arc Mini 1.1.1 vs Moonshine tiny | +3.9 [3.2, 4.6] | +11.1 [9.8, 12.5] | +0.7 [-0.4, 1.7] | -5.5 [-8.9, -2.1] | +2.2 [-1.8, 4.9] | +3.3 [1.7, 4.9] |
| Arc Mini 1.1.1 vs Moonshine base | +5.3 [4.7, 6.0] | +14.7 [13.3, 16.1] | +3.4 [2.6, 4.4] | +6.3 [3.2, 9.6] | +8.2 [6.3, 10.3] | +7.0 [4.6, 9.0] |
| Arc Mini 1.1.1 vs Whisper base.en | +4.3 [3.6, 5.1] | +13.1 [11.7, 14.5] | +4.2 [3.4, 5.1] | +10.6 [7.2, 14.1] | +8.8 [6.7, 11.2] | +5.7 [3.1, 8.3] |
| Arc Mini 1.1.1 vs Arc v1.0 | -0.2 [-0.7, 0.3] | -0.8 [-1.7, 0.1] | -2.8 [-3.5, -2.1] | -3.5 [-5.6, -1.3] | -7.4 [-9.3, -5.6] | -3.5 [-4.8, -1.8] |
Protocol: Whisper English text normaliser on reference and hypothesis; WER = total errors / total reference words per set. Long recordings (Earnings-21: one 300 s segment from each of 39 test calls; AMI: twelve 300 s segments from the official test meetings) are cut by the same pause-based segmenter (<= 15 s pieces) for every system; utterances of 30 s or less are decoded whole by the baseline models. Subsets: LibriSpeech 500 utterances each, VoxPopuli 400 utterances of 0.6-12.7 s, SLURP 600 recordings (headset and far-field), seeded random samples. Baselines: greedy decoding as published. Arc: beam 4.
Names and numbers in the transcript: Earnings-21 (39 test segments, 300 s each)
Gold: 387 person / organisation / product mentions and 515 numbers with a checkable value, from the corpus' reference entity annotation.
| system | how entities are produced | name recall | name precision | name F1 | number value recall | number value precision |
|---|---|---|---|---|---|---|
| Arc Mini 1.1.1 (on-device, streaming) | one model (inline tags) | 31.0 [23.9, 39.5] | 22.2 | 25.9 | 72.2 [67.7, 77.0] | 50.2 |
| Arc Transcriber 1.1.1 (Parakeet encoder) | one model (inline tags) | 47.3 [39.9, 55.0] | 38.9 | 42.7 | 67.2 [62.0, 72.9] | 57.3 |
| Arc v1.0 | one model (inline tags) | 26.1 [19.7, 33.7] | 12.6 | 17.0 | 67.0 [60.9, 73.1] | 42.2 |
| Whisper large-v3-turbo | ASR + separate NER model | 49.6 [41.8, 58.0] | 45.4 | 47.4 | 84.1 [78.2, 89.4] | 84.1 |
| Parakeet-TDT 0.6B v2 | ASR + separate NER model | 46.0 [38.1, 54.5] | 40.8 | 43.3 | 66.2 [57.9, 75.0] | 71.0 |
| Whisper small.en | ASR + separate NER model | 41.9 [34.9, 49.4] | 41.6 | 41.8 | 81.9 [76.1, 87.3] | 81.8 |
| Whisper base.en | ASR + separate NER model | 34.9 [28.4, 41.6] | 36.0 | 35.4 | 79.6 [73.6, 85.1] | 78.5 |
| Moonshine base | ASR + separate NER model | 31.8 [25.5, 38.8] | 33.3 | 32.5 | 66.8 [58.4, 75.3] | 64.9 |
| Moonshine tiny | ASR + separate NER model | 28.4 [22.2, 35.1] | 29.4 | 28.9 | 63.1 [55.7, 70.9] | 60.6 |
| reference transcript | reference transcript + NER (upper bound of the two-model approach) | 72.6 [64.6, 80.2] | 62.4 | 67.1 | 88.5 [83.7, 93.3] | 88.0 |
Paired differences (points):
| comparison | name recall | name F1 | number value recall |
|---|---|---|---|
| Arc Transcriber 1.1.1 vs Whisper large-v3-turbo + NER | -2.3 [-9.1, 4.1] | -4.8 [-10.4, 0.8] | -16.9 [-23.5, -10.1] |
| Arc Transcriber 1.1.1 vs Parakeet-TDT 0.6B v2 + NER | +1.3 [-4.8, 7.3] | -0.6 [-6.2, 4.8] | +1.0 [-4.8, 6.2] |
| Arc Mini 1.1.1 vs Whisper large-v3-turbo + NER | -18.6 [-26.1, -10.6] | -21.5 [-27.4, -15.7] | -11.8 [-18.0, -5.8] |
| Arc Mini 1.1.1 vs Parakeet-TDT 0.6B v2 + NER | -15.0 [-22.6, -7.0] | -17.4 [-24.2, -10.9] | +6.0 [-2.6, 14.3] |
| Arc Mini 1.1.1 vs Whisper base.en + NER | -3.9 [-9.8, 2.4] | -9.5 [-14.1, -4.6] | -7.4 [-13.3, -1.1] |
| Arc Mini 1.1.1 vs Moonshine base + NER | -0.8 [-6.8, 5.5] | -6.7 [-11.2, -2.2] | +5.4 [-2.6, 13.6] |
| Arc Mini 1.1.1 vs Arc v1.0 | +4.9 [1.0, 9.2] | +8.9 [5.5, 12.8] | +5.2 [1.1, 9.6] |
| Arc Transcriber 1.1.1 vs Arc v1.0 | +21.2 [15.7, 26.4] | +25.7 [20.8, 30.7] | +0.2 [-6.0, 6.6] |
Protocol: matching inside each 300 s segment, time-free; a name matches when one normalised word sequence contains the other; numbers match on value (one value parser for every system). NER = an off-the-shelf OntoNotes-5 RoBERTa-base tagger (PERSON / ORG / PRODUCT / WORK_OF_ART; MONEY / PERCENT / CARDINAL / ORDINAL / DATE / QUANTITY). Precision is a lower bound for every system (the reference annotation leaves out generic business terms).
Internal human-labelled multi-domain set (sports, news, talk, meetings, legal, voice assistant)
| inline span F1 (overlap) | Arc v1.0 | Arc Mini 1.1.1 | Arc Transcriber 1.1.1 |
|---|---|---|---|
| names (3637 gold spans) | 62.2 | 67.8 | 76.4 |
| numbers (2630 gold spans) | 72.4 | 77.1 | 85.0 |
Caveat: decoding thresholds for Arc Mini / Arc Transcriber were tuned on this set, so these numbers are optimistic; it is not a public benchmark.
SLURP intents (60 intents; recordings from the SLURP test split)
786 test utterances; majority-class accuracy 8.4.
| system | approach | accuracy | macro-F1 |
|---|---|---|---|
| Arc Mini 1.1.1 (on-device, streaming) | one model, from audio (streaming read-out) | 49.8 [46.6, 52.8] | 42.4 |
| Arc Transcriber 1.1.1 (Parakeet encoder) | one model, from audio (streaming read-out) | 51.3 [47.8, 54.2] | 44.8 |
| Arc v1.0 | one model, from audio (streaming read-out) | 49.4 [46.4, 51.8] | 40.5 |
| reference transcript | text classifier on the transcript (upper bound) | 84.5 [81.8, 87.1] | 81.2 |
| Whisper large-v3-turbo | text classifier on the transcript | 77.3 [73.7, 80.9] | 73.2 |
| Parakeet-TDT 0.6B v2 | text classifier on the transcript | 76.2 [72.4, 79.8] | 73.6 |
| Whisper small.en | text classifier on the transcript | 72.1 [68.5, 75.8] | 68.9 |
| Whisper base.en | text classifier on the transcript | 66.5 [63.0, 70.0] | 66.8 |
| Moonshine base | text classifier on the transcript | 63.5 [59.5, 67.1] | 61.5 |
| Moonshine tiny | text classifier on the transcript | 56.4 [52.7, 60.4] | 53.7 |
Text classifier: TF-IDF + logistic regression trained on the SLURP training transcripts (same 60 intents).
Speaker diarization, AMI test meetings (twelve 300 s segments, headset mix)
| system | DER % (all segments) | missed / false alarm / confusion % | segments |
|---|---|---|---|
| Arc Mini 1.1.1 (on-device, streaming) | 44.8 | 7.0 / 3.5 / 34.4 | 12 |
| Arc Transcriber 1.1.1 (Parakeet encoder) | 44.7 | 8.1 / 3.4 / 33.3 | 12 |
| Arc v1.0 | 45.0 | 6.8 / 3.6 / 34.6 | 12 |
| pyannote 3.1 (diarization only) | 10.2 | 4.1 / 2.2 / 3.8 | 12 |
DER at 10 Hz frames, best one-to-one speaker mapping, overlapped speech excluded, no collar; Arc models are streaming and audio-only, pyannote is offline.
Hardware and latency
Measured on a shared x86 server (4 CPU cores, torch.set_num_threads(4)), 16 kHz English audio, arc_audio 1.1.x. Arc Transcriber
1.2.0 has the same size and structure as 1.1.1, so its speed and memory are the same.
| backbone | mode | real-time factor (lower is faster) | peak RAM | load time |
|---|---|---|---|---|
| Arc Mini | whole file (predict, beam-4 transcript, all heads) |
0.26-0.40 | about 1.0 GB | about 3 s |
| Arc Mini | live stream, partial transcripts off (partials=False) |
0.9 (100 ms chunk p50 62 ms) | about 1.6 GB | |
| Arc Mini | live stream with partial transcripts every 0.4 s | 1.4 (needs more than 4 cores; use partial_every_s=1.0 or partials=False on small CPUs) |
about 1.6 GB | |
| Arc Transcriber | whole file, CPU (fp32) | 0.9 | about 3.5-4.3 GB | about 8 s (+ one-time 2.5 GB download) |
| Arc Transcriber | GPU (fp16 encoder) | not measured yet |
The Arc Mini download is about 71 MB (4-bit packed weights; about 252 MB as float32). Weights are unpacked to float32 in memory at load time.
Outputs
predict() returns one dict, and stream().feed() returns the new records of the same kinds:
| key | content |
|---|---|
transcript |
utterances {start, end, text, words: [{text, start, end, tag}], tags: [{tag, start, end, text}], device_directed: {p, directed}} |
names |
one per name mention: heard, tag (person / team / organization / place / ...), entity (your list's spelling) or null, state (linked / not_in_list / abstain), start, end, via |
numbers |
heard, kind (score, clock, time_of_day, date, duration, money, percent, ordinal, count, stat, measure, ...), value, value2, unit, start, end |
speakers, diarization |
per-speaker role and tags; {speaker, start, end} segments |
utterances, segments, spans, events |
per-utterance acts / intents; segment labels; word-span tags; instant events (speaker change, ...) |
audio_events |
{label, start, end, p, status} sound / channel events (see below) |
device_directed (stream) |
{start, end, p, directed} per utterance |
bio_events |
cough / throat clear / breath |
frames (return_frames=True) |
per-100 ms probabilities of every tag and event |
Inline tag classes of the transcript decoder: ENTITY_PERSON TEAM ORG PLACE WORK EVENT LEGAL GAME MAP LAW PRODUCT TERM,
NUMBER and its kinds (CLOCK COUNT DATE DURATION FIELDPOS ID JERSEY MEASURE MONEY ODDS ORDINAL PERCENT REF SCORE STAT TIME), and
CONTACT_PHONE EMAIL URL ADDRESS (contact spans are tagged in the transcript only).
Event labels and their status
Events come from one head that reads the same audio features as the rest of Arc. Each label has a status:
| status | labels | default |
|---|---|---|
| stable | scene.silence (Mini) |
on |
| beta | meta.channel.telephone, meta.channel.narrowband, meta.degraded_audio, meta.clipping (Mini; on Arc Transcriber scene.silence is beta and meta.clipping experimental) |
on |
| experimental | every other label (music, laughter, applause, cheer, siren, alarm, typing, cough, room size, SNR, safety labels, ...) | off; events="all" or --events all |
Clip-level F1 on a held-out event evaluation set (thresholds fitted on a separate half of it), measured on the 1.1.1 models. Arc Transcriber 1.2.0 uses re-calibrated thresholds; its F1 on this set will be added with the v1.2 public numbers.
| label | Arc Mini 1.1.1 F1 | Arc Transcriber 1.1.1 F1 |
|---|---|---|
| scene.silence | 0.86 | 0.71 |
| meta.channel.telephone | 0.96 | 0.68 |
| meta.channel.narrowband | 0.96 | 0.77 |
| meta.degraded_audio | 0.73 | 0.62 |
| meta.clipping | 0.73 | 0.21 |
Limitations
- English only. Other languages are transcribed poorly or not at all.
- Events are mostly experimental. Only the labels marked stable / beta above are on by default. Experimental labels are often
wrong on real audio. On Arc Transcriber 1.2.0 the safety labels catch only 10 to 14 % of events at their shipped thresholds,
scene.cryingis not detected reliably, andmeta.overlapis effectively off (threshold 0.999). - Names are hardest in meetings and assistant commands. Names in meetings and in short assistant requests are the weakest category; supply a name list or context terms when you can.
- Arc Transcriber (full): its transcript and names are better than Arc Mini's, but its speaker roles and events are weaker
(sports speaker roles: 75 % correct per voice vs 96 % for Arc Mini on the same windows; use Arc Mini when roles matter most).
Short assistant commands are transcribed slightly worse by 1.2.0 than by 1.1.1. Its streaming mode computes Arc features in 10 s
chunks, so tags and links arrive later than on Arc Mini; whole-file
predict()uses 30 s chunks. - Speaker-change detection is modest (F1 about 0.43 on Arc Transcriber 1.2.0, from 0.16 to 0.66 depending on content).
- Device-directed is beta on Arc Mini and experimental on Arc Transcriber; short utterances (< 1.5 s) have the most false alarms (about 21 % of non-directed clips under 1.5 s are flagged by Arc Transcriber 1.2.0).
- Word timings on Arc Transcriber come from 80 ms encoder frames and are coarser than on Arc Mini.
- External ASR words (
--asr deepgram|verbit): Arc reads the words of these services as an optional transcript input. They are grouped into utterances with the same audio-based rule as the built-in transcript. - The model can produce wrong names, numbers and tags. Do not use it for decisions about people without human review.
Weights and files
mini/model.q4.safetensors(Arc),mini/moonshine-streaming-tiny/model.q4.safetensors(speech encoder + transcript decoder) andfull/decoder/model.q4.safetensorsare stored as 4-bit codes with per-group scales (group 32).arc_audiounpacks them at load time to exactly the values the model was evaluated with (no accuracy change). The remaining tensors are float32 / float16.mini/heads.safetensors: event and device-directed heads.full/adapters.safetensors: Arc Transcriber's adapters and heads.mini/model.q4.safetensorskeeps one float16 table (word.tok_E, 21 MB) that is not on the 4-bit grid; it is a different table from the speech decoder's embedding (checked), so it cannot be shared without changing outputs.MANIFEST.sha256lists the SHA-256 of every file in this revision (sha256sum -c MANIFEST.sha256in a full download).- Porting to MLX / Core ML / ONNX Runtime / ExecuTorch / TensorRT: see
docs/DEPLOYMENT.mdanddocs/WEIGHTS_FORMAT.mdin the GitHub repository, with golden reference outputs (tests/golden/) to check an export against (tests/golden/full.jsonmatches Arc Transcriber 1.2.0,tests/golden/mini.jsonArc Mini 1.1.1). - The NVIDIA Parakeet-TDT 0.6B v2 encoder is not included; the package downloads
nvidia/parakeet-tdt-0.6b-v2from Hugging Face on first use (pinned revision) and reads only its encoder weights. NeMo is not needed.
Licence and attributions
- Arc code and Arc weights in this repository: CC BY-NC 4.0 plus the Whissle terms in LICENSE, non-commercial use only. See also NOTICE.
- Commercial use (in or with a product or service, paid or hosted services, business use, or commercial use of outputs) requires a separate written licence from Whissle Inc.: contact ksingla@whissle.ai.
- Whissle Inc. owns Arc and keeps all rights not expressly granted. The public licence does not limit Whissle Inc.'s own use of Arc or its right to license Arc, including later versions and derived models, on other terms. No patent or trademark rights are granted; "Whissle", "Whissle Arc", "Arc Mini" and "Arc Transcriber" are trademarks of Whissle Inc.
- Arc is provided as is, without warranty. You are responsible for your outputs and for the rights and consents needed for the audio you process.
mini/moonshine-streaming-tiny/andfull/decoder/are modified versions of Moonshine Streaming tiny by Useful Sensors, Inc. (dba Moonshine AI), MIT License; the licence and copyright notice are kept in those folders.- Arc Transcriber (full) uses NVIDIA Parakeet-TDT 0.6B v2, CC-BY-4.0,
Copyright NVIDIA Corporation. It is downloaded from NVIDIA's repository at run time and is not modified or redistributed here; the
adapters in
full/adapters.safetensorsread its encoder outputs.
Citation
@misc{whissle2026arc,
title = {Arc: an all-in-one streaming audio model},
author = {{Whissle Inc.}},
year = {2026},
note = {Version 1.2.0 (Arc Mini 1.1.1, Arc Transcriber 1.2.0)},
url = {https://huggingface.co/WhissleAI/arc-v1.1}
}
Model tree for WhissleAI/arc-v1.1
Base model
moonshine-ai/moonshine-streaming-tiny