← scrappylabs.ai
A person holding a coiled rope stands in a dim workshop surrounded by a herd of small mismatched robots

Field note · 23 July 2026

We ran a new image model on our own hardware. It beat its own spec sheet.

Microsoft released Mage-Flow — a 4-billion-parameter model that does text-to-image and instruction editing, under an MIT licence. We had it measured, wired into our pipeline, and making production art the same evening. Every image on this page came out of it. Including the one above.

Why this one mattered

Most open image models arrive with a licence that quietly rules out commercial work. This one didn't.

A lot of the best open weights ship non-commercial. That's fine for a demo and useless for a client deliverable, so we read the licence before we read the benchmarks. Mage-Flow is MIT — genuinely usable in paid work. It also collapses two tools into one: the same 4B model generates an image and edits an existing one from a plain-English instruction, at any aspect ratio from 512 to 2048 pixels natively.

That combination is what got it onto the bench the same day it appeared.

What we measured

On one RTX PRO 6000 Blackwell workstation. Median of warm runs at 1024×1024, our prompts, our hardware — not numbers copied off a model card.

0.51sPer image, fast mode
11.6GBPeak memory
4.5sPer image, quality
18Images on this page
MITLicence
Turbo, 4 steps0.51s
Quality, 20 steps4.53s
Edit, 20 steps6.12s

It beat its own published figures

The model card quotes 0.59s per image and roughly 18–20GB of memory on a datacentre A100. We measured 0.508s at 11.6GB. That gap matters commercially: at 11.6GB this runs on hardware a small studio already owns, rather than something you rent by the hour.

We publish the number we measured, on the machine we measured it on. If we can't reproduce a vendor claim, we say so.

Text is the part everyone gets wrong

Small image models usually smear lettering into convincing nonsense. This is the test we actually cared about — and none of these were retried.

Satin-stitch lettering on fabric weave — “SCRAPPY LABS / KEEP IT WRANGLED”, curved on both arcs, first try.
EmbroideredSatin-stitch lettering on fabric weave — “SCRAPPY LABS / KEEP IT WRANGLED”, curved on both arcs, first try.1024×1024 · 4.06s
Two-ink print with deliberate misregistration and halftone grain.
RisographTwo-ink print with deliberate misregistration and halftone grain.896×1216 · 3.33s
Cyanotype orthographic views with dimension arrows and a legible title block.
DraughtingCyanotype orthographic views with dimension arrows and a legible title block.1216×832 · 3.01s
The company line, set as a two-colour screenprint. Nothing retouched.
ScreenprintThe company line, set as a two-colour screenprint. Nothing retouched.896×1216 · 3.32s
Wet asphalt doubling the neon; sodium and magenta holding separately.
Neon-noirWet asphalt doubling the neon; sodium and magenta holding separately.1536×640 · 2.91s
Tilt-shift clay diorama — soft materials, practical lights, a sleeping unit under the bench.
MiniatureTilt-shift clay diorama — soft materials, practical lights, a sleeping unit under the bench.1024×1024 · 3.24s
Thumbprints and seams left in, which is the whole point of the look.
Stop-motionThumbprints and seams left in, which is the whole point of the look.1024×1024 · 3.29s
Lead came, cobalt and ruby panes, light coming through rather than at.
Stained glassLead came, cobalt and ruby panes, light coming through rather than at.896×1216 · 3.41s
Carved line weight and ink bleed on handmade paper.
WoodcutCarved line weight and ink bleed on handmade paper.1024×1024 · 3.34s
Foil border, name banner, stat boxes — a composed layout, not just a picture.
Print layoutFoil border, name banner, stat boxes — a composed layout, not just a picture.896×1216 · 3.33s
A circuit board shot like an aerial landscape.
MacroA circuit board shot like an aerial landscape.1216×832 · 3.09s
Studio key light, real fur against machined parts.
PortraitStudio key light, real fur against machined parts.1024×1024 · 3.18s
Clean enough to actually use as a mark.
EmblemClean enough to actually use as a mark.1024×1024 · 3.23s
Arranged with negative space, which most models refuse to leave alone.
Flat-layArranged with negative space, which most models refuse to leave alone.1216×832 · 3.02s

How reliable is it? Not perfectly — and that matters more than the win

Every image above is a first output. But we went back and generated that embroidered patch five more times, and the model misspelled the word “SCRAPPY” in all five — dropping a letter each time. Curved lettering is roughly a coin flip. The one above got it right; five in a row after it did not.

What did work: taking the correct patch and using the editing model to recolour it. The lettering survived untouched. So the practical rule we came away with is — generate until the text is right, then edit rather than regenerate, because editing preserves glyphs that generation will happily re-roll.

Treat output like this as a draft a human proofreads, never as typesetting. That's true of every image model we've tested, and anyone telling you otherwise hasn't run it five times.

Editing, three instructions deep

Each step edits the previous result, not the original. Errors compound in a chain like this, which is exactly why it's worth showing.

The original frame.
SourceThe original frame.1536×640 · 3.87s
Light direction and colour temperature change; every robot stays put.
“Make it golden hour”Light direction and colour temperature change; every robot stays put.1536×640 · 6.33s
Applied to the previous result, not the original.
“Add heavy falling snow”Applied to the previous result, not the original.1536×640 · 6.44s
Third edit in the chain. The composition has survived all three.
“Make it a watercolour”Third edit in the chain. The composition has survived all three.1536×640 · 6.31s

What tripped us up

Published because it cost us an hour and will cost you one too.

The attention backend fails loudly on one variant and silently on another

There's no prebuilt FlashAttention wheel for current-generation Blackwell workstation GPUs on CUDA 13. Mage-Flow ships a scaled-dot-product fallback, but it is not selected automatically everywhere: only the fast Turbo checkpoint declares it in its config. The quality and editing checkpoints default to FlashAttention and raise on the first attention call.

Setting the documented environment override alone is not enough — that fixes loading the text encoder, not running it. You need the environment override and an explicit set_attn_backend("sdpa") call after the pipeline is constructed. Backend resolution is lazy, so setting it after load still wins.

Once that's in place the model runs clean on Blackwell with no FlashAttention installed at all, and the speed above is with the fallback — not despite it.

This is what “we keep it wrangled” means

A model landed on a Tuesday. By that evening it was measured on our own metal, the licence was checked, the failure mode was found and documented, and it was wired into the pipeline behind a stable interface. That's the job. Bring your own AI — we'll make it behave.

Talk to us

Every image generated locally on our own GPU at 20 steps unless noted, one seed, first output kept — no cherry-picking and no retries. Prompt adherence is good, not perfect: one frame ignored part of its instruction. Model: microsoft/Mage-Flow (MIT). Nothing on this page touched a paid API.