Volver al blog

Tus fotos del iPhone se quedan en local, y Comma las encuentra

Los modelos también se ejecutan en local. Pregunta con tus propias palabras y Comma encuentra las fotos en un índice local.

EmpezarLeer la documentación

Estás reservando un auto de alquiler por internet y el formulario pide el número y la fecha de vencimiento de tu licencia de conducir. La licencia no está a mano. Recuerdas que el año pasado, cuando te dieron la nueva, le tomaste fotos por delante y por detrás, pero están perdidas entre decenas de miles de fotos en tu iPhone. Quieres pedírselo a Comma con tus propias palabras y recuperar esas dos fotos.

Esta guía muestra una forma de montarlo: crear un índice de tus fotos con modelos locales y dejar que Comma lo consulte. Es un ejemplo de configuración en un Mac, no una función integrada de Comma.

Tu fototeca se queda en local

Comma no necesita una copia de tus fotos. El trabajo pesado, leer el texto de cada imagen y convertir cada foto en vectores, lo hacen modelos locales. Lo que recibe el agente es el resultado de una búsqueda: unos cuantos ID de fotos, sus fechas, el texto encontrado en ellas y, cuando tienes que elegir, una hoja de contactos con miniaturas. Solo las fotos que eliges al final se envían al chat.

Las fotos en sí se siguen sincronizando a través de iCloud; aquí «local» se refiere al reconocimiento de texto, los vectores y el índice después de la exportación. Si Comma usa un modelo en la nube, estos resultados de búsqueda, y cualquier imagen que le pidas mirar, van al proveedor de modelos que hayas elegido. En un documento como la licencia de conducir, el texto reconocido incluye el número y la dirección. El índice en sí nunca se envía a ningún lado. Comma es de código abierto y también puedes ejecutarlo en tu propia máquina.

Crea el índice de fotos

El índice se engancha al camino que tus fotos ya recorren. En el iPhone no cambia nada.

Las fotos se sincronizan del iPhone al Mac mediante Fotos de iCloud y se exportan; después, modelos locales crean miniaturas, leen el texto, calculan dos conjuntos de vectores de imagen y construyen un índice de texto completo 1 · Llevar las fotos al Mac iPhone toma fotos como siempre Fotos de iCloud las sincroniza con el Mac Fotos en el Mac fototeca en un disco externo Exportar originales guarda hora y lugar 2 · Procesar con modelos locales Miniaturas los pasos siguientes solo leen esto Texto Apple Vision Vectores de imagen Chinese-CLIP Vectores de imagen Qwen3-VL-Embedding Índice de texto completo SQLite la búsqueda clasifica con cada conjunto y une las dos listas Las fotos se sincronizan del iPhone al Mac mediante Fotos de iCloud y se exportan; después, modelos locales crean miniaturas, leen el texto, calculan dos conjuntos de vectores de imagen y construyen un índice de texto completo 1 · Llevar las fotos al Mac iPhone toma fotos como siempre Fotos de iCloud las sincroniza con el Mac Fotos en el Mac fototeca en un disco externo Exportar originales guarda hora y lugar 2 · Procesar con modelos locales Miniaturas los pasos siguientes solo leen esto Texto Apple Vision Vectores de imagen Chinese-CLIP Vectores de imagen Qwen3-VL-Embedding Índice de texto completo SQLite la búsqueda clasifica con cada conjunto y une las dos listas
Cada paso tras la exportación se ejecuta en el Mac.

Montarlo lleva tres pasos:

  1. Lleva las fotos al Mac. Sincroniza las fotos del iPhone con el Mac mediante Fotos de iCloud y exporta las fotos nuevas a una carpeta cada día.

  2. Procésalas con modelos locales. Reconoce el texto de cada imagen y conviértela en vectores con Chinese-CLIP y Qwen3-VL-Embedding.

  3. Guárdalas en un índice local. Guarda los resultados en una base de datos local, con un comando para buscar en ella. En este ejemplo el comando se llama lpa.

Qué devuelve una búsqueda

En local, una búsqueda es un comando. Una sola llamada puede llevar varias formulaciones, y los modelos se cargan una sola vez. El agente convierte expresiones como «el año pasado» en un intervalo de fechas.

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

Cada resultado indica qué tipo de evidencia hay detrás:

EtiquetaSignificado
Texto coincideTodas las palabras aparecen en el texto de la imagen.
PosibleLa imagen se parece. Las cosas parecidas se confunden fácilmente.
Confianza bajaSolo se muestra cuando no hay nada mejor.

--prefer text pone primero las coincidencias de texto, lo que sirve para documentos, tarjetas y capturas de pantalla. --prefer picture pone primero las imágenes parecidas, lo que sirve para un gato o una playa. Las fotos casi idénticas tomadas en pocos minutos ocupan un solo puesto en la lista, y las demás cuelgan de él.

Un chat de Comma: al preguntarle por la contraseña del wifi de un hospedaje junto al mar, Comma lee el nombre de la red y la contraseña en una tarjetita de una foto de la habitación y envía la foto.
Coincidencia de texto: el nombre de la red y la contraseña salen de las palabras de la tarjeta de la foto. La foto se generó para este ejemplo.
Un chat de Comma: al pedirle fotos de un gato en el alféizar, Comma devuelve tres fotos del gato en un alféizar.
Coincidencia de imagen: nada en estas fotos dice «gato» ni «alféizar»; las encuentran los vectores de imagen.

Cuando los primeros resultados son dudosos, el agente no adivina. Junta las miniaturas de los candidatos en una hoja numerada, nueve como máximo, y te pide que elijas.

Una hoja de contactos numerada de tres por tres: 1 y 2 son el anverso y el reverso de una licencia de conducir de muestra, 3 y 4 son tarjetas de wifi y el resto son candidatos de confianza baja.
Una hoja de contactos de ejemplo; la licencia es una tarjeta de muestra. 1 y 2 son coincidencias de texto del anverso y el reverso, 3 y 4 parecen tarjetas y el resto son candidatos de confianza baja. Responde «1 y 2» y el agente envía las dos caras de la licencia.

La forma de combinar los dos conjuntos de vectores se decidió calibrando sobre una fototeca completa de unas 50,000 fotos. Con Qwen3-VL-Embedding solo, las respuestas correctas que había elegido una persona quedaban más abajo que con Chinese-CLIP solo. Al combinar las dos clasificaciones, cada elemento comprobado salió al menos igual de bien que con cualquiera de los dos modelos por separado. «Posible» también se asigna solo cuando la similitud de ambos modelos supera el umbral: en una consulta de prueba, las fotos marcadas como «Posible» pasaron de 4970 a 4. El precio es que una búsqueda tarda de 3.5 a 6 segundos en lugar de unos 3.

Este ejemplo funciona en un MacBook Air con 16 GB de memoria, con la versión 2B de Qwen3-VL-Embedding. En una máquina más potente puedes usar modelos Qwen más grandes:

  • Un modelo de vectores más grande. Sustituye Qwen3-VL-Embedding-2B por Qwen3-VL-Embedding-8B. Tras el cambio, hay que volver a calcular los vectores de todas las fotos con el nuevo modelo.

  • Descripciones y etiquetas para cada foto. Ejecuta además Qwen3-VL-4B-Instruct o Qwen3-VL-8B-Instruct para escribir una descripción de una línea y unas cuantas etiquetas por foto, y guárdalas en el índice de texto. En un MacBook Pro con 24 GB de memoria, por ejemplo, el modelo 8B funciona con cuantización de 8 bits. Las etiquetas sirven para un primer filtrado; no se garantiza que sean correctas.

¿Y el inglés? Chinese-CLIP se entrenó sobre todo con imágenes y textos en chino, así que no es fiable para consultas en inglés. Las otras dos piezas no se ven afectadas: el reconocimiento de texto lee chino e inglés, y Qwen3-VL-Embedding admite muchos idiomas. Por eso conviene poner formulaciones en chino y en inglés en la misma búsqueda, como hace el comando anterior; puedes dejarlo escrito en un Skill. Si tu fototeca y tus preguntas son sobre todo en inglés, también puedes sustituir Chinese-CLIP por el CLIP original, lo que de nuevo obliga a recalcular los vectores.

Encuentra a tu familia y amigos

Fotos ya agrupa las caras de una misma persona. El índice usa directamente esos grupos y no hace reconocimiento facial propio.

  1. Primero, pon nombre a las personas. La primera vez, el agente toma unos cuantos lotes de fotos de esos grupos, los numera y te pregunta quién es cada uno. Solo cuando respondes «la 3 es mamá» lo recuerda. Un grupo que no has confirmado no se trata como nadie.

  2. Busca por persona. A partir de ahí, cuando mencionas un nombre, la búsqueda mira solo las fotos en las que aparece esa persona. Los nombres se suman: nombra a dos personas y obtendrás solo las fotos en las que salen las dos, es decir, sus fotos juntos.

  3. Combínalo con otras condiciones. Un nombre puede ir junto con lo que aparece en la imagen y la fecha, como «fotos de mamá y mías en la playa el año pasado»:

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

Si un nombre no se ha confirmado, o dos personas tienen el mismo nombre, la búsqueda lo dice en lugar de adivinar. Un nombre equivocado se puede corregir, y cada corrección se puede deshacer.

Cómo se encuentran los videos

Los videos se buscan por separado de las fotos. Una búsqueda normal solo mira fotos. Si quieres, por ejemplo, el video de tu hijo soplando las velas de cumpleaños, dile a Comma que buscas un video y añadirá --source video a la búsqueda:

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

Detrás hay tres pasos:

  1. Extraer fotogramas. El video en sí nunca entra en un modelo. El indexador toma un fotograma cada 5 segundos, 12 como máximo por video.

  2. Buscar por fotograma. Los fotogramas pasan por el mismo proceso que las fotos: reconocimiento de texto y los dos conjuntos de vectores. Una búsqueda compara estos fotogramas; cuando uno coincide, se encuentra el video entero, que ocupa un solo puesto en los resultados.

  3. Enviar el video. Cuando lo has elegido, el agente lo envía con lpa video.

Un chat de Comma: al pedirle un video de balsas de bambú en Yangshuo, Comma devuelve un video de 12 segundos de balsas bajando por un azud.
Búsqueda de video: los fotogramas que coinciden pertenecen a un solo video, así que el video es un único resultado.

Por ahora solo mira la imagen, no el sonido. Lo que se dice en un video todavía no se puede buscar, y las personas que salen en un video aún no se reconocen. El número de fotogramas está limitado, así que algo que pasa fugazmente en un video largo puede no encontrarse.

Cómo está hecho LocalPhotoAgent

El lpa de esta guía viene de LocalPhotoAgent, un indexador que hemos escrito nosotros y que publicaremos como código abierto. La parte de indexación ya está explicada; dos puntos más:

  • Se puede detener en cualquier momento. Cada paso de cada foto se registra por separado. Si se detiene a medias, la próxima vez continúa; si cambias un ajuste, solo se repite el paso afectado. Mientras trabaja vigila la memoria, la temperatura y el espacio en disco, y se pausa cuando alguno supera su límite.

  • Da al agente unos cuantos comandos. lpa search busca, lpa sheet crea una hoja de contactos, lpa preview envía fotos y lpa video envía videos. Cuando el agente busca fotos, los llama en este orden:

El agente de Comma ejecuta a través del Connector lpa search, luego lpa sheet si hay dudas, y después lpa preview o lpa video; solo la hoja y el envío leen el disco externo Agente de Comma ejecuta comandos vía Connector lpa search solo busca en la base de datos lpa sheet crea una hoja si hay dudas lpa preview / video envía la foto o el video Disco externo miniaturas y originales, solo se leen para una hoja o un envío El agente de Comma ejecuta a través del Connector lpa search, luego lpa sheet si hay dudas, y después lpa preview o lpa video; solo la hoja y el envío leen el disco externo Agente de Comma ejecuta comandos vía Connector lpa search solo busca en la base de datos lpa sheet crea una hoja si hay dudas lpa preview / video envía la foto o el video Disco externo miniaturas y originales, solo se leen para una hoja o un envío

Conecta Comma

Esto supone que LocalPhotoAgent ya funciona en tu Mac. La conexión lleva cuatro pasos:

  1. Añade un dispositivo. En Comma, ve a Settings > Devices y haz clic en Add device para obtener un comando de instalación.

  2. Ejecuta el comando. Ejecútalo en Terminal en el Mac que guarda la fototeca para instalar el Comma Connector.

  3. Activa el acceso. Un dispositivo nuevo empieza en Off. Cámbialo a Full para que el agente pueda ejecutar lpa.

  4. Escribe un Skill. Dile al agente que busque primero, que envíe una hoja de contactos cuando dude y que envíe las fotos solo después de que elijas. Puedes simplemente pedirle a Comma que «cree un Skill».

A partir de ahí, basta con preguntar como en cualquier chat: «Encuentra las fotos de mi licencia de conducir del año pasado, por delante y por detrás».

Un chat de Comma: al pedirle las fotos de la licencia de conducir del año pasado, por delante y por detrás, Comma envía dos fotos de una licencia de muestra.
La pregunta del principio de esta guía, respondida. La licencia es una tarjeta de muestra.

Confianza y límites

El índice solo lee los originales. Nunca los mueve, edita ni borra. Una búsqueda no toca el disco externo en absoluto; solo lo leen la creación de una hoja de contactos y el envío de una foto. Mover o borrar fotos queda fuera de esta configuración. Ten en cuenta, eso sí, que con acceso Full el agente puede ejecutar en este Mac otros comandos además de lpa.

Que el texto coincida solo significa que se encontraron esas palabras, no que sea la foto que buscas. «Posible» es solo un candidato. Cuando Comma marque una petición como hecha, revisa las fotos que te ha enviado.

La primera vez, podrías decir: «Encuentra las fotos de mi licencia de conducir del año pasado. Muéstrame primero la hoja de contactos y no envíes, muevas ni borres nada».

Try Comma, Now.

Empezar