Gere prompts automaticamente a partir de imagens no ComfyUI com um modelo de visão local

Rode um modelo de visão e linguagem localmente com o Ollama, deixe-o descrever cada esboço e escrever um prompt, e depois gere novas imagens com SDXL ou Flux e um ControlNet de profundidade. Milhares de variações de uma noite para outra, tudo offline.

Anton Tenitsky13 de outubro de 20266 min de leituraVersão em vídeo abaixo

Este guia foi traduzido do inglês com IA e pode conter erros. Leia o original.

Uma dançarina de túnica dourada num palco gerada a partir de um esboço a lápis, com o prompt escrito por um modelo de visão local

Escrever prompts é a parte lenta de gerar imagens em volume. Este fluxo a entrega a uma IA que enxerga: um modelo de visão e linguagem olha cada um dos seus esboços, o descreve e escreve um prompt novo. Depois o SDXL ou o Flux gera uma imagem nova que segue o esboço por meio de um ControlNet de profundidade.

Tudo roda localmente no seu computador, offline. Alimente-o com 10 ou 50 esboços antes de dormir e você pode acordar com alguns milhares de imagens.

Em resumo

  • O Ollama roda os modelos de linguagem localmente; o ComfyUI conversa com ele por meio de um pacote de nós.
  • Modelo: cerca de 4,7 GB é o ponto ideal. O LLaVA Q4 me deu os melhores prompts.
  • Ajustes que importam: keep-alive 0 com o Flux, máximo de tokens 512 para o Flux ou 77 para o SDXL, e uma seed randomizada.
  • Depois: o prompt mais um mapa de profundidade do esboço vão para o SDXL ou o Flux.

LLMs, MLLMs e VLMs, resumidamente

O ChatGPT original só recebia texto: um modelo de linguagem grande (LLM). O ChatGPT, o Gemini e o Grok são hoje modelos multimodais (MLLMs) que também recebem imagens, áudio e mais. Um modelo de visão e linguagem (VLM) é o de imagem e texto, e é isso que precisamos: algo que consiga olhar uma imagem e escrever sobre ela.

O que eu não sabia antes: dá para rodar tanto LLMs quanto VLMs no seu próprio computador, sem conexão com a internet.

1. Instale o Ollama

O Ollama roda modelos de linguagem localmente. Baixe o instalador (cerca de 700 MB; os modelos em si são maiores), execute-o e, se ele pedir, cole o comando que mostra num Prompt de Comando para terminar a configuração. Quando acabar, o ícone do Ollama aparece na bandeja do sistema. Não há nada a configurar; ele só precisa estar rodando junto com o ComfyUI.

A página de download do Ollama
O Ollama precisa estar rodando para o ComfyUI usar modelos de linguagem locais.

2. Instale os pacotes de nós

No Custom Nodes Manager do ComfyUI, uma busca por «VLM» mostra muitos pacotes. Muitos não são atualizados desde que o ComfyUI passou do Python 3.11 para o 3.12 e já não funcionam. Os dois que usei, e que funcionam:

Instale os dois e reinicie o ComfyUI.

O Custom Nodes Manager do ComfyUI listando pacotes de nós relacionados a VLM
Aparecem muitos pacotes de VLM; nem todos funcionam com o ComfyUI atual.

3. Escolha um modelo

Adicione um nó Ollama Text Describer para começar. A lista de modelos dele mostra nomes e tamanhos. Os modelos não vêm pré-instalados; na primeira vez que você escolhe um, ele é baixado para a sua pasta de usuário no disco do sistema. Você pode mudar essa pasta nas configurações do Ollama (clique no ícone da bandeja).

Dois incômodos a conhecer:

  • Os modelos baixados não mantêm nomes legíveis, então você não sabe quais já tem. Anote.
  • Modelos de texto não enxergam. Um LLM só produz texto; para descrever imagens você precisa de um modelo de visão.

Pelo que testei:

Tamanho do modelo Resultado
~350 MB (0,5B parâmetros) Basicamente inútil; mais burro que o GPT-3
~1 GB Ok, nada demais
~4,7 GB O melhor equilíbrio entre qualidade e tamanho
Acima de 5 GB Não fui além; ocupa VRAM demais ao lado do modelo de imagem

4. Descreva uma imagem e escreva um prompt

Para imagens, use o nó Ollama Image Describer. Ele recebe uma imagem, segue suas instruções e entrega texto, que vira o prompt. Conecte um nó de pré-visualização de texto para lê-lo.

Um esboço a lápis de uma mulher sentada carregado no nó Ollama Image Describer, com a descrição gerada ao lado
Entra um esboço; sai um prompt escrito.

Carreguei um dos meus esboços e usei o LLaVA Q4 (LLaVA com quantização de 4 bits), que deu os melhores prompts entre os modelos que testei. O nó tem dois campos de instruções. Descobri que o segundo é o que realmente conta. O meu dizia, em essência: crie um prompt para geração de imagem fotográfica desta pessoa neste cenário, e não use aspas, que alguns modelos colocam em todo lugar.

O campo de instruções pedindo um prompt para geração de imagem fotorrealista do sujeito, sem aspas
A instrução que faz o trabalho, incluindo «sem aspas».

Evite modelos «de pensamento». Eles escrevem o raciocínio («estou pensando em como responder…») em vez de um prompt, o que é inútil para passar a um modelo de imagem.

5. Os ajustes que importam

Os ajustes do Ollama Image Describer, incluindo keep alive, max tokens e seed
Keep-alive, max tokens e seed são os três ajustes para acertar.

Keep-alive. -1 mantém o modelo carregado na memória; 0 o descarrega depois de cada prompt. Normalmente uso 0. Com o SDXL e 16–24 GB de VRAM, você pode mantê-lo carregado e economizar alguns segundos por imagem. Com o Flux, tive que descarregá-lo toda vez, mesmo com 24 GB: caso contrário, o modelo de visão de 5 GB ocupava tanta memória que o render da imagem travava.

Máximo de tokens. Combine com o modelo de imagem: 512 para o Flux, mas só 77 para o SDXL, o tamanho da janela do seu codificador de texto.

Seed. A seed do descritor não muda sozinha, então você receberia o mesmo prompt a cada execução. Adicione o nó Seed do rgthree, configure-o para randomizar a cada vez e conecte-o ao descritor. Agora cada execução escreve um prompt novo. Combinado com um ajuste nas instruções («num lugar específico», «neste cenário»), cada esboço produz um fluxo de ideias diferentes.

Deixei a repeat penalty e a temperature nos padrões; são bons o bastante.

6. O fluxo completo: de esboços a imagens, automaticamente

A versão completa, que está no meu Patreon, junta tudo:

  1. O Load Image Batch pega o próximo esboço de uma pasta a cada execução.
  2. O Ollama Image Describer escreve um prompt novo para ele. Meus esboços eram de mulheres diferentes em poses diferentes, então a mesma instrução produziu um prompt diferente para cada uma.
  3. O prompt vai para o prompt positivo do modelo de imagem.
  4. O Depth Anything transforma o esboço num mapa de profundidade, e o Apply ControlNet o usa para manter a pose.
  5. O KSampler gera a imagem. Para o SDXL usei o Juggernaut XL (cerca de 6 GB).

A largura e a altura são definidas uma vez, como nós de inteiros, e reutilizadas no redimensionamento, no mapa de profundidade e na tela.

Uma imagem gerada de uma mulher saltando no ar, feita a partir de um dos esboços
Outro esboço, outro prompt, uma imagem completamente diferente.

Com o Flux é o mesmo fluxo, usando o XLabs Sampler e o Flux dev no lugar do SDXL. O Flux foi mais criativo e deu mais variação. Lembre do ajuste de keep-alive.

O poder disso está na escala: prepare 10 ou 50 esboços, rode durante a noite com uma seed randomizada e você obtém milhares de imagens diferentes, cada uma ainda seguindo um dos seus desenhos. Para outras formas de alimentar prompts em volume, veja as listas de prompts e o meu nó Prompt Cycler.

Assista à versão em vídeo (11:31)

Tudo o que está acima também está no vídeo, se você preferir acompanhar na tela. O vídeo está em inglês.

Perguntas frequentes

Que modelo de visão devo usar no Ollama?

Nos meus testes, os modelos de cerca de 4,7 GB foram o melhor equilíbrio. Os minúsculos de 350 MB eram basicamente inúteis, e os de 1 GB eram ok, mas nada demais. Um LLaVA quantizado (Q4) me deu os melhores prompts.

Quantos tokens o prompt pode ter?

Até 512 tokens para o Flux, mas só 77 para o SDXL. Ajuste o máximo de tokens do descritor para combinar com o modelo de imagem.

Por que meu render do Flux trava depois da descrição?

O modelo de visão ainda está na VRAM. Defina o keep-alive em 0 para que ele seja descarregado depois de escrever cada prompt. Com o Flux, nem 24 GB de VRAM bastaram para manter os dois carregados.

Por que recebo o mesmo prompt toda vez?

A seed do descritor não muda sozinha. Conecte um nó randomizador de seed para que cada execução receba uma seed nova, e uma ideia nova.

Anton Tenitsky é artista 3D com mais de 15 anos em computação gráfica, que trabalhou com Nickelodeon, Gameloft, Marvel Rivals e muitos outros clientes. Mais sobre mim

Guias relacionados