- Automatyczne generowanie obrazów AI
- Do czego służy Nanogen?
- Jak to działa?
- Wymagania
- Instalacja i przygotowanie
- Uruchomienie Chrome w trybie debugowania
- Użycie podstawowe
- Format pliku wejściowego JSON
- Opcje wiersza poleceń – szczegółowy opis
- Wejście / Wyjście
- Modyfikatory promptu
- Opcje generowania
- Wykonanie i czas
- Połączenie
- Wyświetlanie
- Pełne przykłady użycia
- 1. Podstawowe generowanie z kolorowym wyjściem
- 2. Batch z proporcją 16:9 i statystykami
- 3. Tryb tymczasowy z modelem Thinking (rozszerzone myślenie)
- 4. Szerokość z proporcją 4:3
- 5. Tryb symulacji – podgląd promptów bez przeglądarki
- 6. Batch z losowymi opóźnieniami i debugiem
- 7. Produkcyjny batch – skip, restart, logi i statystyki
- Mechanizm blokady instancji
- Obsługa błędów i niezawodność
- Pliki pomocnicze
- Podsumowanie
Automatyczne generowanie obrazów AI
Nanogen to narzędzie napisane w Pythonie, które automatyzuje generowanie obrazów za pomocą AI Google Gemini (model Imagen) w interfejsie przeglądarki ale hurtowo i z linii poleceni (CLI). Działa przez protokół Chrome DevTools (CDP) – nie wymaga żadnego klucza API ale wymaga konta GOOGLE. Wczytuje prompt z wiersza poleceń lub pliku JSON, wysyła go do Gemini, czeka na wygenerowany obraz i pobiera go na dysk. Pozwala na wsadowe przetwarzanie setek promptów bez ręcznego klikania.
GitHub: github.com/IgorBrzezek/nanogen
- Nanogen – automatyzacja generowania obrazów AI z linii poleceń
- Do czego służy Nanogen?
- Jak to działa?
- Wymagania
- Instalacja i przygotowanie
- Uruchomienie Chrome w trybie debugowania
- Użycie podstawowe
- Format pliku wejściowego JSON
- Opcje wiersza poleceń – szczegółowy opis
- Wejście / Wyjście
- Modyfikatory promptu
- Opcje generowania
- Wykonanie i czas
- Połączenie
- Wyświetlanie
- Pełne przykłady użycia
- Mechanizm blokady instancji
- Obsługa błędów i niezawodność
- Pliki pomocnicze
- Podsumowanie
Do czego służy Nanogen?
Nanogen rozwiązuje problem ręcznego generowania obrazów w Gemini – zamiast wklejać prompt, czekać i zapisywać obraz ręcznie, robi to automatycznie w pętli. Przydaje się w wielu scenariuszach:
- Batch processing – generujesz setki obrazów z pliku JSON, program robi wszystko sam.
- Testowanie promptów – szybkie sprawdzanie różnych wariantów z różnymi modelami (Flash, Thinking, Pro).
- Automatyzacja feedów – generowanie ilustracji do artykułów, mediów społecznościowych, prezentacji.
- Eksperymenty z AI – porównywanie rezultatów dla różnych proporcji, rozdzielczości i modeli.
Jak to działa?
- Chrome jest uruchamiany w trybie zdalnego debugowania na porcie 9222 (skrypt start_chrome_debug.bat) i zalogowany na https://gemini.google.com/.
- Nanogen łączy się z tą instancją Chrome przez CDP za pomocą biblioteki Playwright.
- Dla każdego promptu skrypt:
- Nawiguje do Gemini (lub używa istniejącej karty).
- Rozwija lewe menu boczne.
- Opcjonalnie włącza Czat tymczasowy (--gen tmp), aby każdy prompt startował w czystej konwersacji.
- Opcjonalnie wybiera model (--type) i poziom myślenia (--thinking).
- Otwiera menu Narzędzia i klika „Twórz obrazy”, aby przejść w tryb Imagen.
- Dopina tekst modyfikujący (--addprompt / --insprompt) oraz instrukcje proporcji i rozdzielczości (--fmt, --res, --resx, --resy).
- Wkleja gotowy prompt do pola wejściowego Gemini i wysyła.
- Czeka na pojawienie się obrazu, a następnie klika przycisk pobierania.
- Pobiera obraz w pełnej rozdzielczości przez wbudowany mechanizm pobierania Chrome.
- W razie braku przycisku pobierania stosuje awaryjne metody: ekstrakcję z canvas lub bezpośrednie fetchowanie URL obrazu.
- Szczegółowy log wykonania może być zapisany (--log), a całe wyjście konsoli (--savescr).
- Plik blokady nanogen.lock zapobiega jednoczesnemu uruchamianiu wielu instancji.
Wymagania
- Python 3.8+
- Google Chrome lub Chromium
- Biblioteki Python:
playwright,colorama, opcjonalniePillow(dla --stat) irequests(awaryjne pobieranie) - System Windows (skrypt .bat do uruchamiania Chrome; na Linux/macOS trzeba uruchomić Chrome ręcznie z odpowiednimi flagami)
Instalacja i przygotowanie
pip install playwright colorama pillow requests playwright install
Uruchomienie Chrome w trybie debugowania
UWAGA: Skrypt start_chrome_debug.bat zabija wszystkie procesy Chrome na komputerze. Zapisz pracę przed uruchomieniem.
Skrypt wykonuje następujące kroki:
- Zabija wszystkie procesy chrome.exe przez taskkill /F /IM chrome.exe /T.
- Uruchamia Chrome z flagami:
- --remote-debugging-port=9222 – włącza protokół CDP.
- --user-data-dir="C:\chrome_dev_profile" – dedykowany profil (dane logowania są trwale przechowywane).
- Otwiera https://gemini.google.com/.
- Czeka na potwierdzenie użytkownika.
Przy pierwszym uruchomieniu zaloguj się do Google w otwartym oknie Chrome i upewnij, że Gemini jest dostępny. Nie zamykaj tego okna podczas działania Nanogen. Nie otwieraj innych okien Chrome – mogą zakłócić połączenie CDP.
Użycie podstawowe
Pojedynczy prompt:
python nanogen.py --prompt "Górski krajobraz o zachodzie słońca" --color
Batch z pliku JSON:
python nanogen.py --in prompts.json --out generated_images --color
Format pliku wejściowego JSON
Nanogen akceptuje dwa formaty:
Słownik (dict) – klucz = nazwa pliku, wartość = prompt:
{
"gory": "Górski krajobraz o zachodzie słońca, hiperrealistyczny",
"ocean": "Spokojny widok oceanu, kinowe oświetlenie"
}
Lista obiektów z polami filename i prompt:
[
{
"filename": "gory",
"prompt": "Górski krajobraz o zachodzie słońca, hiperrealistyczny"
},
{
"filename": "ocean",
"prompt": "Spokojny widok oceanu, kinowe oświetlenie"
}
]
Opcje wiersza poleceń – szczegółowy opis
Wejście / Wyjście
| Opcja | Opis |
|---|---|
| --prompt TEKST | Pojedynczy prompt tekstowy do generowania obrazu. |
| --in PLIK | Plik JSON z promptami (słownik lub lista – patrz wyżej). |
| --out KATALOG | Katalog wyjściowy dla obrazów (domyślnie: bieżący). |
| --outauto | Automatycznie utwórz katalog wyjściowy o nazwie pliku JSON (bez rozszerzenia). Wymaga --in. |
Modyfikatory promptu
| Opcja | Opis |
|---|---|
| --addprompt TEKST | Tekst dodawany na końcu każdego promptu (np. „Hyper realistic, 8K”). |
| --insprompt TEKST | Tekst dodawany na początku każdego promptu (np. „Generate an image of”). |
Opcje generowania
| Opcja | Opis |
|---|---|
| --fmt PROPORCJA | Proporcje obrazu: 43 (4:3), 169 (16:9), 11 (1:1). |
| --res SZER, WYS | Rozdzielczość w pikselach (np. 1920,1080). Wyklicza się z --resx i --resy. |
| --resx SZER | Szerokość w pikselach; wysokość liczona z --fmt (domyślnie 16:9). |
| --resy WYS | Wysokość w pikselach; szerokość liczona z --fmt (domyślnie 16:9). |
| --type TYP | Model: fast (Flash), think (Thinking), pro (Pro), flash (Gemini Flash), flash-lite (Flash-Lite). |
| --thinking TRYB | Poziom myślenia: basic (Standardowy) lub extended (Rozszerzony). |
| --gen TRYB | Tryb czatu: chat (standardowy, domyślnie), tmp (tymczasowy – każdy prompt w nowej sesji), native (bieżący kontekst bez zmian). |
Wykonanie i czas
| Opcja | Opis | Domyślnie |
|---|---|---|
| --promptint MS | Stałe opóźnienie między promptami w milisekundach. | 1000 |
| --promptrnd MIN,MAX | Losowy zakres opóźnienia w ms (np. 2000,5000). Nadpisuje --promptint. |
– |
| --simul | Tryb symulacji – pokazuje, co zostanie wysłane, bez łączenia się z przeglądarką. | – |
| --overwrite | Nadpisuj istniejące pliki bez pytania. | – |
| --skip | Automatycznie pomiń prompt, jeśli plik wyjściowy już istnieje. | – |
| --noex | Nie dodawaj rozszerzenia .png do nazw plików. |
– |
| --retry N | Liczba ponownych prób w przypadku błędu generowania. | 0 |
| --mingentime N | Minimalny czas oczekiwania (sekund) na wygenerowanie obrazu przed sprawdzeniem przycisku pobierania. | 30 |
| --dltime N | Timeout (sekund) na pobranie obrazu. | 45 |
| --dlret N | Liczba ponownych prób pobierania. | 3 |
| --dlrestart N | Restartuj cały proces generowania w przypadku błędu (wymaga --skip). | 0 |
| --limitwait N | Czas oczekiwania (sekund) przy rate limicie Gemini. | 300 |
Połączenie
| Opcja | Opis | Domyślnie |
|---|---|---|
| --host HOST | Host Chrome DevTools Protocol. | localhost |
| --port PORT | Port Chrome DevTools Protocol. | 9222 |
Wyświetlanie
| Opcja | Opis |
|---|---|
| --color | Włącz kolorowe wyjście w terminalu. |
| --debug | Tryb debugowania – szczegółowe komunikaty. |
| --stat | Pokazuj statystyki dla każdego obrazu (czas generowania, rozdzielczość, rozmiar pliku w KiB). |
| --savescr [PLIK] | Zapisz całe wyjście konsoli do pliku. Jeśli pominięto nazwę, pochodzi z --in (.scr) lub nanogen.scr. |
| --log [PLIK] | Zapisz log wykonania z listą obrazów i podsumowaniem. Jeśli pominięto nazwę, pochodzi z --in (.log) lub nanogen.log. |
Pełne przykłady użycia
1. Podstawowe generowanie z kolorowym wyjściem
python nanogen.py --prompt "Zachód słońca nad morzem" --color
2. Batch z proporcją 16:9 i statystykami
python nanogen.py --in prompts.json --type think --fmt 169 --res 1920,1080 --stat --color
3. Tryb tymczasowy z modelem Thinking (rozszerzone myślenie)
python nanogen.py --prompt "Fantastyczny smok" --gen tmp --type think --thinking extended --color
4. Szerokość z proporcją 4:3
python nanogen.py --prompt "Portret robota" --type fast --fmt 43 --resx 1024 --color
5. Tryb symulacji – podgląd promptów bez przeglądarki
python nanogen.py --in prompts.json --type pro --fmt 11 --simul
6. Batch z losowymi opóźnieniami i debugiem
python nanogen.py --in prompts.json --promptrnd 2000,5000 --debug --color
7. Produkcyjny batch – skip, restart, logi i statystyki
python nanogen.py --in big_batch.json --out output --skip --dlrestart 3 --log --savescr --stat --color
Mechanizm blokady instancji
Nanogen tworzy plik nanogen.lock przy starcie i usuwa go przy wyjściu. Jeśli inna instancja jest uruchomiona, nowa czeka, aż ta pierwsza zakończy działanie. Mechanizm zapobiega konfliktom przeglądarki, gdy wiele procesów próbuje jednocześnie korzystać z tego samego okna Chrome.
Obsługa błędów i niezawodność
- Rate limiting – gdy Gemini zwróci błąd limitów, Nanogen czeka (--limitwait, domyślnie 300 s) i ponawia do 3 razy.
- Ponawianie pobierania – jeśli kliknięcie przycisku pobierania nie zadziała lub plik ma 0 bajtów, skrypt ponawia (--dlret).
- Pełny restart – z flagą --dlrestart, jeśli pobieranie nie powiedzie się po wszystkich próbach, skrypt uruchamia się ponownie z --skip, aby nie generować już udanych obrazów od nowa.
- Awaryjne metody pobierania – jeśli przycisk pobierania jest niedostępny, Nanogen próbuje ekstrakcji z canvas, a następnie bezpośredniego fetchowania URL obrazu.
- Błędy nawigacji – skrypt radzi sobie z ERR_ABORTED i innymi błędami nawigacji przez ponawianie.
Pliki pomocnicze
| Plik | Opis |
|---|---|
start_chrome_debug.bat |
Skrypt uruchamiający Chrome z CDP na porcie 9222. |
example.json |
Przykładowy plik JSON z promptami generującymi obrazy. |
example_image_prompt.md |
Opis tworzenia promptów do obrazów. |
img_prompt_example.txt |
Przykładowy plik z promptem do wykorzystania z innym AI. |
page.cmd |
Przykładowy skrypt do sekwncyjnego generowania obrazów z wielu plików JSON. |
page.html / page.json / style.css |
Pliki pomocnicze (np. do podglądu wyników). |
nanogen.lock |
Plik blokady – automatycznie usuwany przy wyjściu. |
Podsumowanie
Nanogen to praktyczne narzędzie dla każdego, kto regularnie generuje obrazy w Gemini i chce zautomatyzować ten proces. Dzięki sterowaniu przez CDP nie wymaga klucza API ani żadnych dodatkowych usług – wystarczy przeglądarka Chrome i konto Google. Bogaty zestaw opcji (wybór modelu, proporcje, rozdzielczość, modyfikatory promptów, logowanie, statystyki) sprawia, że sprawdzi się zarówno w codziennych eksperymentach, jak i w produkcyjnych pipeline’ach generowania setek obrazów.
Źródła: github.com/IgorBrzezek/nanogen
