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.
• 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.
• 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.
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 81885. 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):
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:
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=output7. 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.
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.