Stable Diffusion no macOS: comparação de ferramentas locais de imagem

Tradução automática

Este artigo foi traduzido automaticamente a partir da versão original em inglês.

Executar modelos de imagem localmente no macOS começa pela escolha de uma ferramenta. Este guia destina-se a utilizadores de Mac que querem gerar imagens localmente: vai ficar a saber para que serve cada uma de seis ferramentas, como a instalar, o que um modelo precisa além do seu ficheiro e como testar uma ferramenta no seu computador antes de se comprometer com ela.

Draw Things, DiffusionBee, ComfyUI, InvokeAI, AUTOMATIC1111 e Fooocus sobrepõem-se em parte, mas diferem na instalação, no suporte de modelos, no controlo do workflow, nas extensões, na automatização e na manutenção. Uma aplicação de arrastar e largar permite começar depressa; um grafo de nós demora mais a aprender, mas expõe mais do pipeline. No Apple Silicon, a aplicação, a família de modelos, a precisão, o tamanho da imagem e o workflow influenciam se a geração cabe na memória.

O que uma aplicação local de imagem executa

Todas as ferramentas deste guia executam o mesmo tipo de pipeline. No centro está o denoiser: uma U-Net no SD 1.5 e no SDXL, um transformer no Flux.1. Parte de ruído aleatório e remove um pouco dele em cada passo, guiado pelo prompt. As restantes partes preparam as suas entradas ou transformam a sua saída numa imagem:

ParteO que faz
CheckpointO ficheiro principal do modelo. Contém o denoiser e, no SD 1.5 e no SDXL, normalmente também o codificador de texto e o VAE. O Flux.1 costuma distribuir estas partes em ficheiros separados.
Codificador de textoConverte o prompt em números que o denoiser consegue usar. Antes, um tokenizador divide o prompt em tokens.
VAEConverte entre píxeis e a imagem “latente”, mais pequena, em que o denoiser trabalha. O seu descodificador transforma o latente final na imagem que vê.
Sampler e passosA seed define o ruído inicial. O sampler, com o seu scheduler, decide quanto ruído cada passo remove. Mais passos demoram mais tempo.
LoRAUm pequeno ficheiro adicional que muda o estilo ou o tema da família de modelos para a qual foi treinado. Um embedding de textual inversion é um complemento mais pequeno que ensina ao codificador de texto uma palavra nova.
ControlNetUm modelo adicional que orienta a composição a partir de uma imagem de controlo, como uma pose, um mapa de profundidade ou um mapa de arestas.

Na figura, siga o latente desde o ruído da seed até ao passo N: o prompt chega ao denoiser em cada passo, as barras mostram quanto ruído resta, o LoRA e o ControlNet são entradas opcionais, e o descodificador do VAE transforma o latente pequeno na imagem. As etiquetas CHECKPOINT marcam as partes que um único ficheiro de checkpoint costuma conter.

O ruído da seed transforma-se num latente limpo ao longo dos passos do denoiser, com o prompt alimentado em cada passo, entradas opcionais de LoRA e ControlNet, e um descodificador do VAE que transforma o latente na imagemO ruído da seed transforma-se num latente limpo ao longo dos passos do denoiser, com o prompt alimentado em cada passo, entradas opcionais de LoRA e ControlNet, e um descodificador do VAE que transforma o latente na imagem

Obter modelos

A maioria das ferramentas consegue descarregar um modelo inicial por si. Para tudo o resto, dois sites cobrem a maior parte das necessidades:

  • O Hugging Face aloja os modelos base oficiais da Stability AI, da Black Forest Labs e de outros. Leia a licença no cartão do modelo: as licenças diferem mesmo dentro de uma família, como o FLUX.1 [schnell] (Apache 2.0) e o FLUX.1 [dev] (uma licença não comercial). Alguns repositórios pedem que aceite a licença antes de o descarregamento começar.
  • O Civitai aloja checkpoints, LoRAs e embeddings da comunidade. Cada página indica o modelo base para o qual o ficheiro foi treinado.

Prefira ficheiros .safetensors. Um ficheiro .ckpt é um pickle de Python, e carregar um pickle pode executar código arbitrário. Um ficheiro .safetensors guarda apenas tensores. Carregue um .ckpt apenas de uma fonte em que confie.

Antes de descarregar vários gigabytes, compare a família do modelo (SD 1.5, SDXL, Flux.1, etc.) com o que a sua ferramenta suporta. Um LoRA treinado para SDXL não funciona com um checkpoint SD 1.5.

Um ficheiro de modelo não é um workflow portátil

Várias aplicações conseguem carregar ficheiros .safetensors, mas uma extensão de ficheiro igual não significa que o modelo vá funcionar. Um pipeline completo pode exigir também uma arquitetura, um codificador de texto, um VAE, um scheduler, um ControlNet, um LoRA ou uma configuração específica da aplicação.

Registe tudo o que produziu uma imagem:

  • aplicação e versão
  • repositório, revisão e licença do modelo
  • todos os componentes do modelo e adaptadores
  • prompt, prompt negativo, seed, sampler, passos, guidance e dimensões
  • ficheiro do grafo ou do workflow, quando a aplicação o disponibiliza

A mesma seed pode ainda assim produzir uma imagem diferente depois de uma mudança de backend, de modelo, de sampler ou de precisão.

Memória, espaço em disco e o software por baixo de cada ferramenta

No Apple Silicon, o CPU e o GPU partilham um único conjunto de memória. O GPU pode usar a maior parte dela, pelo que um Mac com 32 GB consegue carregar modelos que não cabem numa placa gráfica típica de 8 a 12 GB. O mesmo conjunto guarda também o macOS e todas as aplicações abertas; o Monitor de Atividade mostra a utilização por aplicações, memória fixa, comprimida e de swap.

O pico de memória durante a geração tem quatro partes: os componentes do modelo, a memória de trabalho para ativações e atenção, os adaptadores e modelos de controlo carregados, e a memória que o macOS e as suas aplicações já usam. A parte de cima da figura representa-as como partes da mesma memória, mais a memória que fica livre; não é uma fórmula de dimensionamento. A parte de baixo compara exemplos de tamanhos de descarregamento sem quantização. Estas barras medem o uso do disco, não a memória durante a execução.

Em cima: o CPU e o GPU partilham memória utilizada pelo macOS e pelas aplicações, componentes do modelo, memória de trabalho, LoRA e ControlNet, com alguma memória livre. Em baixo: exemplos de descarregamentos sem quantização de cerca de 4 GB para um checkpoint SD 1.5, 7 GB para um checkpoint SDXL e 24 mais 10 GB para o transformer FLUX.1 schnell e o codificador T5. O tamanho do ficheiro mede o uso do disco, não a memória durante a execuçãoEm cima: o CPU e o GPU partilham memória utilizada pelo macOS e pelas aplicações, componentes do modelo, memória de trabalho, LoRA e ControlNet, com alguma memória livre. Em baixo: exemplos de descarregamentos sem quantização de cerca de 4 GB para um checkpoint SD 1.5, 7 GB para um checkpoint SDXL e 24 mais 10 GB para o transformer FLUX.1 schnell e o codificador T5. O tamanho do ficheiro mede o uso do disco, não a memória durante a execução

A resolução, o tamanho do lote, a arquitetura do modelo, o upscaling e o ControlNet alteram o uso da memória durante a execução. O tamanho do descarregamento estima o uso do disco; a memória durante a execução depende da precisão e da quantização que a aplicação carrega, dos componentes que permanecem carregados e dos tensores temporários criados durante a geração. A quantização guarda os pesos com menos bits, e o Draw Things pode carregar os pesos do FLUX.1 a pedido em vez de os manter todos na memória. Teste o workflow pretendido e observe a Pressão da memória e o Swap utilizado; swap sustentado é sinal para reduzir a carga ou escolher mais memória.

Planeie o espaço em disco separadamente. Estes descarregamentos sem quantização no Hugging Face incluem um checkpoint SD 1.5 de cerca de 4 GB e um checkpoint base SDXL de cerca de 7 GB. Só o transformer FLUX.1 [schnell] tem cerca de 24 GB, e um codificador de texto T5 de 16 bits acrescenta cerca de 10 GB. O FLUX precisa também de outros componentes, pelo que estes dois ficheiros não constituem o descarregamento completo. Se o seu Mac tiver pouco espaço, guarde as pastas dos modelos num SSD externo.

As ferramentas diferem também no software entre elas e o GPU. O ComfyUI, o AUTOMATIC1111, o Fooocus e o InvokeAI são aplicações Python que correm no backend Metal do PyTorch, chamado MPS (Metal Performance Shaders), pelo que as suas funcionalidades e velocidade dependem da versão do PyTorch instalada. O Draw Things usa o seu próprio motor com kernels de Metal FlashAttention. Todas terminam no Metal e no mesmo conjunto de memória unificada.

Seis ferramentas comparadas

FerramentaInstalaçãoO que pode controlarCompromisso operacional
Draw ThingsMac App StoreInterface nativa Apple com modelos locais, adaptadores, ControlNet e scriptsInterface densa e específica do produto; verifique o suporte para a família de modelos exata
DiffusionBeeDescarregamento do DMGAplicação macOS empacotada com um workflow de geração integradoSem versões desde a 2.5.3, em agosto de 2024; sem suporte para famílias de modelos lançadas depois
ComfyUIDMG do Comfy Desktop ou brew install --cask comfyGrafo de nós explícito, workflows em JSON, API e nós personalizadosMais componentes a gerir; grafos e nós de terceiros tornam-se dependências
InvokeAIDMG do Invoke LauncherTela com inpainting e outpainting, mais um editor de workflows por nósRequer macOS 14 ou posterior; a documentação recomenda 16 GB de memória ou mais
AUTOMATIC1111Pacotes Homebrew, git clone e ./webui.shWeb UI baseada em formulários, scripts, API e um grande conjunto de extensõesÚltima versão em fevereiro de 2025; limitações documentadas no Apple Silicon; as extensões executam código de terceiros no mesmo ambiente
Fooocusgit clone e um ambiente conda (não oficial no Mac)Workflow SDXL opinativo, centrado no promptApenas correções de erros; a orientação para Mac não é oficial e foi pouco testada

A tabela mostra onde as suas definições ficam guardadas: dentro da aplicação, num formulário web ou num ficheiro de grafo que pode rever. A figura parte de uma aplicação nativa e mostra quando passar para outra ferramenta, com um esboço de onde cada uma guarda as suas definições. Execute o teste de aceitação no fim deste artigo antes de se comprometer com qualquer uma.

Comece com o Draw Things ou o DiffusionBee; passe para o ComfyUI quando o workflow tiver de ser revisto ou automatizado, para o InvokeAI quando o trabalho for editar regiões, e para o AUTOMATIC1111 ou o Fooocus apenas quando um workflow existente depender delesComece com o Draw Things ou o DiffusionBee; passe para o ComfyUI quando o workflow tiver de ser revisto ou automatizado, para o InvokeAI quando o trabalho for editar regiões, e para o AUTOMATIC1111 ou o Fooocus apenas quando um workflow existente depender deles

Draw Things: interação nativa e scripts

O Draw Things é uma aplicação para plataformas Apple de geração local de imagens. Instale-o a partir da Mac App Store; não precisa de Python nem de terminal. A documentação atual cobre modelos, LoRAs, ControlNet, textual inversion, Core ML e scripting em JavaScript com versões.

Escolha-o quando o trabalho deva ficar dentro de uma aplicação nativa mas precise de mais controlo do que uma caixa de prompt. Antes de o adotar como padrão, importe os componentes exatos do modelo e reproduza uma edição, um adaptador ou um workflow de controlo representativo. “Nativo” descreve a interface e a implementação; não garante suporte nem velocidade para todas as arquiteturas novas.

DiffusionBee: workflow macOS empacotado

O DiffusionBee empacota o descarregamento de modelos e as tarefas comuns de geração numa aplicação de ambiente de trabalho. Descarregue o DMG e mova a aplicação para Aplicações. A documentação do projeto lista image-to-image, inpainting, outpainting, ControlNet, LoRA e SDXL, e a aplicação inclui upscaling. As notas da versão 2.5.3 do DiffusionBee indicam suporte para Flux.1 apenas em Macs arm64 com macOS 13 ou posterior.

A última versão do DiffusionBee, a 2.5.3, saiu em agosto de 2024, e a página de descarregamento em diffusionbee.com ainda aponta para a 2.5.1; obtenha a 2.5.3 na página de versões do GitHub. Não espere suporte para famílias de modelos lançadas depois. Escolha-o quando a instalação e uma interface integrada importarem mais do que exportar um grafo do pipeline, e quando o modelo de que precisa já constar da sua lista. Uma etiqueta de funcionalidade como “suporte Flux” não significa que todas as derivações, quantizações ou componentes auxiliares vão carregar.

ComfyUI: um workflow guardado como ficheiro

O ComfyUI representa a geração como um grafo de nós. Cada passo é um nó, e o grafo pode ramificar-se: um grafo pode gerar uma imagem, fazer-lhe upscaling e passá-la a um nó de restauro de rostos de um pacote de nós personalizados. Um workflow pode ser guardado em JSON independentemente do seu resultado, o que torna o pipeline inspecionável e versionável. O seu executor também consegue evitar recalcular secções do grafo cujas entradas não mudaram.

O Comfy Desktop é um gestor de várias instalações de instâncias locais do ComfyUI. A documentação atual para macOS suporta Apple Silicon com macOS 13 ou posterior. A instalação utiliza um .dmg descarregado. Se preferir o Homebrew, o cask atual é comfy (não comfyui):

brew install --cask comfy

Escolha o ComfyUI quando um pipeline tiver ramificações, componentes reutilizáveis, vários modelos ou automatização. Mantenha juntos o JSON, a versão da aplicação, as versões dos nós principais, as revisões dos nós personalizados e o manifesto dos modelos.

Como executar o mesmo grafo a partir de um script com uma seed nova? Exporte o grafo com File → Export Workflow (API). O formato API identifica cada nó pelo seu ID numérico e guarda apenas as entradas necessárias para o executar. Depois envie-o para o endpoint /prompt do servidor local:

import json
import random
import urllib.request

COMFY_URL = "http://127.0.0.1:8188"  # check the port first, see below
SAMPLER_NODE = "3"  # the KSampler node ID in your exported file

with open("workflow_api.json") as f:
    workflow = json.load(f)

workflow[SAMPLER_NODE]["inputs"]["seed"] = random.randint(0, 2**32 - 1)

request = urllib.request.Request(
    f"{COMFY_URL}/prompt",
    data=json.dumps({"prompt": workflow}).encode("utf-8"),
    headers={"Content-Type": "application/json"},
)
with urllib.request.urlopen(request) as response:
    print(json.load(response))  # includes the prompt_id of the queued run

Veja duas coisas no ficheiro exportado: o ID do nó do sampler ("3" no próprio exemplo de API do ComfyUI) e o seu campo inputs, que contém a seed, os passos e o nome do sampler. Verifique a porta antes de executar o script: uma instalação manual escuta por omissão na 8188, e o Comfy Desktop pode usar outra porta, indicada nas definições do servidor.

Os nós personalizados são dependências executáveis. Reveja o seu código-fonte e os scripts de instalação, fixe as revisões e isole o ambiente. Um grafo de um autor desconhecido pode referir código e modelos que não auditou.

InvokeAI: uma tela para inpainting e outpainting

O InvokeAI funciona com uma tela: seleciona com uma máscara a área a alterar e continua a gerar na mesma vista. O inpainting regenera uma área mascarada dentro da imagem; o outpainting expande-a para além dos limites existentes. Tem também um editor de workflows por nós para pipelines que quer guardar e partilhar. O projeto continua a publicar versões regularmente; a v6.14.2 saiu em setembro de 2026.

Instale-o com o Invoke Launcher: abra o DMG, arraste o launcher para Aplicações e execute-o. O launcher instala o Python e o Invoke por si. Os requisitos de sistema indicam macOS 14 ou posterior e dizem que todos os Macs com Apple Silicon funcionam, recomendando 16 GB de memória ou mais.

Escolha-o quando a maior parte do seu trabalho for editar partes de uma imagem, e não gerar imagens inteiras a partir de um prompt.

AUTOMATIC1111: compatibilidade com uma Web UI estabelecida

O AUTOMATIC1111 Stable Diffusion WebUI expõe as definições de geração através de uma interface de navegador e suporta scripts, extensões e uma API. Escolha-o quando um tutorial, uma automatização ou uma extensão específica já fizer parte do requisito. A última versão, a v1.10.1, saiu em fevereiro de 2025, por isso verifique o suporte para qualquer família de modelos lançada depois antes de o escolher.

No Mac corre no backend MPS do PyTorch. O guia oficial para Apple Silicon instala-o a partir do terminal; ./webui.sh cria um ambiente Python e instala as restantes dependências na primeira execução:

brew install cmake protobuf rust python@3.10 git wget
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
./webui.sh

O mesmo guia documenta exceções e limitações de desempenho, incluindo um desempenho fraco no treino. Confirme que a funcionalidade necessária funciona nas versões de macOS e de PyTorch de destino antes de adotar uma configuração com muitas extensões.

As extensões executam código dentro do ambiente da aplicação. Fixe as suas versões, reveja as atualizações e mantenha o serviço em loopback, a menos que o acesso remoto seja deliberado e protegido.

Fooocus: só SDXL, só correções de erros

O Fooocus esconde deliberadamente muitas escolhas técnicas atrás de um workflow opinativo centrado no prompt. Isso pode ser útil quando os seus valores por omissão correspondem à tarefa.

O README atual do projeto diz que o Fooocus é construído em torno do SDXL e está em suporte de longo prazo limitado, apenas com correções de erros. Diz também que o Mac não é testado intensivamente e descreve a instalação no Mac como não oficial: um ambiente conda, um git clone e python entry_with_update.py, que descarrega os modelos SDXL na primeira execução. Isso faz do Fooocus uma escolha para um workflow Fooocus já existente, não o caminho por omissão para novas arquiteturas nem para uma configuração macOS que pretenda manter.

Execute um teste de aceitação representativo

Use um pequeno conjunto de aceitação antes de se comprometer com uma ferramenta:

  1. Reproduza um resultado de base de texto para imagem a partir de uma seed e de definições registadas.
  2. Execute a operação mais difícil exigida: inpainting, ControlNet, LoRA, upscaling ou um grafo de várias fases.
  3. Reinicie a aplicação e reproduza o workflow a partir dos ficheiros guardados.
  4. Meça o arranque a frio, o tempo de geração, a pressão máxima de memória e as dimensões da saída.
  5. Mova o workflow para uma conta de utilizador ou máquina limpa e liste todas as dependências em falta.
  6. Verifique a ligação à rede local, os descarregamentos, as definições de análise de utilização, as licenças e a proveniência dos modelos.

Não compare ferramentas com checkpoints, resoluções, números de passos ou precisões diferentes e depois chame ao resultado um benchmark de execução.

Uma predefinição prática

Para trabalho exploratório, comece com uma aplicação nativa e um modelo que ela documente. Passe para o ComfyUI quando o próprio workflow ganhar valor: quando tiver de ser revisto, repetido, automatizado ou entregue a outra pessoa. Passe para o InvokeAI quando o trabalho consistir sobretudo em editar regiões numa tela. Mantenha o AUTOMATIC1111 ou o Fooocus quando uma dependência existente tornar a sua interface específica útil.

Referências