LOKALNE MODELE AI•7 min czytania•Aktualizacja: 2026-10-12

Automatyzacja ComfyUI API i n8n: Lokalna fabryka grafik AI na własnym GPU

1. Dlaczego warto zautomatyzować ComfyUI przez lokalne API?

Ręczne wklejanie promptów do przeglądarkowego interfejsu ComfyUI sprawdza się tylko przy pojedynczych testach. Przestawienie lokalnej instancji w tryb bezgłowego serwera API i podpięcie jej pod n8n zamienia komputer z kartą RTX w całkowicie autonomiczną wytwórnię mediów:

• Zerowy koszt za pojedynczą grafikę — generujesz setki obrazów dziennie na własnym sprzęcie, omijając płatne limity w Midjourney, DALL-E 3 czy Replicate API.

• Pełna kontrola nad potokiem — lokalny model językowy (np. Qwen lub Llama w Ollama) może najpierw napisać post i prompt, a sekundę później zlecić karcie graficznej wyrenderowanie dopasowanej ilustracji.

• Kolejkowanie zadań (Queue) — wbudowany serwer ComfyUI automatycznie ustawia przychodzące żądania HTTP w kolejce, dzięki czemu nawet 50 jednoczesnych webhooków z n8n nie zawiesi sterownika karty graficznej.

2. Wymagania sprzętowe pod bezobsługowy rendering 24/7

Do płynnej, zautomatyzowanej pracy z modelami klasy Flux.1 / Flux.2 lub generatorami wideo (Wan 2.2) kluczowa jest pojemność pamięci VRAM karty graficznej.

• Karta NVIDIA RTX 3090 lub RTX 4090 (24 GB VRAM) — pozwala utrzymać cały model wraz z enkoderem tekstu T5 w pamięci karty, co skraca czas generowania jednej grafiki do 10–15 sekund.

• Karta NVIDIA RTX 3060 (12 GB VRAM) — idealna jako druga karta pomocnicza (np. pod mniejsze modele LLM w Ollama) lub do uruchamiania skwantyzowanych modeli Flux GGUF (Q4 / Q8) z przeładowaniem części wag do pamięci RAM systemu.

3. Włączenie trybu Dev Mode i eksport workflow do API JSON

Standardowy plik zapisu z ComfyUI zawiera pozycje węzłów na ekranie i nie nadaje się do wysyłania przez API. Aby wygenerować czysty plik wsadowy dla n8n, musisz aktywować tryb deweloperski w ustawieniach interfejsu:

1. Otwórz ComfyUI w przeglądarce i kliknij ikonę koła zębatego (Settings) w prawym górnym rogu.

2. Zaznacz opcję Enable Dev mode Options (Włącz opcje trybu deweloperskiego) i zamknij okno.

3. W menu głównym pojawi się nowy przycisk: Save (API Format). Kliknij go, aby pobrać plik workflow_api.json.

Otwórz pobrany plik w edytorze tekstu i odszukaj węzeł odpowiedzialny za tekst promptu (klasa CLIPTextEncode) oraz ziarno losowości (KSampler). Zwróć uwagę na ich numery ID (np. węzeł nr 6 dla promptu i węzeł nr 3 dla samplera) — to w te miejsca n8n będzie dynamicznie wstrzykiwać nowe wartości.

4. Konfiguracja ComfyUI do nasłuchiwania w sieci lokalnej LAN

Domyślnie ComfyUI nasłuchuje wyłącznie na lokalnym adresie 127.0.0.1, co blokuje połączenia przychodzące z kontenera Docker z n8n. Aby otworzyć serwer na sieć lokalną, uruchom ComfyUI (lub skonfiguruj parametry startowe w Stability Matrix) z flagą listen:
Wskazówka: Jeżeli korzystasz z menedżera Stability Matrix, przejdź do zakładki Packages, kliknij ikonę trzech kropek przy ComfyUI -> Launch Options i wpisz --listen 0.0.0.0 w polu Extra Launch Arguments.
terminal
# Uruchomienie ComfyUI z otwartym dostępem w sieci LAN na porcie 8188
python3 main.py --listen 0.0.0.0 --port 8188

# Opcjonalnie: wymuszenie pracy na wybranej karcie GPU (np. GPU 0 - RTX 3090)
CUDA_VISIBLE_DEVICES=0 python3 main.py --listen 0.0.0.0 --port 8188

5. Struktura zapytania HTTP POST wysyłanego z n8n

W n8n dodaj węzeł HTTP Request i ustaw metodę na POST, a jako adres URL wpisz adres swojego serwera z końcówką /prompt (np. http://192.168.1.50:8188/prompt lub http://host.docker.internal:8188/prompt).

Cały wyeksportowany wcześniej kod z pliku workflow_api.json musisz zamknąć wewnątrz głównego klucza o nazwie prompt. Poniżej znajduje się uproszczony przykład gotowego ładunku JSON z dynamicznie podmienianym tekstem i losowym ziarnem (seed):
n8n-http-request-body.json
{
  "client_id": "brodatech_n8n_worker",
  "prompt": {
    "3": {
      "inputs": {
        "seed": {{ Math.floor(Math.random() * 1000000000000) }},
        "steps": 20,
        "cfg": 1.0,
        "sampler_name": "euler",
        "scheduler": "simple",
        "denoise": 1.0,
        "model": ["4", 0],
        "positive": ["6", 0],
        "negative": ["7", 0],
        "latent_image": ["5", 0]
      },
      "class_type": "KSampler"
    },
    "6": {
      "inputs": {
        "text": "{{ $json.wygenerowany_prompt_z_llm }}",
        "clip": ["11", 0]
      },
      "class_type": "CLIPTextEncode"
    },
    "9": {
      "inputs": {
        "filename_prefix": "n8n_auto_render",
        "images": ["8", 0]
      },
      "class_type": "SaveImage"
    }
  }
}

6. Odbieranie gotowej grafiki i automatyczna publikacja

Wysłanie żądania na endpoint /prompt natychmiast zwraca identyfikator zadania (prompt_id), podczas gdy karta graficzna rozpoczyna renderowanie w tle. Aby pobrać gotowy plik binarny do n8n, zastosuj prostą sekwencję trzech kroków:

1. Węzeł Wait (Czekaj) — ustaw pauzę na 15–20 sekund (zależnie od czasu renderowania modelu na Twojej karcie).

2. Węzeł HTTP Request (GET History) — odpytaj adres http://host.docker.internal:8188/history/{{ $json.prompt_id }}, aby odczytać dokładną nazwę zapisanego pliku z klucza outputs.

3. Węzeł HTTP Request (GET View) — pobierz sam obrazek, wysyłając zapytanie GET na adres poniżej z włączoną opcją Response Format: File:
endpoint-pobierania-pliku
http://host.docker.internal:8188/view?filename={{ $json.filename }}&subfolder=&type=output

7. Zarządzanie pamięcią VRAM przy pracy z lokalnym LLM (Ollama)

Gdy w jednym potoku n8n najpierw generujesz treść posta przez lokalny model LLM, a chwilę później uruchamiasz ComfyUI na tej samej karcie graficznej, oba programy mogą walczyć o pamięć VRAM (błąd CUDA Out of Memory).

Rozwiąziesz to na dwa sposoby:

• Rozdzielenie kart GPU (Multi-GPU) — jeśli masz w serwerze dwie karty (np. RTX 3060 12 GB oraz RTX 3090 24 GB), przypisz usługę Ollama na stałe do mniejszej karty, a całą pamięć RTX 3090 zostaw wyłącznie dla ComfyUI.

• Zwolnienie pamięci po prompcie — w zapytaniu do API Ollama przekaż parametr keep_alive: 0, dzięki czemu model językowy zwolni pamięć VRAM w ułamku sekundy po wygenerowaniu tekstu, robiąc miejsce dla modelu Flux.

Często zadawane pytania (FAQ)

Dlaczego po wysłaniu tego samego zapytania z n8n ComfyUI zwraca natychmiast ten sam obrazek bez użycia GPU?

ComfyUI posiada wbudowany system pamięci podręcznej (cache). Jeśli w węźle KSampler prześlesz dokładnie tę samą wartość parametru seed oraz ten sam prompt, serwer uzna, że wynik jest już gotowy i pominie renderowanie. Zawsze generuj losowy numer seed po stronie n8n przy każdym wywołaniu.

Jak wyczyścić pamięć VRAM w ComfyUI bezpośrednio z poziomu n8n?

Możesz wysłać puste zapytanie HTTP POST na adres http://host.docker.internal:8188/free z ciałem JSON: {"unload_models": true, "free_memory": true}. ComfyUI natychmiast wyładuje modele z pamięci karty graficznej.