PTENES
Fábrica de imagens + vídeo de produto · 100% local

Uma pasta ou um link vira imagens e vídeo promocional

Aponte a pasta de fotos ou a URL da loja. O videoprodutos acha os produtos, recorta o fundo, aplica o preset de estilo (ou escolhe sozinho pelo tipo de produto) e renderiza o vídeo em 16:9 e 9:16 — numa fila, pela página web. Sem API paga, sem crédito.

Ilustração de produtos sendo transformados em imagens estilizadas e vídeo
O que é

Do produto bruto ao anúncio pronto, em lote

Um servidor Node com página web e fila persistente. Cada tarefa (pasta ou link) vira um projeto salvo em disco com originais, imagens por preset em três proporções e vídeos prontos para YouTube e Reels.

🔎 Acha os produtos sozinho

Pasta (subpasta = produto, ou fotos soltas) ou URL: Shopify, WooCommerce, JSON-LD, OpenGraph e, por último, as imagens grandes da página. Traz nome, descrição e preço quando existem.

🎨 9 presets de imagem + automático

Estúdio branco, dark premium, vibrante, minimal, quente/vintage, neon, natural, original e cenário por IA. Recorte de fundo com rembg local; saída 1:1, 16:9 e 9:16, limpa e com título/preço.

🎬 6 estilos de vídeo + automático

Dinâmico, elegante, tech, natural, promoção e cinemático: zoom/pan, transições, grade de cor, música CC0 (Freesound via inemavox) ou trilha sintética, narração opcional e um catálogo com todos os produtos.

Como funciona

Linha de montagem por produto

A categoria detectada (tecnologia, moda, alimento, casa, pet, joias…) decide o preset e o estilo quando você deixa em "automático". O copy (título, tagline, 3 benefícios, CTA) vem do Ollama local — ou de um template se não houver LLM.

Pasta / URL→ Produtos + fotos→ Categoria + copy→ Recorte (rembg)→ Imagens por preset→ Cenas (zoompan + texto)→ xfade + música + voz→ MP4 16:9 + 9:16→ projeto.json

Presets de imagem

presetquando usar
estudio-brancoe-commerce, cursos, livros
dark-premiumtecnologia, joias, automotivo
vibranteesporte, infantil
minimalmoda, beleza
quente-vintagealimentos e bebidas
neongames
naturalcasa, pet, eco
originalsó corrige luz/cor e enquadra
cenario-iafundo fotográfico gerado (inemaimg / Agnes / API)

Estilos de vídeo

estiloritmo
dinamicocortes de 2,2 s, punch zoom, slide
elegante3,6 s por cena, fades longos
techgrade azul/ciano, wipe, leve rgbashift
naturalquente, suave, violão
promopreço em destaque, CTA forte
cinematicovinheta, contraste, trilha épica
Pré-requisitos

Só ferramentas livres, tudo na sua máquina

Obrigatório: Node 20+ e ffmpeg. Recomendado: Python com rembg (recorte de fundo). Opcionais e desligáveis: Ollama (copy), inemavox (música/narração) e inemaimg ou uma API compatível (cenário por IA).

Node + ffmpeg

Servidor, composição (sharp) e render (h264_nvenc quando há GPU NVIDIA, senão libx264).

# checar
node -v   # >= 20
ffmpeg -version | head -1

rembg (recomendado)

Remoção de fundo local com modelos ONNX. Sem ele o produto entra sem recorte.

python3 -m venv .venv
.venv/bin/pip install rembg onnxruntime pillow numpy

Serviços opcionais

Se estiverem no ar, o app usa; se não, cai no fallback local sem quebrar.

curl localhost:11434/api/tags     # Ollama → copy
curl localhost:8010/api/system/status # inemavox → música/voz
curl localhost:8000/health         # inemaimg → cenário IA
Guia de uso · passo a passo

Do clone ao primeiro vídeo

Cinco passos. O terceiro é o único que você vai repetir.

1

Instalar e subir

Clona, instala as dependências Node e abre a página web na porta 3080.

git clone https://github.com/inematds/videoprodutos && cd videoprodutos
npm install
npm start        # → http://localhost:3080
2

Organizar a pasta (ou pegar o link)

Subpasta por produto com as fotos e um produto.json ou produto.md opcional (nome, preço, descrição, categoria). Fotos soltas na raiz viram um produto cada. Ou simplesmente use a URL da loja.

produtos/
  fone-x1/               ← um produto, várias fotos
    1.jpg 2.jpg
    produto.json         ← {"name":"Fone X1","price":"R$ 199","desc":"…","category":"tecnologia"}
  caneca-azul/
    foto.png
    produto.md           ← 1ª linha = nome, resto = descrição
  camiseta.jpg           ← foto solta = um produto
3

Adicionar à fila

Na aba Nova tarefa: cole a pasta (ou use "Procurar") ou a URL, escolha preset e estilo (ou deixe "Automático"), marque 16:9 e/ou 9:16 e clique em Adicionar à fila. A aba Fila mostra o progresso e o log ao vivo. Pela CLI é a mesma coisa:

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                       # tudo automático
4

Enfileirar um lote

Na aba Nova tarefa → Lote (ou --lote lista.txt): uma fonte por linha, campos opcionais separados por |. A fila processa em série e sobrevive a reinício do servidor.

# fonte | preset | estilo | formato | max=N | marca=Nome | sem-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   # só imagens
5

Pegar o resultado

Aba Projetos: player dos vídeos, todas as imagens por preset e os originais, com download. Em disco fica tudo em uma pasta autocontida:

~/projetos/output/videoprodutos/<id>/
  projeto.json           ← manifesto: produtos, copy, categoria, preset, estilo, arquivos
  originais/             ← fotos de entrada
  imagens/<preset>/      ← 1:1, 16:9, 9:16 · limpa e com texto
  videos/                ← <produto>-<estilo>-16x9.mp4, -9x16.mp4, _catalogo-*.mp4
+

Configurar LLM / imagem por IA (opcional)

Aba Configurações (grava no .env) ou edite o arquivo. Cada provedor pode ser none; o app continua funcionando com templates e presets locais.

LLM_PROVIDER=ollama          # none | ollama | openai (qualquer API compatível: 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 (clipes de câmera por IA, US$ 0) | kie (reservado)
APP_PASSWORD=                 # senha HTTP Basic — obrigatória numa VPS
☁

Rodar numa VPS sem GPU

Perfil pronto em deploy/: Agnes para copy, cenário e vídeo, edge-tts para a voz, rembg em CPU, libx264 no render, senha na frente. Testado em 2 vCPU / 4 GB.

git clone https://github.com/inematds/videoprodutos /root/projetos/videoprodutos
cd /root/projetos/videoprodutos && bash deploy/deploy.sh   # deps, venv, fontes, systemd
nano .env        # AGNES_API_KEY e APP_PASSWORD (modelo em deploy/env.vps.example)
systemctl restart videoprodutos                    # → http://IP:3080
Exemplos

Gerado no primeiro teste, sem retoque

Duas fotos de produto numa pasta, tudo em automático: o cachorro caiu em "pet" (preset natural, estilo natural) e a caixa de som em "tecnologia" (dark premium, estilo tech). Copy pelo Ollama local, recorte pelo rembg, narração Edge TTS.

Imagem 1:1 gerada no preset dark premium com título e preço
Imagem 1:1 "post" — preset dark-premium, título e tagline escritos pelo LLM, recorte automático.
Frame do vídeo 16:9 no estilo tech com benefício em destaque
Frame do vídeo 16:9 — cena de benefício, grade de cor "tech", overlay renderizado de SVG.
Frame do vídeo 9:16 com CTA e preço
Vídeo 9:16 — cena final com CTA e assinatura da marca (o preço entra como selo quando o produto tem preço).
Página web do videoprodutos com a fila de produção
A página web: nova tarefa, lote, fila com log ao vivo, projetos e configurações.
Roadmap

Onde isso vai

O núcleo (descoberta → imagens → vídeo → fila) está pronto. O que falta é refinamento e integração.

v1.0
Núcleo localPasta/URL, 9 presets, 6 estilos, automático por categoria, fila persistente, página web, CLI, configuração de LLM/imagem opcional.
v1.1
Motor de vídeo por IA + VPSClipes de câmera pela Agnes (plugável: kie e outros em lib/videoai.js), perfil de deploy sem GPU com senha, edge-tts e Freesound diretos.
v1.2
Edição de copy antes do renderRevisar título, benefícios e preço na fila antes de gerar o vídeo; re-render só do vídeo.
v1.3
Legendas e locução clonadaLegendas queimadas sincronizadas com a narração; voz clonada (chatterbox/rachel) como opção padrão quando a GPU estiver livre.
v2
Export HyperFrames e publicaçãoComposição HTML editável para quem quer mexer no motion, e envio direto para Metricool/agenda de posts.