Indica la carpeta de fotos o la URL de la tienda. Videoprodutos encuentra los productos, recorta el fondo, aplica el preset de estilo (o lo elige automáticamente según el tipo de producto) y renderiza el video en 16:9 y 9:16, en una cola y desde la página web. Sin API de pago, sin créditos.

Un servidor Node con página web y una cola persistente. Cada tarea (carpeta o enlace) se convierte en un proyecto guardado en disco con originales, imágenes por preset en tres proporciones y videos listos para YouTube y Reels.
Carpeta (subcarpeta = producto, o fotos sueltas) o URL: Shopify, WooCommerce, JSON-LD, OpenGraph y, por último, las imágenes grandes de la página. Obtiene nombre, descripción y precio cuando existen.
Estudio blanco, dark premium, vibrante, minimalista, cálido/vintage, neón, natural, original y escenario con IA. Recorte de fondo con rembg local; salida 1:1, 16:9 y 9:16, limpia y con título/precio.
Dinámico, elegante, tech, natural, promoción y cinemático: zoom/pan, transiciones, gradación de color, música CC0 (Freesound vía inemavox) o pista sintética, narración opcional y un catálogo con todos los productos.
La categoría detectada (tecnología, moda, alimentos, hogar, mascotas, joyería…) determina el preset y el estilo cuando lo dejas en "automático". El copy (título, tagline, 3 beneficios, CTA) viene de Ollama local, o de una plantilla si no hay un LLM.
| preset | cuándo usar |
|---|---|
| estudio-branco | e-commerce, cursos, libros |
| dark-premium | tecnología, joyería, automotriz |
| vibrante | deportes, infantil |
| minimal | moda, belleza |
| quente-vintage | alimentos y bebidas |
| neón | juegos |
| natural | hogar, mascotas, eco |
| original | solo corrige la luz/el color y encuadra |
| cenario-ia | fondo fotográfico generado (inemaimg / Agnes / API) |
| estilo | ritmo |
|---|---|
| dinámico | cortes de 2,2 s, punch zoom, slide |
| elegante | 3,6 s por escena, fundidos largos |
| tech | gradación azul/cian, wipe, leve rgbashift |
| natural | cálido, suave, guitarra |
| promo | precio destacado, CTA contundente |
| cinematico | intro, contraste, música épica |
Obligatorio: Node 20+ y ffmpeg. Recomendado: Python con rembg (recorte de fondo). Opcionales y desactivables: Ollama (copy), inemavox (música/narración) e inemaimg o una API compatible (escenario con IA).
Servidor, composición (sharp) y render (h264_nvenc cuando hay GPU NVIDIA, si no, libx264).
# verificar node -v # >= 20 ffmpeg -version | head -1
Eliminación local del fondo con modelos ONNX. Sin esto, el producto se procesa sin recorte.
python3 -m venv .venv
.venv/bin/pip install rembg onnxruntime pillow numpySi están disponibles, la app los usa; si no, recurre al fallback local sin fallar.
curl localhost:11434/api/tags # Ollama → copiar curl localhost:8010/api/system/status # inemavox → música/voz curl localhost:8000/health # inemaimg → escenario IA
Cinco pasos. El tercero es el único que vas a repetir.
Clona, instala las dependencias de Node y abre la página web en el puerto 3080.
git clone https://github.com/inematds/videoprodutos && cd videoprodutos npm install npm start # → http://localhost:3080
Una subcarpeta por producto con las fotos y un produto.json o produto.md opcional (nombre, precio, descripción, categoría). Las fotos sueltas en la raíz se convierten en un producto cada una. O simplemente usa la URL de la tienda.
produtos/ fone-x1/ ← un producto, varias fotos 1.jpg 2.jpg produto.json ← {"name":"Fone X1","price":"R$ 199","desc":"…","category":"tecnologia"} caneca-azul/ foto.png produto.md ← 1.ª línea = nombre, el resto = descripción camiseta.jpg ← una foto suelta = un producto
En la pestaña Nueva tarea: pega la carpeta (o usa "Procurar") o la URL, elige un preset y un estilo (o deja "Automático"), marca 16:9 y/o 9:16 y haz clic en Agregar a la cola. La pestaña Cola muestra el progreso y el registro en vivo. En la CLI es igual:
node cli.js ~/produtos --preset dark-premium --estilo tech --marca "MINHA LOJA" node cli.js https://loja.com.br --max 5 --formato 9:16 node cli.js ~/produtos/cafes # todo automático
En la pestaña Nueva tarea → Lote (o --lote lista.txt): una fuente por línea, campos opcionales separados por |. La cola procesa en serie y sobrevive al reinicio del servidor.
# fuente | preset | estilo | formato | max=N | marca=Nombre | sin-video ~/produtos/cafes | quente-vintage | natural https://minhaloja.com.br | auto | promo | 9:16 | max=5 ~/produtos/fones | dark-premium | tech | ambos | marca=SOUNDX ~/produtos/camisetas | minimal | | | sem-video # solo imágenes
Pestaña Proyectos: reproductor de los videos, todas las imágenes por preset y los originales, con descarga. En el disco, todo queda en una carpeta autocontenida:
~/projetos/output/videoprodutos/<id>/ projeto.json ← manifiesto: productos, copy, categoría, preset, estilo, archivos originais/ ← fotos de entrada imagens/<preset>/ ← 1:1, 16:9, 9:16 · limpia y con texto videos/ ← <produto>-<estilo>-16x9.mp4, -9x16.mp4, _catalogo-*.mp4
Pestaña Configuraciones (se guarda en .env) o edita el archivo. Cada proveedor puede ser none; la app sigue funcionando con plantillas y presets locales.
LLM_PROVIDER=ollama # none | ollama | openai (cualquier API compatible: Groq, OpenRouter…) OLLAMA_MODEL=qwen3.8:27b IMG_PROVIDER=inemaimg # none | inemaimg (flux2-klein local) | agnes (US$ 0) | openai TTS_ENGINE=edge # none | edge | chatterbox (vía inemavox) MUSIC=freesound # none | freesound | freesound-api | synth VIDEO_ENGINE=ffmpeg # ffmpeg (local) | agnes (clips de cámara por IA, US$ 0) | kie (reservado) APP_PASSWORD= # contraseña HTTP Basic — obligatoria en una VPS
Perfil listo en deploy/: Agnes para copy, escenario y video, edge-tts para la voz, rembg en CPU, libx264 en el render, contraseña al frente. Probado con 2 vCPU / 4 GB.
git clone https://github.com/inematds/videoprodutos /root/projetos/videoprodutos cd /root/projetos/videoprodutos && bash deploy/deploy.sh # deps, venv, fuentes, systemd nano .env # AGNES_API_KEY y APP_PASSWORD (modelo en deploy/env.vps.example) systemctl restart videoprodutos # → http://IP:3080
Dos fotos de productos en una carpeta, todo automático: el perro quedó en "pet" (preset natural, estilo natural) y el parlante en "tecnologia" (dark premium, estilo tech). Copy con Ollama local, recorte con rembg, narración con Edge TTS.




El núcleo (descubrimiento → imágenes → video → cola) está listo. Falta refinamiento e integración.
lib/videoai.js), perfil de deploy sin GPU con contraseña, edge-tts y Freesound directos.