IRC Art Converter
The node that turns your ComfyUI output into art you can paste into IRC
- image
- processed_image
- irc_text
- ansi_text
This is the node that makes ComfyUI do something nothing else in the ecosystem does: turn your generated image into old-school IRC art. Feed it any image and it returns a block of mIRC color codes you can paste straight into a channel - plus an ANSI version for 256-color terminals. It's the whole reason the pack exists; the other two nodes are basically its sidekicks.
Yes, it's niche. IRC in 2026 is a choice. But if you hang out in any channel that still does formatted art, or you have a soft spot for the look of 90s chat, this is the fastest way to get there from a ComfyUI graph. The author (birdneststream) built it to feed their aibird IRC bot, and their announcement post leaned into the nostalgia hard - "it beats discord" is literally the pitch. Low-engagement posts, but the couple of people who found it loved it.
The mechanism is more interesting than the niche implies, and it's a clean two-stage pipeline. First a color transfer pass runs KMeans clustering to remap the whole image onto the 99-color IRC palette (or the legacy 16-color one). Then a block processor splits the remapped image into cells - 8x15 pixels by default, the classic IRC character cell - and picks the dominant color in each block. That grid of palette colors gets serialized into text: mIRC color codes for IRC, 256-color escape sequences with ▀ half-blocks for ANSI.
Only a few inputs matter for a beginner:
- block_width / block_height - the pixel size of each art cell. Defaults of 8 and 15 are the traditional IRC cell; a 640x448 image becomes roughly 80x30 characters, which the author says is a sweet spot.
- half_block_mode - doubles vertical resolution using
▀characters. Finer art, but it eats bytes per line (more on that below). - use_16_colors - legacy mode for ancient clients. Leave it off; 16 colors genuinely don't look good.
- distance_method - the one that changes quality.
perceptual_weighted(the default) weights RGB by luminance and is the author's own pick;weighted_manhattanis the runner-up.manhattanis fastest,euclideanis the geometric purist's option. You can honestly leave it alone.
Outputs are processed_image (a visual preview), irc_text, and ansi_text. Wire irc_text into the IRC Text Saver and ansi_text wherever you want terminal output.
Installation
ComfyUI Manager (search "ComfyUI-Mircify"), or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/birdneststream/ComfyUI-Mircify
cd ComfyUI-Mircify
pip install -r requirements.txt
Then restart ComfyUI. Requirements are torch, numpy, scikit-learn, and Pillow - scikit-learn is the only one you might not already have, and you definitely have torch. No model downloads; the example workflow uses a Qwen image GGUF with the Lightning 4-step LoRA and RES4LYF samplers, but the author is upfront that any model decent at pixel-style art works.
Gotchas
- Empty text output? The converter only generates
irc_textandansi_textfor outputs that are actually connected to something. Run it bare and both come back"". Wire them up and they appear. - Batch size must be 1. Feed it a batched image and it raises a
ValueErrorinstead of silently doing something weird. - The 512-byte line limit. IRC caps a line at 512 bytes minus your ident and host, and every rendered color character carries formatting bytes. Too many half-blocks and the line breaks mid-art. The author's fixes: render with a solid background, or drop half-block mode.
- Colors will be slightly off. 99 colors is a small palette; that's not a bug.
perceptual_weightedis the best you can do within it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| block_width | INT | 81–32 | — |
| block_height | INT | 151–32 | — |
| half_block_mode | BOOLEAN | false | — |
| use_16_colors | BOOLEAN | false | — |
| distance_method | COMBO | perceptual_weighted | 4 options: weighted_manhattan, manhattan, euclidean, perceptual_weighted |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| processed_image | IMAGE | — |
| irc_text | STRING | — |
| ansi_text | STRING | — |