Uhm.
On-device filler detection that marks every um, uh and hmm to within 20ms, an hour of audio in 12s.
Find and remove every filler word.
An hour-long episode is analyzed in 12s on an iPhone 17 Pro. A back catalog is a batch job you run locally, not a cloud invoice.
Uhm gets there by skipping the transcript step. The usual way to find an "um" is to transcribe the whole file and search the text. A transcript would not help anyway: models like Whisper leave fillers out of their output, so the ums never appear in the text to find.
Uhm reads the waveform instead and marks every filler it hears, so an editor can cut them or a one-click cleanup can tighten the whole take. Open an audio or video file and every filler word is listed with its time, so you click one and land on it.
Apple runs the 45MB Core ML build. The browser demo and a Python backend run the same model as 51MB of ONNX, so a web editor and a batch job behave identically.
10 minutes of audio in 2s.
296x realtime on an iPhone 17 Pro, 279x on an iPad Pro M4 and 169x on an iPhone 15 Pro, with predictions every 20ms.

Realtime factor (audio duration over analyze time), fp16 Core ML, warm (internal)
| Device | Realtime factor |
|---|---|
| iPhone 17 Pro | 296x |
| iPad Pro (M4) | 279x |
| iPhone 15 Pro | 169x |
Internal benchmarks. Trained on English; transfer to Spanish, French, German, and Dutch is acoustic and has not been separately measured.
Cut every filler on the timeline.
Clean a back catalog overnight
At 296x realtime a hundred hours of archive is 20 minutes of local compute on an iPhone. Batch the whole library instead of paying a cloud speech service per minute for audio you already own.
A filler timeline in the browser
In a web editor, every filler in an audio or video file is listed with a click-to-seek time, computed client-side, with no upload and no worker queue behind it.
Drop the ums before they reach the text
Flag disfluencies in the audio and leave them out of the words that reach your transcript, so the finished text reads the way the speaker meant to say the line.
Speaking practice and coaching
Count how often a speaker reaches for a filler across a recorded talk and show them the pattern, in a practice app that never uploads their voice.
Inspiration
Ideas to build with Uhm. Copy a prompt into your coding agent and go.
Add a 'remove ums' button to a podcast or video editor.
Add a one-tap action that runs Desert Ant's Uhm on-device to find every filler word (um, uh, hmm) to within 20ms and cut them from the timeline, with an undo. Build it with the Desert Ant SDK. Uhm (Swift). Install and API: https://desertant.com/docs/uhm/. Install: SwiftPM desert-ant-core. SDK source: https://github.com/Desert-Ant-Labs/desert-ant-core. Machine-readable catalog of every model and SDK: https://desertant.com/llms.txt.
Build a speaking coach that counts and marks your filler words.
Build a speaking-practice app that records the user and uses Desert Ant's Uhm to mark and count filler words, showing progress over sessions. Runs on the phone, private. Build it with the Desert Ant SDK. Uhm (Swift). Install and API: https://desertant.com/docs/uhm/. Install: SwiftPM desert-ant-core. SDK source: https://github.com/Desert-Ant-Labs/desert-ant-core. Machine-readable catalog of every model and SDK: https://desertant.com/llms.txt.
Show a filler-word timeline for any recording.
Add a filler timeline to an audio editor: run Desert Ant's Uhm on-device and mark every um and uh on the waveform so an editor can jump between and trim them. Build it with the Desert Ant SDK. Uhm (Swift). Install and API: https://desertant.com/docs/uhm/. Install: SwiftPM desert-ant-core. SDK source: https://github.com/Desert-Ant-Labs/desert-ant-core. Machine-readable catalog of every model and SDK: https://desertant.com/llms.txt.
A clean, filler-free transcript from a raw, noisy recording.
Build a transcript pipeline: Desert Ant's Clear cleans the audio, Voz transcribes it, and Uhm removes the fillers, so a messy recording becomes a clean transcript, on-device. Build it with the Desert Ant SDK. Clear (Swift, Kotlin, JavaScript / TypeScript). Install and API: https://desertant.com/docs/clear/. Voz (Swift). Install and API: https://desertant.com/docs/voz/. Uhm (Swift). Install and API: https://desertant.com/docs/uhm/. SDK source: https://github.com/Desert-Ant-Labs/desert-ant-core. Machine-readable catalog of every model and SDK: https://desertant.com/llms.txt.
Trim every filler from a talking-head take automatically.
Build an auto-trim that runs Desert Ant's Uhm on-device to find and cut fillers from a talking-head video before export. Build it with the Desert Ant SDK. Uhm (Swift). Install and API: https://desertant.com/docs/uhm/. Install: SwiftPM desert-ant-core. SDK source: https://github.com/Desert-Ant-Labs/desert-ant-core. Machine-readable catalog of every model and SDK: https://desertant.com/llms.txt.
What the model does
- Frame-precise: accurate to 20ms.
- Acoustic detection: works directly on the waveform, no transcript required.
Biaspreset: precision, balanced, or recall.- Trained on English, transfers to Spanish, French, German, and Dutch without retraining.
Getting started
Add filler-word detection to your iOS or macOS app in a few lines of code. Uhm docs.
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core", from: "3.1.0")
// target dependency
.product(name: "Uhm", package: "desert-ant-core")
import Uhm
let result = try await Uhm().analyze(audioURL: url)
for f in result.fillers { print(f.start, f.end, f.type ?? .other) }
Add Uhm from Desert Ant Labs to this Swift project (iOS, macOS). What it does: On-device Filler-Word Detection for Audio and Video. SDK: Swift (iOS, macOS) Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme // Swift Package Manager .package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core", from: "3.1.0") // target dependency .product(name: "Uhm", package: "desert-ant-core") Reference: - Model page: https://desertant.com/models/uhm/ - Full catalog and other models: https://desertant.com/llms.txt Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
Specs
- Resolution
- 20ms frame resolution
- Model
- Acoustic, transcript-free
- On-device size
- 45MB Core ML (Apple); 51MB ONNX (browser, server)
- Languages
- English; transfers to Spanish, French, German, and Dutch
- Speed
- 296x realtime on an iPhone 17 Pro
Uhm was trained on English, and the four languages it transfers to have not been measured against per-language ground truth. Uhm works best on podcast, meeting, and talking-head audio.
Heavy background music, laughter, or several people talking over each other cost accuracy. Trust the filler-or-not answer more than the label: whether a filler was an "uh", an "um", or a "hmm" is the less reliable half of the result.
FAQ
What is Uhm?
On-device filler detection that marks every um, uh and hmm to within 20ms, an hour of audio in 12s.
Does Uhm run on device?
Yes. Uhm runs on the device, with no server call, so the data stays with the user.
Which platforms does Uhm support?
Uhm ships as a native on-device SDK for Swift.
How much does Uhm cost?
Every model is free up to 100k monthly active devices per SDK. Unlimited inference per user. Contact us for custom licenses.
How accurate or fast is Uhm?
296x realtime on an iPhone 17 Pro, 279x on an iPad Pro M4 and 169x on an iPhone 15 Pro, with predictions every 20ms.