… y ahora puedo buscar en mi galería tanto por imagen como por descripción.
El número de imágenes crece y crece y cada vez te es más difícil encontrarlas, y más si buscas por una descripción que ni le has puesto a la imagen, ni a su galería, ni en sus etiquetas. Esto es lo que me ha llevado a pensar en crear un buscador semántico de imágenes.
Y yo tengo unas cientos, pero imagina tu equipo de diseño de tu empresa, que se tiran horas buscando imágenes que ya tienen en su banco de fotos inmenso.

Vamos al lio 💪🏻
La idea principal es usar al igual que usamos en sistemas RAG de IA, en el que creamos embeddings de textos para «geolocalizarlos» dentro de una base de datos vectorial y así poder luego buscar y encontrar textos «cercanos», que en principio hablan de lo mismo o parecido. Pues sería llevarnos ese mismo proceso pero a imágenes.
Diagrama de arquitectura

Veamos las piezas:
- El frontend, una web, donde poder adjuntar una imagen a buscar, o un texto, y por ahora en esta versión una opción para adjuntar imágenes a «indexar»
- El backend, donde recibiremos las peticiones de búsqueda y embedding, un FastAPI en Python.
- CLIP de OpenAI, en local, nos decargamos una versión de poco peso y sencilla que siempre podremos aumentar.
- Una BBDD vectorial que será un PostgreSQL con el módulo de vectores.
Para esta creación de embeddings usaremos un modelo especializado en imágenes, CLIP de OpenAI.
Pero Antonio, si has dicho que es un modelo en local, ¿qué hacemos tirando de OpenAI?
Pues porque OpenAI nos da el modelo para poder descargarlo, sin tener que tirar de su infra y consumir API, así que genialísimo, modelo para nosotros que montaremos en local.
Nos ofrece distintas versiones de mayor o menor capacidad y tamaño, pero en cualquier caso es un modelo que cualquier ordenador medio normalito puede ejecutar, es decir, que no se trata de correr lo último de DeepSeek que necesita un tocho de ordenador.
El repo de CLIP de OpenAI: https://github.com/openai/CLIP
Vale ya tenemos todas las piezas, ahora veamos un par de flujos.
Alimentemos a la bestia 🍔 🍕
Indexemos en base de datos nuestra galería. Para ello lo que haremos es pasarle CLIP la imagen y que nos genere un vector, que será el que insertaremos en BBDD.
En esta versión inicial tienes en la web un formulario donde poder arrastrar varias imágenes y mandarlas a indexar. Vale es algo sencillo y a la vez tedioso, pero al ser un proyecto open source la ventaja que tiene es que siempre podemos iterarlo y modificarlo o ampliarlo, por ejemplo con la creación de un cron que revise nuestra galería y la indexe completa él solo, o que se conecte a nuestro servidor por ftp donde tenemos todas y que las vaya indexando.
Así por ejemplo podríamos tener a todo el equipo volcando las imágenes que genere a un servidor común por FTP y podremos tener este buscador semántico para que todos puedan usarlo y buscar imágenes por contenido en el servidor de fotos.
El flujo podría quedar algo tal que así:

Usemos el buscador de imágenes
En un formulario pasamos una imagen a buscar o un texto descriptivo, y la idea es que nos muestre un listado de imágenes por similitud (ordenadas por un valor de similitud, que a más alto, más iguales son)
Este «prompt» (imagen o texto), lo que haremos es crear su embedding también, con el que tenemos un vector que o situa en el espacio, junto con elementos cercanos que son muy parecidos, es decir, que lo pasaremos a CLIP para generar el vector, que usaremos en un SELECT a base de datos, la que nos devolverá dicho listado de imágenes ordenadas por el índice de «cercanía».

Le añadimos un simple filtro de similitud que podamos ajustar sobre los resultados y así de forma sencilla nos podemos quedar con las que sean más o menos parecidas.
Suena sencillo, ¿no? prácticamente una mini web, que llama a una API que usa un modelo local CLIP para crear embeddings de imágenes y texto que guardamos en una base de datos PostgreSQL.
Pues en montarlo tardas 5 minutos y te olvidas de dar vueltas buscando entre tus imágenes, el repo lo tienes aquí 👇🏻 👇🏻 👇🏻
https://github.com/ablancodev/image-search-local-AI
Imagina tener esto en tu empresa, todas las imágenes centralizadas, pero con la capacidad de búsqueda semántica entre ellas, y encima con 0€ de coste en tokens ni API, pues ya sabes avísame, lo miramos y seguro que te puedo echar una mano.