Back to all tools
Free · runs in your browser

Transcript cleaner

Turn a raw transcript export into readable prose. Seven independent passes strip timestamps, speaker labels and line numbers, rejoin hard-wrapped lines, and tidy the spacing — each one switchable, each one reporting how many lines it touched.

Cleanup passes
Lines in
0
Lines out
0
Words out
0

Everything here runs on your device. Nothing you paste is uploaded.

The problem with transcript exports

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 hard-wrapped lines that break at 42 characters regardless of where the sentence is. A court-style transcript gives you line numbers down the left margin. Paste any of them into a document and you spend the next twenty minutes deleting furniture by hand.

This tool does that deletion as a set of named passes. Each pass is a checkbox, each one can be switched off, and each one reports how many lines it changed — so when the output looks wrong you can see which rule did it instead of guessing. Everything runs in this tab; the transcript is never uploaded.

What each pass does

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:, 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.

If you need to keep track of who said what, leave this pass off and delete the labels by hand at the end. Note that 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.

Strip line 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 ends in a full stop.

Collapse blank lines

Three or more consecutive newlines become one blank line. Exports that removed a timestamp block often leave two or three empty lines where it used to be.

Fix punctuation spacing

Deletes the space in “word , word”, adds the missing one in “end.Next” and “first,second”, squeezes runs of spaces down to one, and trims trailing whitespace. The rule that inserts a space after a full stop only fires when the word before it is at least two lowercase letters long, so U.S.A., e.g. and 3.5 are not pulled apart.

Sentence-case ALL CAPS

Off by default and self-limiting: it only acts when at least 80 per cent of the letters in the transcript are uppercase. If your text is mixed case it reports “skipped — the transcript is not mostly uppercase” and changes nothing. When it does run, it lowercases the text, capitalises the first letter of each sentence, and restores the pronoun I. It cannot know that a proper noun was a proper noun, so a capitalised-names pass by eye is still worth doing afterwards.

The order the passes run in

The order is fixed, and it matters. Markup comes off first (line numbers, then timestamps, then speaker labels) because sentence-level rules cannot reason about a line that starts with 00:04:12 SPEAKER 2:. Casing and spacing come next. Structural changes — unwrapping, then collapsing blank lines — come last, so they are working on lines that have already lost their furniture.

One caveat worth knowing: on a fully uppercase transcript, the speaker-label pass runs before sentence-casing, which means an all-caps clause that happens to end in a colon can be mistaken for a label. If your transcript is ALL CAPS and the output has lost a phrase, run it once with speaker labels off, copy the result, then run it again with them on.

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 or spacing work.

My transcript still has “um” everywhere.

That is deliberate — vocabulary is a separate job from structure. Send the result to the filler word remover, which switches each tic on and off individually and repairs the punctuation left behind.

Why did a heading disappear?

Almost always the speaker-label pass: an all-caps or title-case heading ending in a colon has the same shape as JOHN DOE:. 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 your 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 seven means there was nothing to do.

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.