Word and sound timing for real conversation. Fillers, laughs and coughs get their own place on the timeline.
- 20.6 ms
- word-boundary error on conversational speech (Buckeye), 19% below the best of ten baselines
- 2.7×
- fewer catastrophic misalignments (over 200 ms) than the best Montreal Forced Aligner model
- 418×
- real time on a single NVIDIA L40 GPU, one 20-second clip at a time, as measured in the nyra speech timing benchmark
See every boundary. Then try to break it.
Every word, laugh and cut-off below is exactly as long as the aligner measured it. Select one to zoom in on its sounds, then pour in noise until you can barely follow the sentence.
Select a word to see its sounds
Pour in noise
Press play, then pour in noise while it runs.
Real output of the published model on one clip from the DisfluencySpeech corpus, re-aligned at every noise level with Gaussian noise. That corpus is part of the aligner's training data, so treat this as a demonstration: the benchmarks below are held out. Across Buckeye at 0 dB SNR with Gaussian noise, the nyra aligner misplaces words by 96 ms on average, MFA us_arpa by 417 ms.
Where other aligners break
Word boundaries scored against manual annotations on held-out conversational speech. The gap opens where speech gets messy: next to a laugh, and as the noise gets louder.
Use it
Give it audio and a verbatim transcript. It returns every word, filler, vocal sound and cut-off, each with its own start, end and phones. English for now. Words outside the built-in 41k-word lexicon need espeak-ng, and the model downloads from Hugging Face on first use.
Python
# pip install nyra-forced-alignerfrom nyra_align import Aligneraligner = Aligner()result = aligner.align( "clip.wav", "Just change our p- but that's [laughter] " "just change our priorities a little bit",)for w in result.words: print(f"{w.start:.2f} {w.end:.2f} {w.word:<11} {w.type}")result.to_textgrid("clip.TextGrid")result.to_json("clip.json")0.00 0.26 Just w0.26 0.54 change w0.54 0.93 our w0.93 1.10 p- c1.70 2.05 but w2.05 2.44 that's w2.50 2.85 [laughter] s3.32 3.51 just w3.51 3.74 change w3.74 3.86 our w3.86 4.49 priorities w4.49 4.55 a w4.55 4.76 little w4.76 4.98 bit wResearch and non-commercial
Free under the nyra health Non-Commercial Research License. Runs on CPU, with a GPU strongly recommended.
In a product
Commercial use of the model or its timestamps needs a license. The noise-robust Pro model is commercial only.
For researchers
The method, the full benchmarks, and where to find the weights and code.
The nyra forced aligner
Self-supervised features, explicit units for vocal sounds, and a projection that has already seen noise. The full write-up and every benchmark.
Read the research- nyralabs/nyra_forced_aligner_enWeights and model card on Hugging Face
- nyrahealth/nyra-forced-alignerCode and transcript conventions on GitHub
Work with the lab
Research collaborations, data partnerships and shared evaluation. Tell us what you are working on.
Get in touchMade for CrisperWhisper transcripts
Transcribe with CrisperWhisper 2.0, align with the nyra forced aligner, and every laugh and uh in the audio has a segment to belong to.
CrisperWhisper 2.0Related research
Turning emergent cross-attention into a precise aligner
How CrisperWhisper 2.0 reads millisecond-accurate word timings out of an ASR decoder's cross-attention: by making the output policy explicit, then supervising the heads that already lean toward alignment.
CrisperWhisper 2.0
Verbatim speech recognition for how people actually talk: controllable, multilingual, and precisely timed to the word.
Closing the verbatim data gap
How to upgrade existing spontaneous-speech corpora into faithful verbatim datasets while preserving the transcripts you already trust.