Fluxo de geração de vídeo no n8n: template gratuito que roda sozinho

Um template gratuito de fluxo de trabalho no n8n que transforma uma lista de temas em clipes de vídeo prontos, de 5 segundos, com áudio. Cole o JSON, adicione uma credencial e deixe o loop de consulta coletar o link de cada MP4 enquanto você lê como funcionam os nós, os prompts e os limites.

Fluxo de geração de vídeo no n8n: template gratuito que roda sozinho
Cristian Da Conceicao
Fundador do Picasso IA

A maioria dos tutoriais de automação de vídeo para na primeira chamada de API. O trabalho de verdade começa logo depois, porque um job de vídeo leva um minuto ou mais, e um fluxo que dispara uma requisição e segue em frente nunca vê o resultado. Este fluxo de geração de vídeo no n8n resolve essa lacuna. Ele recebe um tema, monta a descrição da cena, envia a renderização, espera, verifica o status do job em loop e entrega um link de MP4 pronto. O template gratuito abaixo cola direto no n8n, e cada nó é explicado para que você possa adaptá-lo ao seu canal, à sua loja ou ao seu cliente.

O que o template constrói

Pense nele como uma linha de montagem com cinco estações. Um agendamento o acorda, uma lista de temas o alimenta, um construtor de prompt transforma cada tema em uma descrição de cena, uma requisição HTTP envia o job para um modelo de vídeo, e um loop de consulta espera até que o clipe exista. Nada nele exige um complemento pago, e o fluxo inteiro cabe em uma única tela da área de trabalho do n8n.

Este tipo de automação sem código compensa sempre que o mesmo tipo de clipe é necessário repetidamente:

  • Publicações curtas diárias para um canal de nicho, um tema por manhã.
  • Teasers de produtos para o catálogo de uma loja, um clipe por item.
  • Relatórios para clientes que precisam de um visual novo de 5 segundos toda semana.
  • Bibliotecas de B-roll para editores que ficam sem imagens de banco.

As cinco etapas

EtapaNó do n8nFunção
1. GatilhoSchedule TriggerInicia a execução todos os dias às 9:00
2. TemasCodeRetorna um item por ideia de vídeo
3. PromptCodeTransforma um tema em uma descrição de cena cinematográfica
4. RenderizaçãoHTTP RequestEnvia o job e recebe um ID de previsão
5. Consulta e salvamentoWait, HTTP Request, IfRepete até que a URL do MP4 esteja pronta

O clipe vem do PicassoIA Video, um modelo de texto para vídeo e de imagem para vídeo que renderiza 5 segundos a 24 quadros por segundo com áudio sincronizado. Você escolhe 480p para a renderização mais rápida ou 720p para uma saída mais nítida, e a proporção pode ser 16:9, 9:16, 1:1 e várias outras, então um único template atende a YouTube Shorts, Reels e publicações na horizontal.

Cinco fichas de anotação presas por barbante vermelho sobre uma mesa de carvalho, vistas de cima

O que você precisa antes

Três coisas, nada exótico:

  • Uma instância do n8n. Tanto a Community Edition auto-hospedada quanto o n8n Cloud funcionam.
  • Um token da API do PicassoIA que começa com pia_sk_, criado na sua conta pela página da API do PicassoIA.
  • Cinco minutos para importar o JSON e anexar uma credencial.

💡 Confira o plano primeiro. A página da API diz que as previsões estão atualmente gratuitas e não usam créditos, enquanto os detalhes dos planos listam o acesso à API em planos específicos. Leia os termos atuais antes de agendar centenas de renderizações, para que o custo que você planeja seja o mesmo que você paga.

Vista de baixo para cima de um notebook, um caderno de checklist e uma caneca de café sobre uma mesa

Por que o n8n combina com jobs de vídeo

Jobs de vídeo são assíncronos

Um prompt de texto vira uma imagem em cerca de um segundo, mas um vídeo leva bem mais tempo. Os clipes de exemplo na página do modelo PicassoIA Video listam tempos de geração de aproximadamente 31, 40 e 78 segundos. Uma única requisição HTTP, portanto, não consegue devolver o vídeo. Ela retorna um ID de previsão, e você pede o status de novo e de novo até que ele indique succeeded.

Esse padrão é exatamente o que o n8n faz bem. O nó Wait pausa a execução, o nó If decide se volta ao loop ou segue em frente, e o Loop Over Items impede que um tema atropele o seguinte. Você desenha a lógica em vez de escrever um script de consulta.

Vista por cima do ombro de um desenvolvedor observando um diagrama de caixas conectadas em um monitor

Auto-hospedagem mantém os custos estáveis

O n8n pode rodar no seu próprio hardware. Um mini PC pequeno sempre ligado, um servidor doméstico ou uma VPS barata já bastam, porque o fluxo só envia requisições HTTP e espera. O trabalho pesado acontece nas GPUs do modelo de vídeo, não na sua máquina. A Community Edition não tem custo para você rodar, então o único custo variável que sobra no pipeline é a própria geração de vídeo. A documentação do n8n inclui um comando Docker curto que põe uma instância no ar em poucos minutos, e uma política de reinício a mantém ativa depois de reinicializações, o que importa para um agendamento que precisa disparar às 9:00 todas as manhãs.

Um pequeno mini PC preto ao lado de um roteador doméstico em uma prateleira de madeira

O JSON do fluxo

Cole no n8n

Copie o bloco abaixo, abra um fluxo em branco, clique na área de trabalho e pressione Ctrl+V (Cmd+V no Mac). O n8n recria todos os 11 nós e suas conexões.

{
  "name": "Video Generation Workflow",
  "nodes": [
    {
      "parameters": { "rule": { "interval": [ { "field": "days", "triggerAtHour": 9 } ] } },
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [0, 0]
    },
    {
      "parameters": {
        "jsCode": "return [\n  { json: { topic: 'Pour-over coffee brewed in a sunlit kitchen', ratio: '9:16' } },\n  { json: { topic: 'A desk setup tour at golden hour', ratio: '16:9' } }\n];"
      },
      "name": "Topics",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [220, 0]
    },
    {
      "parameters": { "options": {} },
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [440, 0]
    },
    {
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const prompt = `${$json.topic}. Slow dolly-in at eye level, soft natural window light, shallow depth of field, realistic textures. Natural ambient sound that matches the scene.`;\nreturn { json: { ratio: $json.ratio, prompt } };"
      },
      "name": "Build Prompt",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [660, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.picassoia.com/v1/models/picassoia/picassoia-video/predictions",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ input: { prompt: $json.prompt, resolution: '720p', aspect_ratio: $json.ratio, save_audio: true } }) }}",
        "options": {}
      },
      "name": "Create Video",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [880, 0]
    },
    {
      "parameters": { "amount": 30, "unit": "seconds" },
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [1100, 0]
    },
    {
      "parameters": {
        "url": "=https://api.picassoia.com/v1/predictions/{{ $json.id }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "name": "Check Status",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [1320, 0]
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" },
          "conditions": [
            {
              "id": "finished",
              "leftValue": "={{ ['succeeded', 'failed', 'canceled'].includes($json.status) }}",
              "rightValue": "",
              "operator": { "type": "boolean", "operation": "true", "singleValue": true }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "name": "Finished?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1540, 0]
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" },
          "conditions": [
            {
              "id": "succeeded",
              "leftValue": "={{ $json.status }}",
              "rightValue": "succeeded",
              "operator": { "type": "string", "operation": "equals" }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "name": "Succeeded?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1760, -100]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "url", "name": "videoUrl", "value": "={{ Array.isArray($json.output) ? $json.output[0] : $json.output }}", "type": "string" },
            { "id": "pid", "name": "predictionId", "value": "={{ $json.id }}", "type": "string" }
          ]
        },
        "options": {}
      },
      "name": "Save Result",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1980, -100]
    },
    {
      "parameters": { "errorMessage": "={{ 'Video job ended as ' + $json.status }}" },
      "name": "Stop and Error",
      "type": "n8n-nodes-base.stopAndError",
      "typeVersion": 1,
      "position": [1980, 100]
    }
  ],
  "connections": {
    "Schedule Trigger": { "main": [[{ "node": "Topics", "type": "main", "index": 0 }]] },
    "Topics": { "main": [[{ "node": "Loop Over Items", "type": "main", "index": 0 }]] },
    "Loop Over Items": { "main": [[], [{ "node": "Build Prompt", "type": "main", "index": 0 }]] },
    "Build Prompt": { "main": [[{ "node": "Create Video", "type": "main", "index": 0 }]] },
    "Create Video": { "main": [[{ "node": "Wait", "type": "main", "index": 0 }]] },
    "Wait": { "main": [[{ "node": "Check Status", "type": "main", "index": 0 }]] },
    "Check Status": { "main": [[{ "node": "Finished?", "type": "main", "index": 0 }]] },
    "Finished?": { "main": [[{ "node": "Succeeded?", "type": "main", "index": 0 }], [{ "node": "Wait", "type": "main", "index": 0 }]] },
    "Succeeded?": { "main": [[{ "node": "Save Result", "type": "main", "index": 0 }], [{ "node": "Stop and Error", "type": "main", "index": 0 }]] },
    "Save Result": { "main": [[{ "node": "Loop Over Items", "type": "main", "index": 0 }]] }
  }
}

💡 Teste pequeno primeiro. Mude resolution para 480p e mantenha um único tema na lista na primeira execução. Uma renderização a 480p é a mais rápida, então você confirma o funcionamento em minutos em vez de esperar um lote completo.

Conecte seu token do PicassoIA

  1. No n8n, abra Credentials e crie uma nova credencial Header Auth.
  2. Defina Name como Authorization.
  3. Defina Value como Bearer pia_sk_ seguido do seu token.
  4. Abra Create Video e Check Status e selecione essa credencial nos dois nós.

A URL base https://api.picassoia.com/v1, o esquema Bearer e as rotas no estilo Replicate (POST /models/{owner}/{name}/predictions para iniciar um job, GET /predictions/{id} para ler o job) vêm da documentação da API do PicassoIA. Confirme os nomes dos campos com os exemplos de código de lá antes de escalar, já que o template segue o formato documentado em vez de adivinhá-lo.

Como os nós funcionam

Escrevendo prompts que se sustentam

A página do modelo recomenda descrições cinematográficas e cronológicas. Um bom prompt se lê como um mini roteiro de cinco segundos: o que está no quadro, o que se move, como a câmera se comporta e o que você ouve.

ParteExemploPor que importa
AssuntoUma chaleira de bico de ganso acima de uma jarra de vidroDefine o quadro de abertura
MovimentoA água cai em um fio fino, o vapor sobeDá um verbo ao clipe
CâmeraTravelling lento para frente na altura do balcãoControla enquadramento e ritmo
LuzLuz suave de janela pela manhãMantém o visual coerente
SomUm despejo silencioso, uma colher tocando a cerâmicaO áudio é renderizado junto com o clipe

O nó Build Prompt incorpora câmera, luz e som em uma única frase e troca apenas o tema. Os prompts podem ter até 4.000 caracteres, então você tem espaço para acrescentar as regras da sua marca, como "sem texto na tela" ou "paleta de cores quentes".

Vista de baixo para cima de uma câmera em tripé filmando uma montagem de café coado

O loop de consulta em detalhes

Quatro nós formam o loop, e eles rodam nesta ordem:

  1. Create Video retorna uma previsão com um id e um status inicial.
  2. Wait pausa por 30 segundos, tempo suficiente para que a maioria das renderizações de exemplo termine após uma ou duas verificações.
  3. Check Status lê a previsão de novo com GET /predictions/{id}.
  4. Finished? envia o item adiante se o status for succeeded, failed ou canceled, e volta para Wait se o job ainda estiver rodando.

Um job travado não pode girar para sempre, porque as previsões têm um timeout de 3 horas e terminam como falha por conta própria. Se quiser um teto mais apertado, adicione um contador em um nó Code e pare após 20 verificações.

Um comportamento para conhecer: o Stop and Error interrompe a execução inteira, incluindo os temas que ainda esperam na lista. Se um clipe ruim não deve bloquear os demais, substitua esse nó por um alerta no Slack ou por e-mail e conecte-o de volta ao Loop Over Items.

Close-up de um temporizador de cozinha vintage com o mostrador no meio do giro

Enviando os clipes para onde eles pertencem

O nó Save Result deixa você com um videoUrl e um predictionId para cada tema. Dali em diante, o fluxo é um pipeline normal do n8n, então o clipe pronto pode ir para onde sua equipe já trabalha:

DestinoNó do n8nUso típico
Calendário de conteúdoGoogle Sheets, Append RowRegistrar tema, URL e data para revisão
Canal da equipeSlack ou TelegramPostar o link assim que um clipe ficar pronto
Armazenamento em nuvemHTTP Request (resposta de arquivo), depois Google DriveManter sua própria cópia do MP4
PublicaçãoNó do YouTube ou de um agendador de redes sociaisEnfileirar o clipe para postagem

Baixe o arquivo para o seu próprio armazenamento se precisar dele a longo prazo, em vez de depender de um link hospedado para sempre. Vale manter também uma etapa de revisão humana: envie o link primeiro para um canal e publique somente depois que alguém tiver assistido aos cinco segundos, porque clipes gerados podem se afastar do prompt.

Adicione um LLM para os prompts

Três LLMs que valem o teste

O nó Build Prompt é um template de texto. Ele funciona, mas todos os clipes acabam com o mesmo formato. Um modelo de linguagem consegue escrever um plano de cena distinto para cada tema. Antes de conectar um deles ao n8n, rascunhe e teste sua instrução no navegador, onde você pode comparar as saídas lado a lado:

ModeloPor que testar
Claude Sonnet 5Lida bem com templates de instrução longos e com muitas regras
GPT 5 StructuredDevolve respostas em JSON limpo que se mapeiam para os campos do n8n
Gemini 3.5 FlashRápido e leve, adequado a lotes de prompts curtos

Uma mulher organizando notas adesivas amarelas em uma grade ao lado de um monitor com uma janela de chat

Onde fica o nó do LLM

Apague o Build Prompt e coloque um nó Basic LLM Chain no lugar, com um sub-nó de modelo de chat anexado. No n8n, esse sub-nó usa a credencial do provedor que você já tem, então o token do PicassoIA fica dedicado ao vídeo. Dê à cadeia uma instrução como esta:

You write shot descriptions for 5-second AI video clips. Given a topic, return JSON with "prompt" (one cinematic paragraph with subject, motion, camera, light and sound) and "ratio" ("9:16" or "16:9"). No text overlays and no brand names.

Extraia a resposta em JSON para dois campos chamados prompt e ratio, e o nó Create Video continua funcionando sem nenhuma outra mudança.

💡 Mantenha um plano B. Se o LLM devolver um JSON malformado, direcione esse item para o prompt antigo baseado em template de texto em vez de fazer a execução falhar.

Escolhendo o modelo de vídeo

Texto para vídeo ou imagem para vídeo

Prompts só de texto são o caminho mais simples. Quando você precisa que o quadro de abertura combine com a foto de um produto ou com o visual de uma marca, comece a partir de uma imagem. O PicassoIA Video aceita um campo opcional image, usa-o como primeiro quadro e herda a proporção dela, então o campo aspect_ratio é ignorado quando há uma imagem.

A forma prática de alimentá-lo é adicionar um campo imageUrl a cada tema, gerado antes com o PicassoIA Image, e depois alterar o corpo do Create Video para:

"jsonBody": "={{ JSON.stringify({ input: { prompt: $json.prompt, image: $json.imageUrl, resolution: '720p', save_audio: true } }) }}"

Você também pode gerar o quadro dentro do fluxo com uma segunda previsão, mas ela precisa de sua própria etapa de Wait e de verificação de status, então comece com URLs já preparadas.

Tabela de comparação de modelos

No momento em que escrevo (início de outubro de 2026), a API do PicassoIA lista quatro modelos: PicassoIA Image, PicassoIA Image Editor Pro, PicassoIA Video e Seedance 2.5 Lite. Os outros modelos de vídeo abaixo rodam no app do PicassoIA, o que os torna úteis para testar um prompt antes de automatizá-lo.

ModeloPonto forteNeste template
PicassoIA VideoClipes de 5 s com áudio, 480p ou 720p, entrada de texto ou imagemSim
Seedance 2.5 LiteClipes de até 10 segundosSim, troque o slug e confira os campos de entrada
Veo 3.1 FastTexto para vídeo em 1080pSomente no app
Kling v3 VideoMovimento cinematográficoSomente no app
Wan 2.7 I2VAnima qualquer imagem estáticaSomente no app

Para trocar o template para o Seedance 2.5 Lite, altere picassoia-video na URL do Create Video para seedance-2.5-lite, depois abra a página do modelo e combine os campos de entrada.

Um editor de vídeo visto por trás, sentado em uma mesa com três monitores mostrando quadros pausados

Erros que quebram as execuções

Ignorar o limite de concorrência

Uma conta pode rodar 5 previsões ao mesmo tempo, e esse limite é compartilhado entre todos os tokens e conexões MCP da conta. O Loop Over Items com tamanho de lote 1 fica bem abaixo dele. Se você aumentar o tamanho do lote para acelerar as coisas, nunca passe de 5, e lembre que qualquer outra coisa que use a mesma conta também consome esse mesmo limite.

Um barista colocando a quinta xícara de café em uma bandeja de madeira no balcão de um café

Colocar credenciais fixas nos nós

É tentador colar o token direto no cabeçalho de um nó HTTP. O JSON exportado do fluxo de trabalho viaja: ele acaba em conversas, repositórios e posts de fórum. Mantenha o token no armazenamento de credenciais do n8n, compartilhe apenas o JSON e trate um token pia_sk_ vazado como uma senha, substituindo-o de imediato.

Crie seu primeiro clipe hoje

A forma mais rápida de ter um pipeline funcionando é começar manualmente. Abra o PicassoIA Video, escreva um prompt no formato da tabela acima e acompanhe o resultado. Quando o clipe estiver do jeito certo, cole esse prompt no nó Topics e deixe o n8n repeti-lo em um agendamento.

Se seus clipes partirem de uma imagem estática, faça o primeiro quadro com o PicassoIA Image e experimente algumas seeds até que o plano de abertura seja o que você quer. Navegue pelo catálogo completo em picassoia.com/en/all-models, escolha um favorito e transforme sua próxima ideia em um clipe que seu próprio fluxo renderiza enquanto você faz outra coisa.

Comece com um prompt, um clipe e uma execução agendada. Quando esse ciclo funcionar, adicionar temas, uma etapa de LLM ou um nó de entrega é só questão de arrastar mais uma caixa para a área de trabalho. Seu primeiro vídeo automatizado está a um Ctrl+V de distância, então abra o PicassoIA, rode seu primeiro prompt e veja o que cinco segundos de movimento podem fazer pela sua próxima publicação.

Compartilhe este artigo

Escolha seu idioma