๐ ASR Punctuation / Truecase
Turn a wall of lowercase transcript into readable text
- text
- info
Some speech-to-text models hand you back a raw firehose: so this was designed mainly for raw asr outputs like granite but it can clean up any plain text transcript as well - no capital letters, no periods, no commas. Technically correct, painful to read, and useless as a subtitle. This node fixes exactly that. It restores punctuation and capitalization (that's what "truecase" means - putting the real capital letters back) so a transcript reads like something a human wrote.
It exists because TTS Audio Suite split its subtitle pipeline into stages. Transcription (ASR) gives you words and timing; this node cleans the words; then a builder turns clean text plus the original timing into a proper SRT. The flow is ASR Transcribe โ ASR Punctuation / Truecase โ Text to SRT Builder. It's aimed squarely at ASR engines that emit low-punctuation output - Granite especially - but it'll tidy any plain text you throw at it.
How it works
It runs a small dedicated punctuation-and-truecasing model over your text. These aren't giant LLMs - they're purpose-built restoration models, which is why they're fast and only a few hundred MB. You pick which language coverage you need, and it inserts the sentence boundaries and capitals a person would.
The inputs and outputs that matter
text(STRING) - the raw transcript. Wire the text output of your ASR node into this, or paste in your own.model- three options, and the size difference is real: English (~210MB), Romance for ES/FR/IT/PT/CA/GL (~144MB), or the 47-Language model (~1.11GB). Pick the smallest one that covers your language. Don't grab the 1.1GB multilingual model to punctuate English.lowercase_input_first(default on) - normalizes everything to lowercase before restoring case. This is the right default for messy ASR that has random capitals; it gives the truecaser a clean slate.processing_scope(Whole Text/Per Paragraph) andoutput_mode(Restored Paragraphs/One Sentence Per Line) - how it chunks the input and shapes the output.One Sentence Per Lineis handy when the next stage wants one cue per line.
Outputs are text (STRING) - the cleaned transcript, ready for the SRT builder or a TTS node - and info (STRING), a small report.
How to install it
It comes with TTS Audio Suite. ComfyUI Manager: search TTS Audio Suite, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/diodiogod/TTS-Audio-Suite.git
cd TTS-Audio-Suite
python install.py
then restart. On Linux, install portaudio19-dev and libsamplerate0-dev first. The punctuation model you select downloads automatically on first use into the suite's TTS model folder - so the first run of a given model is slow, later ones instant.
Common issues & troubleshooting
It capitalized things weirdly / kept the wrong case. Try toggling lowercase_input_first on. If your input already had good capitalization and the truecaser is second-guessing proper nouns, that's the model doing its job imperfectly on names - restoration models handle common words far better than rare ones.
Wrong language, garbled result. The English model only knows English. If you're punctuating French or a mix, switch to the Romance or 47-Language model. Feeding non-English text to the EN model gives you nonsense.
I don't need this at all. Correct - if your ASR engine already emits clean, punctuated text (many do), skip straight to the SRT builder. This node earns its place specifically on raw outputs like Granite that come back bare.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | this was designed mainly for raw asr outputs like granite but it can clean up any plain text transcript as well | Raw text to post-process with punctuation and true-casing. Designed mainly for low-punctuation ASR outputs such as Granite transcripts, but it can be used on any plain text transcript. Important: this expects plain transcript text, not full SRT files with cue numbers and timestamps. Best results usually come from lowercased, lightly cleaned ASR text rather than already-punctuated prose. If a paragraph already looks properly punctuated, the node now skips repunctuating that paragraph automatically instead of making it worse. |
| model | COMBO | English Fullstop + Truecase (EN, ~210MB) | Choose the punctuation/truecase model. English is the lightest option. Romance covers ES/FR/IT/PT/CA/GL. XLM-R is the heavy multilingual fallback. These are helper models, not ASR engines. |
| processing_scope | COMBO | Whole Text | How to feed text to the punctuation model. Whole Text: process the entire input as one block. Per Paragraph: split on blank lines first and preserve paragraph breaks. |
| output_mode | COMBO | Restored Paragraphs | How to format the output text. Restored Paragraphs: normal punctuated text. One Sentence Per Line: useful for subtitle prep, manual review, or later segmentation. |
| lowercase_input_first | BOOLEAN | true | Lowercase the input before running the punctuation model. Recommended for raw ASR text because these helper models are mainly trained for lowercased, unpunctuated transcripts. Disable only if you are intentionally experimenting with already-cased input. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | โ |
| info | STRING | โ |