Nodes/comfyui-magic-hour/Magic Hour: AI QR Code Generator
ComfyUI Node

Magic Hour: AI QR Code Generator

The QR Monster you can't run locally anymore, one prompt away

By magichourhq·Created about 17 hours ago·Updated about 16 hours ago· 0
Magic Hour: AI QR Code Generator
    • image
    • image_paths
    • credits_charged
    ◄contenthttps://►
    ◄art_style►

    Artistic QR codes had their moment in 2023 and the community never quite got a replacement for them. The "ControlNet for QR Code" thread from that year is one of the highest-scoring posts this ecosystem has, and the highest-scoring ControlNet thread of 2026 is somebody asking where QR Monster went. The answer the KB gives is that QR-code conditioning was never rebuilt for post-Flux models: the 2026 union ControlNets cover seven conditions plus inpaint, and QR brightness isn't among them.

    So if you want an artistic QR code in 2026 and you're on a modern base model, you're either going back to an SDXL-era ControlNet stack or you're calling something hosted. That's the honest niche this node fills.

    Two inputs, which is almost comically minimal

    content is what the code should encode - a URL or arbitrary text. It defaults to the literal string https://, which is a nice touch: it's a prompt-shaped default that reminds you to put a real address in.

    art_style is a STRING, multiline, empty by default. Not a dropdown, not a fixed list. You describe the look: "stained glass window, deep blues and golds, intricate", "a plate of sushi arranged to form the pattern", "oil painting of a forest at dusk". The model generates imagery that both carries the QR structure and matches your description.

    That free-text field is why this node can produce genuinely good-looking output and also why it's inconsistent. There's no art-style list to keep you in the lanes the model is good at.

    Will it actually scan?

    This is the whole question with artistic QR codes and the node doesn't answer it for you. It hands you back an image; whether a phone reads it depends on contrast, module size and how aggressively the artwork covers the code's dark modules.

    What to do:

    1. Generate.
    2. Scan the actual output with a real phone - not by squinting at it, and not with the preview in ComfyUI.
    3. If it doesn't scan, tighten the art style toward higher contrast and less busy detail, and try again.

    Aesthetics and scannability pull against each other, and every artistic QR generator sits somewhere on that trade. The picture that looks best is usually the one that scans worst.

    Inputs and outputs

    • content (required) - the encoded payload.
    • art_style (required) - free-text description of the look.
    • image (output) - the result as an IMAGE batch (first image of the batch, as ever - this pack always uploads frame zero and returns what came back).
    • image_paths (output) - STRING, the saved file path; newline-joined if the job returned several.
    • credits_charged (output) - INT, the run's cost.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/magichourhq/comfyui-magic-hour
    pip install -r comfyui-magic-hour/requirements.txt
    

    Restart ComfyUI; the nodes land under Magic Hour. One dependency: magic-hour>=0.87.1. Nothing downloaded into models/, no ControlNet weights, no GPU time. ComfyUI Manager users can search "Magic Hour".

    export MAGIC_HOUR_API_KEY=your_key_here
    

    before launching, or write the bare key into comfyui-magic-hour/api_key.txt. Keys stay out of widgets on purpose - widget values are saved into the workflow file.

    Friction

    Iteration is metered. QR art is a re-roll-heavy job; even the old local ControlNet workflow needed twenty attempts to find one that both scanned and looked good. Here each attempt is a paid call. That's the core tradeoff against the SDXL-and-QR-Monster route, which is free after setup and effectively dead for new architectures.

    Long URLs make worse art. More data means denser modules means less room for the picture. Use a shortener and buy yourself visual headroom.

    No resolution control. There's no size field, so you get what you get. Upscale locally afterwards if you need print dimensions - and upscale gently, since resampling can soften module edges past the point a scanner will read them.

    402. Credits or plan limits, surfaced from Magic Hour's own error text.

    The synchronous wait. Seconds to a minute, queue blocked.

    My read: this is the node in the pack where the API route is most clearly justified, because the local route genuinely regressed. If you're making one QR code for a wedding invitation, pay the credits. If you're making two hundred for a product line, set up the old SDXL QR Monster stack and accept that you're working on a 2023 base model.

    CategoryMagic Hour

    Inputs (2)

    NameTypeDefaultDescription
    contentSTRINGhttps://—
    art_styleSTRING—

    Outputs (3)

    NameTypeDescription
    imageIMAGE—
    image_pathsSTRING—
    credits_chargedINT—