Painter

Concepts

Bootstrapped Seeds

Why the seed has to come from the same pipeline that will paint the final tile

Style transfer only works when the style being transferred is something the target renderer can actually produce. The single biggest win in an earlier iteration — a +1.45 jump on the VLM judge, from 4.11 to 5.56 — came from changing nothing except where the seed images came from.

Pick a seed source

Same anchor, same prompt, same FLUX + IP-Adapter stack. Only the seed source changes. Watch the right canvas for what FLUX produces when asked to continue from each seed style.

Seed strip (input)
Generated tile (output)
Bootstrapped (FLUX + IPA) Same pipeline as the output — no drift to fight

Seeds generated by the exact pipeline (FLUX img2img + IP-Adapter) that will paint the final tile. Style transfer no longer fights itself; the +1.45 jump comes from this single change.

Why the seed pipeline has to match

IP-Adapter encodes the seed image through CLIP and conditions FLUX on the result. CLIP doesn't separate "style" from "content" cleanly — both end up in the same embedding. When the seed comes from a different renderer, those embeddings ask FLUX to do something it can't quite do, and the artefacts show up at the seam.

Brush size mismatch

Gemini renders with smoother brush strokes than FLUX. The IP-Adapter tries to enforce that softness — FLUX renders sharp — net result is a stippled half and a smooth half.

Highlight temperature shift

Gemini's highlight palette skews warm. FLUX defaults cooler. Without matching seeds, the seam side stays warm and the painted side drifts cool.

Frequency band drift

Different generators bias different frequency bands. CLIP encodes that bias into the IPA embedding, then it shows up as a sudden change in detail density across the seam.

The fix in one sentence

Generate a small batch of seed strips with the exact pipeline that will paint the final tile (FLUX + IP-Adapter at the same scale, same scheduler, same step count), then use those as the seeds for full tile generation.

The result

iter-5
4.11
Gemini seeds, otherwise identical stack
iter-5b · gate crossed
5.56
Bootstrapped seeds, nothing else changed
Δ from seed swap alone
+1.45
Larger than any single architectural change
How this is built (technical)

Bootstrap pass: run the full FLUX differential-img2img + IP-Adapter v2 stack at ipa_scale = 0.6 on a small set of anchor strips painted by a coarse style-reference model. The outputs are cropped down to seed strips and fed back as the IPA reference image for the real run — same scheduler, same step count, same guidance scale across both passes, so the style budget is identical end-to-end.