Point to the photo folder or store URL. Videoprodutos finds the products, removes the backgrounds, applies the style preset (or picks one automatically based on the product type), and renders the video in 16:9 and 9:16—in a queue, through the web page. No paid API, no credits.

A Node server with a web page and persistent queue. Each task (folder or link) becomes a project saved to disk with originals, images for each preset in three aspect ratios, and videos ready for YouTube and Reels.
Folder (subfolder = product, or loose photos) or URL: Shopify, WooCommerce, JSON-LD, OpenGraph, and, as a last resort, the page’s large images. Retrieves the name, description, and price when available.
White studio, premium dark, vibrant, minimal, warm/vintage, neon, natural, original, and AI-generated setting. Background removal with local rembg; 1:1, 16:9, and 9:16 output, clean and with title/price.
Dynamic, elegant, tech, natural, promotional, and cinematic: zoom/pan, transitions, color grading, CC0 music (Freesound via inemavox) or a synthetic track, optional narration, and a catalog with all products.
The detected category (technology, fashion, food, home, pets, jewelry…) determines the preset and style when you leave it on "automatic." The copy (title, tagline, 3 benefits, CTA) comes from local Ollama—or from a template if there’s no LLM.
| preset | when to use |
|---|---|
| estudio-branco | e-commerce, courses, books |
| dark-premium | technology, jewelry, automotive |
| vibrant | sports, kids |
| minimal | fashion, beauty |
| quente-vintage | food and beverages |
| neon | games |
| natural | home, pets, eco |
| original | just correct the lighting/color and frame it |
| cenario-ia | generated photographic background (inemaimg / Agnes / API) |
| style | rhythm |
|---|---|
| dynamic | 2.2 s cuts, punch zoom, slide |
| elegant | 3.6 s per scene, long fades |
| tech | blue/cyan color grade, wipe, subtle rgbashift |
| natural | warm, soft, acoustic guitar |
| promo | featured price, strong CTA |
| cinematico | stinger, contrast, epic soundtrack |
Required: Node 20+ and ffmpeg. Recommended: Python with rembg (background removal). Optional and can be turned off: Ollama (copy), inemavox (music/voiceover), and inemaimg or a compatible API (AI-generated setting).
Server, composition (sharp), and rendering (h264_nvenc when an NVIDIA GPU is available, otherwise libx264).
# check node -v # >= 20 ffmpeg -version | head -1
Local background removal with ONNX models. Without it, the product is added without background removal.
python3 -m venv .venv
.venv/bin/pip install rembg onnxruntime pillow numpyIf they’re online, the app uses them; otherwise, it falls back to local mode without breaking.
curl localhost:11434/api/tags # Ollama → copy curl localhost:8010/api/system/status # inemavox → music/voice curl localhost:8000/health # inemaimg → AI setting
Five steps. The third is the only one you’ll repeat.
Clones the repository, installs the Node dependencies, and opens the web page on port 3080.
git clone https://github.com/inematds/videoprodutos && cd videoprodutos npm install npm start # → http://localhost:3080
Subfolder for each product with the photos and a produto.json or produto.md optional (name, price, description, category). Loose photos in the root folder each become a product. Or simply use the store URL.
produtos/ fone-x1/ ← one product, multiple photos 1.jpg 2.jpg produto.json ← {"name":"Fone X1","price":"R$ 199","desc":"…","category":"tecnologia"} caneca-azul/ foto.png produto.md ← 1st line = name, rest = description camiseta.jpg ← a standalone photo = one product
In the tab New Task: paste the folder (or use "Browse") or the URL, choose a preset and style (or leave it on "Automatic"), select 16:9 and/or 9:16, and click Add to queue. The tab Queue shows progress and the live log. From the CLI, it works the same way:
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 # fully automatic
In the tab New Task → Batch (or --lote lista.txt): one source per line, optional fields separated by |. The queue processes jobs in sequence and survives server restarts.
# source | preset | style | format | max=N | brand=Name | no-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 # images only
Tab Projects: video players, all preset images and the originals, with downloads. Everything is stored in a self-contained folder on disk:
~/projetos/output/videoprodutos/<id>/ projeto.json ← manifest: products, copy, category, preset, style, files originais/ ← input photos imagens/<preset>/ ← 1:1, 16:9, 9:16 · clean and with text videos/ ← <produto>-<estilo>-16x9.mp4, -9x16.mp4, _catalogo-*.mp4
Tab Settings (writes to .env) or edit the file. Each provider can be none; the app keeps working with local templates and presets.
LLM_PROVIDER=ollama # none | ollama | openai (any compatible API: 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 (via inemavox) MUSIC=freesound # none | freesound | freesound-api | synth VIDEO_ENGINE=ffmpeg # ffmpeg (local) | agnes (AI camera clips, US$ 0) | kie (reserved) APP_PASSWORD= # HTTP Basic password — required on a VPS
Profile ready at deploy/: Agnes for copy, setting, and video; edge-tts for voice; rembg on CPU; libx264 for rendering; password protection. Tested on 2 vCPU / 4 GB.
git clone https://github.com/inematds/videoprodutos /root/projetos/videoprodutos cd /root/projetos/videoprodutos && bash deploy/deploy.sh # deps, venv, fonts, systemd nano .env # AGNES_API_KEY and APP_PASSWORD (template in deploy/env.vps.example) systemctl restart videoprodutos # → http://IP:3080
Two product photos in a folder, everything automated: the dog landed in "pet" (natural preset, natural style) and the speaker in "technology" (dark premium, tech style). Copy via local Ollama, background removal via rembg, narration via Edge TTS.




The core (discovery → images → video → queue) is ready. What remains is refinement and integration.
lib/videoai.js), a deploy profile without a GPU, with a password, edge-tts, and direct Freesound access.