Pattern
Render test cards, gradients, noise, and countdowns — the clip you didn't know you needed
- video
Pattern is the node that synthesizes a clip from nothing - no input video required. Pick a kind, set a resolution, frame rate, and duration, and it renders a procedural clip on Run. It's the least glamorous thing in the VideoFX family and the one you'll be genuinely grateful for at 11pm when you need a background plate, a transition fill, or broadcast test bars.
The kind dropdown is the whole personality of the node. Options include ramp (linear gradients, with two points p0_x/y → p1_x/y and an interp mode), radial, rectangle, noise / perlin (animated turbulence), colorbars and colorwheel (actual broadcast test patterns - SMPTE-style bars and a color wheel with bar_intensity, wheel_gamma, wheel_rotate), plus a countdown / count-up leader (count_style = seconds or frames, count_direction = down or up) for the front of a reel.
The parameters by job
- Common:
width/height(up to 4096),fps,duration,color0/color1,seed. - Ramp:
p0_x/y,p1_x/y,interp,softness(how hard the transition edge is). - Noise:
noise_scale,noise_octaves(1–8, more octaves = finer detail),noise_speed(how fast it animates). - Boxes:
box_sizefor a rectangle grid. - Bars/wheel/count:
bar_intensity,wheel_gamma,wheel_rotate,count_style,count_direction.
No inputs, one output: video (COMFYTV_VIDEO).
Where it earns its place
Four genuinely useful jobs, per the pack's docs: backgrounds and mattes (a moving noise/turbulence source can drive other effects), broadcast test patterns when you're checking a pipeline or shooting a reference, a countdown leader before a clip, and a gradient you can key or composite against. It's also the fast way to make a placeholder clip to test an FX chain end-to-end without burning a generation model.
Install
Pack-wide:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI - Desktop/macOS users clone into the running instance by absolute path, verify __init__.py at the top level, and restart the backend rather than the browser tab. ComfyUI Manager finds it as "ComfyTV". Zero extra Python dependencies.
No gotchas worth inventing here - it's a procedural generator, so there's no model download and no GPU load beyond the render itself. The one thing to remember: each kind uses only the parameters that apply to it, so a ramp ignores bar_intensity and so on. Set the kind first, then touch only the knobs that light up.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| kind | COMBO | ramp | 12 options: ramp, radial, rectangle, noise, perlin, turbulence, +6 |
| width | INT | 128016–4096 | — |
| height | INT | 72016–4096 | — |
| fps | INT | 241–120 | — |
| duration | FLOAT | 5.00.5–120 | — |
| color0 | STRING | #000000 | — |
| color1 | STRING | #FFFFFF | — |
| p0_x | FLOAT | 0.000–1 | — |
| p0_y | FLOAT | 0.500–1 | — |
| p1_x | FLOAT | 1.000–1 | — |
| p1_y | FLOAT | 0.500–1 | — |
| interp | COMBO | linear | 4 options: linear, smooth, ease_in, ease_out |
| softness | FLOAT | 0.000–1 | — |
| noise_scale | INT | 644–512 | — |
| noise_octaves | INT | 41–8 | — |
| noise_speed | FLOAT | 1.000–10 | — |
| seed | INT | 70–99999 | — |
| box_size | INT | 642–1024 | — |
| bar_intensity | FLOAT | 751–100 | — |
| wheel_gamma | FLOAT | 0.450–4 | — |
| wheel_rotate | FLOAT | 0-180–180 | — |
| count_style | COMBO | seconds | 2 options: seconds, frames |
| count_direction | COMBO | down | 2 options: down, up |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |