Files
pi-imgen/docs/RUNBOOK.md
T

6.1 KiB

Run-book — installazione e collaudo sul Mac

Ordine deliberato: prima si misura, poi si installa. La fase 1 può dire che un modello non è adatto a questa macchina, e allora la configurazione cambia — meglio scoprirlo prima di scrivere pi-imgen.json.

Tutto è verificato su Linux tranne ciò che richiede hardware Apple. Quello che segue è esattamente ciò che non ho potuto misurare io.


0 · Prerequisiti (10 min)

uname -m                      # deve dire arm64
sw_vers -productVersion       # 13+ obbligatorio, 14+ per lo scontorno in un passaggio
node -v                       # >= 22.3  <-- pi-ai usa process.getBuiltinModule

⚠️ Node < 22.3 è la trappola più probabile. Su Node 20 ogni modulo che arriva a pi-ai fallisce con process.getBuiltinModule is not a function. Esiste un dist-tag legacy-node20 ma è fermo alla 0.74.2 contro la 0.84.x attuale: meglio aggiornare Node.

brew install node draw-things-cli typst
brew install ghostscript poppler qpdf     # opzionali: pre-flight di stampa

draw-things-cli è in Homebrew Core: niente tap personalizzati, niente --HEAD.


1 · Lo spike — il vero cancello (un pomeriggio)

Nessuno di questi numeri esiste pubblicamente per un M4 base. Da fare prima dell'installazione vera e propria.

1a. Il server caldo funziona davvero?

La cosa più importante di tutta la lista. Ho verificato che draw-things-cli --remote parli con gRPCServerCLI leggendo il sorgente di entrambi i lati, mai eseguendoli.

# scaricare il server (non è su Homebrew: è un asset di release)
curl -fL -o gRPCServerCLI-macOS \
  https://github.com/drawthingsai/draw-things-community/releases/download/v1.20260716.0/gRPCServerCLI-macOS
chmod +x gRPCServerCLI-macOS

./gRPCServerCLI-macOS /Volumes/<disco>/ai-models --no-tls --port 7859 --cpu-offload &

# la STESSA generazione due volte, cronometrata
time draw-things-cli generate --model z_image_turbo_1.0_i8x.ckpt \
  --prompt "autumn chestnut harvest, warm evening light, painterly" \
  --negative-prompt "text, letters, words, typography, watermark, signature" \
  --width 768 --height 1088 --steps 8 --seed 42 \
  --models-dir /Volumes/<disco>/ai-models --disable-preview \
  --remote --remote-url 127.0.0.1 --remote-port 7859 --no-remote-tls \
  --output /tmp/a.png

Se la seconda esecuzione è molto più rapida, il modello è rimasto caldo e tutto il disegno del ciclo bozza→finale regge. Se invece i tempi sono uguali, il server non sta servendo: si ripiega su draw-things-cli da solo (ogni generazione ricarica il modello) e le bozze diventano lente ma il resto funziona.

⚠️ --output è obbligatorio: senza, la CLI disegna un'anteprima nel terminale e non scrive alcun file. --disable-preview idem.

1b. Gli altri quattro numeri

Cosa Come Perché conta
_i8x vs _q5p stessa generazione, due modelli _i8x usa la Neural Engine dell'M4: atteso ~2x
Tiling VAE on/off a 1024² --config-json '{"tiledDecoding":true,...}' vs false, guardando la memoria in Activity Monitor 14.03 GB → 7.18 GB di picco: è la differenza fra funzionare e andare in swap
Ingrandimento a A3/300dpi il modello upscale su un 1024px Obbligatorio per la stampa: 1024px su A3 sono ~62 dpi
img2img va in crash? una generazione con --image Bug noto #121 sui Mac da 16 GB. Se si presenta, si perde solo la modifica generativa

Annotare i tempi: servono a scegliere i passi di default.


2 · Installazione

pi install git:git.sal.giize.com/mozempk/pi-imgen
cd ~/.pi/agent/git/git.sal.giize.com/mozempk/pi-imgen
./install.sh

⚠️ Da verificare al primo colpo: che pi install git: accetti un host diverso da GitHub — tutti gli esempi documentati sono GitHub. Se non risolve, il ripiego è clonare a mano e aggiungere il percorso a extensions in ~/.pi/agent/settings.json: stesso risultato, un passaggio in più.

install.sh è ri-eseguibile: chiede dove tenere i modelli (disco esterno) e dove salvare i file, scarica i caratteri, e unisce in ~/.pi/agent/pi-imgen.json senza sovrascrivere i preset.

Il direttore artistico ha bisogno di un modello

Registrare opencode Go come provider in pi — è OpenAI-compatibile:

base URL : https://opencode.ai/zen/go/v1
API key  : $OPENCODE_API_KEY

Poi in pi-imgen.json: "directorProvider" e "directorModel".

Senza questo il direttore non ha su cosa girare. (Verificato: quell'abbonamento non contiene modelli di immagini — può essere solo il cervello, mai il pennello.)


3 · Collaudo

pi
> /doctor

/doctor parla italiano e dice cosa manca con il rimedio: disco non montato, binario assente, modello mancante, caratteri non scaricati.

Poi la prova vera:

> /poster

Un evento reale in arrivo. Il collaudo è lui che produce una locandina da solo, non una suite di test che passa.

Sul terminale: le anteprime inline richiedono iTerm2, Ghostty, WezTerm o Warp. Terminal.app di Apple non mostra immagini — i file però si aprono nel Finder comunque.

Prima di portarla in tipografia

pdfinfo -box poster.pdf     # TrimBox presente, 303x426 mm per A3+3mm
pdffonts poster.pdf         # ogni riga: emb=yes   (sub=yes è normale)

Consegnare un PDF singolo, 3 mm di abbondanza, RGB, senza crocini: va bene per la grande maggioranza delle copisterie. I crocini si attivano da configurazione solo se la tipografia li chiede (i servizi online li rifiutano).


Se qualcosa va storto

Sintomo Causa
process.getBuiltinModule is not a function Node < 22.3 → §0
Nessun file prodotto, nessun errore Manca --output
"disco dei modelli non montato" Volume esterno assente — messaggio previsto, non un bug
Crash su img2img Bug #121 → /poster e /logo funzionano lo stesso
Scontorno non disponibile Serve macOS 14; su 13 ripiega su rembg (non il modello di default: è CC BY-NC)
Bozze lente quanto il finale Il server caldo non sta servendo → §1a

Dettagli e assunzioni non verificate: platform-notes.md.