Realistic Color ASCII Typing Animation
Add a blinking cursor and it feels like a real terminal
- image
- realistic_animated_ascii_frames
If "Color ASCII Typing Animation" already feels like a terminal writing your image, this node is the one that makes it feel like a real terminal: it adds a flashing cursor at the typing position. "Realistic Color ASCII Typing Animation" (the class name is RealisticColorASCIIAnimationGenerator) is, mechanically, the color typing animation plus one more draw call per frame - but the cursor changes the whole mood. Suddenly it's not an effect, it's someone typing.
This is the node I'd pick for the hacker-aesthetic intro or the "system booting up" title card. The blinking caret sells the illusion that the art is being entered live, and because characters take their color from the source image, the finished frame still looks like the picture, not like text sitting on top of it.
How it works
Under the hood it's the color typing pipeline: downscale to a char_width grid, grayscale for character selection, sample RGB for per-character fill, draw progressively more characters each frame. The new machinery is a pixel-space cursor position that tracks just past the last typed character - including wrapping to the start of the next line when a line fills up. The cursor is only drawn while typing is still in progress, and it blinks on and off based on cursor_blink_frames (default 5 frames per state), so at 8 fps a value of 5 gives you roughly a half-second blink. When the last character lands, the node appends a final frame without the cursor so your animation ends clean instead of on a frozen caret.
The inputs that matter
cursor_char- what the cursor looks like. Default_; try|for a block-caret feel or█if you want it unmissable. Only the first character is used.cursor_blink_frames- frames per blink state, 1–60. Lower is jittery, higher is lazy.cursor_color- default#FFFFFF. Pick a contrasting color (classic green on black works) so the caret doesn't vanish into similarly-colored glyphs.chars_per_frame- typing speed. Default 1 is slow; start around 3–10.
Plus the pack's shared set: char_width, font_path, font_size, ascii_charset, background_color, invert_brightness_mapping. Output is the IMAGE batch realistic_animated_ascii_frames - same size as your input, and yes, it needs a Video Combine or Save Animated WebP/GIF node downstream to become a playable file.
Install and gotchas
Install via ComfyUI Manager (search "ComfyUI ASCII Art Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/LamEmil/ComfyUI_ASCIIArtNode
cd ComfyUI_ASCIIArtNode
pip install -r requirements.txt
Then restart. Only dependency is Pillow - no models, no keys.
The usual pack warnings apply: the default font_path cour.ttf isn't bundled, so a missing font silently swaps in a chunky bitmap font (fix: point at a real monospace .ttf); char_width multiplies your frame count, so keep it 60–80 for animations; and don't rename the cloned folder (the README's ComfyUI_ASCIINodes vs the actual ComfyUI_ASCIIArtNode mismatch has tripped people up). One cursor-specific tip: if the cursor looks stuck or wrong at the very end, it's usually the blink timing - cursor_blink_frames interacts with frame count, so tune it after you've picked your chars_per_frame.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| char_width | INT | 8010–1000 | — |
| font_path | STRING | cour.ttf | — |
| font_size | INT | 155–100 | — |
| ascii_charset | STRING | .'`^":;Il!i~_?[{1(|/fjxnvzXYJCLQ0Zmwqdkh*#M&8%B@$ | — |
| background_color | STRING | #000000 | — |
| invert_brightness_mapping | BOOLEAN | false | — |
| chars_per_frame | INT | 11–100 | — |
| cursor_char | STRING | _ | — |
| cursor_blink_frames | INT | 51–60 | — |
| cursor_color | STRING | #FFFFFF | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| realistic_animated_ascii_frames | IMAGE | — |