AI image generation w 2026 — Gemini 3.1 Pro vs Flux vs SDXL — co używam i kiedy
Cztery modele, trzy różne ceny, jeden case study (cover image dla bloga). Pokazuję dla jakiego use case'a co działa, gdzie API zaboli, i kiedy warto wrócić do Sharp + Canvas.

Po roku eksperymentów z różnymi modelami image generation mam dość konkretny ranking dla różnych zastosowań. To nie jest leaderboard ani benchmark, to zapis tego co realnie używam i dlaczego, z konkretnymi cenami, gotchami i przypadkami gdy żaden AI nie wygrał z procedural generation.
Modele które mnie obchodzą w 2026
| Model | Provider | Strength | Cena (1 obraz) |
|---|---|---|---|
| Gemini 3.1 Pro Images | Photo realism, text rendering | ~$0.040 | |
| Flux 1.1 Pro | Black Forest Labs | Najlepsza compozycja, brand asset look | ~$0.055 |
| Flux schnell | Black Forest Labs (CF Workers AI) | Speed, free tier | $0 (CF) |
| SDXL Lightning | Stability AI (CF Workers AI) | Tekstury, abstract patterns | $0 (CF) |
| DALL-E 3 | OpenAI | Wciąż dobry dla illustration | ~$0.040 |
| Imagen 3 | Photo realism premium | ~$0.030 |
Czego nie używam:
- Midjourney, community-first, brak API, nie nadaje się do automatyzacji
- Stable Diffusion local, tylko jeśli lokalnie (RTX 3070+) i potrzebujesz wolności
- Leonardo.ai, UI z nieba, ale API drogie i niespójne
Case study — cover images dla bloga
Mam 32 posty. Chciałem każdy mieć unikalny cover. Trzy podejścia spróbowałem:
Podejście 1 — Flux 1.1 Pro przez Replicate
Prompt template:
abstract dark technical illustration for a tech blog post about
"{title}". Color palette: deep black background (#0a0a0a) with neon
green accent (#00FF7F). Style: cyberpunk minimalism, code fragments
floating, terminal silhouettes, abstract data visualizations, 16:9
aspect ratio. No text, no people, no recognizable logos.Wyniki: świetne wizualnie ale niespójne stylistycznie. Każdy obraz wygląda profesjonalnie, ale 32 razem wyglądają jak galeria różnych artystów, nie jak jeden brand.
Koszt: 32 × $0.055 = $1.76. Jak ktoś tania jest.
Podejście 2 — Gemini 3.1 Pro Images
Ten sam prompt template, lepsze typography rendering (próbowałem dodać overlay z tytułem inline w obrazie). Wyniki gorsze niż Flux dla abstrakcji, świetne dla photo-realistic scenariuszy.
Best for: posty z "human element" (np. „mój workflow", „rozmowa z klientem"). Worse for: abstract tech.
Podejście 3 — Sharp + Canvas, procedural (zwycięski wybór)
Po dwóch dniach generacji wróciłem do procedural. Każdy slug ma deterministyczny seed, generuje:
import sharp from "sharp";
import { createHash } from "crypto";
function slugSeed(slug: string): number {
return parseInt(createHash("md5").update(slug).digest("hex").slice(0, 8), 16);
}
async function generateCover(slug: string, title: string) {
const seed = slugSeed(slug);
const hue = (seed % 360); // unique per slug
const svg = `
<svg width="1200" height="630">
<defs>
<radialGradient id="g" cx="20%" cy="10%">
<stop offset="0%" stop-color="hsl(${hue}, 80%, 40%)" stop-opacity="0.4"/>
<stop offset="60%" stop-color="#0a0a0a" stop-opacity="0"/>
</radialGradient>
</defs>
<rect width="1200" height="630" fill="#0a0a0a"/>
<rect width="1200" height="630" fill="url(#g)"/>
<!-- accent grid pattern -->
<pattern id="grid" width="60" height="60" patternUnits="userSpaceOnUse">
<path d="M 60 0 L 0 0 0 60" fill="none" stroke="rgba(255,255,255,0.04)"/>
</pattern>
<rect width="1200" height="630" fill="url(#grid)"/>
</svg>
`;
await sharp(Buffer.from(svg))
.composite([{
input: Buffer.from(`<svg><text x="80" y="350" font-size="68" font-family="Inter Black" fill="white">${title}</text></svg>`),
top: 0, left: 0,
}])
.webp({ quality: 85 })
.toFile(`public/blog/covers/${slug}.webp`);
}Koszt: $0. Czas: 0.4s per obraz. Spójność: 100%. Maintenance: regeneruje się przy każdym buildzie jak chcę.
Dlaczego procedural wygrał:
- Brand-spójne (każdy obraz ma to samo DNA, kolory, font, layout)
- Reprodukowalne (commit do gita, regenerujesz lokalnie)
- Zero API cost
- Tytuł renderowany jako tekst, nie próba LLM-a "narysuj tekst"
Gdzie procedural przegrywa:
- Photo-realistic content (Gemini wygrywa o lata)
- Skomplikowane illustration (Flux)
- Storytelling visuals (np. mockup product page), tylko AI
Porównanie API DX (developer experience)
Ranking kogo dobrze się integruje:
1. Replicate, REST API, polling job ID, output URL. Działają wszystkie modele (Flux, SDXL, Gemini, custom community models).
curl -X POST https://api.replicate.com/v1/predictions \
-H "Authorization: Token $TOKEN" \
-d '{"version": "...", "input": {"prompt": "..."}}'2. Gemini API (Google AI Studio), JSON-in, base64-out. Dobrze udokumentowane, dla solo-devów łatwiejsze niż GCP setup.
3. Cloudflare Workers AI, najtańsze (free tier do 10k req/dzień), ale nie zwraca image bytes w MCP (bug znany od 03/2026). Direct REST API działa.
4. OpenAI Images API (DALL-E 3), działa OK, ale max 1024x1024 i drogo dla batch (rate limity dla DALL-E znacznie niższe niż dla GPT).
Quality benchmark (bez bias)
Daję ten sam prompt 4 modelom, oceniam by 5 osób:
Prompt: "Modern minimalist landing page hero illustration for a
booking website. Dark theme. Mountain silhouette in background.
Subtle accent color: forest green. Photo-realistic but stylized.
1200x630."Wyniki (1-10):
| Model | Compozycja | Color fidelity | "Brand feel" | Średnia |
|---|---|---|---|---|
| Flux 1.1 Pro | 9 | 8 | 8 | 8.3 |
| Gemini 3.1 Pro | 8 | 9 | 7 | 8.0 |
| DALL-E 3 | 7 | 7 | 7 | 7.0 |
| Flux schnell | 7 | 7 | 6 | 6.7 |
| SDXL | 6 | 6 | 5 | 5.7 |
Flux wygrywa, ale Gemini bardzo blisko + tańszy o 30%.
Kiedy każdego używać — moja decision tree
- Hero image dla landingu klienta (mountain, premium) → Gemini 3.1 Pro ($0.04, photo-realistic)
- Brand illustrations / 5 różnych obrazów do prezentacji → Flux 1.1 Pro ($0.055 ale top-tier consistency)
- Wewnętrzne mockupy, draft, brainstorm → Flux schnell (CF, free)
- Abstract patterns / texture backgrounds → SDXL Lightning (CF, free)
- Cover images dla 32 blog postów (potrzeba spójności) → procedural Sharp ($0)
- One-off social asset (Instagram post, banner) → Gemini lub Flux w zależności od stylu
Ostrzeżenia i rzeczy które mnie zaskoczyły
1. Brand colors nie zawsze wychodzą. Próbowałem #00FF7F jako accent, Flux/Gemini interpretują "neon green" jako podobny ale nie identyczny. Jeśli MUSISZ exact color → procedural overlay.
2. Tekst na obrazie to żart. Wszystkie modele wciąż mają z tym problem (mimo że Gemini 3 jest najlepszy). Jeśli potrzebujesz tytułu, wygeneruj tło i nakładaj tekst przez Sharp/Canvas.
3. Model versioning w Replicate. Pinuj specific model version hash w API call. Jak przyjdzie nowa wersja, twoje obrazy będą inne. Pamiętaj że hash z dokumentacji może być stary.
4. Rate limity są bardziej restriction niż się wydaje. DALL-E 3 = 5 req/min dla Tier 1. Dla 32 obrazów to 6.5 minut blokady. Gemini i Replicate wyższe limity (50-200/min).
5. Watermarking w Imagen 3 / Gemini. Google wprowadził SynthID w generated images (invisible watermark). Nie wpływa na wygląd ale niektórzy klienci preferują "pure" generation, Flux nie ma tego.
Co robię dla klientów
Dla landingów małych firm (agroturystyka, pasieka, salon):
- Hero image: ze stocku (Unsplash, Pexels), często wystarcza i wygląda autentycznie
- Decorative illustrations: Flux 1.1 Pro raz, używamy dla całego brandbooka
- Avatary/team photos: stock + AI fix-up (Photoshop AI generative fill)
Dla agentów AI / własnych projektów:
- Cover images: procedural (jak ten blog)
- Demo videos: ScreenStudio + manual overlay
- Logo/brand: zewnętrzny grafik raz, nie AI (różnica jest)
Dla social posts:
- Post graphics: Banner Maker (Sharp + template) lub Gemini per post
- OG images: dynamic Next.js og endpoint (z Tailwind-like styling)
AI image gen w 2026 to dorosły toolkit. Wybór modelu zależy mocno od use case'a, nie od "który najlepszy". Dla mnie podział to: Flux dla brand assets, Gemini dla photo-realism, CF free tier dla draft, Sharp dla wszystkiego co potrzebuje spójności i $0 budżetu.
Najmądrzejsza zasada: ile razy ten obraz ma się odświeżyć? Raz → AI. 32 razy z brand consistency → procedural.