Confucius4 Save Transcript
Where the text actually lands on disk
- saved_path
Every transcription workflow ends here. Confucius4 Transcribe and Confucius4 Live Microphone hand you text inside ComfyUI, which is fine for eyeballing and useless for anything else - this node writes it to a file in ComfyUI's output folder so you can actually use it.
The inputs
result_json - the forced input. Not the text output: the full JSON string from one of the two transcribe nodes. The node parses it, so a plain sentence from some other string node will fail on JSON decode. This is the mistake people make.
format - txt or json. txt writes nothing but the transcript. json writes the whole result: segment boundaries, detected language, timing, mode_executed, the status flag. If you care about anything other than the words, pick json. There are no timestamps in the txt - that's not a bug, that's the format.
prefix - the front of the filename, default r2t2_transcript. Anything outside letters, digits, dash, and underscore gets swapped for an underscore, and it's capped at 64 characters, so a tidy prefix like podcast_ep12 is worth the five seconds.
What it does when you Run it
It reads the status field first and only saves results that are complete, finalized, requires_review, or truncated - i.e. finished, or finished-with-a-caveat. A cancelled or half-fed live session has no status worth trusting, and this node won't write one out.
Then it builds a filename from your prefix plus the first 16 hex characters of a SHA-256 of the JSON, and writes to ComfyUI/output/ as <prefix>_<hash>.<ext>. Two consequences worth knowing:
- Re-running is safe. Same result, same filename, no duplicates piling up on every queue. The write is atomic (temp file, then link), and if a file with that name exists with different content, it raises instead of clobbering.
- One edited word changes the filename. The hash is of the content. If you want predictable filenames for a pipeline, don't lean on this one - rename or copy after the fact. Keeping the prefix meaningful at least makes them sortable.
It also refuses to follow a symlink at the target path, which is the pack being paranoid about writing outside your output directory. Mild, and worth a shrug unless you've done something creative with your output folder.
OUTPUT_NODE is set, so this always executes when it's part of the queued graph - no need to route anything further downstream to make it fire. Its single output, saved_path, is the absolute path it wrote, which you can wire into a text node or anything else that wants the path string.
Install
Same pack, same install as the rest: ComfyUI Manager → Confucius4-R2T2 Q8 ASR, then the Windows scripts/setup_worker_windows.ps1 step, which is what actually gives the pack a runtime - audio tooling in ComfyUI tends to arrive as a bespoke pack with its own dependency stack, as audio-generation.md puts it, and this one is no exception. Both bundled workflows already end in this node - the file one with prefix r2t2_ui_drag and format json, the live one with r2t2_live - so if you drag either one in you're already set up correctly.
Where people get burned
Feeding it raw text. Wire result_json, not text. Errors here look cryptic because they surface as a JSON parse failure or the "only finalized transcripts" message, depending on what you handed it.
Wondering where the file went. ComfyUI/output/, under the prefix and hash name. In the frontend, the output folder shortcut is the quickest way there.
Wanting timestamps and saving txt. Switch the format to json; the per-segment sample offsets only exist in the JSON.
Trying to save a live session you cancelled. Nothing was finalized, so there's nothing to save. Press Stop and finalize, then Run.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| result_json | STRING | — | |
| format | COMBO | 4 options: txt, json, srt, vtt | |
| prefix | STRING | r2t2_transcript | — |
| offset_msopt | INT | 0-86400000–86400000 | — |
| allow_partialopt | BOOLEAN | false | — |
| whole_audio_draftopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| saved_path | STRING | — |