NS Video Captions
The animated captions that make a video feel like a reel
- video
- caption_style
- transcript
- video
Every time you scroll a short-form video with word-by-word animated captions - the ones where each word pops in and highlights as it's spoken - that's a style you can't fake with a static subtitle burn-in. NSCaption Overlay (displayed as "NS Video Captions") is the node in symbiotica-ai/comfyui-nodes that renders that look onto your video. It's the caption end of the pack's pipeline, and it's genuinely good at the job.
How it works
The heavy lifting is done by Remotion - a React-based video rendering framework - compositing spring-animated captions as a transparent PNG sequence, which ffmpeg then overlays onto your source. That's why this node has a dependency most of the pack doesn't: Node.js installed system-wide. The pack ships a pre-built Remotion bundle so there's no npm install at install time, but the renderer subprocess still needs node on PATH. If you get a "Node.js not found" error, that's what it means - install Node and restart ComfyUI.
The part most people don't expect: if you don't wire in a transcript, it runs Whisper internally. You can drop a bare video in with no transcript and no style, and it'll transcribe with the default base model (first run downloads weights, a few hundred MB) and render captions with the default style. That's the "it just works" path - but it means every queue run pays the transcription cost, so once your pipeline is dialed in you'll want to feed a transcript from a dedicated transcribe node instead.
Inputs
- video (required) - what gets captions.
- caption_style (optional) - a CAPTION_STYLE object from NSCaption Style. Connect it and one style change updates every caption node wired to it.
- transcript (optional) - a TRANSCRIPT from NS Google Transcribe or NS Whisper Transcribe. Skip it and Whisper runs internally.
One output: video, the captioned result with your original audio copied through.
Install
Part of the symbiotica-ai/comfyui-nodes pack - ComfyUI Manager search "Symbiotica", or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Then the critical extra: install Node.js (https://nodejs.org) and make sure node/npx are on PATH. Without Node this node cannot render, period. Restart ComfyUI after both.
Gotchas
First render builds the Remotion bundle if it's missing, and renders spin up headless Chrome - on a small machine or container that first render can be slow, and there's a retry path for Chrome launch timeouts (it kills stale headless Chrome between attempts on Linux). Long videos render many PNG frames, so budget for it. And while Whisper-internal is convenient, it re-transcribes every run - if captions keep appearing with wrong words, wire a dedicated transcription node in and set the language explicitly in the style rather than relying on auto-detect.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| caption_styleopt | CAPTION_STYLE | — | |
| transcriptopt | TRANSCRIPT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |