GR Scroller
Bake animated scrolling, bouncing, or zooming text into a frame batch
- background_image
- FileDetails
- Frames
This is a kinetic-typography generator that lives entirely inside one node - no After Effects, no separate motion-graphics tool. Give it text, pick a resolution and frame rate, choose how it moves, and it renders the animation as a batch of frames you can pipe straight into a video-combine step. It's overkill for a simple static caption (see GR Text Overlay for that), but if you actually want a scrolling news-ticker, a bouncing title card, or letter-by-letter reveal text, this is a real timesaver.
How it works
text, resolution (seven presets from SD up to 4K, portrait variants included), and fps (1-120) set up the canvas. movement_type is the real headline - the schema lists 25 choices, including scroll, bounce, wave, jitter, circular, zoom, fade, rotate, oscillate, diagonal, spiral, and flip, with more beyond that. scroll_direction (left/right/up/down) presumably only bites when movement_type is actually scroll - setting a direction while running bounce or zoom likely won't do what you'd expect, since direction is a scroll-specific concept. movement_speed, movement_duration, and movement_distance control how fast, how long, and how far the animation runs; apply_to_each_character switches from moving the whole string as one block to animating each letter independently, which is the classic "each character bounces in on its own" effect. seed gives you reproducibility on whichever movement types have randomness baked in.
Font styling is its own block - font_path, font_size, font_color, font_opacity, and an optional font_stroke with its own thickness and color. You can render over a plain background_colour, or set use_background_image (plus use_background_image_size to match the canvas to it) and feed in a background_image to overlay the text on your own footage or still.
The inputs and outputs that matter
text,movement_type,scroll_direction- what it says and how it moves.resolution,fps- canvas and frame rate.output_path/save_images+image_save_path- where results get written.
Two outputs: FileDetails (STRING, a summary of the run) and Frames (IMAGE, the actual rendered frame batch - this is what you chain into a video-combine node downstream).
How to install it
ComfyUI Manager, search GraftingRayman. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/GraftingRayman/ComfyUI_GraftingRayman
Restart afterward. The pack won't import at all without OpenAI's CLIP installed separately, even though this node has nothing to do with CLIP - portable ComfyUI: .\python_embeded\python.exe -m pip install git+https://github.com/openai/CLIP.git; system Python: pip install git+https://github.com/openai/CLIP.git.
Common issues & troubleshooting
Pack fails to load. Check your startup console for the CLIP import error and run the pip install above.
Run fails on a fresh install or errors about a bad path. output_path defaults to a Windows path (H:\scroller\output_video.mp4), and image_save_path defaults similarly. Neither exists on a machine without an H: drive - which is most machines, and certainly any Linux box or cloud executor. Set both to a real, writable path before running.
Direction doesn't seem to affect the animation. scroll_direction is a scroll-specific setting - if movement_type is anything other than scroll (bounce, zoom, wave, and so on), direction likely has no effect on that motion style.
Font doesn't look right, or the dropdown feels limited. font_path is a literal filesystem path to a font file, not a family name - available choices depend on what fonts are actually installed on the machine running ComfyUI. A different OS or a bare container image may not have the same font set the pack's defaults assume.
Motion looks identical across otherwise-different runs, or you can't get a specific result back. Check seed - it's your reproducibility knob for whichever movement types use randomness.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Sample Text | — |
| fps | INT | 301–120 | — |
| resolution | COMBO | HD 1280x720 | 7 options: 4K 3840x2160, Full HD 1920x1080, HD 1280x720, Portrait 4K 2160x3840, Portrait Full HD 1080x1920, Portrait HD 720x1280, +1 |
| use_background_image_size | BOOLEAN | false | — |
| use_background_image | BOOLEAN | false | — |
| font_path | COMBO | /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf | 10 options: /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf, +4 |
| font_size | INT | 10010–1000 | — |
| font_color | COMBO | white | 15 options: black, blue, cyan, gray, green, magenta, +9 |
| font_opacity | INT | 1000–100 | — |
| font_stroke | BOOLEAN | false | — |
| font_stroke_thickness | INT | 21–10 | — |
| font_stroke_colour | COMBO | black | 15 options: black, blue, cyan, gray, green, magenta, +9 |
| background_colour | COMBO | black | 15 options: black, blue, cyan, gray, green, magenta, +9 |
| output_path | STRING | H:\scroller\output_video.mp4 | — |
| save_images | BOOLEAN | false | — |
| image_save_path | STRING | H:\scroller\frames\ | — |
| scroll_direction | COMBO | left | 4 options: left, right, up, down |
| scroll_speed | FLOAT | 1.00.1–250 | — |
| movement_speed | FLOAT | 1.00.1–10 | — |
| movement_duration | INT | 101–600 | — |
| movement_type | COMBO | scroll | 25 options: scroll, bounce, wave, jitter, circular, zoom, +19 |
| movement_distance | INT | 201–100 | — |
| apply_to_each_character | BOOLEAN | false | — |
| seed | INT | 11404756490–4294967295 | — |
| upscale | FLOAT | 1.01–10 | — |
| background_imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| FileDetails | STRING | — |
| Frames | IMAGE | — |