cd /news/generative-ai/best-local-image-generation-model-on… · home › topics › generative-ai › article
[ARTICLE · art-151596] src=dev.to ↗ pub= topic=generative-ai verified=true sentiment=↑ positive

Best Local Image Generation Model on Mac: ERNIE vs FLUX

A developer benchmarked six local image-generation models on an Apple M3 Ultra Mac Studio running mflux 0.19.1, finding ERNIE-Image Turbo the best overall pick at a median 80 seconds per 1600x896 image and a blind-judge score of 4.28 out of 5, versus 3.07 for FLUX.2 klein 4B. The test covered 48 images across six prompts with two blind AI judges, and the developer also flagged that Qwen-Image 2.1 is research-only licensed and FLUX.2 dev is restricted to non-commercial use.

by read21 min views11 publishedOct 16, 2026

If you're after the best local image generation model on a Mac, my pick after tonight's test is ERNIE-Image Turbo under mflux. On our Mac Studio it took a median of 80 seconds for a 1600x896 image and averaged 4.28 out of 5 from two blind judges, against 3.07 for FLUX.2 klein 4B. Against FLUX.2 klein that's a wide gap. Against ERNIE's own slow base model it's small, and it rests on two images. And don't run FLUX.2 dev or Qwen-Image 2.1 for a business without a commercial license: Qwen's license is research-only, and FLUX.2 dev's limits use of the model to non-commercial purposes.

We made ERNIE-Image Turbo the default for the cartoons on this site this afternoon, after a quick two-prompt test. Since early October the cartoons here had come out of FLUX.2 klein 4B. I wanted to know if the switch would hold up on prompts I hadn't picked to suit it. So tonight I ran a bigger one: six models, six prompts, 48 images, one Mac Studio (Apple M3 Ultra, 96 GB).

Two AI judges (Claude Opus and Claude Sonnet, run separately) scored the images without knowing which model made which, and I checked by eye wherever they disagreed. I also read the license file of each model, because a few popular articles get that part wrong.

I measured all of it on 16 October 2026 with mflux 0.19.1, 8-bit quantised weights, at 1600x896 pixels. Seconds are wall-clock per image, including the weights from the SSD, because that's what you wait for when you call the command. The score is the mean of two blind judges over four criteria, 0 to 5. ERNIE-Image Turbo and FLUX.2 klein ran two seeds, so the last column compares everyone on seed 11 alone.

Model Images Median seconds Steps Peak MLX memory macOS peak footprint Score, all its images Score, seed 11 License
ERNIE-Image Turbo 12 80 8 22.5 GB 39.0 GB 4.28 4.40 Apache-2.0
ERNIE-Image (base) 6 813 50 22.5 GB 39.0 GB 4.02 4.02 Apache-2.0
Qwen-Image-2512 6 381 20 37.3 GB 77.7 GB 3.83 3.83 Apache-2.0
Boogu-Image 0.1 Turbo 6 55 4 28.1 GB 49.7 GB 3.35 3.35 Apache-2.0
Z-Image Turbo 6 74.5 9 34.5 GB 50.0 GB 3.25 3.25 Apache-2.0
FLUX.2 klein 4B 12 22 6 21.7 GB 38.2 GB 3.07 3.08 Apache-2.0

So which one do you run? ERNIE-Image Turbo. If you need speed more than the right number of apples, FLUX.2 klein 4B. I expected the base ERNIE model, at 50 steps and 13 minutes an image, to beat its own distilled Turbo. Nope. On the same seed it scored 4.02 against 4.40. To be fair to it, on the three prompts it ran first (sign, diagram, apples) the base model led, 4.46 to 4.21; the workshop and the keyboard turned it around. Qwen-Image-2512 spelled the banner right and took six minutes an image for a 3.83. Boogu tied for the top on the keyboard photo and came last on the diagram; Z-Image came last on counting. Both needed more memory than ERNIE, too. Odd, but measured.

The ERNIE-Image base time leaves out its workshop image (1,167 seconds), because my cartoon renders and a timing run for the how-to below were on the same Mac at the time. The other five took 810 to 829 seconds. A clean re-run of that one image, with nothing else on the GPU, took 816 seconds.

I picked six things I actually ask image models for, from a busy cartoon to a count of apples. All six models ran every prompt with seed 11. ERNIE-Image Turbo and FLUX.2 klein ran a second time with seed 42, so you can see how much one roll of the dice moves the result.

The judges got plain PNGs under random names, with the mflux metadata stripped (mflux writes the model name into the file). They scored adherence, text accuracy (spelled out letter by letter), artefacts and looks, and wrote a sentence for each. I unblinded afterwards. Where they disagreed by 2 points or more I looked myself. The two slow models ran their other three prompts later in the evening, and the judges scored those six images later, re-opening the earlier ones first to keep the same scale.

The prompt asked for a blue robot welding a gear, an orange cat asleep on a red toolbox, a green parrot on a desk lamp, a yellow forklift carrying a crate, and the word FRAGILE on the crate as the only text.

Both ERNIE-Image Turbo images got the whole scene: the cat on the toolbox, one parrot on the lamp, FRAGILE spelled right on the crate. They scored 4.75 and 4.62. Boogu also spelled FRAGILE right but drew two parrots, neither on the lamp, and scored 3.62. ERNIE-Image base wrote FRAGLIBE, left the crate on the floor and gave the robot a third arm (3.00). Qwen-Image-2512 drew a lovely workshop with no FRAGILE at all and the parrot on the forklift (2.88). Z-Image drew a sparse scene with a parrot floating in the air and FROSIV on the crate (2.12). FLUX.2 klein scored 1.62 on both seeds. Seed 11 put a driver in the forklift and FRAGIE on the crate. Seed 42 wrote FRAGILE on the toolbox, LIFI on the crate, and added a speech bubble that says EACC!.

FLUX.2 klein fell apart on the banner. OPEN SPOOE and SALIE on seed 11 (1.75), OOPEN SOURSCE SAL on seed 42 (2.00), plus garbled extra signs in the windows. The other five models spelled the banner right, and the scores came down to the details. ERNIE-Image base drew the cleanest frame, with one tag and nobody in shot (4.38). ERNIE-Image Turbo's seed 11 tied it on 4.38 but hung the 2.99 tag twice. Its seed 42 put pedestrians on the pavement (3.75). Qwen-Image-2512 spelled everything right in a rounded font over two lines (4.12). Z-Image had the most legible lettering and a man standing in the window (4.00). Boogu got the banner right and then filled the glass with fake signs reading things like A£3 and 7.30 (2.75).

Nobody did well here. Keyboards are hard. I think it's the most useful result for anyone shooting products. All eight got a wooden desk and warm light, though the judges didn't accept the wood as walnut on every one. Judge A found seven of the eight layouts impossible: spacebars near the edge, scrambled rows, fake letters on the keys. Judge B called only three of them broken, and two of them plausible. Judge A called Boogu's the only believable layout. ERNIE-Image Turbo's seed 11 and Boogu tied for the top at 3.75, Qwen-Image-2512 scored 3.50, ERNIE-Image base 3.00 ("one of the worst keyboard layouts", judge A), and the FLUX.2 klein images 2.88 and 2.75 ("Best light, worst keyboard", judge A wrote about one of them). If you need a product shot of a real object, maybe use a photo.

FLUX.2 klein won this one. Its seed 11 image had the exact colours asked for and clean icons, apart from a slightly smudged rocket. Both judges put it first, at 4.75. Its seed 42 image scored 4.00 with a melted wrench icon. Qwen-Image-2512 and ERNIE-Image base both scored 4.25, and ERNIE-Image Turbo 4.12 and 3.50 (the seed 42 rocket is in pieces). Z-Image coloured the boxes blue, green, blue (3.12). Boogu ran the cards off the edge of the frame with ghost copies underneath (2.50). The eight images all spelled the three words right, so a short label is within reach of every model here.

Scores sat close together here, between 3.88 and 4.75. Both ERNIE-Image Turbo images and ERNIE-Image base scored 4.75: lighthouse on a cliff, beam, slanting rain, waves breaking. Qwen-Image-2512 drew a great storm but added a keeper's house and a row of buildings, so the lighthouse wasn't alone (4.38). Boogu drew the biggest drama and almost forgot the rain (4.38). Z-Image put the lighthouse on low rocks instead of a cliff, in weather that looks a bit breezy (4.12). FLUX.2 klein made the lighthouse too small to carry the frame on both seeds (4.00 and 3.88).

Three images got both counts right and in the right places: ERNIE-Image Turbo on both seeds and ERNIE-Image base, all at 4.75. Qwen-Image-2512 also counted five and two, crowded into a diagonal with an oversized pear (3.88). FLUX.2 klein drew four apples on both seeds (3.88 and 3.75). Boogu drew four in a vertical column on a streaky table (3.12), and Z-Image drew seven apples and three pears (2.88). Counting is hard for these models. If your prompts carry numbers, I'd weigh this test more than any other.

On the chart, up is better and left is faster. ERNIE-Image Turbo is the highest point, at 81.5 seconds and 4.40 on seed 11. Three models are faster (FLUX.2 klein at 21.5 seconds, Boogu at 55, Z-Image at 74.5), and the best of them scores 3.35. The two slow ones are lower and to the right.

These numbers come from the same machine, one model at a time. The one exception is the ERNIE-Image base workshop image, which overlapped my cartoon renders and is left out of its median. I checked free memory before each model, and the script would have skipped one with less than 35% free. None was skipped (the lowest reading was 61%), and LM Studio stayed loaded on the same Mac the whole time.

I got the memory wrong at first. I trusted RSS. I wrapped each call in /usr/bin/time -l, as you'd do for any process, and it reported a maximum resident set size of 5.1 GB for ERNIE-Image Turbo. RSS clearly misses most of what MLX allocates here (and it ranged from 3.5 GB for Boogu to 26.8 GB for Z-Image, so it isn't even consistently low). mflux prints its own "Peak MLX memory" line at the end of each run (22.51 GB for the same image), and the same time -l output carries a "peak memory footprint" line from macOS (39.0 GB). Deciding whether a 32 GB Mac can run something? Use the footprint and ignore RSS.

First runs are slower. Much slower. In this afternoon's two-prompt run ERNIE-Image Turbo took 266 seconds for its first image (download and first load included) and 81 for its second, and Qwen-Image-2512 took 820 and then 377. Tonight's figures are all with the weights already on disk.

About the step counts: I ran FLUX.2 klein with 6 steps (its card's example uses 4) and Qwen-Image-2512 with mflux's default of 20 (its card's example uses 50). At 50 steps I'd estimate Qwen at about 15 minutes an image, from its 18 to 19 seconds per step in tonight's logs (not measured). ERNIE-Image base ran 50 steps with guidance 4.0, as mflux's README shows, which runs the model twice per step: 15.7 seconds a step in its log against 7.8 for Turbo, over 50 steps instead of 8. Hence about 813 seconds.

I read the licenses on 16 October 2026, from each model's own Hugging Face repo (the LICENSE file, or the card's license field when the repo has no file) or the vendor's license page. "Commercial" here means running the model to make images for a business, such as illustrations on a company website. I'm not a lawyer. Read the text yourself before you rely on it.

Model License Commercial use What the license says Source
ERNIE-Image Turbo, ERNIE-Image Apache-2.0 Yes "a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license" ERNIE-Image LICENSE
FLUX.2 klein 4B Apache-2.0 Yes "Open weights available for commercial use under the Apache 2.0 license" FLUX.2-klein-4B
Z-Image Turbo, Z-Image Apache-2.0 (card field; no LICENSE file in the repo) Yes card: license: apache-2.0 Z-Image-Turbo
Boogu-Image 0.1 Turbo Apache-2.0 (card; no LICENSE file in the repo) Yes "Apache-2.0 open-source unified image generation and editing model family"; the card also calls it "a research project only, and not an official model release" Boogu-Image-0.1-Turbo
Qwen-Image-2512 Apache-2.0 (card field) Yes card: license: apache-2.0 Qwen-Image-2512
Ming-Image-0.1-Design MIT Yes "to deal in the Software without restriction" Ming-Image-0.1-Design
Qwen-Image 2.1 and 2.1 Turbo Qwen Research License No, without a separate license "FOR NON-COMMERCIAL PURPOSES ONLY"; "Non-Commercial" means "for research or evaluation purposes only" Qwen-Image-2.1 LICENSE
FLUX.2 dev, FLUX.2 klein 9B FLUX Non-Commercial License No for running the model (outputs: see below) "use (a) for revenue-generating activity ... is not a Non-Commercial Purpose" FLUX.2-dev
Ideogram 4 Ideogram Non-Commercial Model Agreement No from the free weights; a paid license is US$300 a month for 10,000 images "generating Output to include in, or to advertise or promote, revenue-generating products or services ... is not a Non-Commercial Purpose" ideogram-4-fp8 LICENSE ,price
Krea 2 Turbo Krea 2 Community License Only under US$1,000,000 company revenue "permitted only if you ... have total company-wide annual revenue of less than one million United States dollars" Krea 2 license
FLUX 3 Image Klein FLUX Kommunity License Outputs only, and only under US$5,000,000 revenue "gross annualized revenue is less than US$5,000,000" flux-3-image-klein

The two Qwen image models are easy to mix up, and you can't use the newer one commercially. Qwen-Image-2512, the December 2025 update we ran, carries license: apache-2.0 on its card. Qwen-Image 2.1 ships with the Qwen RESEARCH LICENSE AGREEMENT, dated 20 September 2026, and its grant reads "FOR NON-COMMERCIAL PURPOSES ONLY". For a commercial license it says to write to model-business@notice.qwencloud.com. Unlike the FLUX and Ideogram licenses, it has no separate clause about the images you make. I didn't run 2.1. Why bother? A model we couldn't publish with seemed like the wrong way to spend an hour of this test, and our mflux 0.19.1 can't run it anyway.

I had this one wrong myself until I read the files. FLUX.2 klein 4B is Apache-2.0. Its bigger sibling FLUX.2 klein 9B and FLUX.2 dev are under the FLUX Non-Commercial License. Section 2.d of that license says "You may use Output for any purpose (including for commercial purposes), except as expressly prohibited herein." Section 4.a then prohibits using "any data produced by the FLUX Model" for "any commercial or production purposes". And the model itself may only be used for non-commercial purposes, which exclude "revenue-generating activity". I can't make those clauses agree with each other. My answer for a company blog is no, not without a license from Black Forest Labs (bfl.ai/licensing).

Ideogram's licensing page answers "Can I use Ideogram outputs commercially? Yes." The agreement that comes with the free weights says generating images for revenue-generating products "is not a Non-Commercial Purpose". The page doesn't say which one wins for the free weights. I looked. If I wanted Ideogram for a business I'd pay the US$300 a month.

Krea 2's community license allows commercial use only if your company and its affiliates made less than US$1,000,000 over the trailing twelve months, and that limit covers the images too. Krea can also end the license on 30 days' notice. FLUX 3 Image Klein, which Black Forest Labs announced on 15 October, lets a "Qualifying User" under US$5,000,000 use the images commercially. The user has to filter or review the output and disclose AI generation where the law requires it.

None of the articles I read calls FLUX.2 dev or Qwen-Image 2.1 free for commercial use, which surprised me a bit. The mistakes I found are about Krea and FLUX.2 klein.

AI Weekly says Krea 2 is free "for teams under 50 seats". The license has no seat count at all. Its only threshold is the US$1,000,000 revenue line. invideo lists Krea among the lines you can "self-host commercially with no paid agreement" (it does add "verify the model card before shipping commercial work"), and above US$1,000,000 in revenue you can't.

FLUX.2 klein gets mixed up in both directions. Pixazo says it needs a commercial license from Black Forest Labs. For the 9B that's right. The 4B is Apache-2.0. A local-ai-zone guide makes the opposite mistake and lists the 9B as Apache-2.0, while its Hugging Face repo says flux-non-commercial-license.

Pinggy's ranking and Magic Hour's list got the licenses I checked right, and they're worth reading for the models I didn't run.

FLUX 3 Image Klein is the model this test is missing. Black Forest Labs announced it yesterday, 15 October (the Hugging Face repo is dated 13 October), and mflux 0.23.0, which came out today, can run it. I installed 0.23.0 in a separate environment to add it tonight, and the download stopped with "Access to model black-forest-labs/flux-3-image-klein is restricted and you are not in the authorized list". Getting on that list means accepting the FLUX Kommunity License on our Hugging Face account, and I wasn't going to sign a license at night just to fill a table row. Krea 2 Turbo failed the same way this afternoon. It is gated too.

Qwen-Image 2.1, Ming-Image-0.1-Design and FLUX 3 Image Klein all need a newer mflux than the 0.19.1 we ran (they arrived in 0.20.0, 0.21.0 and 0.23.0). I kept 0.19.1 for the whole test so the numbers all came from the same code. Ideogram 4 does run under 0.19.1, but its free weights are non-commercial, and this article's images had to be ones we may publish. So when I say ERNIE beats FLUX, I mean FLUX.2 klein 4B. Does it beat FLUX 3 Image Klein? I don't know yet.

Our articles carry a couple of cartoons each, made by a small script on the same Mac Studio. Until this afternoon it called FLUX.2 klein 4B. After the first two-prompt test I changed its default to ERNIE-Image Turbo, kept FLUX.2 klein behind a --model flux flag for when speed matters, and added Qwen-Image-2512 as --model qwen, because in that unblinded afternoon test it had the best lettering. Tonight's blind lettering test put it behind both ERNIE models (4.12 against 4.38), so I'll probably drop that advice. I made the cartoons in this article with it too. ERNIE likes to repeat a requested word as a big headline across the top of the picture, so tonight I gave the script an --on option: --word SALE --on sign asks for SALE "written on the sign" and nowhere else.

We ran FLUX.2 klein from early October and I never questioned it. 22 seconds felt free, and most cartoons had no text. When a sign or a label was needed it misspelled it, so we worked around that by asking for no text at all. Pretty lazy of me.

A single seed tells you very little. On the lettering prompt ERNIE-Image Turbo's seed 42 image put pedestrians on the pavement, which the prompt had ruled out, and seed 11 didn't. FLUX.2 klein's two diagrams scored 4.75 and 4.00. Two seeds for two models is still a thin sample, and six prompts, chosen by me on a Friday evening to cover the things I personally ask image models for, are not a benchmark anyone should quote as a ranking. If your work is mostly product photos, run your own ten.

The judges disagreed by 2 points or more five times out of 192 paired scores, and I looked at all five. Judge A gave ERNIE-Image Turbo's shop front a 3 for text because the 2.99 tag appears twice, and judge B gave it a 5 because both copies are spelled right. I side with A on this one: the prompt asked for one tag. They split 3 and 5 on Qwen-Image-2512's tag over a line of fine print underneath it. I looked, and the fine print is a smudge, so I'd say 4. On Z-Image's keyboard I'd go with A's 3 for looks (the light is flat for golden hour), and on Boogu's diagram with B's 1 for adherence (the cards run off the frame). On ERNIE-Image base's workshop I side with A's 2 for artefacts: there is a third arm behind the robot's shoulder. Siding with A on the shop front drops Turbo's seed 11 there from a tie for first with ERNIE base to level with Qwen. None of the five changes the order of the models overall.

These are the commands I ran, on macOS 26.7 with mflux 0.19.1. You need an Apple silicon Mac with enough memory, so first the numbers for something smaller than 1600x896. After the bake-off I ran the counting prompt at 1024x1024, at 8-bit and 4-bit, on the same Mac:

Run Seconds Peak MLX memory macOS peak footprint Apples
ERNIE-Image Turbo, 8-bit, 1024x1024 71 18.79 GB 31.0 GB 5
ERNIE-Image Turbo, 4-bit, 1024x1024 53 14.78 GB 27.0 GB 5
ERNIE-Image Turbo, 4-bit, 1600x896 71 18.49 GB 35.0 GB 5
FLUX.2 klein 4B, 8-bit, 1024x1024 28 17.95 GB 29.7 GB 4
FLUX.2 klein 4B, 4-bit, 1024x1024 16 17.94 GB 29.7 GB 4

4-bit cut ERNIE's footprint by 4 GB and didn't cost it the five apples. FLUX.2 klein at 4-bit used the same memory as at 8-bit, which I can't explain yet. The seconds column differs mostly because the 8-bit runs went first and loaded cold: per step, 4-bit and 8-bit ran at the same speed (5.3 seconds a step for ERNIE). I measured all of this on a 96 GB Mac, where macOS has no reason to squeeze anything. On a 32 GB Mac I'd try ERNIE-Image Turbo at 4-bit and 1024x1024 first, but I haven't run it on one, so treat that as a guess.

==0.19.1 to get the newest.

uv tool install mflux==0.19.1

The last line lists the commands it installed (shortened here):

Installed 37 executables: mflux-capabilities, mflux-completions, mflux-concept, ..., mflux-generate-ernie-image, mflux-generate-ernie-image-turbo, ..., mflux-generate-flux2, ..., mflux-generate-qwen, ..., mflux-generate-z-image-turbo, ...
export HF_HOME=/Volumes/your-big-disk/huggingface
mflux-generate-ernie-image-turbo --steps 8 -q 8 --seed 11 --width 1600 --height 896 --metadata \
  --prompt "Street photograph of a small corner shop front in daylight. A large red banner above the window reads OPEN SOURCE SALE in white block capitals, and a yellow price tag in the window reads 2.99. No people, no other text." \
  --output sale-ernie.png

The end of the log from that run on our Mac. You get sale-ernie.png and, because of --metadata, a sale-ernie.metadata.json beside it:

100%|██████████| 8/8 [01:01<00:00,  7.73s/it]
Peak MLX memory: 22.50 GB
mflux-generate-flux2 --model flux2-klein-4b --steps 6 -q 8 --seed 11 --width 1600 --height 896 --metadata \
  --prompt "Street photograph of a small corner shop front in daylight. A large red banner above the window reads OPEN SOURCE SALE in white block capitals, and a yellow price tag in the window reads 2.99. No people, no other text." \
  --output sale-flux.png
100%|██████████| 6/6 [00:18<00:00,  3.02s/it]
Peak MLX memory: 21.65 GB
/usr/bin/time -l mflux-generate-ernie-image-turbo --steps 8 -q 8 --seed 11 --width 1600 --height 896 \
  --prompt "Street photograph of a small corner shop front in daylight. A large red banner above the window reads OPEN SOURCE SALE in white block capitals, and a yellow price tag in the window reads 2.99. No people, no other text." \
  --output sale-ernie.png 2>&1 | grep -E "Peak MLX memory|peak memory footprint"
Peak MLX memory: 22.50 GB
         39004768512  peak memory footprint

The other four models ran like this, with the same seed, size and prompt flags:

mflux-generate-z-image-turbo -q 8 ...
mflux-generate-boogu -q 8 ...
mflux-generate-qwen --model Qwen/Qwen-Image-2512 -q 8 ...
mflux-generate-ernie-image --steps 50 --guidance 4.0 -q 8 ...

If you run language models through MLX already, our MLX vs GGUF test on Apple Silicon covers why you compare formats at the same bit width, and the NVFP4 converter piece is about what happens below that. The same Mac Studio also runs our language models (Goose 3.0 and LeanZero Link).

Install mflux, run the shop-sign prompt through ERNIE-Image Turbo and FLUX.2 klein 4B, and look at the two banners side by side. That one comparison told me more than any table. I still use FLUX.2 klein for drafts, since 22 seconds is pretty nice when you're trying ten ideas. And before you publish anything, read the license file of the exact checkpoint you downloaded, because the 4B and the 9B of the same FLUX family don't share one. More of our measured local-model work is under local AI.

Originally published on leanzero.net. More Atlassian, Forge and local-AI write-ups at leanzero.net/blog, and if you're planning a migration or a Forge app, that's what we do: leanzero.net/services.

── more in #generative-ai 4 stories · sorted by recency
── more on @ernie-image turbo 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/best-local-image-gen…] indexed:0 read:21min 2026-10-16 · —