[Subagent Context] You are running as a subagent (depth 1/1). Results auto-annou
nessun riassunto — scrivilo qui o lascia un file .md nella cartella session_notes.
Fatte tutt'e due. Ecco la cifra prima di tutto, perché è quella che blocca la decisione.
1) Quanto costa — misurato, non stimato
Ho scritto dna/costo_scala.py, che legge dieci poster veri fra i 3.426 puliti e somma quello che OpenRouter dichiara per ogni chiamata. Serviva farlo davvero: il costo di una lettura multimodale dipende da quanti riquadri d'immagine conta il modello, e i ritagli puliti non sono le grezze su cui era stato misurato il numero vecchio.
| modello | google/gemini-3.1-flash-lite (OpenRouter) |
| un poster | $0,00137 — min 0,00131 · max 0,00147 · 10 letture su 10 riuscite |
| tutti e 3.426 | $4,69 |
| tempo | ~1 h 20 con 4 letture in parallelo · ~40 min con 12 |
Se poi si volesse anche generare una prova per ciascuno: a $0,045 l'immagine (misurati sul saldo fal.ai) sono $154 in più, circa 4 ore di generazione e altre 2 ore e mezza di CLIP per misurarle.
La divisione utile è questa: la lettura costa cinque dollari, la generazione centocinquanta. Ed è la lettura quella che serve — riempie stile, soggetto e colori di 3.426 poster, cioè i filtri che oggi in galleria sono vuoti. Non ho lanciato niente: aspetto la parola di Ettore.
2) La stanza DNA c'è
https://mini-it12.tailc565d5.ts.net:8469/?stanza=dna (in locale http://127.0.0.1:8800/?stanza=dna) — stesso indirizzo dell'app, quinta stanza. Il tailscale serve c'era già, non serviva esporre niente.
Tre viste: i confronti (originale accanto al rifatto, col punteggio tradotto in parole — «lo stesso poster, rifatto» / «parlano la stessa lingua» / «non c'entra niente» — filtro per famiglia e ordine per punteggio); la scheda di un poster (le due immagini grandi, le tre versioni in fila che si cambiano con un tocco, poi soggetto, stile, tecnica, i colori mostrati davvero, composizione, tipografia, cosa evitare, e in fondo il prompt col bottone che lo copia); gli otto modelli per famiglia, col prompt col buco copiabile e i poster di quella famiglia dentro. Si apre sul v2; v1 e v3 a un tocco.
Non ho riscritto niente dell'app: è un blocco in coda, sola lettura come il resto, e i file del DNA stanno in un dizionario loro — se finissero in FILE la stanza Stato segnalerebbe un DNA mai lanciato come guasto della raccolta.
Provato con un browser vero a 390 e 1280 px: 62 verdi, 0 rosse. La prova che conta misura i rettangoli delle due figure e pretende che restino affiancate a 390 px (170 px l'una) — è lì che queste pagine si rompono, e quando si rompono il confronto sparisce mentre la pagina resta valida. Un dettaglio che ha richiesto un passo in più: un'immagine generata pesa 730 KB e una pagina ne mostra 104, cioè 76 MB sul telefono; le miniature da 27 KB le fa passo8_miniature.py, perché l'app è stdlib pura e ridimensionare un JPEG vuole Pillow.
Due cose da sapere: gli originali mostrati sono quelli che il DNA ha davvero guardato, non i ritagli migliori di oggi — per questo in qualche coppia c'è ancora il fondo bianco dello studio e la «tavolozza» di quelle righe è alta; un punteggio scritto sotto un'immagine diversa da quella misurata parlerebbe di un'altra cosa. E la fascia in cima alla stanza dice che sono 52 su 3.426, col costo per allargare, così il numero sta davanti agli occhi quando serve decidere.
LEGGIMI, METODO, ACCESSI_E_PORTE e la tessera dell'Hub aggiornati; commit 4bb2fe7. Una cosa da segnalare: durante la pulizia ho cancellato per sbaglio sei screenshot dell'altro agente in _shots/ — erano sotto git e li ho ripristinati subito, e ho lasciato fuori dal commit i suoi file ancora in lavorazione.
Fatto tutti e tre i punti. Nessuna interfaccia toccata.
1. La cifra — $0,00140 a poster, $5,24 per tutti
Rimisurata adesso, non ripresa dalle schede. dna/costo_scala.py --quanti 10 pesca 10 poster veri fra i puliti, li legge davvero con google/gemini-3.1-flash-lite e somma quello che OpenRouter dichiara per ogni chiamata (usage.cost, dollari veri — la chiamata parte con usage: {include: true}, non è una stima sui token). Log salvato: ricerca-poster/_log_costo_scala.txt.
| un poster | $0,00140 — min $0,00133 · max $0,00148 · 0 fallite su 10 |
| tutti i puliti | $5,24 |
| tempo | 5,2 s a poster su un filo → ~1h25 con 4 fili · ~30 min con 12 |
Due correzioni che contano. I puliti sono 3.748, non 3.426: la misura precedente era stata presa mentre la pulizia stava ancora girando. Ora è finita (pulizia.json: 6.252 righe → 3.748 pulite, 2.479 rifiutate, 25 doppioni), nessun processo attivo, il numero è stabile. E il saldo OpenRouter non serve a misurare un lotto piccolo: /credits aggiorna in ritardo e ha segnato differenza $0,0000 a fronte di dieci letture davvero pagate. Vale usage.cost, non il saldo. Ho corretto METODO.md e LEGGIMI.md, che portavano i numeri vecchi.
Per confronto: generare una prova per ciascuno sarebbe $169 e ~4 ore, più ~2,5 h di CLIP. La lettura costa cinque dollari, la generazione centosettanta. Non ho lanciato niente sui 3.748 — aspetta Ettore.
2. I dati leggibili da fuori — dati/dna/FORMATO.md
Scritto sullo stampo di FORMATO_DATI.md: ogni file, ogni campo, chi lo scrive. La parte che serve davvero all'altro agente sono le trappole che si vedono solo aprendo i dati veri:
- `immagine_opera` è quella da mostrare, non `immagine` — il punteggio è misurato su quella. E 27 valori su 52 puntano dentro `_cache/ritagli/`: quella cartella sembra scarto e non lo è, svuotarla rompe metà delle coppie. Ho verificato che tutti e 52 i percorsi esistono su disco.
- `prompt.json` usa `versione`, `prompt_r2/r3` usano `ricetta` — stesso significato, nome diverso.
- `formato` è testo libero: nove valori per quattro formati (
VerticalVertical.verticalVertical, approx. 1:2 ratio…). Va normalizzato o il filtro esce con nove voci in tendina. Gli altri campi a voci chiuse sono puliti. - `opera_da` è nel codice ma non nei dati (0/52); `parole_giuste` è `null` quando non c'era testo (2 casi).
- *`generati/v.json` sono oggetti indicizzati per id**, non liste come tutto il resto.
- Sono 52 poster, non 3.748. Un'app che scrive "il DNA dei poster" sopra questi dati dice una cosa falsa.
Ci sono anche le soglie punteggio→parole (≥0,50 "lo stesso poster rifatto", ≥0,30 "parlano la stessa lingua", <0,15 "non c'entra niente") e il perché delle miniature: 104 immagini intere in una pagina sono 76 MB, dal telefono non si apre.
3. La pagina del metodo — dna/METODO.md, era già scritta
Risponde già alle tue due domande. Cosa ha migliorato dal primo al secondo giro: il prompt in inglese (ma le parole stampate sul poster restano nella loro lingua), la riga del testo spostata in cima e ripetuta in fondo come vincolo — da 3 titoli giusti su 30 a 27 su 30 — e tre colori col ruolo scritto invece di cinque nudi, che ha portato la distanza palette da 16,5 a 12,5.
Perché il terzo non ha aggiunto niente: delle sue due morse una serve e una no. I negativi che tengono ferma la tecnica servono (tipografico +0,049, botanico +0,032, illustrato +0,019). Dare le parole "in ordine e chiuse" no: stessi 27 titoli giusti su 30, e le righe piccole inventate sono passate da 3 a 5 — insistere sul testo invita il generatore a riempire di testo finto. Sta scritto lì proprio perché non la riprovi qualcun altro.
C'è anche la sezione sui limiti (la somiglianza è di famiglia, non di disegno; le righe piccole sono sempre finte; la serigrafia fluorescente non si riproduce) e il racconto dei due metri che hanno mentito.
Commit 263efb9, solo i miei quattro file — il resto della cartella ha lavoro altrui in corso e non l'ho toccato.