1. Introducción
Si ya conoces llama.cpp como motor de inferencia para texto o stable-diffusion.cpp para generar imágenes, vision.cpp es su equivalente para visión por computador, es decir, ejecutar modelos de visión 100% en local para realizar ciertas acciones sobre imágenes. El repositorio oficial es Acly/vision.cpp y su filosofía es idéntica a la de llama.cpp: cargar modelo de IA, consumiendo lo mínimo posible de memoria. En esta guía nos centraremos en su caso de uso más práctico: eliminar el fondo de una fotografía de forma automática.
Para ello usaremos el modelo BiRefNet (Bilateral Reference Network), especializado en segmentación automática: separar con precisión el sujeto del fondo, incluso con pelo, bordes finos o transparencias, generando una máscara que luego se puede aplicar a la imagen original para obtener un PNG con fondo transparente.
La herramienta
vision.cppincluye soporte de otros modelos muy útiles que veremos a lo largo de esta guía: segmentación por prompt, estimación de profundidad, inpainting o super-resolución. De este último tienes una guía mucho más detallada en Reescalando imágenes (Upscaler).
2. Instalación
Al igual que llama.cpp, con vision.cpp necesitamos comunicarnos con la GPU a través de un backend si queremos que la operación sea lo más rápida posible. Alternativamente, podemos usar la CPU: será más lento, pero no necesitaremos tener una buena GPU.
| Backend | Rendimiento | Nvidia | AMD | Intel | Observaciones |
|---|---|---|---|---|---|
| Vulkan | 🟩🟩🟩🟩⬛ | ✅ | ✅ | ✅ | Recomendado. Multiplataforma y acelerado. |
| CPU/RAM | 🟨🟨⬛⬛⬛ | — | — | — | No usa GPU. Funciona en cualquier PC. |
La forma más rápida es descargar un release ya compilado desde la página de releases de vision.cpp. Encontrarás varios assets: elige el correspondiente a tu sistema operativo y descomprime el archivo en una carpeta, por ejemplo C:\vision.cpp o ~/vision.cpp en el caso de Linux. Dentro tendrás la carpeta bin/ con vision-cli, el ejecutable que usaremos.
3. Descarga de modelos
Para eliminar el fondo necesitamos un modelo BiRefNet en formato GGUF. Estos modelos oficiales los puedes encontrar en HuggingFace Acly/BiRefNet-GGUF:
| Fichero | Tamaño | Resolución | Uso recomendado |
|---|---|---|---|
BiRefNet-lite-F16.gguf |
88.6 MB |
1024x1024 (fija) |
Modelo ligero y muy rápido. Calidad aceptable. |
BiRefNet-F16.gguf |
440 MB |
1024x1024 (fija) |
Modelo grande. Más lento, pero mejor calidad. |
BiRefNet-dynamic-F16.gguf |
440 MB |
dinámica | Igual al anterior, pero acepta cualquier resolución. |
Para eliminar fondo descarga al menos
BiRefNet-dynamic-F16.gguf(el modelo más versátil). Si tienes un equipo con poca RAM o tarjeta gráfica poco potente, descargaBiRefNet-lite-F16.gguf.
Estos ficheros deben colocarse en una carpeta llamada models/. A continuación tienes una tabla con la lista completa de modelos que se pueden utilizar con vision.cpp:
| Fichero | Tamaño | Comando a usar |
|---|---|---|
| Uno de los anteriores | 89-440 MB |
Segmentación automática: vision-cli birefnet |
MobileSAM-F16.gguf |
26.9 MB |
Segmentación personalizada: vision-cli sam |
Depth-Anything-V2-Small-F16.gguf |
50.6 MB |
vision-cli depthany (Modelo pequeño) |
Depth-Anything-V2-Base-F16.gguf |
197 MB |
vision-cli depthany (Modelo base) |
Depth-Anything-V2-Large-F16.gguf |
673 MB |
vision-cli depthany (Modelo grande) |
MIGAN-512-places2-F16.gguf |
14.8 MB |
vision-cli migan (Modelo para inpainting). |
RealESRGAN-x4plus_anime-6B-F16.gguf |
8.95 MB |
vision-cli esrgan (Modelo para reescalar con IA) |
Cada modalidad tiene su modelo GGUF en HuggingFace bajo el usuario Acly.
4. Eliminar el fondo
La sintaxis mínima de vision-cli para eliminar el fondo de una imagen (usando BiRefNet) es:
vision-cli birefnet -m models/BiRefNet-lite-F16.gguf \
-i foto.jpg \
-o mask.png \
--composite final.png
Parámetros esenciales:
- El primer parámetro debe ser
birefnet,sam,depthany,miganoesrgan. -m/--model: ruta al modelo GGUF-i/--input: imagen de entrada-o/--output: máscara en escala de grises generada--composite: genera la imagen combinada (original + máscara)
Esto genera dos ficheros:
mask.png: máscara en blanco y negro, indicada con-o(blanco = sujeto, negro = fondo)composite.png: imagen original con máscara aplicada y fondo transparente, con--composite
Observa que el modelo lite, al ser más pequeño, pierde algunos detalles que el modelo grande sí conserva. Por ejemplo, el modelo lite eliminó la mochila y partes del cuello, mientras que el grande las respetó.
5. Eliminación personalizada
Hasta ahora hemos visto como usar BiRefNet (segmentación automática) donde se detecta y recorta el sujeto principal de forma automática, pero tenemos otra modalidad denominada MobileSAM (Segment Anything Model) que permite hacer segmentación personalizada, indicándole un prompt con las coordenadas del elemento que quieres recortar. Es ideal cuando en la foto hay varias personas u objetos y solo quieres uno, o cuando BiRefNet recorta de forma incorrecta.
El modelo que usaremos en esta modalidad es MobileSAM-F16.gguf (26.9 MB), que ya vimos en la tabla del apartado 3. Colócalo en models/ junto al resto y ejecuta el comando así:
vision-cli sam -m models/MobileSAM-F16.gguf \
-i original.jpg \
-p 1600 60 2300 1050 \
-o mask.png \
--composite out.png
Los parámetros específicos de sam son muy similares a los que vimos en el punto anterior, salvo que utilizamos el parámetro -p o --prompt para indicar coordenadas. Lo podemos hacer de dos formas:
- Indicando un punto:
x y→ por ejemplo-p 300 200selecciona el objeto implicado en ese píxel:
vision-cli sam -m models/MobileSAM-F16.gguf \
-i input.jpg \
-p 500 300 \
-o mask.png \
--composite out.png
- Indicando una caja
x1 y1 x2 y2→ por ejemplo-p 420 120 650 430indica un rectángulo que encierra de forma aproximada el objeto (esquina superior izquierdax1,y1y esquina inferior derechax2,y2). Es más preciso que el punto:
vision-cli.exe sam -m models/MobileSAM-F16.gguf \
-i nendoroid.jpg \
-p 1600 60 2300 1050 \
-o sam-nendoroid-out.png \
--composite sam-result.png
Por otro lado, como se puede ver en la penúltima imagen, podemos utilizar el siguiente comando para resaltar la parte seleccionada:
magick nendoroid.jpg \
\( sam-result.png -fill indigo -colorize 60 \) \
-composite sam-final.png
El fichero nendoroid.jpg es la imagen original, sam-result.png es la selección a resaltar que se coloreará de -fill indigo con un porcentaje -colorize 60 de color opaco / transparencia. Finalmente, -composite indica el nombre del fichero final.
6. Estimación de profundidad
Depth Anything V2 estima la profundidad de cada píxel: genera un mapa en escala de grises donde los tonos más claros indican lo que está más cerca de la cámara y los más oscuros lo que está más lejos. Es muy útil para efectos de desenfoque de fondo (bokeh), niebla, o como entrada para generación 3D.
Para ello vision.cpp usa la familia Depth-Anything-V2:
| Modelo | Tamaño | Uso recomendado |
|---|---|---|
Depth-Anything-V2-Small-F16.gguf |
50.6 MB |
Muy rápido, ideal para pruebas o GPUs modestas. |
Depth-Anything-V2-Base-F16.gguf |
197 MB |
Equilibrio entre calidad y velocidad. |
Depth-Anything-V2-Large-F16.gguf |
673 MB |
Máxima calidad, recomendado para imágenes grandes. |
La forma de utilizar estos modelos sería la siguiente:
vision-cli depthany -m models/Depth-Anything-V2-Large-F16.gguf \
-i foto.jpg \
-o depth.png
El fichero depth.png generado será un mapa de profundidad en escala de grises, donde el blanco equivale a cerca, y el negro a lejos. En este caso, no se necesita --composite, ya que la salida es directamente el mapa de profundidad.
7. Otros
Esta herramienta también tiene modalidades MI-GAN (Missing Image GAN) o ESRGAN (Enhanced Super-Resolution GAN). Estas modalidades sirven para hacer inpainting (reconstruir pequeñas zonas de la imagen coherentes con su entorno) o reescalado por super-resolución (inventar detalles para multiplicar x4 la resolución de una imagen).
Sin embargo, para estos detalles te recomiendo una guía dedicada como Reescalar imágenes (Upscaler) o inpainting img2img con sd.cpp, donde se explica en profundidad para conseguir mejores resultados de los que obtendrías con esta herramienta.
8. Alternativas
Otras herramientas para eliminar fondo que puedes valorar:
| Herramienta | Tipo | Notas |
|---|---|---|
| REMBG | CLI | Basado en BiRefNet/U²-Net, requiere Python/PyTorch. |
| ComfyUI | Node-GUI | Integrado en flujos de generación de imagen. |
| GIMP + plugin | GUI | Útil si ya editas manualmente con GIMP. |
| Servicios cloud (remove.bg, ...) | Web | Rápido pero sube imagen a servidores externos. |
| bg.addy.ie | Web | Recomendado, usa WASM y no sube la imagen a servidores. |
Con vision.cpp ya tienes un flujo local, privado y gratuito. Combínalo con StableDiffusion.cpp para generar fondos nuevos o con Upscaler si necesitas aumentar la resolución del sujeto recortado antes de componer.
Si optas por utilizar REMBG, ten en cuenta que su última versión, REMBG 2.0, no permite su uso comercial. Versiones anteriores, como la 1.4, sí lo permiten.

