Torna al blog

Le foto dell’iPhone restano in locale, e Comma le trova

Anche i modelli girano in locale. Chiedi con parole tue, e Comma trova le foto in un indice locale.

IniziaLeggi la documentazione

Stai prenotando un’auto a noleggio online e il modulo chiede il numero e la scadenza della tua patente. La patente non è a portata di mano. Ricordi di averla fotografata l’anno scorso, fronte e retro, quando hai ricevuto quella nuova, ma quelle foto sono sepolte tra decine di migliaia di altre sul tuo iPhone. Vuoi chiedere a Comma con parole tue e ritrovare quelle due foto.

Questa guida mostra un modo per farlo: creare un indice delle tue foto con modelli locali e lasciare che Comma lo interroghi. È un esempio di configurazione su un Mac, non una funzione integrata di Comma.

La tua libreria resta in locale

Comma non ha bisogno di una copia delle tue foto. Il lavoro pesante, leggere il testo di ogni immagine e trasformare ogni foto in vettori, lo fanno modelli locali. Quello che riceve l’agente è il risultato di una ricerca: alcuni ID di foto, le loro date, il testo trovato al loro interno e, quando devi scegliere, un provino a contatto di miniature. Solo le foto che scegli alla fine vengono inviate nella chat.

Le foto stesse continuano a sincronizzarsi tramite iCloud; qui «locale» indica il riconoscimento del testo, i vettori e l’indice dopo l’esportazione. Se Comma usa un modello nel cloud, questi risultati di ricerca, e qualsiasi immagine che gli chiedi di guardare, vanno al fornitore di modelli che hai scelto. Per un documento come la patente, il testo riconosciuto contiene il numero e l’indirizzo. L’indice in sé non viene mai inviato da nessuna parte. Comma è open source, e puoi anche eseguirlo sulla tua macchina.

Crea l’indice delle foto

L’indice si aggancia al percorso che le tue foto fanno già. Sull’iPhone non cambia niente.

Le foto si sincronizzano dall’iPhone al Mac tramite Foto di iCloud e vengono esportate; poi modelli locali creano miniature, leggono il testo, calcolano due insiemi di vettori d’immagine e costruiscono un indice full-text 1 · Portare le foto sul Mac iPhone scatta foto come sempre Foto di iCloud le sincronizza con il Mac Foto sul Mac libreria su un disco esterno Esportare gli originali conserva data e luogo 2 · Elaborare con modelli locali Miniature i passaggi dopo leggono solo queste Testo Apple Vision Vettori d’immagine Chinese-CLIP Vettori d’immagine Qwen3-VL-Embedding Indice full-text SQLite la ricerca ordina con ogni insieme e unisce le due classifiche Le foto si sincronizzano dall’iPhone al Mac tramite Foto di iCloud e vengono esportate; poi modelli locali creano miniature, leggono il testo, calcolano due insiemi di vettori d’immagine e costruiscono un indice full-text 1 · Portare le foto sul Mac iPhone scatta foto come sempre Foto di iCloud le sincronizza con il Mac Foto sul Mac libreria su un disco esterno Esportare gli originali conserva data e luogo 2 · Elaborare con modelli locali Miniature i passaggi dopo leggono solo queste Testo Apple Vision Vettori d’immagine Chinese-CLIP Vettori d’immagine Qwen3-VL-Embedding Indice full-text SQLite la ricerca ordina con ogni insieme e unisce le due classifiche
Ogni passaggio dopo l’esportazione gira sul Mac.

La configurazione richiede tre passaggi:

  1. Porta le foto sul Mac. Sincronizza le foto dell’iPhone con il Mac tramite Foto di iCloud ed esporta ogni giorno le foto nuove in una cartella.

  2. Elaborale con modelli locali. Riconosci il testo in ogni immagine, poi trasforma l’immagine in vettori con Chinese-CLIP e Qwen3-VL-Embedding.

  3. Salvale in un indice locale. Conserva i risultati in un database locale, con un comando per cercarvi. In questo esempio il comando si chiama lpa.

Che cosa restituisce una ricerca

In locale, una ricerca è un comando. Una sola chiamata può contenere più formulazioni, e i modelli si caricano una volta sola. L’agente trasforma espressioni come «l’anno scorso» in un intervallo di date.

sh
lpa search "driver license" "driver's license" "驾照" \
  --from 2025-01-01 --to 2026-01-01 --prefer text --json -n 9

Ogni risultato indica che tipo di prova c’è dietro:

EtichettaSignificato
Testo trovatoOgni parola è stata trovata nel testo dell’immagine.
PossibileL’immagine sembra simile. Le cose simili si confondono facilmente.
Bassa affidabilitàCompare solo quando non c’è niente di meglio.

--prefer text mette prima le corrispondenze di testo, adatte a documenti, tessere e screenshot. --prefer picture mette prima le immagini simili, adatte a un gatto o a una spiaggia. Le foto quasi identiche scattate a pochi minuti di distanza occupano un solo posto nella lista, e le altre restano raggruppate sotto.

Una chat di Comma: alla domanda sulla password del Wi-Fi di una pensione al mare, Comma legge il nome della rete e la password da un bigliettino in una foto della camera e invia la foto.
Corrispondenza di testo: il nome della rete e la password vengono dalle parole sul biglietto nella foto. La foto è stata generata per questo esempio.
Una chat di Comma: alla richiesta di foto di un gatto sul davanzale, Comma restituisce tre foto del gatto su un davanzale.
Corrispondenza d’immagine: niente in queste foto dice «gatto» o «davanzale»; sono i vettori d’immagine a trovarle.

Quando i primi risultati sono incerti, l’agente non tira a indovinare. Riunisce le miniature delle candidate in un foglio numerato, al massimo nove, e ti chiede di scegliere.

Un provino a contatto numerato tre per tre: 1 e 2 sono fronte e retro di una patente fittizia, 3 e 4 sono biglietti del Wi-Fi e il resto sono candidate a bassa affidabilità.
Un provino a contatto di esempio; la patente è una tessera fittizia. 1 e 2 sono corrispondenze di testo per fronte e retro, 3 e 4 sembrano tessere e il resto sono candidate a bassa affidabilità. Rispondi «1 e 2» e l’agente invia entrambi i lati della patente.

Il modo di combinare i due insiemi di vettori è stato fissato calibrando su una libreria completa di circa 50.000 foto. Con il solo Qwen3-VL-Embedding, le risposte giuste scelte da una persona finivano più in basso che con il solo Chinese-CLIP. Unendo le due classifiche, ogni elemento controllato è andato almeno altrettanto bene che con uno dei due modelli da solo. Anche «Possibile» viene assegnato solo quando la somiglianza di entrambi i modelli supera la soglia: in una query di prova, le foto segnate come «Possibile» sono scese da 4.970 a 4. Il prezzo è che una ricerca richiede da 3,5 a 6 secondi invece di circa 3.

Questo esempio gira su un MacBook Air con 16 GB di memoria, con la versione 2B di Qwen3-VL-Embedding. Su una macchina più potente puoi usare modelli Qwen più grandi:

  • Un modello di vettori più grande. Sostituisci Qwen3-VL-Embedding-2B con Qwen3-VL-Embedding-8B. Dopo il cambio, i vettori di tutte le foto vanno ricalcolati con il nuovo modello.

  • Descrizioni e tag per ogni foto. Esegui anche Qwen3-VL-4B-Instruct o Qwen3-VL-8B-Instruct per scrivere una descrizione di una riga e alcuni tag per ogni foto, e salvali nell’indice di testo. Su un MacBook Pro con 24 GB di memoria, per esempio, il modello 8B gira con quantizzazione a 8 bit. I tag servono per una prima scrematura; non è garantito che siano corretti.

E l’inglese? Chinese-CLIP è stato addestrato soprattutto su immagini e testi in cinese, quindi non è affidabile per le query in inglese. Le altre due parti non ne risentono: il riconoscimento del testo legge sia il cinese sia l’inglese, e Qwen3-VL-Embedding supporta molte lingue. Perciò metti formulazioni cinesi e inglesi nella stessa ricerca, come fa il comando qui sopra; puoi scriverlo in uno Skill. Se la tua libreria e le tue domande sono soprattutto in inglese, puoi anche sostituire Chinese-CLIP con il CLIP originale, e anche in questo caso i vettori vanno ricalcolati.

Trova familiari e amici

Foto raggruppa già i volti della stessa persona. L’indice usa direttamente questi gruppi e non fa un proprio riconoscimento facciale.

  1. Prima dai un nome alle persone. La prima volta, l’agente prende alcuni gruppi di foto, li numera e ti chiede chi sono. Solo quando rispondi «la 3 è la mamma» se lo ricorda. Un gruppo che non hai confermato non viene trattato come nessuno.

  2. Cerca per persona. Da lì in poi, quando nomini qualcuno, la ricerca guarda solo le foto in cui compare quella persona. I nomi si sommano: nomina due persone e otterrai solo le foto in cui ci sono entrambe, cioè le vostre foto insieme.

  3. Combina con altre condizioni. Un nome può andare insieme a ciò che c’è nell’immagine e al periodo, per esempio «foto mie e della mamma al mare l’anno scorso»:

sh
lpa search "beach" --person Me --person Mom \
  --from 2025-01-01 --to 2026-01-01 --prefer picture --json -n 9

Se un nome non è stato confermato, o se due persone hanno lo stesso nome, la ricerca lo dice invece di tirare a indovinare. Un nome sbagliato si può correggere, e ogni correzione si può annullare.

Come si trovano i video

I video si cercano separatamente dalle foto. Una ricerca normale guarda solo le foto. Se vuoi, per esempio, il video di tuo figlio che spegne le candeline di compleanno, di’ a Comma che cerchi un video, e lui aggiunge --source video alla ricerca:

sh
lpa search "blowing out candles" "birthday cake" --source video --json -n 9

Dietro ci sono tre passaggi:

  1. Estrarre fotogrammi. Il video in sé non entra mai in un modello. L’indicizzatore estrae un fotogramma ogni 5 secondi, al massimo 12 per video.

  2. Cercare per fotogramma. I fotogrammi passano per la stessa elaborazione delle foto: riconoscimento del testo e i due insiemi di vettori. Una ricerca confronta questi fotogrammi; quando uno corrisponde, viene trovato l’intero video, che occupa un solo posto nei risultati.

  3. Inviare il video. Dopo che hai scelto, l’agente lo invia con lpa video.

Una chat di Comma: alla richiesta di un video di zattere di bambù a Yangshuo, Comma restituisce un video di 12 secondi di zattere che scivolano giù da una piccola diga.
Una ricerca di video: i fotogrammi che corrispondono appartengono a un solo video, quindi il video è un unico risultato.

Per ora guarda solo l’immagine, non il suono. Ciò che viene detto in un video non si può ancora cercare, e le persone in un video non vengono ancora riconosciute. Il numero di fotogrammi è limitato, quindi qualcosa che passa in un lampo in un video lungo potrebbe non essere trovato.

Com’è fatto LocalPhotoAgent

Il lpa di questa guida viene da LocalPhotoAgent, un indicizzatore che abbiamo scritto noi e che renderemo open source. La parte di indicizzazione è descritta sopra; altri due punti:

  • Si può fermare in qualsiasi momento. Ogni passaggio di ogni foto viene registrato a parte. Se lo fermi a metà, la volta dopo riprende; se cambi un’impostazione, viene rifatto solo il passaggio interessato. Mentre lavora tiene d’occhio memoria, temperatura e spazio su disco, e si mette in pausa quando uno di questi supera il limite.

  • Dà all’agente alcuni comandi. lpa search cerca, lpa sheet crea un provino a contatto, lpa preview invia foto e lpa video invia video. Quando l’agente cerca foto, li chiama in quest’ordine:

L’agente di Comma esegue tramite il Connector lpa search, poi lpa sheet se ha dubbi, poi lpa preview o lpa video; solo il provino e l’invio leggono il disco esterno Agente di Comma esegue comandi tramite il Connector lpa search cerca solo nel database lpa sheet crea un provino se ha dubbi lpa preview / video invia la foto o il video Disco esterno miniature e originali, letti solo per un provino o un invio L’agente di Comma esegue tramite il Connector lpa search, poi lpa sheet se ha dubbi, poi lpa preview o lpa video; solo il provino e l’invio leggono il disco esterno Agente di Comma esegue comandi tramite il Connector lpa search cerca solo nel database lpa sheet crea un provino se ha dubbi lpa preview / video invia la foto o il video Disco esterno miniature e originali, letti solo per un provino o un invio

Collega Comma

Si presuppone che LocalPhotoAgent funzioni già sul tuo Mac. Il collegamento richiede quattro passaggi:

  1. Aggiungi un dispositivo. In Comma, vai in «Settings > Devices» e fai clic su «Add device» per ottenere un comando di installazione.

  2. Esegui il comando. Eseguilo nel Terminale del Mac che contiene la libreria, per installare il Comma Connector.

  3. Attiva l’accesso. Un nuovo dispositivo parte da «Off». Cambialo in «Full», così l’agente può eseguire lpa.

  4. Scrivi uno Skill. Di’ all’agente di cercare prima, di inviare un provino a contatto quando non è sicuro e di inviare le foto solo dopo che hai scelto. Puoi anche chiedere semplicemente a Comma di «creare uno Skill».

Da lì in poi basta chiedere come in qualsiasi chat: «Trova le foto della mia patente dell’anno scorso, fronte e retro.»

Una chat di Comma: alla richiesta delle foto della patente dell’anno scorso, fronte e retro, Comma invia due foto di una patente fittizia.
La domanda dell’inizio di questa guida, con la sua risposta. La patente è una tessera fittizia.

Fiducia e limiti

L’indice legge soltanto gli originali. Non li sposta, non li modifica e non li elimina mai. Una ricerca non tocca affatto il disco esterno; solo la creazione di un provino a contatto e l’invio di una foto lo leggono. Spostare o eliminare foto è fuori da questa configurazione. Tieni però presente che con l’accesso «Full» l’agente può eseguire su questo Mac anche comandi diversi da lpa.

Un testo trovato significa solo che le parole sono state trovate, non che sia la foto che vuoi. «Possibile» è solo una candidata. Quando Comma segna una richiesta come completata, controlla le foto che ti ha inviato.

La prima volta potresti dire: «Trova le foto della mia patente dell’anno scorso. Mostrami prima il provino a contatto e non inviare, spostare o eliminare niente.»

Try Comma, Now.

Inizia