~/codigoagente

BG0: quita el fondo de una imagen gratis en tu navegador, sin subirla (alternativa open source a remove.bg)

BG0 es un quitador de fondos open source que funciona entero dentro de tu navegador. Eliges una foto, un modelo de IA llamado BiRefNet la procesa en tu propia tarjeta gráfica (WebGPU) o en la CPU (WebAssembly) y descargas un PNG transparente. La imagen no se sube a ningún servidor, no hay cuenta ni límite de uso, y el código se publica con licencia Apache 2.0.

Hemos leído el código del repositorio opencoredev/bg0 (commit 420442c, del 29 de septiembre de 2026) para explicarte qué hace exactamente con tu foto, cómo decide qué modelo usar según tu equipo, cómo meterlo en tu propia web con la librería @bg0/browser y qué límites tiene. Si te interesan otras alternativas libres a programas de pago, en este mismo tema tienes FigCraft, la alternativa open source a Figma.

Qué es BG0 y para qué sirve

BG0 ("Background → zero") resuelve una tarea muy concreta: quitar el fondo de una imagen y darte un PNG con transparencia. Es lo que hacen servicios como remove.bg, con una diferencia de diseño: en BG0 la inferencia ocurre en tu dispositivo. El servidor solo entrega la página y el modelo; la foto no sale de la pestaña.

Portada oficial de BG0: eliminación de fondos que se queda en tu dispositivo
Imagen social oficial del proyecto · opencoredev/bg0

Sirve para recortar fotos de producto para una tienda, retratos para un perfil, logotipos o cualquier imagen que vayas a pegar en un diseño. Su archivo de instrucciones para colaboradores (AGENTS.md) deja claro que no quiere ser más que eso: nada de editor, biblioteca de recursos ni proyectos.

DatoValor
Web[bg0.dev](https://bg0.dev) (gratis, sin cuenta)
Código revisadocommit `420442c`, 29 de septiembre de 2026
Licencia del códigoApache 2.0
ModeloBiRefNet (pesos con licencia MIT), exportado a ONNX
MotorTransformers.js 4.3.0 con ONNX Runtime: WebGPU o WebAssembly
Formatos de entradaPNG, JPG, WebP, HEIC y HEIF, hasta 60 MB
SalidaPNG con canal alfa (descarga o portapapeles)
Librería`@bg0/browser` en npm (0.1.1 publicada; el repo ya va por 0.1.2)
Stack de la webTanStack Start, React 19, Tailwind, Bun y Turborepo

Cómo funciona por dentro

Todo el trabajo con la imagen vive en el paquete packages/browser, que la web usa como una caja negra: la interfaz nunca toca ONNX ni los detalles del modelo. El recorrido completo es este:

Esquema del funcionamiento de BG0: entrada, modelo BiRefNet, inferencia con WebGPU o WebAssembly y PNG transparente
Las cuatro fases de BG0, todas dentro de la pestaña del navegador · codigoagente
  1. Entrada. Eliges la imagen, la arrastras a la página o la pegas con Ctrl+V. Se decodifica en memoria. Los HEIC de iPhone se leen con un decodificador WebAssembly (heic-to) que solo se descarga si tu navegador no los abre por sí mismo.
  2. Modelo. La primera vez el navegador descarga el modelo BiRefNet en formato ONNX desde Hugging Face, con una revisión fijada en el código para que no cambie por sorpresa. Se guarda en la caché del navegador (Cache API, o IndexedDB en orígenes de desarrollo) y las siguientes visitas lo leen de ahí.
  3. Inferencia. El modelo recibe la imagen reducida a 512 píxeles y devuelve una máscara: un valor por píxel que dice cuánto pertenece al primer plano.
  4. Salida. La máscara se escala al tamaño original y se aplica como canal alfa sobre tu imagen a resolución completa. El resultado es un PNG que puedes descargar (con el sufijo -bg0 en el nombre) o copiar al portapapeles.

El modo "quality": una segunda pasada sobre el sujeto

La librería tiene dos modos, fast (el predeterminado) y quality, que es el que usa bg0.dev. La diferencia está en refinement.ts: un modelo de 512 px desperdicia casi todo su detalle si el sujeto ocupa una parte pequeña de la foto. En modo quality, BG0 busca el recuadro que ocupa el sujeto en la primera máscara, recorta esa zona con un margen y vuelve a pasarla por el modelo. Así el pelo o los bordes finos se calculan con más resolución. Si el sujeto ya llena el encuadre, se salta la segunda pasada para no gastar tiempo, y si la segunda pasada falla, se queda con la primera máscara.

Qué modelo usa según tu equipo

BG0 trae dos variantes de BiRefNet de escritorio y una para iPhone. Antes de la primera imagen, @bg0/browser mira lo que informa el navegador (la GPU, la memoria y los núcleos) y elige por dónde empezar:

Tabla de selección de modelo en BG0: BiRefNet completo o lite en WebGPU o WebAssembly según la GPU, la RAM y el navegador
Reglas de `models.ts`: qué modelo intenta primero BG0 en cada tipo de equipo · codigoagente
  • BiRefNet completo (red Swin-L, unos 452 MiB): el de mejor calidad. Lo intenta en Chrome o Edge si la GPU soporta shader-f16 y tiene límites de memoria suficientes, o en la CPU si tienes al menos 4 núcleos.
  • BiRefNet-lite (Swin-T, unos 94 MiB): la opción ligera para equipos con poca memoria y el último recurso de todos.
  • Lite cuantizado para iOS (unos 53 MiB): en iPhone y iPad corre en un worker de WebAssembly de un solo hilo, y la salida se limita a 1280 px en el lado largo para no agotar la memoria que Safari da a cada pestaña.

WebGPU solo se usa en navegadores Chromium. En Firefox o Safari de escritorio BG0 va directo a WebAssembly, que funciona pero es más lento.

Si el modelo elegido no carga o falla al ejecutarse, la librería baja un escalón: completo → lite en el mismo motor → lite en WebAssembly. Hay temporizadores para no quedarse colgada: una GPU que no responde en 5 segundos cuenta como "sin GPU", y una descarga que pasa 30 segundos sin recibir datos se da por perdida. Si una pestaña muere mientras carga el modelo completo, BG0 lo apunta y ese dispositivo usa el lite durante una semana.

Privacidad: qué sale de tu equipo y qué no

Es la razón de ser del proyecto, así que lo comprobamos en el código y en ARCHITECTURE.md:

  • Nunca sale: los bytes de la imagen, los píxeles, la máscara, las miniaturas, el nombre del archivo, su tamaño ni sus dimensiones. La regla está escrita como invariante del producto: no se envían ni a analítica, ni a logs, ni a informes de errores.
  • Sí sale: la petición para descargar el modelo (Hugging Face solo ve una descarga normal de un archivo) y, en bg0.dev, eventos anónimos de PostHog como "se eligió una imagen", "el recorte terminó" o "se descargó el resultado".

Esos eventos están más recortados de lo habitual. La duración del proceso se manda por tramos (<5s, 5-15s...) y no en milisegundos, porque un tiempo exacto podría delatar el tamaño de la imagen. Las grabaciones de sesión, la captura automática de clics y los perfiles de persona están desactivados, y el único texto libre de las encuestas pasa por un filtro que elimina correos, enlaces, nombres de archivo y números largos antes de enviarse.

Puedes verificarlo tú: abre las herramientas de desarrollo (F12), pestaña Red, y procesa una imagen. Verás la página, la descarga del modelo y peticiones pequeñas a PostHog, pero ninguna que lleve la foto. Si alojas BG0 tú mismo, la analítica viene apagada: el código solo la activa en bg0.dev, salvo que pongas VITE_POSTHOG_ENABLED=true.

Cómo quitar el fondo de una imagen con bg0.dev

  1. Entra en bg0.dev.
  2. Arrastra una imagen a la página, pégala con Ctrl+V o ábrela con Ctrl+O.
  3. La primera vez espera a que se descargue el modelo (la barra de progreso muestra los megas). Las siguientes veces sale de la caché.
  4. Revisa el resultado en la vista de comparación: arrastra la línea divisoria o muévela con las flechas.
  5. Descarga el PNG con Ctrl+S o cópialo con Ctrl+C para pegarlo en Figma, Canva o un chat.
Comparación antes y después de quitar el fondo de una foto de un gato con BG0
Resultado real de BG0 sobre una foto de Pexels incluida en el repositorio; el damero indica las zonas transparentes · opencoredev/bg0

Los atajos de teclado que documenta el proyecto (en Mac, ⌘ en lugar de Ctrl):

TeclasAcción
`Ctrl+O` / `Ctrl+V`Abrir el selector o pegar una imagen
`Espacio` (mantener)Ver el original completo
`←` `→` (con `Mayús` va más rápido)Mover la línea de comparación
`1` `2` `3`Vista comparar, resultado u original
`Ctrl+S` / `Ctrl+C`Descargar o copiar el PNG
`Esc`Limpiar y esperar otra imagen

Cómo usar @bg0/browser en tu propia web

El motor de bg0.dev se publica como librería, así que puedes añadir el recorte de fondos a tu aplicación sin pagar una API ni montar un servidor de inferencia:

terminalsh
npm install @bg0/browser
snippettypescript
import { removeBackground } from '@bg0/browser'

const input = document.querySelector<HTMLInputElement>('#foto')!
input.addEventListener('change', async () => {
  const file = input.files?.[0]
  if (!file) return

  const result = await removeBackground(file, {
    quality: 'quality',
    onProgress: ({ stage, progress, message }) => {
      console.log(stage, Math.round(progress * 100), message)
    },
  })

  const url = URL.createObjectURL(result.blob)
  document.querySelector<HTMLImageElement>('#resultado')!.src = url
  console.log(result.model, result.provider, `${result.durationMs} ms`)
})

Lo que te da la API, según packages/browser/src/index.ts:

  • removeBackground(blob, { quality, onProgress, signal }) devuelve el PNG (blob), su ancho y alto, el modelo y el motor que se usaron y la duración en milisegundos. Acepta un AbortSignal para cancelar.
  • onProgress informa de la fase (preparing, downloading, processing, finishing) y, durante la descarga, de los bytes recibidos: útil para una barra de progreso real.
  • prepareBackgroundRemoval() descarga e inicializa el modelo antes de que el usuario elija la imagen.
  • getBrowserCapabilities() dice si hay WebGPU; clearModelCache() borra el modelo guardado.
  • Los errores llegan como BackgroundRemovalError con un code (image-too-large, model-load-failed, out-of-memory, cancelled...) para que muestres un mensaje útil.

Un detalle importante antes de usarla en producción. Transformers.js 4.3.0 deja de cargar modelos en la página después de un primer fallo de ONNX. bg0.dev aplica un parche pequeño que lo evita, pero npm no lo aplica por ti. Sin él, la librería funciona igual mientras todo vaya bien; si una carga falla, el usuario tendrá que recargar la página antes de reintentar. Para igualar el comportamiento de bg0.dev, fija @huggingface/transformers en 4.3.0 y aplica el parche con patch-package o con patchedDependencies de Bun.

Ejecutar BG0 en local

El repositorio es un monorepo de Bun 1.4 con Turborepo:

terminalsh
git clone https://github.com/opencoredev/bg0
cd bg0
bun install --frozen-lockfile
bun run dev

La web arranca en el puerto 3000 y la documentación en el 4321 (también servida en /docs). Antes de proponer cambios, el proyecto pide pasar bun run lint, bun run typecheck, bun run test y bun run build. No necesita base de datos ni variables secretas: la web desplegada no hace ningún procesamiento en el servidor.

Licencia de BG0: ¿se puede usar en un proyecto comercial?

Hay tres licencias distintas y conviene separarlas:

PiezaLicenciaQué implica
Código de BG0 y `@bg0/browser`Apache 2.0Uso comercial, modificación y redistribución permitidos; conserva el aviso de copyright y la licencia.
Pesos de BiRefNet (completo y lite)MITNo van dentro del repositorio: el navegador los descarga de Hugging Face y se rigen por su propia licencia, también permisiva.
Decodificador HEIC (`heic-to`, libheif, libde265)LGPL-3.0 o posteriorSe sirve como módulo aparte y BG0 incluye el código fuente exacto para cumplir la LGPL.

En resumen: puedes usar BG0 o su librería en un producto comercial. Si redistribuyes el decodificador HEIC, mantén sus avisos y el acceso a su código fuente, como hace el propio proyecto en THIRD_PARTY_NOTICES.md.

Límites y errores frecuentes

  • La primera vez tarda. El modelo completo pesa unos 452 MiB y el lite unos 94 MiB. En una conexión lenta la primera imagen puede llevar minutos; después sale de la caché.
  • Al recargar no es instantáneo. Aunque el modelo esté guardado, hay que inicializar ONNX y subir los pesos a la GPU. Navegación privada o borrar los datos del sitio obligan a descargarlo otra vez.
  • "This image needs more memory than your browser can provide. Try a smaller image." El navegador se quedó sin memoria. Cierra pestañas o reduce la imagen; en iPhone el mensaje equivalente menciona Safari.
  • "The local model could not be loaded. Check your connection and try again." No se pudo descargar el modelo. Revisa que tu red o tu bloqueador no corten el acceso a huggingface.co.
  • "This image could not be opened. Try exporting it as PNG or JPG." El archivo no se pudo decodificar. Las secuencias HEIC/HEIF (fotos en ráfaga o "Live") no están soportadas.
  • Límite de 60 MB por imagen.
  • Pruebas limitadas a ciertos equipos. El propio proyecto dice que las verificó en un Mac con M4 Max y Chrome, y la versión de iOS en un iPhone 13. Firefox, Safari y otros dispositivos se consideran sin verificar.

Qué comprobamos nosotros

Revisamos el código completo de packages/browser y de la web, la arquitectura, las licencias y la documentación, e instalamos sus dependencias. No pudimos ejecutar la inferencia en nuestro entorno de pruebas, porque no tiene acceso a Hugging Face, de donde se descargan los modelos. Por eso la imagen del gato es la muestra que trae el propio repositorio, hecha con BG0 en el navegador, y los esquemas de este artículo están dibujados a partir del código, no de capturas inventadas.

Preguntas frecuentes

¿BG0 es gratis?

Sí. bg0.dev no tiene cuenta, suscripción ni créditos, y el código es Apache 2.0. El único coste es la descarga del modelo y el trabajo de tu propio equipo.

¿BG0 sube mis fotos a internet?

No. La imagen se procesa en la memoria del navegador. Lo único que se descarga es el modelo, y lo único que se envía son eventos anónimos de uso sin información de la imagen.

¿Funciona sin conexión?

La primera vez necesitas conexión para descargar el modelo. Después el modelo está en la caché del navegador, pero la página en sí sigue cargándose desde bg0.dev; si quieres un uso totalmente offline, ejecuta BG0 en local.

¿Funciona en el móvil?

Sí. En Android usa el mismo sistema que en escritorio. En iPhone y iPad usa un modelo lite cuantizado y limita la salida a 1280 px por el límite de memoria de Safari.

¿Qué diferencia hay con remove.bg?

remove.bg es un servicio en la nube: subes la imagen a sus servidores y la descarga en alta resolución se paga con créditos. BG0 procesa en tu equipo, gratis y sin límite, pero depende de tu hardware: en un equipo sin GPU compatible será más lento.

¿Puedo usar @bg0/browser en una app comercial?

Sí: el código es Apache 2.0 y los pesos de BiRefNet son MIT. Respeta los avisos de licencia y aplica el parche de Transformers.js si quieres el mismo comportamiento ante fallos que bg0.dev.

Conclusión

BG0 demuestra que hoy un navegador puede ejecutar un modelo de segmentación serio sin servidor: BiRefNet sobre WebGPU, con caídas ordenadas a WebAssembly y un trato de la privacidad que se puede auditar leyendo el código. Si solo necesitas recortar fotos, entra en bg0.dev; si tienes una web que lo necesita, @bg0/browser te ahorra pagar una API por imagen.

Si te gusta probar herramientas open source que sustituyen a servicios de pago, sigue con It's a Plan, la alternativa a Linear y Jira, o con HyperFrames, para crear vídeos con HTML.

// código fuente

Repositorio del artículo
El código del que habla este artículo es público: revísalo, dale una estrella o clónalo desde aquí.

// implementación

¿Necesitas implementar esta automatización en tu negocio?
No pierdas semanas configurando servidores, APIs y agentes. Safe Build Labs, la agencia que patrocina codigoagente, lo construye por ti, listo para producción.
Fish Speech 3.0 trae Drama 3 y S2-Pro: clonación de voz y TTS que puedes correr en tu GPU. Requisitos, licencia y cuánto cuesta frente a ElevenLabs.
  • Alternativas gratis a apps de pago
  • Instálalo en tu servidor
leer artículo
Qué es Idol de Speridlabs, cómo pasa de una foto a un objeto 3D con Gaussian Splatting, cuánta GPU pide, cómo instalarlo y qué licencias revisar antes.
  • Diseño, imagen y vídeo
  • Alternativas gratis a apps de pago
leer artículo
Analizamos Concat 0.2.8, el editor de vídeo libre y local alternativo a CapCut: subtítulos con Whisper, sin marca de agua, licencia AGPL y servidor MCP.
  • Alternativas gratis a apps de pago
  • Diseño, imagen y vídeo
leer artículo