Transcript cleaner
Strip the furniture out of a transcript export: timestamps, speaker labels, [inaudible] markers and cue numbers, then rejoin the lines it was hard-wrapped into. Five passes, each switchable, each reporting how many lines it touched.
Everything here runs on your device. Nothing you paste is uploaded.
What this tool does, and what it does not
Almost nothing that produces a transcript produces prose. A meeting recorder gives you speaker labels and a timestamp every few seconds. A captions file gives you cue numbers and lines hard-wrapped at 42 characters regardless of where the sentence is. A transcriptionist leaves [inaudible] and [crosstalk] where the audio failed. Paste any of it into a document and you spend twenty minutes deleting furniture by hand.
This page removes that furniture and nothing else. It is deliberately narrow: five passes, all of them about transcript and caption markup. General cleanup — double spaces, smart quotes, filler words, blank lines, ALL-CAPS text, prose that was hard-wrapped by an email client rather than a captioner — lives on the text cleaner, which has a one-click “meeting transcript” preset for exactly this material. Many people run the transcript through here first and the result through there second.
The five passes
Strip timestamps
Catches the shapes that show up in real exports: bracketed stamps like [00:01:23] and [00:01:23.456], cue timing lines like 00:00:04,120 --> 00:00:07,900 (both the comma and the dot decimal separator), parenthesised stamps like (12:34), and a bare 1:23 or 00:01:23 opening a line. A line that was nothing but a timestamp is removed rather than left behind as an empty line.
A full hh:mm:ss at the end of a line is also stripped, but a bare mm:ss there is left alone — “the meeting moved to 3:30” is a sentence, not a marker.
Strip speaker labels
Removes SPEAKER 1:, Speaker 2 :, Participant 3:,Interviewer:, all-caps names like JOHN: and DR. PATEL:, title-case full names like John Doe:, and the >> chevrons that broadcast captions use for a change of speaker. A single title-case word followed by a colon is left alone on purpose, so “Note: the numbers are provisional” survives.
An all-caps clause that merely ends in a colon is protected too: “THE PLAN IS SIMPLE: WE SHIP FRIDAY” comes through intact, because a speaker label never contains words like the, is or we. If you need to keep track of who said what, leave this pass off and delete the labels by hand at the end.
Strip [inaudible] markers
The bracketed asides a transcriptionist leaves in place of audio: [inaudible], [indiscernible], [crosstalk], [laughter], [applause], [pause], [BLANK_AUDIO], [music], [phonetic], (unintelligible) and the timestamped variants like [inaudible 00:14:02]. Square brackets, round brackets and braces are all handled. Brackets that contain anything else — [the shared folder], a citation, an editorial insertion — are left exactly where they are.
Removing these changes the meaning of the transcript: a sentence that reads “the number was [inaudible] million” becomes “the number was million”. That is usually what you want when the transcript is becoming an article, and never what you want when it is evidence. Read the result before you use it.
Strip line and cue numbers
Off by default, because a numbered list looks exactly like a numbered transcript to a regular expression. It removes a bare number on its own line — the cue index in an SRT file — and the 12. / 12) / 12: prefixes used by line-numbered transcripts. Switch it on for a captions or deposition export; leave it off for anything with an ordered list in it.
Unwrap hard-wrapped lines
Joins a line onto the one above it when that line ended mid-sentence — that is, when it did not end in ., !, ?, :, ; or a closing quote or bracket. A blank line always starts a new paragraph, a line beginning with a bullet or a list number is never swallowed into the one above, and a line that is nothing but a number — a cue index you chose to keep — never has the sentence below it pulled up alongside it.
This is the pass that turns a 42-character caption column back into paragraphs. It is conservative on purpose: a transcript with one sentence per line keeps its structure, because each of those lines already ends in a full stop.
The order the passes run in
The order is fixed and it matters. Cue numbers come off first, then timestamps, then speaker labels, then markers — a sentence-level rule cannot reason about a line that starts 00:04:12 SPEAKER 2:. Unwrapping runs last, because it has to judge where a sentence ended, and it can only do that once the furniture is gone. The blank-line gaps left where a cue block used to be are closed automatically at the end; that is not a decision worth a checkbox.
One caveat worth knowing: unwrapping and speaker labels do not always sit well together. If a turn is cut off mid-sentence by a hard wrap, the next speaker’s line can be joined onto it. Clean a labelled transcript with unwrapping off, or strip the labels and let the paragraphs reflow.
Common questions
Does anything get sent to a server?
No. Every pass is plain JavaScript running in this tab. Nothing is uploaded, nothing is logged, and nothing survives a page refresh — which also means there is no undo beyond your own clipboard, so keep the original until you are happy with the result.
Can I use it on a subtitles file?
You can, but the subtitle converter is the better first step: it parses SRT and WebVTT properly, understands cue boundaries, and can output plain text with or without timestamps. Bring that output here if the text still needs unwrapping.
My transcript still has “um” everywhere.
That is deliberate — vocabulary is a different job from markup, and it is a job with judgement in it. The text cleaner handles filler words, with each tic on its own switch and “like”, “actually” and “right” off by default because they are ordinary words as often as they are tics.
The spacing is still wrong and there are double spaces everywhere.
Also the text cleaner — punctuation spacing, space collapsing, smart quotes and hidden characters are all passes there. This page only removes transcript markup.
Why did a heading disappear?
Almost always the speaker-label pass: a title-case heading ending in a colon has the same shape as John Doe:. Shouted all-caps clauses are protected, but a two-word title-case heading can still be caught. Switch that pass off, clean the rest, and delete the two or three real labels by hand.
Can I keep the timestamps but drop everything else?
Yes — that is the point of the switches. Untick “Strip timestamps” and leave the rest on. A bracketed stamp on its own line survives unwrapping intact, because a line ending in ] counts as finished; a bare 00:01:23 on its own line does not, so the sentence under it will be pulled up alongside it.
Nothing changed when I pasted my text.
Then the transcript is already clean of everything these passes look for. Check the per-pass summary under the output: it lists every enabled pass and how many lines it touched, and “no change” against all five means there was nothing to do. If the mess is spacing, quotes or filler rather than markup, the text cleaner is the page you want.
Where the mess comes from — and how to stop making it
Transcript furniture exists because the recording came first and the writing came second. Every meeting tool has to tell you when and who, so it interleaves that with the words, and you spend your time undoing it.
VoiceSnap Pro inverts the order. You hold one keyboard shortcut, speak, and clean punctuated text lands in whatever field your cursor is already in — the email you are writing, a Slack message, a code editor, a browser form. There is no export step to clean up, because there is no export: the text is already in the document. Filler words are removed as you speak, punctuation and paragraph breaks are added automatically, and every dictation is also saved to a searchable notes library.
It runs on macOS and Windows, covers 50+ languages with mid-sentence switching, accepts a custom vocabulary for names, jargon and acronyms, and is a one-time purchase rather than a subscription. Nothing you dictate is used to train AI models. The app has not shipped yet — join the waitlist to hear on release day.