π QRCodeReader
Check whether your QR code actually scans, inside the same workflow
- image
- TEXT
The verification loop the pack was built around
Every QR node in ComfyUI-Simple_QR_Codes is a generator. QRCodeReader is the check. You feed it an image and it decodes any QR code it can find, returning the text as a TEXT output - so you can generate a QR, push it through a ControlNet to make it "art," and then verify in the same workflow that the result still scans. The author's README even lists building a scanner as a to-do so results could be checked in-workflow; this node is that to-do, shipped. If you've ever styled a QR into something gorgeous and then watched a phone refuse to read it, you already know why this node exists.
How it works
Under the hood it's OpenCV's stock cv2.QRCodeDetector().detectAndDecodeMulti() - the reliable, boring, no-model decoder. That's the important caveat: there's no AI here, no fancy super-resolution reader. It does exactly what OpenCV's detector does, which is why the README is blunt about the limitation: it only reliably reads clean black-on-white codes. Colored, gradient, heavily styled, low-contrast, or corner-rounded QRs will often return empty - and that's exactly when you want to know it rather than find out at the print shop.
The only required input is image. Output is TEXT, a string list (OUTPUT_IS_LIST), because detectAndDecodeMulti can return multiple codes from one frame. One node expects a list? Then it just works. And a heads-up: the node prints the raw detection info (retval, decoded text, corner points) to the ComfyUI console on every run. Harmless noise, but it'll make you think something's broken the first time you see it.
How to actually use it
The practical setup is a three-node chain:
- A generator node - say QRCodes (Simple B&W) or (Segno Simple Version) for a clean base.
- Your styling (ControlNet pass, composite, whatever).
- Wire the styled image into QRCodeReader, and its
TEXTinto ShowData (the pack's debug display node) so the decoded text appears in the UI.
If the decoded text matches what you encoded, you're done. If it's empty, you've learned something valuable before you spent money on a print run - dial back the styling, raise error correction, or increase the quiet zone.
Common issues
- Empty output on a styled code - expected, not a bug. The reader is deliberately strict. Use it as a scannability gate, not a decoder that rescues bad QRs.
- Console spam - the prints are from
detectAndDecodeMulti; ignore them. - "Nothing on the wire" - remember
TEXTis a list; if your downstream node wants a single string, run it through a list-index or the pack's ShowData, which handles lists natively.
Installing it
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
The reader is why the pack pulls in opencv-python. No models to download. It's under QR Code Nodes β reader.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TEXT | STRING | β |