Pular para o conteúdo
← Voltar para o blog
IA local

Como rodar FLUX 2, Z-Image e OmniSVG localmente no Windows com ComfyUI

18 min de leitura

Escrito por: Jonathan Reis em

Um setup local útil separa três trabalhos: FLUX 2 para direção raster, Z-Image-Turbo para texto curto legível e OmniSVG para vetores nativos. Este guia cobre o runtime AMD no Windows, o grafo de cada modelo e um painel web local no lugar de MCP.

Atualizado:

Imagem de prévia OpenGraph deste artigo. Como rodar FLUX 2, Z-Image e OmniSVG localmente no Windows com ComfyUI

Rodar um modelo de imagem localmente parece simples até o workflow deixar de ser um modelo em um computador. O setup útil aqui tinha um PC Windows com GPU AMD fazendo inferência, outro computador para desenvolvimento, FLUX 2 para explorar imagens raster rápido, Z-Image-Turbo para headlines curtas legíveis e a necessidade de obter SVG de verdade, não um PNG passado por tracing.

Essas exigências mudam a arquitetura. FLUX é bom para composição, luz, materiais e iteração de prompt, mas o próprio model card alerta que texto pode sair incorreto ou distorcido. Neste setup, Z-Image-Turbo produziu uma headline curta legível no primeiro teste direto, mas ainda gera raster. OmniSVG emite uma representação voltada a SVG, usa outra pilha de modelos e é mais lento por definição. Tentar fazer um modelo se passar pelos três foi a origem de boa parte do tempo perdido.

Este guia descreve um padrão local que funcionou em Windows 11 com uma Radeon AMD recente e 16 GB de VRAM. Troque nomes de máquina, caminhos e endereços de LAN pelos seus. Não publique a API do ComfyUI na internet.

Comece por um runtime ComfyUI que suporte as duas famílias

A primeira tentativa usou o bundle AMD Portable. Ele rodou FLUX, detectou a Radeon por ROCm e a reportou pela API do ComfyUI. Ele não conseguiu carregar OmniSVG.

O problema não era uma dependência Python comum faltando. A integração Qwen 2.5 VL do OmniSVG importa componentes distribuídos do PyTorch. A build Portable testada não tinha torch._C._distributed_c10d. Instalar accelerate, trocar versão de Transformers ou adicionar outro pacote Python não cria uma extensão C++ que não veio no wheel do PyTorch.

Verifique isso antes de baixar os pesos do OmniSVG ou instalar seu custom node:

python -c "import torch; import torch.distributed; print(torch.__version__); print(torch.distributed.is_available()); print(torch.cuda.get_device_name(0))"

Continue apenas se o comando terminar e torch.distributed.is_available() imprimir True. Em uma instalação AMD com ROCm, a placa ainda pode aparecer como cuda:0; leia o nome completo do dispositivo antes de concluir que há NVIDIA envolvida.

No setup testado, uma instalação nova do Comfy Desktop trouxe uma build PyTorch com ROCm mais recente e suporte distribuído. Isso preservou a instalação Portable anterior e criou um ambiente que aceita FLUX e OmniSVG.

A regra prática é simples: crie uma instância isolada do ComfyUI quando uma nova família de modelos exigir outro runtime. Não substitua o wheel PyTorch da instalação que já gera imagens só para satisfazer um custom node.

Coloque os arquivos do FLUX 2 Klein nas pastas que o ComfyUI varre

O workflow oficial do FLUX 2 Klein separa modelo de difusão, encoder de texto e VAE. O modelo Base usado aqui requer estes três arquivos:

Arquivo Pasta
flux-2-klein-base-4b.safetensors models/diffusion_models/
qwen_3_4b.safetensors models/text_encoders/
flux2-vae.safetensors models/vae/

Os nomes importam porque o workflow os referencia diretamente. Não coloque o peso de difusão do FLUX em checkpoints esperando que um loader genérico de checkpoint o encontre.

O Comfy Desktop pode indexar uma biblioteca compartilhada de modelos fora da pasta do aplicativo. Se a intenção é manter todos os pesos grandes sob uma pasta que você possa remover depois, faça dessa pasta a fonte de verdade e aponte a pasta compartilhada models do Desktop para ela com uma junction de diretório. Reinicie o ComfyUI e valide o índice antes de apagar a árvore antiga. O caminho exato não importa: deve haver só uma cópia física de cada peso nas pastas que o ComfyUI varre.

O workflow oficial atual também não é o grafo antigo com KSampler que ainda aparece em muitos exemplos. A sequência relevante é:

UNETLoader
  -> CFGGuider
KSamplerSelect + Flux2Scheduler
  -> SamplerCustomAdvanced
  -> VAEDecode
  -> SaveImage

Flux2Scheduler controla os steps. Se um template do ComfyUI encapsular esse grafo em um subworkflow, dê duplo clique nele para encontrar esse node. Procurar um campo visível KSampler.steps não funciona porque esse grafo não tem KSampler.

Meça uma execução FLUX aquecida antes de julgar velocidade

FLUX 2 Klein Base é um modelo não destilado. Uma placa de 16 GB consegue rodá-lo, mas o ComfyUI pode mover encoder de texto, transformer e VAE entre RAM e VRAM. A primeira geração mede carregamento, alocação e amostragem juntos. Ela não é um benchmark útil de prompt.

Neste setup, uma geração fria em 1024 por 1024 com 20 steps levou pouco mais de sete minutos de ponta a ponta. Depois que o modelo permaneceu carregado, a mesma resolução com oito steps amostrou em cerca de 15 segundos e terminou em aproximadamente 20 segundos. Esses números são evidência de uma máquina, não promessa para toda placa AMD, driver ou prompt.

Use um fluxo em duas etapas:

  1. Explore composição em 640 ou 768 pixels com 8 steps.
  2. Mantenha uma seed quando comparar edições de prompt.
  3. Gere um candidato final em 1024 pixels e 12 a 16 steps apenas quando a composição estiver certa.

Resolução menor reduz a quantidade de pixels processados em cada passo de difusão. É a alavanca mais rápida para explorar. Reduzir steps também diminui tempo, mas muda o refinamento e pode esconder se um resultado ruim veio do prompt ou de denoising insuficiente.

FLUX continua sendo um workflow raster. Ele pode criar um ícone de jogo glossy convincente, mas não é a ferramenta final para uma grade Sudoku com valores exatos, fonte definida ou paths editáveis. Gere a direção visual no FLUX e depois acrescente tipografia e geometria de UI determinísticas em uma ferramenta de design ou em código SVG.

Adicione Z-Image-Turbo quando a imagem precisar de uma headline curta legível

O Z-Image-Turbo é um modelo raster destilado de 6B. Os mantenedores afirmam renderização precisa de texto em inglês e chinês, e o template oficial do ComfyUI mira placas de consumo com 16 GB de VRAM. Isso o torna um segundo workflow prático quando uma arte de post precisa de uma frase curta, não um motivo para substituir FLUX em todos os casos.

Ele usa outro grafo e outro conjunto de arquivos:

Arquivo Pasta Papel
z_image_turbo_bf16.safetensors models/diffusion_models/ modelo de difusão Z-Image
qwen_3_4b.safetensors models/text_encoders/ peso compartilhado, carregado como lumina2 no Z-Image
ae.safetensors models/vae/ VAE do Z-Image

O arquivo qwen_3_4b.safetensors pode ser compartilhado com a instalação FLUX, mas o tipo do loader não. FLUX usa flux2; Z-Image usa lumina2. Reaproveitar o nome do arquivo não significa que os grafos sejam intercambiáveis.

O grafo oficial do Z-Image também é diferente do FLUX de propósito:

UNETLoader -> ModelSamplingAuraFlow
CLIPTextEncode -> ConditioningZeroOut
EmptySD3LatentImage -> KSampler -> VAEDecode -> SaveImage

Use oito steps, res_multistep, scheduler simple e CFG 1.0. O template Turbo passa um conditioning negativo vazio por ConditioningZeroOut; ele não expõe um negative prompt útil. Coloque as restrições no prompt principal: peça uma frase curta e exata entre aspas e depois escreva “no other words”, “no logos” ou “no UI panels”.

No sistema AMD de 16 GB testado, a primeira execução Z-Image em 1024 quadrado levou 57,5 segundos de ponta a ponta porque carregou encoder, modelo de difusão e VAE. Os oito steps de amostragem levaram cerca de 17 segundos. É uma medição ROCm de uma máquina, não uma promessa de hardware, mas separa claramente carga de modelo e tempo de geração.

Há uma armadilha específica do template. O ComfyUI expõe o fluxo texto-para-imagem do Z-Image como blueprint de subgraph. O grafo raiz deve conter apenas esse nó de subgraph. Arrastar um Preview Image ou Save Image ao lado dele pode fazer o ComfyUI rejeitar o salvamento com “The root graph of a subgraph blueprint must consist of only a single subgraph node.” Use o template completo com o node de saída, ou edite dentro do subgraph em vez de adicionar nodes ao canvas raiz.

Instale OmniSVG para saída SVG nativa

OmniSVG não é um tracer de raster. O modelo produz uma representação vetorial diretamente e o node do ComfyUI renderiza um preview. Isso o torna útil para ícones e ilustrações simples em que os paths editáveis importam.

O node comunitário do OmniSVG para ComfyUI carrega dois componentes:

Componente Papel
OmniSVG1.1_4B.bin pesos do decoder especializado em SVG
Qwen2.5-VL-3B-Instruct modelo-base compatível de visão e linguagem, tokenizer e processor

Qwen 2.5 VL não é intercambiável com um modelo de chat mais novo chamado “Qwen 3” ou “Qwen 3.8”. O decoder do OmniSVG foi treinado contra shapes, camadas, IDs de tokenizer e configuração do Qwen 2.5 VL. Um modelo diferente e potencialmente melhor não substitui o checkpoint-base.

Baixe pytorch_model.bin do release OmniSVG 1.1 4B, renomeie-o para OmniSVG1.1_4B.bin e coloque em models/diffusion_models/. Baixe o repositório completo do Qwen 2.5 VL 3B, incluindo os dois shards safetensors, índice, arquivos de tokenizer, configuração do processor e configuração do modelo. Aponte o loader do OmniSVG para essa pasta Qwen local.

Confirme carga Qwen local em vez de baixar tudo de novo

Se o loader for configurado com um nome de Hub como Qwen/Qwen2.5-VL-3B-Instruct, o Transformers o trata como repositório remoto. O log do ComfyUI mostra requisições à Hugging Face e Fetching 2 files. Isso parece uma geração travada em 0%, enquanto começa a baixar vários gigabytes em cache.

Use um caminho explícito para o diretório local no loader. Uma execução correta chega a Loading weights sem requisições HTTP ao repositório do modelo. Esse é também o motivo para baixar todos os arquivos do repositório Qwen: uma pasta local só com pesos não é um modelo Transformers completo.

O custom node pode expor lacunas de dependências que o guia de instalação não deixa claras. Neste setup, o runtime precisou de pacotes para configuração, OpenCV, renderização SVG, carga de modelo, helpers de notebook e operações geométricas. Instale módulos ausentes um por vez no Python da nova instância do ComfyUI. Não rode um requirements sem revisar se ele puder substituir o wheel ROCm PyTorch que acabou de passar no teste distribuído.

Use OmniSVG para o que ele resolve de forma confiável

A primeira geração de ícone bem-sucedida usou subtype: icon, um candidato e limite curto de geração. Ela produziu um candidato válido com nove paths em cerca de 20 segundos depois da carga dos modelos. O primeiro job completo levou mais porque também carregou pesos Qwen e OmniSVG.

Esse é um resultado útil, mas não significa que OmniSVG seja um gerador geral de código SVG. Ele fica menos confiável quando o prompt exige tudo de uma vez:

  • renderização glossy 3D;
  • cena complexa;
  • cores exatas e orçamento rígido de elementos;
  • cinco dígitos específicos em células fixas;
  • IDs de grupos semânticos e regras de SVG 1.1;
  • geometria específica de lápis com vários materiais.

Quando nenhum candidato passa na validação, o node pode devolver um preview branco. Trate a saída svg_path e o log do terminal como fonte de verdade, não apenas a imagem branca.

Para um ícone de app de Sudoku, separe o trabalho de propósito:

OmniSVG -> cartão, lápis, formas simples e silhueta do ícone
Código SVG ou ferramenta de design -> grade 3x3, dígitos exatos, posições e cores

Comece com prompt visual em inglês, subtype: icon, max_length entre 256 e 384, um candidato e sem texto. Acrescente complexidade apenas depois que o SVG simples renderizar. Isso não é uma limitação exclusiva de modelos locais: tipografia exata e geometria de interface são tarefas determinísticas e não deveriam depender de um gerador estocástico.

Mantenha FLUX, Z-Image e OmniSVG em workflows separados

Os três modelos podem viver na mesma instalação ComfyUI, mas não devem compartilhar um workflow ativo em uma GPU de 16 GB. FLUX precisa de transformer de difusão, encoder de texto e VAE. Z-Image precisa de outro modelo de difusão e VAE. OmniSVG precisa de Qwen VL e seu próprio decoder. Carregar mais de uma família por vez cria offload desnecessário e torna cada resultado mais difícil de diagnosticar.

Use workflows ou canvases separados:

FLUX 2 Klein
  -> referência raster rápida, composição e exploração de materiais

Z-Image-Turbo
  -> headline curta legível dentro de uma imagem raster

OmniSVG
  -> ícone ou ilustração simples em SVG nativo

Editor SVG ou código
  -> texto, grade, layout e restrições finais de produto

A diferença de velocidade é esperada. FLUX processa poucos passos de difusão com operações de GPU muito paralelas. OmniSVG gera tokens vetoriais de forma autoregressiva: cada novo token depende da sequência anterior, e depois o node valida e renderiza a saída. Um FLUX aquecido pode ser mais rápido que OmniSVG mesmo quando ambos são “4B”. Contagem de parâmetros não descreve algoritmo de geração nem pipeline ao redor.

Exponha ComfyUI apenas em uma LAN confiável

A API do ComfyUI é útil a partir de outro computador, mas não é uma aplicação voltada à internet. Ela não deve receber port forwarding nem túnel público sem uma camada de autenticação e autorização que você mantenha deliberadamente.

Para uma LAN privada, pare a instância do Comfy Desktop e inicie o próprio ambiente Python dela com listener de rede:

& "<python-do-comfy>" -s "<raiz-do-comfy>\main.py" --listen 0.0.0.0 --disable-api-nodes

Troque os placeholders pelos caminhos da sua instância Comfy Desktop. As partes importantes são --listen 0.0.0.0 e --disable-api-nodes.

Crie uma regra de entrada no Windows Firewall limitada à rede privada e, de preferência, ao IP do computador de desenvolvimento. Depois verifique a partir desse outro computador:

curl --fail --max-time 10 http://<ip-lan-do-windows>:8188/system_stats

A resposta deve ser JSON com a GPU selecionada. É um teste de conectividade melhor que abrir a interface web porque prova que o endpoint usado pela automação está alcançável.

Não use 0.0.0.0 como endereço público, não encaminhe a porta 8188 pelo roteador e não confunda LAN doméstica confiável com sistema de controle de acesso. Se o outro computador estiver fora da LAN, mantenha ComfyUI no loopback e use um túnel privado com autenticação explícita.

Controle a GPU Windows por uma pequena interface web local

MCP ajuda quando um agente precisa descobrir ferramentas e decidir como usá-las. Para um workflow de imagem conhecido, ele é custo extra. Uma pequena aplicação web local pode enviar o grafo FLUX exato, acompanhar progresso via WebSocket do ComfyUI, retransmitir o PNG final e manter a interação no navegador em vez do terminal.

O navegador não deve chamar o endpoint ComfyUI do Windows diretamente. Restrições cross-origin podem bloqueá-lo, e expor o host Windows amplamente para facilitar CORS é a correção errada. Rode a interface no computador de desenvolvimento e deixe seu processo Python local atuar como proxy estreito:

Navegador -> interface e proxy local -> ComfyUI na LAN privada -> GPU Windows

O proxy mantém uma lista curta de entradas: escolha de modelo, prompt positivo, prompt negativo quando suportado, largura, altura, steps, CFG, seed e prefixo de saída. Ele constrói o grafo Flux2Scheduler/SamplerCustomAdvanced ou o grafo ModelSamplingAuraFlow/KSampler do Z-Image. Ele também grava o PNG retornado em um diretório local generated/ e serve esse arquivo local de volta ao navegador.

Essa fronteira resolve três problemas de uma vez:

  • não há configuração CORS contra o host Windows;
  • não há MCP nem LLM remoto para gerações repetíveis;
  • há um arquivo local cujo nome preserva prefixo e sequência dados pelo ComfyUI.

Mantenha o painel de controle local preso a 127.0.0.1 por padrão. Ele é uma interface pessoal, não mais um serviço de rede.

Fluxo completo

1. Instale uma instância separada do Comfy Desktop com PyTorch ROCm.
2. Verifique torch.distributed antes de adicionar OmniSVG.
3. Coloque modelo, encoder de texto e VAE do FLUX 2 Klein nas pastas certas.
4. Gere uma imagem FLUX manual com o workflow oficial baseado em scheduler.
5. Adicione Z-Image-Turbo com modelo de difusão e VAE próprios; reaproveite o arquivo Qwen apenas com loader `lumina2`.
6. Faça um teste de headline curta no Z-Image antes de depender dele numa arte de post.
7. Meça separadamente uma execução fria e outra aquecida.
8. Instale OmniSVG e aponte-o para uma pasta Qwen 2.5 VL local completa.
9. Gere um ícone SVG simples antes de tentar ilustração detalhada ou texto.
10. Mantenha famílias de modelos em workflows separados na GPU de 16 GB.
11. Exponha ComfyUI em LAN restrita apenas quando outro computador precisar dele.
12. Verifique /system_stats a partir desse computador.
13. Use um proxy local no navegador para jobs fixos e feedback de progresso.
14. Acrescente texto longo, grades e geometria exata com ferramentas determinísticas depois da etapa generativa.

Checklist

  • torch.distributed.is_available() é True antes de instalar OmniSVG.
  • Arquivos do FLUX 2 Klein estão em diffusion_models, text_encoders e vae.
  • O grafo FLUX usa Flux2Scheduler e SamplerCustomAdvanced.
  • Z-Image usa ModelSamplingAuraFlow, ConditioningZeroOut e CFG 1.0.
  • Z-Image foi testado com texto curto, sem tratá-lo como garantia para layout de página denso.
  • Execuções fria e aquecida foram medidas separadamente.
  • OmniSVG aponta para um diretório local completo do Qwen 2.5 VL.
  • OmniSVG foi testado primeiro como ícone curto de um candidato.
  • Preview SVG é conferido junto ao caminho do SVG realmente salvo.
  • FLUX, Z-Image e OmniSVG não são carregados juntos intencionalmente em uma placa de 16 GB.
  • A API ComfyUI está acessível apenas em loopback ou LAN privada restrita.
  • Não há port forwarding de roteador nem túnel público expondo ComfyUI.
  • A interface de navegador é local e faz proxy só das operações necessárias.
  • Texto e geometria vetorial exatos entram de forma determinística depois da geração.

O resultado não é um botão mágico de “IA local”. É um pipeline pequeno com fronteiras claras: FLUX para direção visual rápida, OmniSVG para candidatos vetoriais nativos, ferramentas determinísticas para detalhe de produto e uma superfície privada no navegador para controlar a GPU Windows. Essa separação é o que torna o setup sustentável quando um modelo, driver ou prompt inevitavelmente falhar.

Post relacionadoComo auditar gateways de IA do OpenCode: identidade, fallback silencioso e custo real11 min de leituraEscrito por: Jonathan Reis em