Geração de imagens Gemini com prompt

Descreva o problema/erro/pergunta

Olá a todos,
Estou enfrentando um problema com um comportamento de execução do tipo aninhado dentro de um nó Loop Over Images.

Minha Configuração:

  1. Loop Over Images: Processa uma lista de imagens buscadas do Google Drive uma por uma (Batch Size = 1).
  2. Dentro do Loop: Para cada imagem, cria uma pasta (Create Concept Folder) e baixa o arquivo de imagem.
  3. Expansão de Item: Em seguida, um nó Code (Build Prompts) pega os dados da imagem única e gera 6 variações de prompt diferentes (expandindo com sucesso 1 item de entrada em 6 itens de saída).
  4. Processamento: Os nós subsequentes (Gemini data, HTTP Request, Upload Concept Image) executam 6 vezes perfeitamente para a primeira imagem.
  5. Retorno do Loop: No final da cadeia de execução, uso um nó Limit configurado com Max Items = 1 para reduzir os 6 itens de volta para exatamente 1 item antes de alimentá-lo novamente na porta de entrada Loop Over Images.

O Problema:

  • A primeira iteração funciona perfeitamente (cria a pasta, gera e carrega todas as 6 imagens de conceito).
  • Na segunda iteração (para a segunda imagem), o loop é acionado corretamente, e o nó Create Concept Folder é executado com sucesso.
  • Porém, logo após criar a pasta, o fluxo de trabalho para completamente. Os nós subsequentes (Download Image, Build Prompts, etc.) não executam de forma alguma para o segundo item.
    Parece que o n8n perde a noção da sequência de execução ou do índice de item durante a segunda iteração do loop, porque a contagem de itens foi expandida de 1 para 6 dentro do corpo do loop, embora eu tenha usado um nó Limit para retornar exatamente 1 item ao contador do loop.
    Como posso resetar adequadamente o contexto/índice de item dentro do loop para que a segunda iteração seja executada completamente?
    (Nota: estou anexando a captura de tela do layout do meu fluxo de trabalho abaixo)

Qual é a mensagem de erro (se houver)?

Por favor, compartilhe seu fluxo de trabalho


(Selecione os nós em sua tela e use os atalhos de teclado CMD+C/CTRL+C e CMD+V/CTRL+V para copiar e colar o fluxo de trabalho.)

Compartilhe a saída retornada pelo último nó

Informações sobre sua configuração n8n

  • Versão do n8n:
  • Banco de dados (padrão: SQLite):
  • Configuração n8n EXECUTIONS_PROCESS (padrão: own, main):
  • Executando n8n via (Docker, npm, n8n cloud, aplicativo desktop):
  • Sistema operacional:

Oi, isso parece ser um problema de estrutura de loop e não algo que você possa corrigir “resetando” o índice do item. O nó Limit apenas reduz o número de itens sendo passados para frente; ele não restaura o contexto do item do loop externo original. No n8n, a vinculação de itens importa quando um nó expande ou transforma itens, especialmente quando expressões posteriormente dependem de .item ou dados do nó anterior.

Eu reestruturaria como um loop aninhado adequado:

Loop externo: Loop Over Images
Create Concept Folder
Download Image
Build Prompts

Depois loop interno: Loop Over Prompts
Gemini data
Generate Concept Image
Prepare Binary
Upload Concept Image
→ volta para Loop Over Prompts

Depois que o Loop Over Prompts interno terminar, conecte sua saída Done de volta ao nó Loop Over Images externo para que a próxima imagem comece. Não alimente um dos seis itens prompt/imagem gerados de volta para o loop de imagem externo. O nó Loop Over Items do n8n é destinado a processar lotes e depois continuar pelos caminhos de loop/conclusão, e nós frequentemente processam listas automaticamente, então a contagem de itens deve ser controlada pela estrutura do loop em vez de ser corrigida com Limit.

Além disso, no nó Code Build Prompts, copie os campos de imagem/pasta originais em cada um dos 6 itens de prompt gerados, por exemplo imageId, imageName, folderId e caminho do arquivo baixado. Dessa forma, a etapa de upload não precisa confiar em referências de itens de loop externo frágeis. Se você está usando expressões .item posteriormente, certifique-se de que o nó Code preserve a vinculação de itens/pairedItem, porque o n8n precisa dessa ligação quando um item de entrada se torna vários itens de saída.

Oi @Gokhan_ARSLANTAS Bem-vindo!
Você pode deletar o loop inteiramente. Create Concept Folder já executa uma vez por imagem recebida, então alimente a lista de arquivos do Drive direto nele, e deixe um nó Code emitir cada combinação de imagem x prompt como itens simples (2 imagens, 6 prompts = 12 itens), cada um carregando seu próprio folderId, fileId e prompt:

const scenarios = ['scenario 1', 'scenario 2', 'scenario 3', 'scenario 4', 'scenario 5', 'scenario 6'];
const images = $('List Images').all();

return $input.all().flatMap((folder, i) => scenarios.map((s, n) => ({
  json: {
    folderId: folder.json.id,
    fileId: images[i].json.id,
    filename: `${images[i].json.name}-v${n + 1}.png`,
    prompt: `${images[i].json.name}, ${s}`
  }
})));

Substituir List Images pelo nome do seu nó de lista do Drive. Download Image, Gemini data, HTTP Request e Upload Concept Image então executam uma vez por item, então tudo fica em uma linha reta sem nó de loop e sem nenhuma aresta se alimentando de volta em nada.
Se a API de imagem impuser limite de taxa para você, acelere o nó HTTP Request com Add Option > Batching (Items per Batch = 1, Batch Interval = 1000) em vez de colocar um loop de volta.

Olá James, Muito obrigado pelo seu feedback. Tentei mas não consigo resolver o problema. Estou recebendo ajuda também de um agente de IA para colocar informações nos nós. Talvez seja por isso que não consigo. Atenciosamente

Caro Anshul, vou tentar agora. Obrigado pelo seu feedback. Portanto, estou usando por imagem para 6 prompts diferentes. Não há duas imagens de entrada ao mesmo tempo. Sua solução ainda está OK?

Oi @Gokhan_ARSLANTAS
Sim. Uma imagem apenas significa que o nó Code emite 6 itens em vez de 12, e Download Image, Gemini data, HTTP Request e Upload Concept Image cada um é executado 6 vezes. Nada mais muda.
Se for sempre exatamente uma imagem, você pode descartar o emparelhamento de índices e manter tudo simplificado:

const scenarios = ['scenario 1', 'scenario 2', 'scenario 3', 'scenario 4', 'scenario 5', 'scenario 6'];
const image = $('List Images').first().json;
const folderId = $input.first().json.id;

return scenarios.map((s, n) =
  {
  json: {
    folderId,
    fileId: image.id,
    filename: `${image.name}-v${n + 1}.png`,
    prompt: `${image.name}, ${s}`
  }
}));

Deixe o nó Code no Mode: Run Once for All Items, que é o padrão, já que o código retorna o array inteiro de 6 itens.

Confirmo o diagnóstico de James, é exatamente o problema clássico de misturar níveis de loop em n8n.

O node Limit não “reseta” nada do contexto do loop externo — apenas filtra quantos items passam. O Loop Over Images continua esperando que o fluxo que volta ao seu input tenha a mesma “forma” (linhagem de items) que o que saiu, e quando você coloca um node Code que expande 1→6 no meio, quebra essa linhagem mesmo que depois a reduza a 1 com Limit.

A solução de loop aninhado que James propõe é a correta. Alguns pontos a observar quando você implementá-la:

  • No node Code Build Prompts, certifique-se de devolver explicitamente pairedItem em cada um dos 6 items gerados, apontando para o índice do item original. Se não fizer isso, qualquer expressão posterior que dependa de dados do item pai (imageId, folderId, etc.) pode falhar silenciosamente em vez de gerar um erro.
  • O loop interior (Loop Over Prompts) precisa de seu próprio Batch Size bem configurado — se deixar no mesmo tamanho que o exterior por erro de copiar e colar, você volta a ter o mesmo sintoma.
  • Verifique se o output “Done” do loop interior (não o “Loop”) é o que se conecta de volta ao exterior — é um erro comum conectar a porta errada e ficar preso em um loop infinito ou curto.

Com isso o problema deve se resolver da segunda iteração em diante.