Nodes/ComfyUI ASCII Art Nodes/Realistic Color ASCII Typing Animation
ComfyUI Node

Realistic Color ASCII Typing Animation

Add a blinking cursor and it feels like a real terminal

By LamEmil·Created about a year ago·Updated about a year ago· 1
Realistic Color ASCII Typing Animation
  • image
  • realistic_animated_ascii_frames
char_width80
font_pathcour.ttf
font_size15
ascii_charset .'`^":;Il!i~_?[{1(|/fjxnvzXYJCLQ0Zmwqdkh*#M&8%B@$
background_color#000000
invert_brightness_mappingfalse
chars_per_frame1
cursor_char_
cursor_blink_frames5
cursor_color#FFFFFF

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.

Categoryimage/animation

Inputs (11)

NameTypeDefaultDescription
imageIMAGE
char_widthINT8010–1000
font_pathSTRINGcour.ttf
font_sizeINT155–100
ascii_charsetSTRING .'`^":;Il!i~_?[{1(|/fjxnvzXYJCLQ0Zmwqdkh*#M&8%B@$
background_colorSTRING#000000
invert_brightness_mappingBOOLEANfalse
chars_per_frameINT11–100
cursor_charSTRING_
cursor_blink_framesINT51–60
cursor_colorSTRING#FFFFFF

Outputs (1)

NameTypeDescription
realistic_animated_ascii_framesIMAGE