FLUX.1 schnell è il modello di immagini che apro di default per le cover degli articoli del blog e per le illustrazioni di servizio nella documentazione del homelab. Gira su Cloudflare Workers AI, è gratis per i miei volumi (il free tier mette a disposizione 10000 neuroni al giorno, e una FLUX schnell da 1024 pixel ne consuma una manciata), e in tre o quattro secondi mi sputa fuori un PNG pulito già pubblicabile senza rifiniture. Sotto il cofano è la variante “schnell” della famiglia FLUX di Black Forest Labs, rilasciata sotto licenza Apache 2.0, distillata per girare in 4 step contro i 20-30 di un modello full.

Lo uso così tanto perché ha esattamente il profilo che mi serve per il blog tecnico: latenza bassa, qualità foto-realistica dignitosa, costo zero per il mio volume, niente da installare in locale, e una policy di provider difendibile.

Setup con curl + Workers AI

Per chiamare un modello di Workers AI mi servono due cose: l’ACCOUNT_ID (lo trovo nella dashboard Cloudflare, in alto a destra di qualsiasi pagina) e un API token con scope Workers AI:Read (creato da dash.cloudflare.com -> My Profile -> API Tokens -> Create Token, template “Workers AI”). Il token vive in ~/.config/claude-credentials/credentials.env come CF_AI_TOKEN, caricato in automatico dalla shell.

La chiamata diretta è un singolo curl REST:


ACCOUNT_ID="..."
TOKEN="$CF_AI_TOKEN"
MODEL="@cf/black-forest-labs/flux-1-schnell"

curl -s https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai/run/$MODEL \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "prompt": "abstract data flow visualization, cyan gradients, editorial tech magazine style, clean composition",
        "steps": 4
      }' > out.json

La risposta non è un PNG diretto: è JSON con result.image come stringa base64. La estraggo con jq e la decodifico:


jq -r '.result.image' out.json | base64 -d > cover.png

Tutto qui, niente wrangler in mezzo per la sola inference. Wrangler lo tiro fuori solo se devo deployare un Worker che chiami FLUX via binding AI da TypeScript; per generare un’immagine al volo dal portatile, la chiamata REST diretta è la cosa più pulita.

Un esempio reale: la cover di questo articolo

La cover che vedete in cima è uscita proprio da FLUX.1 schnell, alla seconda iterazione di prompt. Volevo qualcosa di astratto, non l’ennesima foto di un rack con luci viola: ho chiesto un flusso di dati astratto, gradienti cyan, stile editoriale. 4 step, latenza sotto i quattro secondi, PNG 1024×1024 pulito senza artefatti, niente “look AI” appiccicoso. Più rapido del tempo che mi sarebbe servito a cercare uno stock free su Unsplash.

Lo stesso pattern lo riuso per le illustrazioni dentro la documentazione interna del homelab: piccole copertine per le note Markdown che tengo come runbook, per dare un colpo d’occhio a sezioni lunghe.

Cosa fa bene

Velocità in primo luogo: 4 step è già il punto di funzionamento del modello, non sto barando sulla qualità per andare più rapido. Su composizioni astratte, illustrazioni editoriali, oggetti singoli con sfondo neutro, la resa è spesso pubblicabile al primo tentativo. Segue il prompt in modo onesto, senza interpretazioni creative eccessive. Su 1024×1024 (il default ragionevole) il consumo di neuroni è basso, e quindi posso permettermi anche di buttare via tre o quattro risultati per scegliere il migliore senza preoccuparmi del budget free tier.

Cosa fa meno bene

Il testo dentro le immagini è il punto debole solito: scritte e cartelli vengono fuori storpiati, come per tutti i modelli di questa generazione. Le mani umane in pose complicate sono ancora una sfida, ma per le cover editoriali è raro che mi servano. Le composizioni con molti soggetti distinti tendono a fondersi se il prompt non è descrittivo in modo geometrico (dove sta cosa). Quattro step sono un trade-off: per scene molto ricche di dettaglio si vede che è una versione distillata, e in quei casi mi sposto su SDXL base.

Privacy

Cloudflare non addestra i propri LLM e dichiara esplicitamente di non usare prompt e output per training, su free e paid identicamente. Non c’è retention dei prompt o delle immagini generate finché non sono io a deciderlo esplicitamente scrivendoli in R2, KV, Durable Objects o Vectorize. L’inference gira sull’edge globale Cloudflare, con possibilità di restringere la regione via Regional Services se serve mantenere il traffico in Europa. Il modello in sé è open source: FLUX.1 schnell è rilasciato da Black Forest Labs sotto licenza Apache 2.0, quindi i pesi sono pubblici e teoricamente self-hostabili su una GPU adeguata. La differenza con altre piattaforme è proprio qui: non sto barattando i miei prompt come moneta di scambio per il free tier.

In pratica

Per le cover degli articoli del blog tecnico, per le illustrazioni di servizio nei runbook del homelab, e per qualsiasi banner di un piccolo progetto open source che metto online, FLUX schnell è il mio default e ci resta. Quando voglio un look più “stilizzato/illustrazione” passo a dreamshaper 8 LCM, quando voglio una resa fotografica più seria a SDXL Lightning, e quando l’asset è importante (copertina di una serie, slide per un talk) tiro fuori SDXL base 1.0 e mi prendo i 20 secondi di latenza in più. Per la routine, schnell è quello che bisogna battere.


Immagine generata con Cloudflare Workers AI / FLUX.1 schnell.

Articolo originale su rpi.temporiti.net