Nodes/Strata-T8/Strata 语音转录 / Speech Transcript
ComfyUI Node

Strata 语音转录 / Speech Transcript

Dialogue text and subtitles for your video, no Whisper install

By T8mars·Created 21 days ago·Updated 10 days ago· 20
Strata 语音转录 / Speech Transcript
  • connection
  • video
  • audio
  • text
  • timed_transcript
  • srt
◄enable_asrfalse►
◄start_s0.00►
◄duration_s10.00►
◄audio_offset_s0.00►
◄timed_transcript►

You have a clip with people talking in it, and you want the words: a plain string you can push into a prompt, an SRT you can hand to a player, or timed cues you can give the video-analysis node so it knows what was said and not just what was seen.

That's what Strata 语音转录 / Speech Transcript does. The useful surprise is that it has two jobs, and only one of them needs a speech model.

Two jobs, one node

The audio layer of the ComfyUI stack is thin, and transcription is the thinnest part of it - the tooling is built almost entirely around making audio (Kokoro, Chatterbox, ACE-Step), not understanding it. The comment threads under big node releases keep asking for exactly this: a node that handles "audio and video transcription, or image description."

So: job one, you already have subtitles (an SRT, a VTT, a JSON cue list from somewhere else) and you want them in the graph as text. Job two, you don't, and you want the node to transcribe for you. Job one costs nothing - no model, no VRAM, no service call. Job two loads a speech model inside the Strata-T8 runtime, a separate process these nodes just talk to.

How it works

This node is a thin client, and that's the point. There's no ASR library in ComfyUI's Python, so nothing to conflict with your transformers or torchaudio - the usual way audio nodes wreck an install.

When enable_asr is on, the node pulls a bounded window out of your video (decoding the audio track with the PyAV ComfyUI already ships, keeping the container presentation clock) or copies the slice it needs from a wired audio, downsamples it to 16 kHz mono, packs it as a WAV, base64s it, and POSTs it to /v1/audio/transcribe on the runtime. The runtime owns the model, the VAD and the native libraries. What comes back is a cue list, and the node maps those times back onto your input video's timeline before handing them to you.

Supplied subtitles skip all of that: paste SRT/VTT/JSON into timed_transcript and it parses locally.

The ASR model is Confucius4-R2T2 (netease-youdao) in GGUF - Confucius4-R2T2-Q4_K_M.gguf plus mmproj-Confucius4-R2T2-Q8_0.gguf, roughly 1.46 GB together. Point the runtime's model settings at that directory; the node never downloads weights. The speech projector and the vision projector are different files - swapping them fails confusingly.

Inputs and outputs that matter

connection is required - that's the wire from the Strata Connection node, pointing at a profile you saved in the sidebar panel. Then:

  • enable_asr defaults to off. Off means "just parse what I gave you."
  • start_s / duration_s pick the window. duration_s defaults to 10 seconds, which is the single most common reason people think the node is broken (below).
  • Optional video or audio as the source, audio_offset_s when you wire a detached AUDIO (where sample zero sits on the video's clock - positive pads silence, negative trims), and timed_transcript for supplied subtitles.

Outputs are three strings: text, every cue joined by newlines (good enough for a prompt); timed_transcript, the JSON contract with cue IDs and timing (wire this into Full Video Analyze's timed_transcript to reuse one transcription instead of paying for it twice); and srt, a ready-to-save subtitle file.

Install

ComfyUI Manager → search Strata-T8 (registry ID strata-t8, publisher t8star), or:

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-Strata-T8.git

Then install requirements.txt with ComfyUI's own Python and restart. It contains exactly one line, jsonschema. The heavy part isn't the node - it's the separate Strata-T8 runtime pack (the big IQ3_S GGUF main model plus the ~907 MB vision encoder). Nodes and runtime are versioned separately: ASR needs runtime 0.1.42-t8.8 or newer; the current node is 1.3.0 against runtime 0.1.42-t8.9.

Where people get burned

The silent empty string. With enable_asr off and an empty timed_transcript, the node returns three empty strings - no error, no warning. If you got nothing, check that box first. Same goes for the 10-second default: set duration_s to what you actually want.

The upload budget. The runtime rejects any request over 64 MiB, and base64 float32 PCM fills that fast: roughly 13 minutes at 16 kHz mono, less at higher sample rates or with multiple channels. The duration_s widget allows up to 3600 - that's the window limit, not the practical one. Split long audio.

Timestamps are VAD-segment-level. Not word-level forced alignment. Fine for subtitles and for correlating speech with video segments; not fine for karaoke or lip-sync work, and the report says so itself. Quiet speech, music beds and overlapping voices will mis-recognise, and clipped boundaries keep a review flag.

CUDA ASR is fussy about ownership. On GPU the runtime needs an idle service, serial serving and allow_lifecycle:true; with same_gpu:true the node hands ComfyUI's allocations over first. CPU transcription leaves your resident Strata model alone. On Linux, remember managed mode is a Windows-packaging feature - Linux talks to an already-running service with mode: external. One more thing before you start reading: the README and most audit docs are in Chinese, but the node's own tooltips are English.

CategoryStrata-T8

Inputs (8)

NameTypeDefaultDescription
connectionSTRATA_CONNECTION—
enable_asrBOOLEANfalseAutomatically transcribe speech; defaults off. Supplied timed subtitles can be used without loading ASR.
start_sFLOAT0.000–86400—
duration_sFLOAT10.000.001–3600—
videooptVIDEO—
audiooptAUDIO—
audio_offset_soptFLOAT0.00-86400–86400—
timed_transcriptoptSTRING—

Outputs (3)

NameTypeDescription
textSTRING—
timed_transcriptSTRING—
srtSTRING—