Voltar ao blog

Suas fotos do iPhone continuam locais, e o Comma as encontra

Os modelos também rodam localmente. Pergunte com suas palavras, e o Comma encontra as fotos em um índice local.

ComeçarLer a documentação

Você está reservando um carro de aluguel pela internet, e o formulário pede o número e a validade da sua carteira de motorista. A carteira não está por perto. Você lembra que tirou fotos dela no ano passado, frente e verso, quando recebeu a nova, mas elas estão perdidas entre dezenas de milhares de fotos no seu iPhone. Você quer pedir ao Comma com suas palavras e recuperar essas duas fotos.

Este guia mostra um jeito de montar isso: criar um índice das suas fotos com modelos locais e deixar o Comma pesquisar nele. É um exemplo de configuração em um Mac, não um recurso nativo do Comma.

Sua fototeca fica local

O Comma não precisa de uma cópia das suas fotos. O trabalho pesado, ler o texto de cada imagem e transformar cada foto em vetores, é feito por modelos locais. O que o agente recebe é o resultado de uma busca: alguns IDs de fotos, as datas delas, o texto encontrado nelas e, quando você precisa escolher, uma folha de contatos com miniaturas. Só as fotos que você escolhe no final vão para a conversa.

As fotos em si continuam sincronizando pelo iCloud; “local” aqui quer dizer o reconhecimento de texto, os vetores e o índice depois da exportação. Se o Comma usa um modelo na nuvem, esses resultados de busca, e qualquer imagem que você peça para ele olhar, vão para o provedor de modelos que você escolheu. Num documento como a carteira de motorista, o texto reconhecido inclui o número e o endereço. O índice em si nunca é enviado para lugar nenhum. O Comma é de código aberto, e você também pode rodá-lo na sua própria máquina.

Monte o índice de fotos

O índice se conecta ao caminho que suas fotos já percorrem. Nada muda no iPhone.

As fotos são sincronizadas do iPhone para o Mac pelo Fotos do iCloud e exportadas; depois, modelos locais criam miniaturas, leem o texto, calculam dois conjuntos de vetores de imagem e montam um índice de texto completo 1 · Trazer as fotos para o Mac iPhone tira fotos como sempre Fotos do iCloud sincroniza com o Mac Fotos no Mac fototeca num disco externo Exportar originais guarda data e local 2 · Processar com modelos locais Miniaturas os passos seguintes só leem isto Texto Apple Vision Vetores de imagem Chinese-CLIP Vetores de imagem Qwen3-VL-Embedding Índice de texto completo SQLite a busca classifica com cada conjunto e junta as duas listas As fotos são sincronizadas do iPhone para o Mac pelo Fotos do iCloud e exportadas; depois, modelos locais criam miniaturas, leem o texto, calculam dois conjuntos de vetores de imagem e montam um índice de texto completo 1 · Trazer as fotos para o Mac iPhone tira fotos como sempre Fotos do iCloud sincroniza com o Mac Fotos no Mac fototeca num disco externo Exportar originais guarda data e local 2 · Processar com modelos locais Miniaturas os passos seguintes só leem isto Texto Apple Vision Vetores de imagem Chinese-CLIP Vetores de imagem Qwen3-VL-Embedding Índice de texto completo SQLite a busca classifica com cada conjunto e junta as duas listas
Todos os passos depois da exportação rodam no Mac.

A montagem tem três passos:

  1. Traga as fotos para o Mac. Sincronize as fotos do iPhone com o Mac pelo Fotos do iCloud e exporte as fotos novas para uma pasta todos os dias.

  2. Processe com modelos locais. Reconheça o texto de cada imagem e transforme a imagem em vetores com Chinese-CLIP e Qwen3-VL-Embedding.

  3. Guarde num índice local. Armazene os resultados num banco de dados local, com um comando para pesquisar nele. Neste exemplo, o comando se chama lpa.

O que uma busca retorna

Localmente, uma busca é um comando. Uma única chamada pode levar várias formulações, e os modelos carregam uma vez só. O agente transforma expressões como “ano passado” num intervalo de datas.

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

Cada resultado mostra que tipo de evidência está por trás dele:

MarcaçãoSignificado
Texto encontradoTodas as palavras aparecem no texto da imagem.
PossívelA imagem parece semelhante. Coisas parecidas se confundem fácil.
Baixa confiançaSó aparece quando não há nada melhor.

--prefer text coloca os resultados de texto primeiro, o que serve para documentos, cartões e capturas de tela. --prefer picture coloca primeiro as imagens parecidas, o que serve para um gato ou uma praia. Fotos quase idênticas tiradas em poucos minutos ocupam um único lugar na lista, e as outras ficam agrupadas abaixo dela.

Uma conversa no Comma: ao perguntar a senha do Wi-Fi de uma pousada na praia, o Comma lê o nome da rede e a senha num cartãozinho de uma foto do quarto e envia a foto.
Resultado de texto: o nome da rede e a senha vêm das palavras do cartão na foto. A foto foi gerada para este exemplo.
Uma conversa no Comma: ao pedir fotos de um gato no parapeito da janela, o Comma retorna três fotos do gato num parapeito.
Resultado de imagem: nada nessas fotos diz "gato" ou "parapeito"; os vetores de imagem é que as encontram.

Quando os primeiros resultados são incertos, o agente não chuta. Ele junta as miniaturas dos candidatos numa folha numerada, no máximo nove, e pede para você escolher.

Uma folha de contatos numerada de três por três: 1 e 2 são a frente e o verso de uma carteira de motorista de amostra, 3 e 4 são cartões de Wi-Fi, e o resto são candidatos de baixa confiança.
Uma folha de contatos de exemplo; a carteira é um cartão de amostra. 1 e 2 são resultados de texto da frente e do verso, 3 e 4 parecem cartões, e o resto são candidatos de baixa confiança. Responda "1 e 2" e o agente envia os dois lados da carteira.

O jeito de combinar os dois conjuntos de vetores foi definido calibrando numa fototeca completa de cerca de 50.000 fotos. Com o Qwen3-VL-Embedding sozinho, as respostas certas escolhidas por uma pessoa ficavam mais abaixo do que com o Chinese-CLIP sozinho. Com as duas classificações combinadas, cada item verificado se saiu pelo menos tão bem quanto com qualquer um dos modelos sozinho. “Possível” também só é marcado quando a similaridade dos dois modelos passa do limite: numa consulta de teste, as fotos marcadas como “Possível” caíram de 4.970 para 4. O custo é que uma busca leva de 3,5 a 6 segundos em vez de cerca de 3.

Este exemplo roda num MacBook Air com 16 GB de memória, com a versão 2B do Qwen3-VL-Embedding. Numa máquina mais potente, dá para usar modelos Qwen maiores:

  • Um modelo de vetores maior. Troque o Qwen3-VL-Embedding-2B pelo Qwen3-VL-Embedding-8B. Depois da troca, os vetores de todas as fotos precisam ser calculados de novo com o novo modelo.

  • Descrições e tags para cada foto. Rode também o Qwen3-VL-4B-Instruct ou o Qwen3-VL-8B-Instruct para escrever uma descrição de uma linha e algumas tags para cada foto, e guarde-as no índice de texto. Num MacBook Pro com 24 GB de memória, por exemplo, o modelo 8B roda com quantização de 8 bits. As tags servem para uma triagem inicial; não há garantia de que estejam certas.

E o inglês? O Chinese-CLIP foi treinado principalmente com imagens e legendas em chinês, então não é confiável para consultas em inglês. As outras duas partes não são afetadas: o reconhecimento de texto lê chinês e inglês, e o Qwen3-VL-Embedding suporta muitos idiomas. Por isso, coloque formulações em chinês e em inglês na mesma busca, como faz o comando acima; dá para registrar isso num Skill. Se a sua fototeca e as suas perguntas são principalmente em inglês, você também pode trocar o Chinese-CLIP pelo CLIP original, o que de novo exige recalcular os vetores.

Encontre família e amigos

O Fotos já agrupa os rostos de uma mesma pessoa. O índice usa esses grupos diretamente e não faz reconhecimento facial próprio.

  1. Primeiro, dê nome às pessoas. Na primeira vez, o agente pega alguns lotes de fotos desses grupos, numera e pergunta quem é. Só quando você responde “a 3 é a mamãe” ele guarda. Um grupo que você não confirmou não é tratado como ninguém.

  2. Busque por pessoa. Depois disso, quando você cita um nome, a busca olha só as fotos em que essa pessoa aparece. Os nomes se somam: cite duas pessoas e você recebe só as fotos com as duas, ou seja, as fotos de vocês juntos.

  3. Combine com outras condições. Um nome pode ir junto com o que aparece na imagem e com a data, como “fotos minhas com a mamãe na praia no ano passado”:

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

Se um nome não foi confirmado, ou se duas pessoas têm o mesmo nome, a busca avisa em vez de chutar. Um nome errado pode ser corrigido, e cada correção pode ser desfeita.

Como os vídeos são encontrados

Vídeos são pesquisados separadamente das fotos. Uma busca padrão olha só fotos. Se você quer, por exemplo, o vídeo do seu filho apagando as velas de aniversário, diga ao Comma que está procurando um vídeo, e ele adiciona --source video à busca:

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

Por trás há três passos:

  1. Extrair quadros. O vídeo em si nunca entra num modelo. O indexador tira um quadro a cada 5 segundos, no máximo 12 por vídeo.

  2. Buscar por quadro. Os quadros passam pelo mesmo processamento das fotos: reconhecimento de texto e os dois conjuntos de vetores. Uma busca compara esses quadros; quando um bate, o vídeo inteiro é encontrado e ocupa um único lugar nos resultados.

  3. Enviar o vídeo. Depois que você escolhe, o agente envia com lpa video.

Uma conversa no Comma: ao pedir um vídeo de jangadas de bambu em Yangshuo, o Comma retorna um vídeo de 12 segundos de jangadas descendo uma pequena barragem.
Busca de vídeo: os quadros que batem pertencem a um único vídeo, então o vídeo é um único resultado.

Por enquanto ele olha só a imagem, não o som. O que é dito num vídeo ainda não pode ser pesquisado, e as pessoas num vídeo ainda não são reconhecidas. O número de quadros tem limite, então algo que passa rápido num vídeo longo pode não ser encontrado.

Como o LocalPhotoAgent é feito

O lpa deste guia vem do LocalPhotoAgent, um indexador que nós mesmos escrevemos e que vamos abrir como código aberto. A parte de indexação já foi explicada; mais dois pontos:

  • Ele pode parar a qualquer momento. Cada passo de cada foto é registrado separadamente. Se parar no meio, continua da próxima vez; se você muda uma configuração, só o passo afetado roda de novo. Enquanto trabalha, ele acompanha memória, temperatura e espaço em disco, e pausa quando algum passa do limite.

  • Ele dá ao agente alguns comandos. lpa search pesquisa, lpa sheet cria uma folha de contatos, lpa preview envia fotos e lpa video envia vídeos. Quando o agente procura fotos, ele os chama nesta ordem:

O agente do Comma roda pelo Connector lpa search, depois lpa sheet quando há dúvida, e então lpa preview ou lpa video; só a folha e o envio leem o disco externo Agente do Comma roda comandos pelo Connector lpa search pesquisa só o banco de dados lpa sheet cria uma folha quando há dúvida lpa preview / video envia a foto ou o vídeo Disco externo miniaturas e originais, lidos só para uma folha ou um envio O agente do Comma roda pelo Connector lpa search, depois lpa sheet quando há dúvida, e então lpa preview ou lpa video; só a folha e o envio leem o disco externo Agente do Comma roda comandos pelo Connector lpa search pesquisa só o banco de dados lpa sheet cria uma folha quando há dúvida lpa preview / video envia a foto ou o vídeo Disco externo miniaturas e originais, lidos só para uma folha ou um envio

Conecte o Comma

Isto supõe que o LocalPhotoAgent já funciona no seu Mac. A conexão tem quatro passos:

  1. Adicione um dispositivo. No Comma, vá em Settings > Devices e clique em Add device para receber um comando de instalação.

  2. Rode o comando. Rode-o no Terminal do Mac que guarda a fototeca, para instalar o Comma Connector.

  3. Libere o acesso. Um dispositivo novo começa em Off. Mude para Full para que o agente possa rodar lpa.

  4. Escreva um Skill. Diga ao agente para pesquisar primeiro, enviar uma folha de contatos quando estiver em dúvida e enviar as fotos só depois que você escolher. Você pode simplesmente pedir ao Comma para “criar um Skill”.

A partir daí, é só perguntar como em qualquer conversa: “Encontre as fotos da minha carteira de motorista do ano passado, frente e verso.”

Uma conversa no Comma: ao pedir as fotos da carteira de motorista do ano passado, frente e verso, o Comma envia duas fotos de uma carteira de amostra.
A pergunta do começo deste guia, respondida. A carteira é um cartão de amostra.

Confiança e limites

O índice só lê os originais. Ele nunca os move, edita ou apaga. Uma busca não toca no disco externo; só a criação de uma folha de contatos e o envio de uma foto leem dele. Mover ou apagar fotos está fora desta configuração. Mas atenção: com acesso Full, o agente pode rodar neste Mac outros comandos além de lpa.

Texto encontrado só significa que as palavras foram achadas, não que é a foto que você quer. “Possível” é só um candidato. Quando o Comma marcar um pedido como concluído, confira as fotos que ele enviou.

Na primeira vez, você pode dizer: “Encontre as fotos da minha carteira de motorista do ano passado. Me mostre primeiro a folha de contatos e não envie, mova nem apague nada.”

Try Comma, Now.

Começar