TensorFlow.js dejó de ser experimental hace 3 años. En 2026 ya hay modelos productivos sólidos para los casos que listo abajo. La pregunta no es si "se puede"; es cuándo elegir esto en lugar de una API tradicional. La respuesta corta: cuando la latencia, el coste por petición o la privacidad importan más que la potencia bruta del modelo.
Casos donde TensorFlow.js gana en producción
- 1Detección de objetos en imágenes/video (COCO-SSD, MobileNet) — 30 FPS en móvil moderno.
- 2Clasificación de imágenes con clases custom — entrena con Teachable Machine en 5 minutos.
- 3Detección de poses humanas (PoseNet, MoveNet) — apps de fitness, ergonomía, fisioterapia.
- 4Reconocimiento de manos y caras — apps interactivas, accesibilidad, control gestual.
- 5OCR ligero (Tesseract.js, no es TF pero misma filosofía) — extracción de texto sin servidor.
- 6Análisis de texto básico: sentimiento, idioma, toxicidad — modelos pequeños rápidos.
- 7Generación de imágenes ligera (Stable Diffusion small) — solo dispositivos potentes.
Cuándo NO usar TensorFlow.js (y sí una API)
- LLMs grandes (GPT-4, Claude): no caben en navegador.
- Generación de imágenes alta calidad (Midjourney, DALL-E): requieren GPU servidor.
- Procesamiento de batch: si tienes 10.000 imágenes, mándalas al servidor.
- Móviles muy antiguos (>5 años) o equipos sin WebGL — degradación severa.
- Modelos cambiantes: si actualizas el modelo cada semana, mejor servidor.
| Tarea | Navegador (TF.js) | API servidor | Recomendación |
|---|---|---|---|
| Detectar objetos foto | COCO-SSD 6MB | Google Vision API | TF.js si <100/h |
| Reconocer texto en factura | Tesseract.js 4MB | AWS Textract | API si docs complejos |
| Clasificar email spam/no | Modelo custom 2MB | Cualquier LLM | TF.js si privacidad |
| Asistente conversacional | No viable | Claude / GPT-4 | API obligatorio |
| Transcribir audio | Whisper.js 39MB | OpenAI Whisper | API si >30s |
| Detectar fraude tx | Modelo custom 1MB | Modelo servidor | Servidor para audit log |
Trampas reales en producción
Descarga del modelo penaliza LCP
Un modelo de 6MB añade 2-3 segundos al primer paint en conexiones lentas. Solución: cargar el modelo solo cuando el usuario interactúa con la feature, no al cargar la página. Service Worker para cachear el modelo después del primer uso.
WebGL no está disponible en todos los entornos
Algunos navegadores corporativos, modo incógnito en Firefox y dispositivos viejos no tienen WebGL. TensorFlow.js cae a CPU, que es 10-50x más lento. Detectar y avisar.
Los modelos drift con el tiempo
Un modelo de TF.js compilado hoy puede dar peor que uno de hace 6 meses para el mismo input si el contexto cambia. Plan de actualización: nueva versión del modelo cada 3-6 meses, con A/B testing.
¿Cómo medir si te compensa TF.js?
Calcula: coste mensual estimado de la API × 12 vs. tiempo de desarrollo extra para integrar TF.js (típicamente 1-2 semanas más). Si la API supera 200€/mes y el caso encaja en TF.js, casi siempre compensa el rediseño. Bonus: TF.js no se cae cuando OpenAI tiene incidente.
FAQ
¿Cuánto cuesta integrar TensorFlow.js en una app existente?
Una integración simple (modelo pre-entrenado tipo COCO-SSD) sale entre 500 y 1.500 €. Si necesitas entrenar un modelo custom con tus propios datos, súmale 800-2.500 € según volumen y complejidad de los datos.
¿Funciona TensorFlow.js en móvil?
Sí, en cualquier móvil con WebGL (todos los iPhone desde iPhone 6, Android desde Android 5). Rendimiento: detección de objetos a 15-30 FPS en gama media. Modelos grandes pueden bajar a 5 FPS en móviles de gama baja.
¿Puedo entrenar mis propios modelos para TensorFlow.js?
Sí. Lo más rápido para casos visuales sencillos: Google Teachable Machine (5 minutos, sin código). Para algo serio: Python + Keras y exportar a TF.js con tfjs.converters. Para clasificación con pocos ejemplos, también puedes usar Transfer Learning sobre MobileNet.
¿Mi modelo TensorFlow.js puede ser robado o copiado?
Sí, técnicamente sí — está en el navegador del usuario. Si tu valor está en el modelo, no lo pongas en TF.js. Si tu valor está en los datos o en el flujo, TF.js está perfecto.