π°οΈ QRCodes (Simple Color)
Colored QR codes with rounded corners β without murdering scannability
- IMAGE
- MASK
- INVERTED_MASK
The QR node with one genuinely useful trick
QRCodes (Simple Color) is the middle child of the pack's qrcode-based family: the B&W node's simple canvas, plus foreground/background colors and a few QR parameters - and one feature that's actually worth reaching for, rounded corners via the radius input. It's the pack's answer to "make this QR look designed, not like a barcode."
You'll most likely use it the same way you use the B&W node: generate a clean base QR, then feed it into a ControlNet brightness condition so the model paints over it into a scannable piece of art. The difference is you control the base look, which matters when you want the QR itself to sit in a branded card or poster rather than be hidden under generative detail.
The inputs that matter
The full list is bigger than B&W, but four things actually change your result:
text- the payload. Multiline, so URLs, contact data, whatever.fg_color/bg_color- not CSS names! These are tuple-style strings:"(0, 0, 0)"for black,"(255, 255, 255)"for white. Get the format wrong and the node falls back to gray instead of erroring - which is the silent way to end up with a muddy QR.radius- the headline feature. Rounds the QR's corners; 0 is sharp. The catch: the color that fills the cropped corners is whatever you put inmask_color(yes, the naming is a lie - in this nodemask_coloris the corner-fill color, not a channel picker). Set it to match your background or the corners show a random blob.error_correctandversion- the two you'll get bitten by.versiondefaults to 1, the smallest QR, and it errors with "data does not fit" the moment you drop in a URL longer than a few characters. Bump it. And for colored codes, don't sit on the defaultERROR_CORRECT_L; contrast is already lower than plain black-on-white, so you want at leastM, ideallyH.
box_size is worth a nod too: it's the pixel size of each QR module before the node stretches the result to width/height. Bigger box_size = less upscale blur. The author's own README admits the qrcode approach generates-then-resizes, which loses quality - that's why the segno nodes in the same pack exist.
Outputs and wiring
You get IMAGE, MASK, and INVERTED_MASK. Here the masks are normalized properly: MASK highlights the QR modules (dark pattern = 1), INVERTED_MASK is the background. That's what you'd composite with, or feed alongside the image into a ControlNet setup.
Common issues
- "Data does not fit" / DataOverflowError β
versionis too low for the text. Raise it. - Corner color looks wrong β
radius> 0 andmask_colordoesn't match your background. - Won't scan after styling β colored QRs die on low contrast. Keep dark modules dark, light background light, and verify the output with the pack's QRCodeReader node - it's the same workflow-loop check the author built this family for.
Installing it
It's part of ComfyUI-Simple_QR_Codes. ComfyUI Manager β search "Simple QR Codes" β install β restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/zentrocdot/ComfyUI-Simple_QR_Codes
cd ComfyUI-Simple_QR_Codes
pip install -r requirements.txt
No models to download. The pack pins qrcode==8.0, pillow==10.4.0, and opencv-python - if you later add a node that wants a different pillow, that's the dependency conflict to watch for in a shared environment.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | β | |
| width | INT | 5121β8192 | β |
| height | INT | 5121β8192 | β |
| fg_color | STRING | (0, 0, 0) | β |
| bg_color | STRING | (255, 255, 255) | β |
| error_correct | COMBO | 4 options: ERROR_CORRECT_L, ERROR_CORRECT_M, ERROR_CORRECT_Q, ERROR_CORRECT_H | |
| version | COMBO | 40 options: 1, 2, 3, 4, 5, 6, +34 | |
| box_size | INT | 100β8192 | β |
| border | INT | 40β8192 | β |
| radius | INT | 00β1024 | β |
| mask_color | STRING | (255, 255, 255) | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |
| MASK | MASK | β |
| INVERTED_MASK | MASK | β |