Nodes/ComfyUI-Subtitle-Effects/Audio Cascade Scroller (播客滚动)
ComfyUI Node

Audio Cascade Scroller (播客滚动)

The podcast-style rolling subtitles that keep a conversation on screen

By liaowu-boos·Created 3 months ago·Updated 3 months ago· 2
Audio Cascade Scroller (播客滚动)
  • image
  • subtitle_data
  • IMAGE
font_name
font_size48
fps30.00
position_x0.50
text_area_y0.60
text_aligncenter
indicator
active_color#FFFFFF
inactive_color#888888
inactive_alpha120
inactive_scale0.80
transition_duration0.60
line_spacing1.8
max_visible_lines4
max_chars_per_line0
srt_path
text

If you watch any podcast clip with subtitles, you've seen the pattern: several lines stacked on screen, the currently-spoken line biggest and brightest, a little ▶ pointing at it, and every other line smaller and grayed out so you always know where you are. That's SubtitleCascadeScroller (播客滚动), the podcast-scroll node of the ComfyUI-Subtitle-Effects pack. Where the four-line flip node is the showpiece and spring-pop is for title beats, this one is the workhorse for actual dialogue - interviews, commentary, vlogs - anything where you want a persistent, readable transcript on screen.

Like every renderer in the pack, it composites onto your IMAGE frame sequence using pure CPU Pillow. Zero VRAM, no model files.

How it works

Under the hood it maintains a fixed hierarchy of four visible "slots" - the previous line, the current one, the next, and the one after - with preset scale and alpha tiers (roughly 0.75/1.2/0.7/0.55 and alpha 140/255/100/60). When the active subtitle changes, the node interpolates all four axes at once: vertical position, scale, opacity, and the position of the ▶ indicator, over transition_duration seconds. The current line sits largest with your active_color; inactive lines shrink, fade to inactive_alpha, and drop to inactive_color.

The genuinely clever bit is max_chars_per_line. Set it above 0 and the node will split long sentences into several short subtitles automatically - using HanLP's Chinese dependency parser for real syntactic break points, falling back to a jieba heuristic if HanLP isn't installed. That's why long Chinese sentences don't wrap mid-phrase: the break lands on a clause boundary, not a character count.

Inputs that matter

  • max_visible_lines (default 4) and line_spacing - how many rows show and how tall they stack. max_visible_lines beyond 4 mostly widens the window the transition passes through.
  • transition_duration (0.6s) - the smoothness of the roll. Lower is snappier, higher is floatier.
  • text_align - center/left/right for the text block.
  • active_color / inactive_color / inactive_alpha / inactive_scale - the whole "current vs. past" read. Crank inactive_alpha down and inactive_scale down for a strong current-line emphasis.
  • indicator - the marker string, ▶ by default. Change it to a bullet or >> if the triangle isn't your vibe.
  • max_chars_per_line - 0 means "use lines as given"; a positive value enables the automatic long-sentence splitting. This is the input most worth experimenting with for spoken-word content.
  • position_x / text_area_y - where the block sits; text_area_y 0.6 puts it comfortably above center-bottom.

text and subtitle_data are optional inputs feeding the same entry source; srt_path is the file fallback. Output is a single IMAGE - the composited frame sequence.

Install

Same pack, same drill:

cd ComfyUI/custom_nodes
git clone https://github.com/liaowu-boos/ComfyUI-Subtitle-Effects.git
cd ComfyUI-Subtitle-Effects
pip install "Pillow>=9.0.0" "jieba>=0.42" "hanlp>=2.1"

Or search liaowu-boos/ComfyUI-Subtitle-Effects in ComfyUI Manager and restart. The hanlp install is the only per-node extra in the whole pack - and it's optional. Without it, the node prints a fallback notice and uses the jieba heuristic; with it, long-sentence splits get noticeably smarter.

Common issues

  • First run looks like it's hung. HanLP's first load downloads and initializes a model - the source comments say roughly 50 seconds, then about 20ms per sentence afterward. It's not frozen; it's warming up.
  • Lines keep splitting mid-word anyway. If max_chars_per_line is set and you don't have HanLP, the jieba fallback is heuristic - good enough for Chinese, less careful for mixed English. Either install hanlp or raise the limit.
  • Every line is the same size. If the active/inactive contrast feels flat, check that inactive_scale and inactive_alpha are doing something - at defaults of 0.8 and 120 the difference is subtle on bright footage.
  • Long video memory. Pack-wide rule: ~95MB of frame tensors per second at 720p/30fps. Render in segments for anything past a minute.

This is the node most podcast-style creators will actually live in. Set it up once with your colors, feed it SUBTITLE_DATA from a SubtitleSource, and it just keeps the transcript rolling.

CategorySubtitle Effects/Dynamic

Inputs (19)

NameTypeDefaultDescription
imageIMAGE
font_nameCOMBO7 options: Inter-Regular.otf, JetBrainsMono-Regular.ttf, LXGWWenKai-Regular.ttf, NotoSerifSC-Regular.otf, SmileySans-Oblique.ttf, SourceHanSansSC-Regular.otf, +1
font_sizeINT4812–200
fpsFLOAT30.001–120
position_xFLOAT0.500–1
text_area_yFLOAT0.600–1
text_alignCOMBOcenter3 options: center, left, right
indicatorSTRING
active_colorSTRING#FFFFFF
inactive_colorSTRING#888888
inactive_alphaINT1200–255
inactive_scaleFLOAT0.800.3–1
transition_durationFLOAT0.600.1–2
line_spacingFLOAT1.81–4
max_visible_linesINT41–10
max_chars_per_lineINT00–50
srt_pathSTRING
textoptSTRING
subtitle_dataoptSUBTITLE_DATA

Outputs (1)

NameTypeDescription
IMAGEIMAGE