Inoltre l'elaborazione locale permette di generare
immagini senza chiavi di accesso legate ad abbonamenti,
senza latenza nell'accesso ai servizi,
senza vincoli o censure
ed infine senza problemi di privacy.
In questa paginetta presentiamo un esempio di programma Python
che utilizza i package di Stable Diffusion XL per realizzare immagini
sfruttando per l'elaborazione AI (Artificial Intelligence)
le GPU (Graphics Processing Unit) presenti sui processori Silicon di Apple.
Sembra tutto molto difficile... in realta' non e' cosi' complesso e
conoscere come funzionano le reti neurali per la generazione di immagini
puo' essere utile anche per chi utilizza solo applicazioni
o servizi in Cloud per la grafica.
La trattazione sara' semplice con comandi ed esempi pratici,
ma un poco di familiarita' con il Python
e l'interfaccia a linea di comando del Mac e' necessaria.
Tutti gli esempi di programmazione riportati sono completi, funzionanti
su MacBook con processori Silicon con 16GB di RAM o piu'.
Vengono riportati suggerimenti per l'uso dei
Prompt,
Inquadrature,
Pose,
LoRA,
infine non manca una panoramica su configurazioni e strumenti alternativi
per la generazione delle immagini.
L'architettura dei chip di Apple e' differente da quella tipicamente presente sui sistemi Windows o Linux e consente una maggiore flessibilita' nell'uso dei piu' recenti tool di AI (Artificial Intelligence) che utilizzano le reti neurali. Questo consente di eseguire localmente su Mac modelli di AI che su altre piattaforme richiedono costose schede grafiche dedicate.
Eseguire localmente i modelli AI presenta diversi vantaggi.
Non e' necessario utilizzare chiavi di accesso a servizi che richiedono un pagamento o hanno limiti di utilizzo.
Eseguendo i modelli localmente, si mantiene la piena proprieta' dei dati
e si evitano i potenziali rischi per la sicurezza.
Un motore locale riduce la latenza e la dipendenza da server esterni, rendendoli piu' affidabili,
funzionanti anche in assenza di connessione ad internet
e, se si dispone localmente della potenza necessaria, potenzialmente piu' veloci.
Si hanno a disposizione tutti i parametri di configurazione dei motori di inferenza
e si possono imparare tutti i dettagli sul reale funzionamento delle reti neurali di grandi dimensioni.
Eseguendo localmente le elaborazioni non sono presenti blocchi, filtri, censure, ...
Il vantaggio fondamentale risiede nella privacy assoluta e nel controllo totale dei dati, poiche' nessuna informazione lascia il proprio computer e nessuna censura e' inserita alle sue risposte. Questo, unito alla possibilita' di personalizzazione e all'assenza di costi per l'utilizzo, rende gli LLM locali strumenti potenti per le aziende ed i professionisti.
Apple ha progettato i chip Silicon [NdA Apple Silicon M1 e successivi] che contengono al loro interno sia CPU che GPU ed accedono alla stessa memoria RAM mediante UMA (Unified Memory Architecture). Il primo vantaggio e' che non e' necessario di copiare i dati dalla RAM di sistema (usata dalla CPU) alla VRAM dedicata (usata dalla GPU). Tutti i processori accedono agli stessi dati nello stesso posto. Il secondo importante vantaggio e' che la memoria totale del sistema e' disponibile per ogni utilizzo: questo rende i sistemi Mac molto adatti a provare LLM di grandi dimensioni senza richiedere l'acquisto di costose schede dedicate.
Concludendo per provare ad eseguire localmente reti neurali di discrete dimensioni un Mac di Apple puo' essere un'alternativa molto flessibile e, curiosamente, economica.
Stable Diffusion e' un programma di intelligenza artificiale estremamente avanzato,
progettato per la generazione di immagini a partire da descrizioni testuali.
Stable Diffusion utilizza le reti neurali
come i LLM (Large Language Model)
ma in realta' il meccanismo di generazione dell'immagine e' diverso.
Un LLM genera in modo seriale una parola alla volta basandosi sulla probabilita'
che tale parola sia corretta.
Stable Diffusion invece sfrutta un’architettura di diffusione latente,
un approccio che consente di trasformare il rumore casuale
in immagini dettagliate e coerenti.
Questo avviene attraverso un processo iterativo di raffinamento,
in cui la rete neurale costruisce
progressivamente l’immagine in base alle istruzioni fornite dall’utente.
Stable Diffusion opera parallelamente su tutta l'immagine e non una parola o un token alla volta.
Per fare un esempio piu' semplice...
un LLM e' un muratore che aggiunge un mattone alla volta,
Stable Diffusion e' uno scultore che toglie il materiale in eccesso
da un blocco di marmo rivelando l'immagine finale.
Stable Diffusion XL, la versione piu' recente del modello,
utilizza un processo in piu' passi con alcune variazioni rispetto ai modelli precedenti.
La prima fase in cui opera il modello e' su uno spazio latente di dimensione 128x128
da cui viene eliminato il rumore.
La matrice di dati viene trasformata nell'immagine finale 1024x1024 dal componente finale VAE (Variational Autoencoder).
Ma dal punto di vista dell'utilizzo la differenza maggiore rispetto ad SD 1.5
e' nel prompt che con SDLX puo' essere piu' complesso ed articolato grazie all'utilizzo
in parallelo di due Transformers CLIP (Contrastive Language-Image Pre-training)
per l'encoding.
Come possiamo generare un'immagine con l'AI sul Mac? Facile, con Stable Diffusion bastano pochi passi.
Su MacOS i prerequisiti sono pochi perche' il Python e' gia' presente. Installiamo le librerie necessarie, eventualmente dopo un pip install --upgrade pip ed usando un ambiente virtuale venv:
Gia' fatto, ora possiamo programmare!
StableDiffusion con SDXL-Lightning e' un buon compromesso tra qualita' delle immagini e velocita'. E' vicino al limite della memoria (con 16GB disponibili) ma con qualche trucco si riesce ad operare con risultati graficamente molto validi.
Scriviamo questo semplice programma Python chiamandolo testSDXL.py
import torch
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
import psutil
base_model = "stabilityai/stable-diffusion-xl-base-1.0"
repo_id = "ByteDance/SDXL-Lightning"
ckpt = "sdxl_lightning_4step_unet.safetensors"
unet = UNet2DConditionModel.from_config(base_model, subfolder="unet")
unet.load_state_dict(load_file(hf_hub_download(repo_id, ckpt)))
pipe = StableDiffusionXLPipeline.from_pretrained(
base_model,
unet=unet,
torch_dtype=torch.float32
)
pipe.safety_checker = None
pipe.requires_safety_checker = False
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")
if psutil.virtual_memory().total / (1024**3) >= 32:
pipe.to("mps") # Better for speed
else:
pipe.enable_model_cpu_offload() # Better for memory management
prompts = {
"Architettura": "Modern minimalist living room, floor-to-ceiling windows with a view of a snowy forest, beige and white color palette, soft natural light, architectural photography, 8k resolution.",
"Pixar": "3D render in the style of Pixar, a cute robot holding a flower, soft studio lighting, subsurface scattering, expressive eyes, blurred background, 8k resolution, vibrant colors."
}
for i in range(3):
seed = torch.randint(0, 2**32, (1,)).item()
generator = torch.Generator(device="mps").manual_seed(seed)
for style, prompt in prompts.items():
image = pipe(
prompt=prompt,
generator=generator,
num_inference_steps=4,
guidance_scale=0,
width=1024,
height=1024
).images[0]
# image.show()
image.save(f"test5XL_{style}_{seed}.jpg")
A parte l'utilizzo delle librerie necessarie ed i due loop per generare piu' immagini il programma Python e' molto semplice: da un Prompt si ottiene un'immagine!
Per eseguirlo basta dare il comando python testSDXL.py e vengono generate tre immagini per ogni Prompt utilizzato.
Ecco alcune immagini realizzate dal programma:
[NdA le immagini sono state ridotte di dimensioni e qualita']
Il programma e' relativamente semplice. Vengono caricate tutte le librerie e creata la pipeline di elaborazione impostando i nome dei file o i repository dei modelli. Quindi viene eseguito un loop per generare piu' immagini su una serie di semplici Prompt.
Proviamo ora a descrivere le scelte effettuate nel programma di esempio.
I modelli SD 1.5 sono nettamente inferiori come qualita', dimensioni delle immagini (512x512) e capacita' di interpretazione del Prompt (77 token). I modelli Flux.1 richiedono molta memoria e, sebbene si riesca ad eseguire l'elaborazione (eg. 16GM con RAM FLUX.1-schnell+LoRA) la generazione e' piuttosto lenta.
Nel programma di esempio si e' scelto di utilizzare la Stable Diffusion XL con SDXL-Lightning che richiede solo 4 step rispetto agli almeno 30 necessari per SDLX Base e gira senza errori su un Mac con 16GB di RAM.
Nel seguito riporteremo l'ampia galleria di Prompt per SDLX che abbiamo utilizzato per generare le immagini di esempio.
Nel nostro esempio non abbiamo utilizzato il prompt negativo.
Il programma di esempio genera piu' versioni dell'immagine con lo stesso prompt salvando il seed utilizzato in modo da scegliere quella preferita eventualmente affinandola successivamente. Utilizzare piu' bozzetti e' una tecnica usata da sempre nella grafica.
Nel seguito riporteremo come modificare il programma di esempio per utilizza un LoRA scaricato da Hugging Face.
import os os.environ["TRANSFORMERS_OFFLINE"] = "1" os.environ["HF_HUB_OFFLINE"] = "1"Naturalmente i modelli debbono essere stati scaricati localmente almeno una volta.
Nel nostro esempio, utilizzando SDXL-Lightning, sono soli 4 i passi necessari.
Nel nostro esempio, utilizzando SDXL-Lightning, abbiamo sempre generato immagini 1024x1024.
Il download iniziale dei modelli richiede tempo... pazienza!
I richiami successivi sfrutteranno la cache e saranno molto piu' veloci.
Alcuni modelli richiedono la registrazione su Hugging Face per poter essere scaricati.
Basta dare il comando hf auth login e passare il token generato sul sito.
Se la memoria si esaurisce il primo sintomo e' il rallentamento dovuto allo swapping,
ma altri problemi possono essere la generazioni di immagini nere, bianche, verdi, ...
fino ad arrivare al blocco del sistema.
I vari "trucchi" riportati per la gestione della memoria vanno sperimentati caso per
caso se si e' vicini al limite delle risorse.
A volte il problema delle immagini nere e' dovuto ad un bug nell'ultima fase del VAE,
in questo caso si aggira con pipe.vae.to(dtype=torch.float32).
Altra possibile ragione delle immagine nere e' un filtro,
per escluderlo basta passare nella pipe i parametri pipe.safety_checker = None pipe.requires_safety_checker = False
[NdA SDLX e' piu' permissivo rispetto alle versioni precedenti, tipicamente aggiunge solo un watermark].
Nei primi modelli di Stable Diffusion i prompt erano semplicemente una serie di parole separate da virgole, SDLX gestisce il prompt in modo molto piu' sofisticato eseguendo due letture per raccoglierne i dettagli e quindi i prompt possono, anzi debbono, essere piu' strutturati e descrittivi per ottenere le immagini migliori.
Anche se SDLX comprende potenzialmente piu' lingue, utilizzare un Prompt in inglese e' assolutamente consigliato.
E' opportuno definire il tipo di immagine desiderata all'inizio per poi specificare i dettagli.
Tra le prime caratteristiche da definire sicuramente sono importanti l'inquadratura
e lo stile dell'immagine.
SDXL a volte tende a rendere le immagini troppo pulite o moderne.
Per ottenere un effetto un po' nostalgico della TV catodica, si puo' aggiungere alla
fine del prompt: grainy texture, VHS aesthetic, slight blur.
Per ottenere un'immagine adatta per una slide conviene indicare "isolated on white background" o "clean background".
Per caratterizzare le figure il modo più semplice e' usare aggettivi etnici o descrittivi specifici.
Invece di "a woman", usa "a Swedish woman", "a Brazilian woman", "a person with freckles and curly hair".
Quandi si vogliono piu' figure e' importante distinguele.
Con "Two men shaking hands" nella maggioranza dei casi si otterranno due figure identiche che si stringono la mano,
meglio usare
"Two men shaking hands, one wearing a grey suit and glasses, the other wearing a grey suit and burning"
per distinguerle.
SDLX conosce molti personaggi famosi,
basta inserire il nome nel prompt: "A portrait of Actor_name in a tuxedo".
Ecco alcuni prompt efficaci per SDXL:
Non e' facile trovare il prompt giusto, nel seguito daremo ulteriori indicazioni di dettaglio sull'inquadratura e le pose... pero' e' spesso piu' divertente provare e ci si puo' far sempre aiutare da un'AI per ottenere un prompt migliore!
Prima di passare a qualche consiglio piu' tecnico ecco gli altri risultati dei Prompt di esempio:
Per dare un realismo fotografico o un look cinematografico specifico alle immagini generate con SDXL e' possibile utilizzare termini tecnici specifici. Il tipo di inquadratura e' un'indicazione importante che e' opportuno dare all'inizio del prompt.
Senza entrare troppo in dettaglio, perche' richiederebbe la preparazione che hanno i fotografi, o i registi, proviamo a dare qualche semplice suggerimento con le seguenti tabelle:
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Campo Lunghissimo | Extreme wide shot | Il soggetto è piccolissimo, domina il paesaggio. |
| Campo Lungo | Wide shot / Long shot | Si vede tutto il soggetto e buona parte dell'ambiente. |
| Figura Intera | Full body shot | Il soggetto si vede dalla testa ai piedi, da specificare per non tagliare le gambe. |
| Piano Americano | Cowboy shot | Taglio alle ginocchia/cosce. SDXL lo capisce perfettamente (deriva dai western). |
| Mezzo Busto | Medium shot | Taglio alla vita. È il default di SDXL se non specifici nulla. |
| Primo Piano | Close-up | Testa e spalle. Ottimo per i ritratti. |
| Primissimo Piano | Extreme close-up | Solo il viso o parte di esso (es. occhi). |
| Dettaglio | Macro shot | Per oggetti piccoli o texture (es. un occhio, un insetto, una goccia). |
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Dall'alto | High angle / From above | Rende il soggetto più piccolo o vulnerabile. |
| A volo d'uccello | Overhead shot / Bird's eye view | Vista zenitale, perpendicolare al terreno (ottimo per planimetrie o città). |
| Dal basso | Low angle / From below | Rende il soggetto imponente, eroico o minaccioso. |
| Soggettiva | POV (Point of View) | Vediamo attraverso gli occhi del protagonista (ottimo per mani che tengono oggetti). |
| Inclinata | Dutch angle | L'orizzonte è storto. Crea dinamismo, tensione o azione. |
| Altezza occhi | Eye level shot | Neutro, naturale. |
| Selfie | Selfie | Braccio teso, distorsione tipica da smartphone. |
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Grandangolo | Wide angle lens / 14mm / 24mm | Per paesaggi, architettura o scene d'azione. Include molto ambiente e distorce leggermente i bordi. |
| Fisheye | Fisheye lens | Distorsione sferica estrema (180 gradi). Look "urban", video musicali o sport estremi. |
| Standard | 50mm / Prime lens | La lente "umana". Proporzioni naturali, distorsione nulla. Ideale per street photography e scene quotidiane. |
| Ritratto | 85mm / 135mm / Telephoto | Comprime i lineamenti rendendoli più gradevoli e sfoca molto lo sfondo (Bokeh). |
| Macro | Macro lens / Microscopic | Per dettagli invisibili a occhio nudo: insetti, texture di tessuti, circuiti elettronici, pupille. |
| Cinematografico | Anamorphic lens | Crea i tipici riflessi orizzontali blu (lens flare) e un'inquadratura molto larga da grande cinema. |
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Sfondo sfocato | Bokeh / Shallow depth of field | Indica un'apertura larga (es. f/1.8). Isola perfettamente il soggetto. |
| Tutto a fuoco | Deep depth of field / f/11 | Usato in fotografia di architettura o paesaggi dove ogni dettaglio deve essere nitido. |
| Sfocatura morbida | Soft focus | Crea un'atmosfera sognante, eterea, tipica dei vecchi film o ritratti d'epoca. |
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Leica | Shot on Leica M11 | Look "Street" elegante, contrasto deciso, neri profondi, molta nitidezza. |
| Hasselblad | Medium format photography | Altissima risoluzione, gamma dinamica ampia, look da fotografia di moda "high-end". |
| GoPro | Action camera POV | Grandangolo spinto, colori saturi, tipico delle riprese sportive o in movimento. |
| Polaroid | Polaroid style / Instax | Colori sbiaditi, bordi bianchi, grana della pellicola, look nostalgico. |
| CCTV | Security camera footage | Qualità bassa, bianco e nero granuloso, grandangolo, data e ora in sovrimpressione. |
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Fotografico | Studio lighting, softbox, three-point lighting | Luce perfetta, ombre morbide, soggetto staccato dallo sfondo; ideale per ritratti professionali. |
| Naturale (Orario) | Golden hour, sunset lighting, morning light | Caldo e accogliente (Golden) o freddo e tecnologico (Blue). Rende tutto più piacevole ed emotivo. |
| Drammatico | Volumetric lighting, god rays, chiaroscuro, | Fasci di luce visibili (nella polvere/nebbia), contrasti forti. Per scene epiche, server room, ... |
| Cinematografico | Cinematic lighting, teal and orange, `moody lighting` | Color grading tipico dei film d'azione moderni. Dà un look "Holliwoodiano" istantaneo. |
| Neon / Tech | Neon lighting, cyberpunk lighting, glow | Colori acidi (rosa, ciano), bagliori. Perfetto per il tema "Cyber Security", "Database Futuristici", ... |
| Neutro / Flat | Flat lighting, ambient light, overcast sky | Nessuna ombra forte. Utile per texture, icone o quando vuoi che si veda tutto senza drammi. |
| Dal Basso / Alto | Uplighting (dal basso), Downlighting (dall'alto) | Uplighting: crea un aspetto sinistro o imponente (horror/cattivi). Downlighting: spotlight teatrale. |
SDLX genera ottime immagini ma ha difficolta' nell'inserire testi nelle figure
e nel rappresentare piu' personaggi.
Sull'inserimento di testi o fumetti praticamente non c'e' speranza:
la soluzione tipicamente e' di inserirli successivamente con un editor grafico...
Ma per le pose del corpo e le posizioni reciproche delle figure vi sono alcune indicazioni
per costruire un Prompt comprensibile per Stable Diffusion.
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Sicurezza | Crossed arms, hands on hips, standing tall, wide stance | Autorità, professionalità, "Problem solver". |
| Azione | Running towards camera, jumping mid-air, dynamic pose, fighting stance | Urgenza, velocità, dinamismo. |
| Riflessione | Looking away, hand on chin, sitting looking out window, profile view | Pensiero strategico, visione futura. |
| Interazione | Pointing at viewer, reaching out hand, holding a tablet | Coinvolgimento diretto, presentatore. |
| Rilassata | Lounging, sitting legs crossed, leaning against wall | Informalità, pausa caffè. |
| Dettaglio Mani | Typing on keyboard, holding a coffee cup, writing notes | Nota: Le mani sono difficili... |
| Termine Italiano | Prompt | Effetto su SDLX |
|---|---|---|
| Due Persone | Face to face, shaking hands, back to back, standing side by side | Collaborazione, confronto, accordo (Deal). |
| Team Piccolo | Group portrait, standing in a row, V-formation | "Il nostro team", chi siamo. |
| Folla | Crowded, sea of people, bustling street, blurred crowd background | Mostrare popolarità o caos. |
| Meeting | Sitting around a table, corporate meeting, brainstorming session | Contesto lavorativo. |
| Prospettiva | Over the shoulder shot | Vediamo quello che vede il protagonista (es. mentre parla a un altro). |
Un'indicazione molto forte che e' possibile inserire in un Prompt e' quello di utilizzare un LoRA. Un LoRA (Low-Rank Adaptation) e' un'estensione della rete neurale che viene addestrata con un numero limitato di immagini (eg. 100). Il risultato e' un file di piccole dimensioni (eg. 100MB-300MB per SDXL) che sbilancia i pesi del modello verso una direzione specifica. Questo permette di inserire nuove figure umane o stili differenti.
Dal punto di vista pratico un LoRA e' un file con suffisso .safetensors che e' possibile scaricare ed aggiungere facilmente al modello nel programma indicando la percentuale di peso. Poi per attivarlo bastera' inserire una parola chiave nel prompt.
Ecco come aggiungere il LoRA Pixel Art nel nostro esempio:
lora_repo = "nerijs/pixel-art-xl" lora_filename = "pixel-art-xl.safetensors" pipe.load_lora_weights(lora_repo, weight_name=lora_filename, adapter_name="pixel") pipe.set_adapters(["pixel"], adapter_weights=[1.0]) prompt = "pixel art, a blonde warrior with an armor made of silver metal, red glowing eyes, clean background, retro video game style"
Ed ecco alcuni risultati ottenuti con il LoRA Pixel Art:
Sono disponibili sul web centinaia di LoRA gia' pronti [NdA vanno scelti LoRA preparati per il modello o checkpoint in uso] ed e' possibile crearne di propri eseguendo il training su qualche decina di immagini ben preparate. In questo modo e' possibile personalizzare ed arricchire le immagini generate dal modello base. Alcuni LoRA piu' recenti sono stati preparati con immagini con alcune caratteristiche opposte permettendo di modificare il risultato in modo parametrico; ad esempio aumentando o diminuendo l'eta' del personaggio oppure modificando la muscolatura oppure evidenziando o meno i dettagli.
Ancora piu' potente e' l'utilizzo di ControlNet che impone vincoli spaziali alla generazione di immagini, OpenPose posiziona i manichini, Canny / Lineart rilevano i bordi, IP-Adapter consente di sostituire i volti generati casualmente con uno fisso. Ma descriverli supera nettamente gli scopi introduttivi di questa pagina: ci sono modi piu' facili di utilizzarli che scrivere un programma!
In questa paginetta abbiamo visto come sviluppare un programma Python che utilizza alcune delle piu' recenti librerie grafiche e modelli AI di Stable Diffusion XL per generare immagini in locale. Anche se a mio avviso e' molto utile per capire come funzionano i vari componenti, non e' l'unica alternativa possibile per lavorare con la grafica generazionale su MacOS.
E' sicuramente utile riportare una lista delle principali alternative a Stable Diffusion, divisa tra soluzioni Cloud (Managed) e Locali (On-Premise).
Questi sono servizi "pronti all'uso", che tipicamente richiedono un abbonamento. Non si ha accesso ai pesi del modello:
Questi sono software da installare su Mac/PC per far girare i modelli Open Source (SD 1.5, SDXL, FLUX.1):
Non sono applicazioni, ma modelli alternativi da caricare al posto di SDXL nelle app locali:
Stable Diffusion e' in continua evoluzione e sono molte le alternative anche al suo interno. In questa paginetta non abbiamo descritto ad esempio Pony-Diffusion che utilizza la stessa pipeline ma si basa su una galleria ricchissima di immagini (eg. manga), utilizza un tagging basato su Danbooru, ha una comprensione piu' limitata dei prompt e consente una piu' dettagliata impostazione delle figure.
I siti
Hugging face
e
Civitai
sono i principali riferimenti per scaricare modelli e LoRA.
Anche se l'elaborazione avviene poi in locale i modelli da utilizzare
vanno scaricati almeno la prima volta e questi sono i due siti principali.
E' disponibile una paginetta introduttiva sull'Utilizzo dell'AI su MacOS sempre rivolta all'esecuzione locale degli inference engine.
L'evoluzione, sopratutto in questo campo, e' fortissima.
I nuovi modelli di diffusione per la generazione grafica
sono basati sui Trasformers, la stessa utilizzata dali LLM
e si sta assistendo ad una convergenza con modelli
in grado di comprendere sempre piu' a fondo sorgenti differenti.
E' sempre importante utilizzare versioni di software aggiornate...
Le versioni di macOS sono riportate in questo utile ma
pestilenziale documento
che contiene anche informazioni sulle release di
Modelli di AI,
Chatbot,
Ollama,
...
Titolo: Stable Diffusion XL su MacOS
Livello: Avanzato
Data:
6 Gennaio 2026 🧹
Versione: 1.0.1 - 16 Gennaio 2026
Autore: mail [AT] meo.bogliolo.name