← All articles

I Told Arthur (My Local AI Agent) to Checkout My ComfyUI Setup and Go Crazy

The reasonable version was an MCP bridge to ComfyUI, one test image, and closing the laptop. This version let the assistant inventory models and LoRAs, choose its own combinations, and generate a batch, so the interesting part was not the plumbing but what it picked: a Giger skull, a noir streetlamp, a fox, a dragon, and a coloring-page reading nook.

There is a reasonable version of this project and an unreasonable version. The reasonable version is: point an MCP server at ComfyUI, query the model list, generate one test image, confirm the plumbing works, close the laptop.

I did not do that. I told the assistant to inventory the models, inventory the LoRAs, pick combinations on its own, and generate images. Then I left it alone.

That is the whole experiment. The interesting part is not that it worked. The interesting part is what it picked.

The bridge

The setup is unremarkable on paper. ComfyUI runs locally. An MCP bridge exposes it — node graph, model directory, LoRA directory, queue. The assistant can enumerate what is installed and then submit a workflow against it.

Nothing here is clever. It is a plumbing connection between a thing that can list files and a thing that can render. The novelty is only that the listing step and the rendering step are now the same agent, with no human in the middle choosing the model.

Which is where the taste problem starts.

Before the improvisation: a control batch

Before letting it choose anything, I ran a control batch with no LoRAs at all — straight generations on the newly downloaded base model, just to confirm the new weights behave (Qwen Image 2.1).

This is the reference image in this post. It matters because it establishes the baseline. Everything after this section is the same machine with a style bolted onto it, and the difference between the two sets is the entire point of the experiment.

Code Never Sleeps Reference Image Using Qwen Image 2.1

Run 1: the skull

The first thing it produced was a biomechanical headshot. A human skull fused into a polished chrome ribcage, threaded with organic tubing and pistons, cold grey and bone-white against a flat dark field, hard key light from the upper left.

It is the strongest image in the set, and it is also the most predictable pick. Giger is the obvious LoRA for a machine asked to be dramatic. The execution is what makes it work: the palette is restrained, the shadow is deep, and there is no text in frame.

base:   z_image_turbo_bf16.safetensors (CLIP qwen_3_4b, type lumina2; VAE ae.safetensors)
lora:   z-image/zit_giger_v1.safetensors
prompt: biomechanical headshot in the style of H.R. Giger, a human skull fused with
        polished chrome ribcage and organic tubing, cold grey and bone-white palette,
        hard key light from the upper left, deep shadow, no text
settings: 1024x1024, 8 steps, cfg 1.0, res_multistep/simple, shift 3.0, seed 41001, ~50 s

Biomechanical Skull — H.R. Giger style

Run 2: the streetlamp

The second one is the one I cannot describe cleanly, which is usually a sign that it is doing something right.

A tall thin rubber-hose detective in a fedora and long coat, standing under a streetlamp, one hand raised. Flat black ink masses dominate the frame. Black, white, and exactly one muted red accent. Vintage film grain.

The discipline in this frame is the single accent colour. Rubber-hose cartoon styles usually go either cute or busy. This one went quiet, and the noir LoRA is what pushed it toward the quiet side.

base:   Z-Image Turbo (same base as Run 1)
lora:   z-image/RubberHose_Noir_Ink.safetensors
prompt: 1930s rubber-hose cartoon in the style of RubberHose Noir Ink, a tall thin
        detective in a fedora under a streetlamp, thick black ink, heavy flat black
        shadows, black white and one muted red, vintage film grain, no text
settings: 1024x1024, 8 steps, cfg 1.0, res_multistep/simple, shift 3.0, seed 41002, ~50 s

Streetlamp Detective — RubberHose Noir Ink style

Run 3: the fox

A fox seated reading an open book under a large red-cap mushroom. Flat pastel shapes, clean outlines, simple ground plane, generous negative space.

This is the children’s-book one. It is also the only image in the set that is simply pleasant, and it earns that by not overcommitting. Few elements, no clutter, no shading fights.

base:   Z-Image Turbo (same base as Run 1)
lora:   z-image/Whimsical_Pop_Illustration_Z-Image_Turbo_wh1m5y_style.safetensors
prompt: whimsical pop illustration in the style of Whimsical Pop Illustration, a fox
        reading a book under a giant mushroom, flat pastel shapes, playful, no text
settings: 1024x1024, 8 steps, cfg 1.0, res_multistep/simple, shift 3.0, seed 41003, ~50 s

Fox Reading Under a Mushroom — Whimsical Pop Illustration style

Run 4: the dragon

The dragon is for me, codedragon. The assistant chose that one based on PromptHoard and my name. It produced a small green dragon crouched over a pile of gold coins on a rock, clean pixel grid, limited palette, dark background.

This is where the timing changes. The Z-Image Turbo runs land in about fifty seconds. The SDXL runs take about two minutes. Same step count, same resolution, roughly four times the wall clock. For a one-off post that is noise. For an automation that fires several times a day, it is the number that decides whether the job is cheap or annoying.

base:   SDXL/realvisxlV50_v50LightningBakedvae.safetensors
lora:   pixel-art-xl-v1.1.safetensors
prompt: pixel art sprite in the style of pixel art, a small green dragon hoarding coins
        on a rock, clean pixel grid, limited palette, dark background, no text
settings: 1024x1024, 8 steps, cfg 5.0, euler/normal, seed 41004, ~2 min

Dragon Hoarding Coins — Pixel Art style

Run 5: the reading nook

The last one is a line-art colouring page: an armchair, a bookshelf, a cat curled on a rug. Thick clean black outlines, no shading, white background.

This is the least artistic image in the set and the most commercially legible. It is print-ready output. If the goal is a product page rather than a portfolio, this is the one that behaves like inventory.

base:   SDXL/realvisxlV50_v50LightningBakedvae.safetensors
lora:   ColoringBook_Redmond/SDXL1.0-ColoringBookRedmond-ColoringBookAF.safetensors
prompt: coloring book page, a cozy reading nook with an armchair, bookshelf, and a cat
        on the rug, thick clean black outlines only, no shading, white background,
        print-ready, no text
settings: 1024x1024, 8 steps, cfg 5.0, euler/normal, seed 41005, ~2 min

Cozy Reading Nook — Coloring Book style

What the LoRAs actually did

Every prompt in this batch ends with the same clause: no text. That is not style. That is damage control. Text is the thing that ruins these frames, and the LoRA does not fix it.

The LoRAs did something narrower than “make it pretty.” They constrained the palette, the line weight, and the composition. The Giger run is restrained because the LoRA is restrained. The noir run has one accent colour because the LoRA is a style contract, not a decoration.

The machine is not choosing taste. It is choosing a constraint, and the constraint does the rest. That is why the control batch looks different from the LoRA batch even at the same step count.

The daily image idea

The next step is an automation: a scheduled job that picks a base model, picks a LoRA, generates an image, and uploads it to the site for anyone who visits.

A sketch, not a tutorial:

schedule: daily, several runs
pick:     base model + LoRA from the installed inventory
generate: N images per run
filter:   drop frames with text, dropped grids, or obvious artifacts
publish:  pick the best + the recipe (model, LoRA, prompt, seed)

Publishing the recipe with the image is the part worth keeping. The image is the entertainment; the recipe is the part other people can actually use.

And the reason for doing it locally is not that local is better. It is that most people now have some free tier of some hosted service, and a local rig with a model directory and a LoRA folder is the part they cannot get from a free tier. Sharing that is the point.

End of the experiment

The images are good. That part is not surprising, and it is not the interesting part either. The interesting part is that the selection happened without me in the loop, and the results were better than my own picks would have been on two of five.

The skull and the streetlamp are the two I would keep. The fox is pleasant. The dragon is branding. The colouring page is inventory.

The automation is still an idea. It becomes a real thing the moment it has to survive a bad run on a Tuesday with nobody watching it. That is the test, and I have not run it yet.