GR Counter
An animated countdown/counter frame generator — check the default paths before you run it
- background_image
- FileDetails
- FrameImages
This node generates a sequence of frames counting between two numbers - up, down as a countdown, or formatted as a clock - with enough styling controls to build a genuinely polished intro/outro counter for a video: font animation, movement across the frame, rotation, an optional background image, shadows and outlines. Feed the resulting frames into a video-combine node and you've got an actual countdown or number-reveal video without touching a separate motion-graphics tool.
One thing to flag before you run it: two of the inputs, video_path and image_output_folder, default to Windows-style paths (h:\counter\counter_video.mp4 and h:\counter\images\) - clearly the author's own machine. If you're running ComfyUI on Linux, which covers most cloud and server setups, those defaults are meaningless and you need to override both before enabling save_images or anything that writes to them, or you'll get a write error rather than the output you expected.
How it works
start and finish set the count range, counter_duration (in milliseconds) and fps determine how the count is spread across frames, and countdown/clock_type change the counting behavior (down instead of up, or clock-formatted instead of a raw number). resolution picks from seven common presets (4K down to SD, portrait and landscape variants), or use_background_image_size derives the resolution from a supplied background_image instead. Everything else is styling: font choice and size range (font_size_min/font_size_max, which work together with font_control - decrease, constant, increase, pulse - to animate the number's size across the count rather than holding it static), color and opacity, an optional drop shadow, an optional outline, and motion controls (start_x/start_y/end_x/end_y plus movement to slide the number across the frame as it counts, and rotate/rotate_type/rotate_freq for spin).
The inputs and outputs that matter
start,finish,countdown,clock_type- the core counting behavior.fpsandcounter_duration- together these set total frame count; get the pacing you want by adjusting these rather than guessing atframes_per_transition-style controls, since this node doesn't have one.resolutionorbackground_image(optional) plususe_background_image_size- pick your canvas.video_pathandimage_output_folder- check these before enablingsave_images; the defaults are Windows paths that won't resolve on Linux.processing_device(cpu/gpu) - worth switching togpufor a long, high-fpssequence.
Two outputs: FileDetails (a string, presumably describing what was generated/saved) and FrameImages - the actual frame batch, wire this into your video-combine node.
How to install it
ComfyUI Manager, search GraftingRayman. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/GraftingRayman/ComfyUI_GraftingRayman
Restart afterward. This pack needs OpenAI's CLIP installed separately or nothing imports - 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 won't load. Check your startup console for the CLIP import error and run the pip install above.
Save fails or errors on a path. This is almost certainly the Windows-style default paths mentioned above. Set video_path and image_output_folder to real, writable paths on your actual system before turning save_images on.
Frame count is way higher or lower than expected. Total frames comes from fps × (counter_duration in seconds) roughly, times the number range covered - check counter_duration first if a run takes far longer or shorter than you planned.
Number size looks static when you wanted it animated. font_control defaults to constant. Switch it to increase, decrease, or pulse if you want the size to change across the count, and make sure font_size_min/font_size_max are actually different values.
Inputs (36)
| Name | Type | Default | Description |
|---|---|---|---|
| start | INT | 0-1000–1000 | — |
| finish | INT | 10-1000–1000 | — |
| counter_duration | INT | 1000100–10000 | — |
| 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 | — |
| countdown | BOOLEAN | false | — |
| clock_type | BOOLEAN | false | — |
| video_path | STRING | h:\counter\counter_video.mp4 | — |
| save_images | BOOLEAN | false | — |
| image_output_folder | STRING | h:\counter\images\ | — |
| background_colour | COMBO | black | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| 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_min | INT | 10010–1000 | — |
| font_size_max | INT | 20010–1000 | — |
| font_color | COMBO | white | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| font_opacity | INT | 1000–100 | — |
| font_shadow | BOOLEAN | false | — |
| font_shadow_dist | INT | 51–50 | — |
| font_control | COMBO | constant | 4 options: decrease, constant, increase, pulse |
| outline | BOOLEAN | false | — |
| outline_size | INT | 51–50 | — |
| outline_color | COMBO | black | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| outline_opacity | INT | 1000–100 | — |
| rotate | BOOLEAN | false | — |
| rotate_type | COMBO | clockwise | 5 options: clockwise, anticlockwise, flip, rocker, rockerflip |
| rotate_freq | FLOAT | 1.000.01–50 | — |
| processing_device | COMBO | cpu | 2 options: cpu, gpu |
| start_x | INT | 0-4000–4000 | — |
| start_y | INT | 0-4000–4000 | — |
| end_x | INT | 0-4000–4000 | — |
| end_y | INT | 0-4000–4000 | — |
| movement | COMBO | constant | 3 options: move left, constant, move right |
| upscale | FLOAT | 1.01–10 | — |
| background_imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| FileDetails | STRING | — |
| FrameImages | IMAGE | — |