ComfyUI modular: um gráfico para txt2img, img2img, upscale
Crie um único fluxo de trabalho do ComfyUI para txt2img, img2img e upscale usando bypass, o parâmetro denoise do KSampler e templates reutilizáveis.
On this page
- TL;DR
- Por que fluxos de trabalho modulares importam
- O mecanismo de alternância: bypass, não excluir
- Um gráfico, três modos
- Ramos de condicionamento opcionais
- Agrupamento: apenas visual, não reutilizável
- Tabela de referência de configurações
- Erros e correções comuns
- Perguntas frequentes (FAQ)
- Links internos
- Fontes
Fluxos de trabalho modulares no ComfyUI: um gráfico para txt2img, img2img, upscale
TL;DR
- Alterne qualquer estágio com
Ctrl + B. Nós em bypass permanecem na tela, mas são removidos da execução. - Um gráfico, três modos:
EmptyLatentImagepara txt2img,VAEEncode+denoise < 1.0para img2img,UpscaleModelLoader → ImageUpscalepara upscale. - Agrupe para clareza, não para reutilização:
Ctrl + Grecolhe visualmente. Para reutilização real, use templates.jsonou um nó personalizado.
Por que fluxos de trabalho modulares importam
Fluxos de trabalho do ComfyUI são grafos acíclicos direcionados. Cada tarefa — carregar modelo, codificar prompt, amostrar, decodificar, aplicar upscale — é um nó discreto com entradas e saídas tipadas. Como o grafo é data-flow e não código imperativo, dá para reconectar, colocar em bypass ou duplicar ramificações sem reescrever a lógica. Um fluxo modular mantém estágios opcionais (ControlNet, IPAdapter, upscaler) em ramificações separadas e passíveis de bypass, então o mesmo .json atende text-to-image, image-to-image e high-res fix sem duplicação.
O mecanismo de alternância: bypass, não excluir
Como o bypass funciona
Selecione qualquer nó e pressione Ctrl + B. O ComfyUI o remove do grafo de execução e conecta as entradas diretamente às saídas. O nó permanece na tela (esmaecido) para que você possa reativá-lo instantaneamente com outro Ctrl + B.
Fonte: README do ComfyUI: "Ctrl+B— Bypass selected nodes (acts like the node was removed from the graph and the wires reconnected through)" [^1]
Um "Bypass Node" no botão direito pode existir em versões recentes da UI, mas o mecanismo documentado é Ctrl + B.
Quando usar bypass vs. excluir
Cenário | Ação ----------|-------- Desativação temporária | Ctrl + B Remoção permanente | Excluir e reconectar manualmente Trocar de modelo | Manter o nó, mudar a entrada do loader
Um gráfico, três modos
O pivô é o KSampler. Sua entrada latent_image e o parâmetro denoise determinam o modo de geração.
txt2img (geração pura)
EmptyLatentImage → KSampler (denoise = 1.0) → VAEDecode
EmptyLatentImage cria ruído puro na resolução alvo. denoise = 1.0 significa que o sampler ignora totalmente a estrutura latente de entrada.
img2img (transformação guiada)
LoadImage → VAEEncode → KSampler (denoise < 1.0) → VAEDecode
VAEEncode comprime a imagem de entrada no espaço latente. A documentação do KSampler diz que "lower values will maintain the structure of the initial image allowing for image to image sampling" [^2]. denoise < 1.0 preserva essa estrutura; valores mais baixos ficam mais próximos da fonte, valores mais altos permitem desvios mais criativos.
upscale (high-res fix)
KSampler → VAEDecode → UpscaleModelLoader → ImageUpscale → (opcional) VAEDecode again
UpscaleModelLoader lê um arquivo de modelo de models/upscale_models/ (por exemplo, 4x-UltraSharp.pth). Para um high-res fix real, insira um segundo KSampler após ImageScale → VAEEncode, seguindo o padrão de duas passagens ligado nos exemplos do ComfyUI [^1].
Ramos de condicionamento opcionais
ControlNet (integrado)
ControlNetApply e ControlNetApplyAdvanced são nós integrados. Eles recebem:
- condicionamento positivo/negativo
- modelo
control_net(carregado viaControlNetLoader) - imagem pré-processada: Canny, OpenPose, Depth, etc.
strength(0–10, recomendado 0.5–1.5)
A saída é o condicionamento modificado. Para desativar: coloque ControlNetApply em bypass.
Fonte: Documentação do ControlNetApply: "Controls the strength of network adjustments, value range 0~10. Recommended values between 0.5~1.5 are reasonable." [^3]
IPAdapter (terceiros)
IPAdapter não é um nó integrado. Ele vem de pacotes de nós personalizados da comunidade (por exemplo, comfyui-ipadapter). A cadeia típica:
LoadImage → IPAdapterEncoder → IPAdapterApply → conditioning
Para desativar: coloque IPAdapterApply em bypass. O IPAdapter não tem chave liga/desliga integrada separada do bypass.
Agrupamento: apenas visual, não reutilizável
Ctrl + G cria um grupo visual recolhível. Ajuda a legibilidade, mas não cria um subgrafo chamável, não permite reutilização por arrastar e soltar e não exporta um componente independente.
Para reutilização real:
Abordagem | Como funciona | Contrapartida ----------|--------------|-------------- Templates de workflow | Salve um .json apenas com o subgrafo; importe via Workflows → Open | Conexão manual a cada vez Nó personalizado (Python) | Escreva um nó que construa internamente o subgrafo | Requer Python, API mais limpa Copiar e colar + reagrupar | Ctrl + C / Ctrl + V entre abas | Mais rápido para reutilização pontual
Fonte: README do ComfyUI: "Ctrl+G— Group selected nodes" — agrupar é um atalho de UI, não um sistema de módulos [^1].
Tabela de referência de configurações
Parâmetro | txt2img | img2img | Upscale (HR fix) | Fonte -----------|---------|---------|------------------|-------- KSampler latent_image | EmptyLatentImage | VAEEncode(LoadImage) | Primeira passagem: EmptyLatentImage; segunda passagem: VAEEncode(ImageScale) | [^2] KSampler denoise | 1.0 | qualquer valor abaixo de 1.0 | Primeira passagem: 1.0; segunda passagem: abaixo de 1.0 | [^2] ControlNet strength | 0.5–1.5 se usado | 0.5–1.5 | Normalmente desligado na passagem de upscale | [^3] Modelo de upscale | — | — | exemplo 4x-UltraSharp.pth em models/upscale_models/ | [^4] Checkpoint loader | CheckpointLoaderSimple | CheckpointLoaderSimple | compartilhado entre todas as passagens | [^5]
Erros e correções comuns
Sintoma | Causa | Correção ---------|-------|----- "Load > Load (custom nodes)" não encontrado | A instalação de nós personalizados não carrega workflows | Use Workflows → Open (Ctrl+O) ou arraste o .json para a tela [^6] Nó IPAdapter ausente | IPAdapter não é integrado | Instale um pacote de nós personalizados via ComfyUI Manager ControlNet não faz nada | Pré-processador ausente ou formato de imagem errado | Instale comfyui-controlnet-preprocessors; combine o pré-processador com o tipo de entrada UpscaleModelLoader não mostra modelos | Arquivo de modelo não está em models/upscale_models/ | Coloque .pth/.onnx lá e atualize ou reinicie [^4] img2img ignora a imagem de entrada | denoise ficou em 1.0 | Defina denoise abaixo de 1.0 [^2] Nó em bypass ainda executa | Nó não está realmente em bypass | Selecione o nó novamente, pressione Ctrl + B, verifique o esmaecimento/conexão dos fios
Perguntas frequentes (FAQ)
Como alterno um estágio do fluxo de trabalho entre ligado e desligado? Selecione o nó e pressione Ctrl + B. Pressione novamente para reativar.
Um único gráfico do ComfyUI consegue fazer txt2img, img2img e upscale? Sim. Alimente o KSampler com EmptyLatentImage para txt2img, um latente de VAEEncode com denoise < 1.0 para img2img, e encadeie UpscaleModelLoader → ImageUpscale após a decodificação para upscale. Todos os modos compartilham o mesmo checkpoint, CLIP e VAE.
"ComfyUI Modular Node System" é um nome de recurso oficial? Não. O slogan do ComfyUI é "the most powerful and modular diffusion model GUI", referindo-se à sua arquitetura de grafo de nós. Não existe produto ou API chamado "Modular Node System".
Como carregar um JSON de workflow no ComfyUI? Arraste o .json para a tela ou use Workflows → Open (Ctrl+O). O menu "Load (custom nodes)" instala pacotes de nós personalizados em Python, não workflows.
O ComfyUI tem um "Bypass Node" no botão direito? O bypass documentado é Ctrl + B. Uma opção de botão direito pode existir em versões recentes da UI, mas não está na tabela oficial de atalhos.
Os nós IPAdapter e ControlNet são integrados ao ComfyUI? ControlNetApply e ControlNetApplyAdvanced são integrados. IPAdapter é um nó personalizado de terceiros.
O que o parâmetro denoise do KSampler realmente faz? Em 1.0 (padrão), o sampler trata a entrada latente como ruído puro. Abaixo de 1.0, ele mistura a estrutura do latente de entrada com a saída sem ruído — valores mais baixos preservam mais da imagem original.
Como criar um grupo de nós verdadeiramente reutilizável? Salve um subgrafo como template .json e importe manualmente, escreva um nó personalizado em Python, ou copie e cole nós entre abas de workflow.
Links internos
- Desenvolvimento de nós personalizados no ComfyUI
- Pré-processadores do ComfyUI e padrões de high-res fix
- Codificação VAE e fundamentos do espaço latente
Fontes
[^1]: README do ComfyUI no GitHub — atalhos e arquitetura — https://github.com/Comfy-Org/ComfyUI [^2]: Documentação do nó integrado KSampler — https://docs.comfy.org/built-in-nodes/KSampler.md [^3]: Documentação do nó integrado ControlNetApply — https://docs.comfy.org/built-in-nodes/ControlNetApply.md [^4]: Documentação do nó integrado UpscaleModelLoader — https://docs.comfy.org/built-in-nodes/UpscaleModelLoader.md [^5]: Documentação do nó integrado CheckpointLoaderSimple — https://docs.comfy.org/built-in-nodes/CheckpointLoaderSimple.md [^6]: Tutorial de text-to-image do ComfyUI (carregamento de workflow) — https://docs.comfy.org/tutorials/basic/text-to-image