From a5c319a1fcdb8635683b4ba1950900d7708aab59 Mon Sep 17 00:00:00 2001 From: dimon Date: Sat, 13 Jun 2026 16:36:27 +0800 Subject: [PATCH] Initial commit: Ideogram 4 Prompt Builder PyQt6 desktop app for building Ideogram 4 JSON captions: bbox canvas, palette editor, presets, prompt library with previews, localisation (en/ru), light/dark themes, and ComfyUI dependency check + generation. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 15 + README.md | 159 ++ docs/README.md | 336 ++++ docs/development.md | 58 + docs/inference.md | 63 + docs/model_architecture.md | 45 + docs/pipeline.md | 183 ++ docs/prompting.md | 362 ++++ eng-vlack.png | Bin 0 -> 242766 bytes ideogram4NSFWComfyui_v11.json | 2853 +++++++++++++++++++++++++++++++ ideogram_prompt_builder.py | 3010 +++++++++++++++++++++++++++++++++ ru-white.png | Bin 0 -> 247920 bytes 12 files changed, 7084 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docs/README.md create mode 100644 docs/development.md create mode 100644 docs/inference.md create mode 100644 docs/model_architecture.md create mode 100644 docs/pipeline.md create mode 100644 docs/prompting.md create mode 100644 eng-vlack.png create mode 100644 ideogram4NSFWComfyui_v11.json create mode 100644 ideogram_prompt_builder.py create mode 100644 ru-white.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4b3848f --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Python +__pycache__/ +*.py[cod] + +# Generated at runtime / regenerated from code on first launch +translations.json + +# User-specific and runtime state (not part of the application source) +comfy_settings.json +draft.json +prompt_library.json +prompt_previews/ + +# Editor / agent +.claude/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..905a738 --- /dev/null +++ b/README.md @@ -0,0 +1,159 @@ +# Ideogram 4 Prompt Builder + +**English** · [Русский](#ideogram-4-prompt-builder-ru) + +A desktop GUI (PyQt6) for building structured JSON captions for **Ideogram 4** and ComfyUI workflows, with a prompt library, reference-image canvas, localisation, light/dark themes, and direct generation through a ComfyUI server. + +![English interface](eng-vlack.png) + +## Run + +```powershell +python ideogram_prompt_builder.py +``` + +Requires `PyQt6` (no other third-party dependencies): + +```powershell +pip install PyQt6 +``` + +## What it builds + +Prompts follow the schema from `docs/prompting.md`: + +- `high_level_description` +- `style_description` with either `photo` or `art_style` +- `compositional_deconstruction.background` +- `compositional_deconstruction.elements` +- optional uppercase HEX color palettes +- optional bounding boxes in normalized `0-1000` coordinates + +Actions live in a menu bar (**File / Edit / Library / ComfyUI / View**) plus a slim toolbar (Generate, Undo/Redo, Save to library, Library, Copy) and the language/theme controls on the right. The right-hand panel is tabbed: **JSON** (output + validation) and **Result** (the generated image). + +## Editing + +- Move and resize layout boxes directly with the mouse on the bbox canvas. +- Palette fields accept comma-separated HEX, clickable swatches and a popup color picker, with a live `n/limit` counter and invalid-color highlighting. +- **Undo / Redo** (`Ctrl+Z` / `Ctrl+Y`). +- **Duplicate**, **reorder** (up/down) and add elements from **templates** (Character / Title text / Background object). +- The validation list is clickable — clicking an element-specific message selects that element. +- Text fields have a right-click translation menu (`Translate to RU` / `Translate to EN`, results cached). +- Work is autosaved to `draft.json`; on the next launch you are offered to restore it. + +## Reference image & zoom + +In the composition panel you can load a **reference image** (file or paste from clipboard) drawn under the bbox grid; the **grid scale** slider zooms the grid and the reference scales with it. + +## Prompt library + +The **Library** menu saves the current caption (optionally with a preview image), updates the entry you loaded from, and opens the library browser, where you can: + +- search by name / tag / description and edit per-entry **tags**; +- load any saved prompt back into the editor for reuse and editing; +- attach a preview from a file or **paste it from the clipboard**, or remove it; +- rename, delete entries, and view the preview + summary; +- **export / import** the whole library (prompts + previews) as a single `.zip`. + +The library is stored in `prompt_library.json` next to the app, with preview images in `prompt_previews/` (created on first save). + +## ComfyUI integration + +The **ComfyUI** menu connects the builder to a running ComfyUI server: + +- **ComfyUI settings** — host, port and HTTPS, with a *Test connection* button. Stored in `comfy_settings.json`. +- **Check ComfyUI** — verifies that every model, sampler and custom node the bundled `ideogram4NSFWComfyui_v11.json` workflow needs is installed on the server, and lists anything missing. +- **Generate in ComfyUI** — converts the bundled workflow to API format, injects the current compact JSON caption, submits it and retrieves the generated image. The result appears in the **Result** tab and can be saved to a file or into the library. + +## Appearance & localisation + +- **Theme** (View menu) toggles a light / dark theme. +- The interface language is switched at runtime from the **Language** selector; the default is **English**. + +UI strings are loaded from `translations.json`, created on first run from bundled `en` / `ru` translations. To add a language, add a top-level key with the same string keys (and optionally a display name in `LANGUAGE_NAMES`). Missing keys fall back to English then to the key name. Theme and language are saved in `comfy_settings.json`. + +## Compact JSON for ComfyUI + +The output can be copied in pretty or compact form. Compact JSON matches the recommended serialization style for inference and can be pasted into the Ideogram 4 prompt field in ComfyUI. + +--- + + + +# Ideogram 4 Prompt Builder (RU) + +[English](#ideogram-4-prompt-builder) · **Русский** + +Десктопное GUI-приложение (PyQt6) для сборки структурированных JSON-промтов для **Ideogram 4** и ComfyUI: с библиотекой промтов, холстом с референс-изображением, локализацией, светлой/тёмной темой и прямой генерацией через сервер ComfyUI. + +![Русский интерфейс](ru-white.png) + +## Запуск + +```powershell +python ideogram_prompt_builder.py +``` + +Нужен только `PyQt6` (других сторонних зависимостей нет): + +```powershell +pip install PyQt6 +``` + +## Что собирается + +Промты соответствуют схеме из `docs/prompting.md`: + +- `high_level_description` +- `style_description` с одним из `photo` или `art_style` +- `compositional_deconstruction.background` +- `compositional_deconstruction.elements` +- опциональные палитры HEX в верхнем регистре +- опциональные bbox в нормализованных координатах `0-1000` + +Действия вынесены в меню (**Файл / Правка / Библиотека / ComfyUI / Вид**) плюс компактная панель инструментов (Сгенерировать, Отменить/Повторить, Сохранить в библиотеку, Библиотека, Копировать) и переключатели языка/темы справа. Правая панель — вкладки: **JSON** (вывод + валидация) и **Результат** (сгенерированное изображение). + +## Редактирование + +- Перемещайте и масштабируйте рамки прямо мышью на холсте bbox. +- Поля палитры принимают HEX через запятую, кликабельные образцы и всплывающий выбор цвета, со счётчиком `n/лимит` и подсветкой некорректных цветов. +- **Отмена / Повтор** (`Ctrl+Z` / `Ctrl+Y`). +- **Дублирование**, **изменение порядка** (вверх/вниз) и добавление элементов из **шаблонов** (Персонаж / Заголовок / Фоновый объект). +- Список валидации кликабельный — клик по сообщению об элементе выделяет этот элемент. +- У текстовых полей есть контекстное меню перевода (`Перевести на RU` / `Перевести на EN`, с кэшированием). +- Работа автосохраняется в `draft.json`; при следующем запуске предлагается восстановить черновик. + +## Референс-изображение и масштаб + +В панели композиции можно загрузить **референс-изображение** (из файла или вставить из буфера), которое рисуется под сеткой bbox; ползунок **масштаба сетки** увеличивает сетку, и референс масштабируется вместе с ней. + +## Библиотека промтов + +Меню **Библиотека** сохраняет текущий промт (по желанию с превью), обновляет загруженную запись и открывает браузер библиотеки, где можно: + +- искать по имени / тегам / описанию и редактировать **теги** записи; +- загрузить любой сохранённый промт обратно в редактор для повторного использования и правки; +- прикрепить превью из файла или **вставить из буфера обмена**, либо убрать его; +- переименовывать, удалять записи и просматривать превью + сводку; +- **экспортировать / импортировать** всю библиотеку (промты + превью) одним `.zip`. + +Библиотека хранится в `prompt_library.json` рядом с приложением, превью — в `prompt_previews/` (создаются при первом сохранении). + +## Интеграция с ComfyUI + +Меню **ComfyUI** связывает приложение с запущенным сервером ComfyUI: + +- **Настройки ComfyUI** — хост, порт и HTTPS, с кнопкой *Проверить соединение*. Хранятся в `comfy_settings.json`. +- **Проверить ComfyUI** — проверяет, что все модели, семплеры и кастомные ноды, нужные встроенному workflow `ideogram4NSFWComfyui_v11.json`, установлены на сервере, и перечисляет отсутствующие. +- **Сгенерировать в ComfyUI** — конвертирует встроенный workflow в API-формат, подставляет текущий compact JSON, отправляет запрос и получает изображение. Результат показывается во вкладке **Результат** и может быть сохранён в файл или в библиотеку. + +## Внешний вид и локализация + +- **Тема** (меню Вид) переключает светлую / тёмную тему. +- Язык интерфейса переключается на лету через селектор **Язык**; по умолчанию — английский. + +Строки интерфейса берутся из `translations.json`, который создаётся при первом запуске из встроенных переводов `en` / `ru`. Чтобы добавить язык, добавьте ключ верхнего уровня с тем же набором строк (и при желании отображаемое имя в `LANGUAGE_NAMES`). Отсутствующие ключи откатываются к английскому, затем к самому ключу. Тема и язык сохраняются в `comfy_settings.json`. + +## Compact JSON для ComfyUI + +Вывод можно скопировать в pretty- или compact-виде. Compact JSON соответствует рекомендованной сериализации для инференса и вставляется в поле промта Ideogram 4 в ComfyUI. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..a9d347d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,336 @@ +

+ + + Ideogram +

+ +

Ideogram 4: Open image model at the forefront of design

+ +

+ Blog Post + Code + Model + API + Official Site +

+ +

+ A collage of Ideogram 4 samples spanning photorealism, illustration, typography, and poster design +

+ + +Ideogram 4 is **[Ideogram](https://ideogram.ai)'s first open-weight text-to-image model**. It is a **state-of-the-art foundation model trained from scratch** — not a fine-tune of any existing model. It introduces a new structured JSON prompting interface, with best-in-class multilingual text rendering, deep language understanding, explicit bounding-box layout and color-palette controls, and native 2k resolution images. The easiest way to try the model is online at **[ideogram.ai](https://ideogram.ai/)**. + +We believe openness drives innovation, and we invite the research community to innovate with us on the forefront of visual intelligence. + +## Table of Contents + +1. [News](#news) +2. [Model Zoo](#model-zoo) +3. [Performance](#performance) +4. [Quick Start](#quick-start) +5. [Model Summary](#model-summary) +6. [Prompting Guide](#prompting-guide) +7. [Documentation](#documentation) +8. [Citation](#citation) + +## News + +* **[2026-06-03]** **Ideogram 4 released!** Inference code and weights + are now public, and our [technical blog post](https://ideogram.ai/blog/ideogram-4.0/) is live. See the + [Quick Start](#quick-start) section to generate your first image, or try the + model online at [ideogram.ai](https://ideogram.ai/). + +## Model Zoo + +| Model | Params | Weight Quantization | Supported Hardware | Diffusers Support | License | +| :--- | :---: | :---: | :---: | :---: | :---: | +| **[Ideogram 4 (nf4)](https://huggingface.co/ideogram-ai/ideogram-4-nf4)** | 9.3B | nf4 | CUDA | Yes | [Ideogram 4 Non-Commercial](model_licenses/LICENSE-IDEOGRAM-4-NON-COMMERCIAL) | +| **[Ideogram 4 (fp8)](https://huggingface.co/ideogram-ai/ideogram-4-fp8)** | 9.3B | fp8 | All | No | [Ideogram 4 Non-Commercial](model_licenses/LICENSE-IDEOGRAM-4-NON-COMMERCIAL) | + +We plan to support more quantizations in the future. + + +## Performance + +We evaluate Ideogram 4 across third-party arenas and benchmarks, standard +open-source benchmarks, and our own internal human-preference benchmark. Across +all of them, **Ideogram 4 is the best open-weight image model by far, and sits +at the frontier of design.** + +### Design Arena + +[Design Arena](https://www.designarena.ai/) is a third-party image Elo +leaderboard focused specifically on design-oriented generation. On the overall +board, Ideogram 4 is the top-ranked open-weight model, trailing only proprietary +GPT and Gemini models: + +

+ Design Arena overall image Elo leaderboard with Ideogram 4.0 as the top open-weight model +

+ +Filtered to open-weight models only, Ideogram 4 leads by a commanding margin, +well ahead of the next-best open model: + +

+ Design Arena open-weight image Elo leaderboard, with Ideogram 4.0 well ahead of all other open models +

+ +### ContraLabs + +[ContraLabs](https://contralabs.com/research) ran a blind typography evaluation judged by +ten professional designers from Contra's top-earning talent. Ideogram 4 leads on +first-place win rate, picked as the best of four models 47.9% of the time +overall — well ahead of Gemini 3.1 Flash Image Preview (Nano Banana 2) at 30.0%, +FLUX.2 [max] (15.5%), and Grok Imagine 1.0 (15.0%): + +

+ ContraLabs typography first-place win rate, with Ideogram v4 leading +

+ +It also wins on practical usability: asked "Would you use this in real client +work?", the same designers rated Ideogram 4 highest at 3.55 / 5 — significantly +above Nano Banana 2 (2.84), Grok Imagine 1.0 (2.61), and FLUX.2 [max] (2.49): + +

+ ContraLabs 'would you use this in real client work?' rating, with Ideogram v4 leading +

+ +### LMArena + +On [LMArena](https://lmarena.ai/), a third-party text-to-image leaderboard that +measures general-purpose text-to-image use cases, Ideogram is the top-ranked +open-weight lab and a top-5 image generation lab overall — beaten only by giant +companies with vastly larger budgets and resources: + +

+ LMArena text-to-image lab leaderboard with Ideogram +

+ +### Ideogram internal eval + +For our internal human-preference benchmark, focused on graphic design and +photography, we had graphic designers deeply familiar with professional design +work do the rating blind. Bradley-Terry scores rank Ideogram 4 #2 overall — +behind only GPT Image 2 medium — and the top open-weight model: + +

+ Ideogram internal design leaderboard with Ideogram 4.0 +

+ +### Open-source benchmarks + +On standard open-source benchmarks measuring core capabilities — layout control +(7Bench), spatial reasoning and object fidelity (SpatialGenEval), text rendering +(X-Omni OCR), and prompt alignment (Prism) — Ideogram 4 closes the gap to the +leading closed-source models across every axis. On layout control (7Bench), it +is significantly better than all closed-source models: + +

+ Five-axis capability radar comparing Ideogram 4.0 to leading closed-source models on layout control, spatial reasoning, object fidelity, prompt alignment, and text rendering +

+ +At 9.3B parameters, Ideogram 4 delivers the best text rendering of any open-weight +release we benchmarked — ahead of much larger models like Qwen-Image (20B), +FLUX.2 [dev] (32B), and HunyuanImage 3.0 (80B MoE): + +

+ Parameter-efficiency scatter plot showing Ideogram 4.0 at 9.3B parameters leading all other open-weight models on text rendering +

+ + +## Quick Start + +### Install + +```bash +pip install . +``` + +If you plan to modify the code, install in editable mode instead so changes +under `src/ideogram4/` take effect without reinstalling: + +```bash +pip install -e . +``` + +### Model access + +The model weights are **gated** on Hugging Face, so you must accept the gate and +authenticate before the code can download them — otherwise the download fails +with a `404` / `GatedRepoError`. + +1. Open the model page — [ideogram-ai/ideogram-4-nf4](https://huggingface.co/ideogram-ai/ideogram-4-nf4) + (or [ideogram-ai/ideogram-4-fp8](https://huggingface.co/ideogram-ai/ideogram-4-fp8)) — and click + **Agree and access repository** to accept the license gate. +2. Create a Hugging Face access token at + [huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) and log in so the + download is authenticated: + + ```bash + hf auth login + ``` + + Alternatively, export the token directly: `export HF_TOKEN="hf_..."`. + +### CLI + +The plain `--prompt` is rewritten into the structured JSON caption the model +expects by a "magic prompt" LLM. By default this uses Ideogram's hosted +magic-prompt API, which is **free** and does the expansion server-side (no local +model or system prompt needed). It reads `IDEOGRAM_API_KEY` — get a key at +https://developer.ideogram.ai/: + +```bash +python run_inference.py \ + --prompt "a ginger cat wearing a tiny wizard hat reading a spellbook" \ + --output out.png \ + --quantization "nf4" \ + --magic-prompt-key "$IDEOGRAM_API_KEY" +``` + +You can also run the expansion through your own LLM provider — one of our magic-prompt +system prompt is **open source**. See the +[Prompting Guide](docs/prompting.md#magic-prompt) for details. + +For the highest-quality images, set `--height 2048 --width 2048` and +`--sampler-preset V4_QUALITY_48`. + +#### Safety screening with Hive + +Prompt and output safety screening is performed via [Hive](https://thehive.ai/). +Sign up and create a Text Moderation key and a Visual Content Moderation key, +then export them as `HIVE_TEXT_MODERATION_KEY` and `HIVE_VISUAL_MODERATION_KEY` +(or pass them via `--hive-text-key` / `--hive-visual-key`). + +```bash +python run_inference.py \ + --prompt "an isometric illustration of a tiny city floating in the clouds" \ + --output out.png \ + --quantization "nf4" \ + --magic-prompt-key "$MAGIC_PROMPT_API_KEY" \ + --hive-text-key "$HIVE_TEXT_MODERATION_KEY" \ + --hive-visual-key "$HIVE_VISUAL_MODERATION_KEY" +``` + +For sampler presets, parameter reference, and optimization tips, see +[docs/inference.md](docs/inference.md). + +## Model Summary + +Ideogram 4 is a **foundation model trained entirely from scratch**, not a +fine-tune or distillation of any existing checkpoint. It is a flow-matching +text-to-image model built on a **fully single-stream** Diffusion Transformer +(DiT) architecture. + +**Architecture:** +- **Fully single-stream DiT.** Text and image tokens are concatenated into one + unified sequence and processed through the same 34-layer transformer, with no + separate text or image branches. This enables deep cross-modal interaction at + every layer. +- **Vision-language model as text encoder.** Instead of a text-only encoder + like CLIP or T5, Ideogram 4 uses + [Qwen3-VL-8B-Instruct](https://huggingface.co/Qwen/Qwen3-VL-8B-Instruct), + a full vision-language model that provides far richer understanding of visual + concepts. Hidden states are extracted from **13 intermediate layers** and + concatenated, giving the model multi-scale semantic features ranging from + surface-level token information to deep compositional understanding. +- **Dual-branch classifier-free guidance.** The conditional (positive) and + unconditional (negative) branches can be independently refined, enabling + separate control over prompt adherence and image quality. +- **Flexible resolution.** Native support for any resolution from 256 to 2048 + (multiples of 16), with aspect ratios up to 6:1. A single model handles + everything from square thumbnails to ultrawide banners, with the noise + schedule auto-adjusting per resolution. + +**Key Capabilities:** +- **Extreme controllability.** Ideogram 4 is trained on structured JSON + captions, giving users unprecedented control over composition, style, + lighting, color palette, typography, and spatial layout, all from a single + prompt. +- **State-of-the-art text rendering.** Ideogram 4 delivers best-in-class + in-image text generation (signage, logos, captions, watermarks, multi-line + text) with high fidelity directly from the prompt. +- **Spatial layout control.** Bounding-box coordinates in the prompt allow + explicit placement of subjects, text elements, and background regions. +- **Color palette conditioning.** Specify hex colors in the prompt to steer the + image's dominant color scheme. + +For full architecture details, see +[docs/model_architecture.md](docs/model_architecture.md). For a walkthrough of +how the pipeline components fit together, see +[docs/pipeline.md](docs/pipeline.md). + +## Prompting Guide + +Ideogram 4 is trained exclusively on **structured JSON captions**. While +plain-text prompts work, you will get the best results by providing a JSON +object that follows our caption schema. + + +Key points: + +- **Use JSON prompts** for maximum controllability — the model was trained on + them and understands the structure natively. +- **Color palette conditioning** — specify a `colour_palette` array of hex + colors in the style description to steer the image's color scheme. +- **Aspect ratio flexibility** — Ideogram 4 supports a wide range of aspect + ratios (any multiple-of-16 resolution from 256 to 2048 on each side). This + is a key advantage for practical use: portraits, landscapes, banners, + phone wallpapers, social media formats, etc. +- **Bounding-box layout** — specify `bbox` coordinates in the prompt to + explicitly place subjects, text elements, and background regions. +- **Compositional control** — use `compositional_deconstruction` with bounding + boxes and per-element descriptions for precise spatial layout. + + +**Why JSON-only training?** We train exclusively on JSON so that training +and inference share a single, common prompt format. The training captions themselves are deliberately +**extremely descriptive**: each JSON exhaustively describes everything in +the image to maximize training efficiency. The more +text-to-image relationships each caption pins down, the more grounded +supervision the model extracts from a single training pair, rather than +having to infer those relationships across many sparsely-captioned samples. + +**Why JSON at inference time?** Because the model was trained on captions +that name every object explicitly, the most reliable way to get every +requested object rendered is to mirror that pattern. Plain-text prompts still work, but +won't perform as well since the model was only trained on structured JSON captions. + +**Don't want to write JSON by hand?** That's what *magic prompt* is for: it uses +an LLM to expand a plain-text prompt into a full structured caption before +generation, so you get JSON-quality results from a casual prompt. It runs by +default in `run_inference.py` (see the [CLI](#cli) section). + +See [docs/prompting.md](docs/prompting.md) for a full guide. + +## Documentation + +| Document | Description | +| :------- | :---------- | +| [docs/prompting.md](docs/prompting.md) | How to write JSON prompts, color palette conditioning, aspect ratios | +| [docs/inference.md](docs/inference.md) | Sampler presets, parameter reference, resolutions, optimization tips | +| [docs/model_architecture.md](docs/model_architecture.md) | Architecture diagram, DiT spec, component details | +| [docs/pipeline.md](docs/pipeline.md) | Conceptual pipeline walkthrough — how all components fit together | +| [docs/development.md](docs/development.md) | Dev setup, pre-commit hooks, contributing | +| [docs/safety.md](docs/safety.md) | Pre-training, post-training, and inference-time safety mitigations; how to report violations | + +## Citation + +If you find the provided code or models useful for your research, consider citing them as: + + +```bibtex +@misc{ideogram-4-2026, + author={Ideogram AI}, + title={{Ideogram 4}}, + year={2026}, + howpublished={\url{https://ideogram.ai/blog/ideogram-4.0/}}, +} +``` + +## We're Hiring! + +We're looking for **Research Scientists** and **Research Engineers** to +work on next-generation generative models and the products built on top of +them. Interested candidates please apply https://jobs.ashbyhq.com/ideogram diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..1bcad9a --- /dev/null +++ b/docs/development.md @@ -0,0 +1,58 @@ +# Development + +## Editable install + +We recommend installing into an isolated environment — the dependencies include several GB of CUDA-built wheels. + +```bash +python -m venv .venv && source .venv/bin/activate +``` + +For development, install the package in editable mode so changes to the source +tree are picked up without reinstalling: + +```bash +pip install -e . +``` + +or with [`uv`](https://docs.astral.sh/uv/): + +```bash +uv venv && source .venv/bin/activate +``` + +```bash +uv pip install -e . +``` + +## Pre-commit hooks + +This repo uses [pre-commit](https://pre-commit.com/) to run lint, format, and +type checks (`ruff`, `mypy`, etc.) before each commit. + +Install once per clone: + +```bash +pip install pre-commit +pre-commit install +``` + +`pre-commit install` registers a git hook in `.git/hooks/pre-commit`, so it +requires the directory to be a git repo. The hooks now run automatically on +`git commit` against staged files. + +To run the hooks manually against every file in the repo (useful right after +the first install, or in CI): + +```bash +pre-commit run --all-files +``` + +The first run downloads each hook's environment (ruff, mypy, etc.) into +`~/.cache/pre-commit/` and may take a minute. Subsequent runs are fast. + +To bump pinned hook versions in `.pre-commit-config.yaml`: + +```bash +pre-commit autoupdate +``` diff --git a/docs/inference.md b/docs/inference.md new file mode 100644 index 0000000..0e5f6b1 --- /dev/null +++ b/docs/inference.md @@ -0,0 +1,63 @@ +# Inference Reference + +Detailed parameters, sampler presets, supported resolutions, and optimization +tips for Ideogram 4 inference. + +## Sampler Presets + +Named presets bundle a step count, per-step CFG schedule, schedule mean (`mu`), +and schedule standard deviation (`std`) into a single flag: + +```bash +python run_inference.py \ + --prompt "a cat wearing a tiny top hat" \ + --sampler-preset V4_QUALITY_48 \ + --output out.png +``` + +| Preset | Steps | CFG schedule | `mu` | `std` | +| :----- | :---: | :----------- | :--: | :---: | +| `V4_QUALITY_48` | 48 | 45 steps @ gw=7, then 3 polish steps @ gw=3 | 0.0 | 1.5 | +| `V4_DEFAULT_20` | 20 | 18 steps @ gw=7, then 2 polish steps @ gw=3 | 0.0 | 1.75 | +| `V4_TURBO_12` | 12 | 11 steps @ gw=7, then 1 polish step @ gw=3 | 0.5 | 1.75 | + +`V4_QUALITY_48` is the default. Fewer steps trade quality for speed. The full +registry lives in +[`ideogram4.sampler_configs.PRESETS`](../src/ideogram4/sampler_configs.py); add a +new entry there to define your own. + +## Key Parameters + +These are the keyword arguments accepted by `Ideogram4Pipeline.__call__`. The +defaults below apply when you call `pipe(...)` directly; `run_inference.py` +overrides `num_steps`, `guidance_schedule`, `mu`, and `std` from the chosen +sampler preset (see above). + +| Parameter | Default | Notes | +| :-------- | :-----: | :---- | +| `height` / `width` | 1024 | Must be multiples of 16. Supported range: 256–2048. Aspect ratios up to 6:1 or 1:6. | +| `num_steps` | 48 | More steps = higher quality. The `V4_QUALITY_48` preset (48 steps) is a good speed/quality trade-off. | +| `guidance_scale` | 7.0 | Constant guidance weight used when no `guidance_schedule` is given. Higher = more prompt adherence, lower = more diversity. | +| `guidance_schedule` | `None` | Optional per-step guidance weights (loop-index order: index 0 is the final step). Overrides `guidance_scale`. | +| `mu` | 0.5 | Logit-normal schedule mean. Auto-adjusted for resolution. | +| `std` | 1.0 | Logit-normal schedule standard deviation. | +| `seed` | `None` | Set for reproducible results. | + +## Supported Resolutions + +Ideogram 4 natively supports any resolution where both height and width are +multiples of 16, within the range 256–2048 (aspect ratios up to 6:1 or 1:6). + +| Use case | Resolution | Aspect ratio | +| :------- | :--------: | :----------: | +| Square | 1024 × 1024 | 1:1 | +| Landscape | 1536 × 1024 | 3:2 | +| Portrait | 1024 × 1536 | 2:3 | +| Widescreen | 1920 × 1088 | ~16:9 | +| Ultrawide | 2048 × 768 | ~21:9 | +| Phone wallpaper | 1024 × 1792 | ~9:16 | +| Social banner | 1600 × 400 | 4:1 | + +Resolution buckets use 16-pixel increments, giving fine-grained control over +output dimensions. + diff --git a/docs/model_architecture.md b/docs/model_architecture.md new file mode 100644 index 0000000..13d8ed4 --- /dev/null +++ b/docs/model_architecture.md @@ -0,0 +1,45 @@ +# Model Architecture + +``` +prompt ─► Qwen3-VL-8B-Instruct (extract hidden states from layers (0,3,…,33,35) → concat) + │ + ▼ + ┌──────────────────────────────────────────────────┐ + │ Ideogram4Transformer │ + │ • 34 × Ideogram4TransformerBlock │ + │ – Ideogram4Attention (QK-RMSNorm, MRoPE) │ + │ – Ideogram4MLP (SwiGLU) │ + │ – adaln scale/gate from t-embedding │ + │ • Ideogram4FinalLayer │ + └──────────────────────────────────────────────────┘ + │ velocity prediction + ▼ + Euler flow-matching sampler with asymmetric CFG + │ denoised image latents + ▼ + VAE decode + │ + ▼ + PIL.Image +``` + +The transformer is a single-stream DiT: text tokens (Qwen3-VL hidden states from +the activation layers) and image latent tokens are concatenated into one +sequence, modulated per-block by an AdaLN computed from the flow-matching +timestep embedding. Attention uses QK-RMSNorm and 3D MRoPE so that text and +image tokens share a unified positional space. + +Model spec: + +| field | value | +|-------------------|---------------| +| `emb_dim` | 4608 | +| `num_layers` | 34 | +| `num_heads` | 18 | +| `intermediate` | 12288 | +| `adanln_dim` | 512 | +| `rope_theta` | 5_000_000 | +| `mrope_section` | (24, 20, 20) | +| latent channels | 32 × 2² = 128 | +| max text tokens | 2048 | +| sampler | Euler flow-matching, logit-normal schedule, asymmetric CFG | diff --git a/docs/pipeline.md b/docs/pipeline.md new file mode 100644 index 0000000..87263f9 --- /dev/null +++ b/docs/pipeline.md @@ -0,0 +1,183 @@ +# Pipeline: How All the Components Work Together + +This document explains the end-to-end Ideogram 4 inference pipeline +conceptually. For the architecture spec and code pointers, see +[model_architecture.md](model_architecture.md). + +## Overview + +Ideogram 4 is a **flow-matching text-to-image model** built on a +**single-stream DiT** (Diffusion Transformer). The pipeline has four main +components: + +``` + ┌─────────────┐ ┌──────────────────────┐ ┌──────────────┐ ┌───────────┐ + │ Qwen3-VL │ │ Ideogram4 │ │ KL VAE │ │ │ + │ Text ├──►│ Transformer (DiT) ├──►│ VAE ├──►│ Image │ + │ Encoder │ │ + Euler Sampler │ │ Decoder │ │ │ + └─────────────┘ └──────────────────────┘ └──────────────┘ └───────────┘ + frozen trainable frozen +``` + +## 1. Text Encoder — Qwen3-VL-8B-Instruct + +The text encoder is a frozen [Qwen3-VL-8B-Instruct](https://huggingface.co/Qwen/Qwen3-VL-8B-Instruct) +vision-language model, used in text-only mode (no vision inputs). + +**What it does:** +- Tokenizes the prompt using the Qwen3 chat template. +- Runs a forward pass through the 36-layer transformer. +- **Extracts hidden states** from 13 specific layers: 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 35. +- Concatenates these hidden states along the feature dimension, producing a + multi-scale text representation. + +**Why multi-layer extraction?** Different layers capture different levels of +abstraction — early layers encode surface-level token information, while later +layers encode deeper semantic meaning. Concatenating them gives the DiT access +to the full spectrum. + +**Output:** A tensor of shape `(batch, num_text_tokens, hidden_dim * 13)`. + +## 2. DiT Backbone — Ideogram4Transformer + +The core generative model is a 34-layer single-stream Diffusion Transformer. + +### Sequence layout + +Text tokens and image latent tokens are concatenated into one sequence and +processed through the same self-attention layers. + +``` +Sequence layout (per sample): + + ┌───────────────────┬────────────────────────┐ + │ text tokens │ image latent tokens │ + │ (up to 2048) │ (grid_h × grid_w) │ + └───────────────────┴────────────────────────┘ + ▲ ▲ + Qwen3-VL features noisy latents z_t +``` + +### Key components per block + +- **Self-attention** with QK-RMSNorm and 3D Multimodal RoPE (MRoPE). The + positional encoding is 3-dimensional: for text tokens it uses a 1D position + broadcast to 3 axes; for image tokens it uses (temporal, height, width) + coordinates. This lets text and image tokens coexist in a unified positional + space. +- **SwiGLU MLP** — the feed-forward layer uses a gated linear unit with SiLU + activation. +- **Adaptive Layer Norm (AdaLN)** — the timestep `t` is embedded as a scalar + and generates per-block scale and gate parameters. This conditions every layer + on the current noise level. + +### Flow matching + +The model is trained with a **flow-matching** objective. Instead of predicting +noise (as in DDPM), the model predicts a **velocity field** `v(z_t, t)` that +defines the ODE: + +``` +dz/dt = v(z_t, t) +``` + +At inference time, we start from pure Gaussian noise `z_1` and integrate +backward to `z_0` (the clean image) using the Euler method: + +``` +z_{t-dt} = z_t + v(z_t, t) * dt +``` + +### Noise schedule + +The timestep distribution follows a **logit-normal schedule** parameterized by +`(mu, sigma)`. The mean `mu` controls how much time the sampler spends at +different noise levels — higher `mu` shifts more steps toward higher noise +(important for high-resolution images). The schedule auto-adjusts for +resolution: + +``` +mu_adjusted = mu_base + 0.5 * log(num_pixels / base_pixels) +``` + +where `base_pixels = 512 * 512`. + +## 3. Classifier-Free Guidance (CFG) + +At each sampling step, two forward passes are run through the DiT: + +1. **Conditional (positive):** full text features + noisy image latents. +2. **Unconditional (negative):** zeroed text features + noisy image latents + (image-only tokens, asymmetric CFG). + +The guided velocity is a weighted combination: + +``` +v_guided = gw * v_conditional + (1 - gw) * v_unconditional +``` + +where `gw` is the per-step guidance weight. With +`gw > 1`, the model amplifies the text-conditional signal and suppresses the +unconditional prediction, producing images that follow the prompt more +faithfully. + +**Asymmetric CFG:** The unconditional branch only processes image tokens (no +text padding), making it computationally cheaper than a full-sequence negative +pass. + +**Per-step schedules:** The guidance weight can vary across steps. The +`V4_QUALITY_48` preset, for example, uses `gw=7` for the first 45 steps and +`gw=3` for the final 3 "polish" steps near `t=0`. + + +## 4. VAE Decoder — KL Autoencoder + +The denoised latent `z_0` is decoded to pixel space using a frozen KL +autoencoder. + +**What it does:** +- **Unpatching:** The DiT works with 2×2 patches of latent pixels. The decoder + input is reshaped from `(batch, grid_h * grid_w, channels * 4)` to + `(batch, channels, grid_h * 2, grid_w * 2)`. +- **Denormalization:** Per-channel shift and scale are applied to undo the + latent normalization used during training. +- **Decoding:** The VAE decoder maps latents to RGB pixels. +- **Clipping:** Output is clamped to [-1, 1] and rescaled to [0, 255] uint8. + +**Compression factor:** The autoencoder provides 8× spatial compression on each +axis, and the 2×2 patching in the DiT adds another 2×. So a 1024×1024 image +is represented as a 64×64 grid of latent tokens, each with 128 channels +(32 base channels × 2² patch). + +## Putting it all together + +```python +# Pseudocode for one generation call: + +# 1. Encode text +text_features = qwen3_vl.encode(prompt) # (B, L_text, D) + +# 2. Initialize noise +z = torch.randn(B, grid_h * grid_w, 128) # pure noise at t=1 + +# 3. Euler integration from t=1 to t=0 +for step in reversed(range(num_steps)): + t = schedule(step) + s = schedule(step - 1) + + # Conditional pass (text + image) + v_cond = dit(text_features, z, t) + + # Unconditional pass (image only, zeroed text) + v_uncond = dit(zeros, z, t) + + # CFG combination + v = gw[step] * v_cond + (1 - gw[step]) * v_uncond + + # Euler step + z = z + v * (s - t) + +# 4. Decode to pixels +image = vae.decode(z) +``` diff --git a/docs/prompting.md b/docs/prompting.md new file mode 100644 index 0000000..b44698b --- /dev/null +++ b/docs/prompting.md @@ -0,0 +1,362 @@ +# Prompting Guide + +Ideogram 4 is trained exclusively on **structured JSON captions** (represented as string type). While the +model can accept plain-text prompts, providing a JSON object that follows the +caption schema gives significantly better results, especially for +controllability, spatial layout, and style fidelity. + +## Plain-text vs. JSON prompts + +You can pass in plain-text prompts directly to the model and it will work. The +sampling parameters come from a named preset in `ideogram4.PRESETS` (the same +ones `run_inference.py` exposes via `--sampler-preset`), unpacked into the +`pipe()` call: + +```python +from ideogram4 import PRESETS + +preset = PRESETS["V4_QUALITY_48"] +images = pipe( + "a golden retriever on a skateboard", + height=1024, + width=1024, + num_steps=preset.num_steps, + guidance_schedule=preset.guidance_schedule, + mu=preset.mu, + std=preset.std, +) +``` + + +But for higher quality image generations and more control, pass a JSON string as the prompt: + +```python +import json +from ideogram4 import PRESETS + +caption = { + "high_level_description": "A golden retriever riding a skateboard down a sunny sidewalk.", + "style_description": { + "aesthetics": "warm, playful, vibrant", + "lighting": "bright afternoon sunlight, long soft shadows", + "photo": "shallow depth of field, eye-level, 85mm lens", + "medium": "photograph", + "color_palette": ["#F5C542", "#87CEEB", "#4A4A4A", "#FFFFFF", "#2E8B57"] + }, + "compositional_deconstruction": { + "background": "A sun-drenched suburban sidewalk lined with green hedges and a white picket fence. Dappled light filters through overhead trees.", + "elements": [ + {"type": "obj", "bbox": [200, 300, 800, 900], "desc": "A golden retriever with a fluffy coat, standing on a red skateboard with all four paws. Its tongue is out and ears are flapping in the wind."}, + {"type": "obj", "bbox": [250, 750, 750, 950], "desc": "A worn red skateboard with black wheels rolling along the concrete sidewalk."} + ] + } +} + +preset = PRESETS["V4_QUALITY_48"] +images = pipe( + json.dumps(caption, separators=(",", ":"), ensure_ascii=False), + height=1024, + width=1024, + num_steps=preset.num_steps, + guidance_schedule=preset.guidance_schedule, + mu=preset.mu, + std=preset.std, +) +``` + +## Magic prompt + +Writing these captions by hand is optional. *Magic prompt* uses an LLM to expand +a plain-text prompt into a full structured caption for you, so you get the +quality of a JSON prompt from a casual one. It is enabled by default in +`run_inference.py`; you can also call it directly: + +```python +import os +from ideogram4 import ClaudeOpusMagicPromptV1, PRESETS + +magic = ClaudeOpusMagicPromptV1(api_key=os.environ["MAGIC_PROMPT_API_KEY"]) +caption = magic.expand("a golden retriever on a skateboard", aspect_ratio="1:1") +preset = PRESETS["V4_QUALITY_48"] +images = pipe( + caption, + height=1024, + width=1024, + num_steps=preset.num_steps, + guidance_schedule=preset.guidance_schedule, + mu=preset.mu, + std=preset.std, +) +``` + +The package ships three configurations, registered by name in +`ideogram4.MAGIC_PROMPTS` (the keys `run_inference.py` accepts via +`--magic-prompt-model`): + +| Config class | Registry key | Backend | +| :--- | :--- | :--- | +| `Ideogram4MagicPromptV1` | `ideogram-4-v1` | Ideogram's hosted magic-prompt API (free; reads `IDEOGRAM_API_KEY`) | +| `ClaudeOpusMagicPromptV1` | `claude-opus-v1` | [OpenRouter](https://openrouter.ai) (reads `MAGIC_PROMPT_API_KEY`) | +| `ClaudeSonnetMagicPromptV1` | `claude-sonnet-v1` | [OpenRouter](https://openrouter.ai) (reads `MAGIC_PROMPT_API_KEY`) | + +`ideogram-4-v1` is the default and is **free**. It runs the expansion +server-side, so there is no local model or system prompt involved — it just needs +an Ideogram API key (get one at +[developer.ideogram.ai](https://developer.ideogram.ai)). The `claude-*` +configurations instead send one of our open-source system prompt to an OpenRouter model; +select one with `--magic-prompt-model` and export `MAGIC_PROMPT_API_KEY`: + +```bash +python run_inference.py \ + --prompt "an isometric illustration of a tiny city floating in the clouds" \ + --output out.png \ + --quantization "nf4" \ + --magic-prompt-model claude-opus-v1 \ + --magic-prompt-key "$MAGIC_PROMPT_API_KEY" +``` + +See the README's [CLI](../README.md#cli) section for the rest of the flags. + +Our magic-prompt system prompts are **open source** (they ship in +`src/ideogram4/magic_prompt_system_prompts/`), so you're also welcome to +construct the caption with any system prompt and LLM of your choosing. + +**A few caveats:** + +- At Ideogram we've tested this magic prompt with **Claude Opus**. You're welcome + to implement your own `MagicPrompt` configurations and/or drive a different LLM + with our system prompt, but those paths aren't tested by us and quality may + vary. +- The magic prompt shipped here is **not** the same magic prompt used in + production at [Ideogram.ai](https://ideogram.ai) — results will differ from the + hosted product (including the `ideogram-4-v1` API). + +## JSON caption schema + +> **Note:** Following this schema is **not required** — the model accepts any +> string as a prompt. The schema below describes the exact structure the model +> was trained on, and matching it minimizes train/eval mismatch so the model +> generates closer to its full quality. Treat the "required" / "must" language +> in the rest of this section as the format the [`CaptionVerifier`](../src/ideogram4/caption_verifier.py) +> checks against, not as a hard pipeline constraint. Deviating from the schema +> is allowed; it just means you're sampling outside the training distribution. + +The full caption schema has three top-level fields: + +1. `high_level_description` — optional string, but strongly recommended. +2. `style_description` — optional object. +3. `compositional_deconstruction` — **required** object. + +`compositional_deconstruction` must always be present. Within it, both +`background` and `elements` are required. + +### `high_level_description` + +A one- or two-sentence summary of the entire image. Strongly recommended in every prompt. + +```json +"high_level_description": "A medium-shot photograph of a barista pouring latte art in a cozy cafe." +``` + +### `style_description` + +Controls the visual style, lighting, medium, and color palette. + +`style_description` must contain **exactly one** of: + +- `photo` — for photographic captions (paired with `medium: "photograph"`). +- `art_style` — for non-photographic captions (illustration, painting, 3D render, etc.). + +`aesthetics`, `lighting`, and `medium` are also required when `style_description` is present. `color_palette` is optional. + +**Key order is strict** and depends on which of `photo` / `art_style` is used: + +| Caption type | Required key order | +| :----------- | :----------------- | +| Photo (uses `photo`) | `aesthetics`, `lighting`, `photo`, `medium`, `color_palette` | +| Non-photo (uses `art_style`) | `aesthetics`, `lighting`, `medium`, `art_style`, `color_palette` | + +`color_palette` is the only field in this list that may be omitted; if it is included it must remain in the final position. + +Field descriptions: + +| Field | Type | Description | +| :---- | :--- | :---------- | +| `aesthetics` | string | Aesthetic keywords (e.g. "moody, cinematic, desaturated") | +| `lighting` | string | Lighting description (e.g. "golden hour, rim light, dramatic shadows") | +| `photo` | string | Camera/lens details for photographic outputs (e.g. "35mm, f/1.4, bokeh"). Use this OR `art_style`, not both. | +| `medium` | string | Medium type: `"photograph"`, `"illustration"`, `"3d_render"`, `"painting"`, `"graphic_design"`, etc. | +| `art_style` | string | Art style description for non-photo captions (e.g. "flat vector illustration, bold outlines"). Use this OR `photo`, not both. | +| `color_palette` | list[str] | Hex color codes that steer the image's dominant colors. Up to 16 entries. | + +### `compositional_deconstruction` + +Provides fine-grained spatial control over the image layout using bounding +boxes and per-element descriptions. Both fields below are required. + +| Field | Type | Description | +| :---- | :--- | :---------- | +| `background` | string | Description of the background/environment (required) | +| `elements` | list[dict] | List of elements with optional bounding boxes (required) | + +`background` must come before `elements`. + +Each element in `elements` must follow a fixed **key order** depending on its +type. `bbox` and `color_palette` are optional within an element; if present they +must appear in the positions shown below. + +| Type | Required key order | +| :--- | :----------------- | +| `"obj"` | `type`, `bbox`, `desc`, `color_palette` | +| `"text"` | `type`, `bbox`, `text`, `desc`, `color_palette` | + +Field descriptions: + +| Field | Type | Description | +| :---- | :--- | :---------- | +| `type` | string | `"obj"` for objects/subjects, `"text"` for in-image text | +| `bbox` | list[int] | `[y_min, x_min, y_max, x_max]` in normalized `0–1000` coordinates (origin at top-left). Optional. | +| `desc` | string | Detailed description of the element | +| `text` | string | (only for `type: "text"`) The literal text to render | +| `color_palette` | list[str] | Optional per-element palette. Up to 5 hex entries. | + +**Key ordering matters.** The model was trained on JSON with a consistent key +order, so maintaining it improves generation quality. The pipeline runs +[`CaptionVerifier`](../src/ideogram4/caption_verifier.py) on every prompt and emits +warnings for unknown keys, missing required keys, or out-of-order keys. + +**Hex color format.** Colors in `color_palette` must be uppercase +`#RRGGBB` strings (e.g. `#1B1B2F`, not `#1b1b2f` or `#fff`). + +**Encoding.** When serializing with Python's `json` module, pass +`separators=(",", ":")` and `ensure_ascii=False`. +`CaptionVerifier` warns when it detects `\uXXXX` escapes with no literal +non-ASCII characters in the raw text. + +## Color palette conditioning + +One of Ideogram 4's distinctive features is **color palette control**. By +providing a `color_palette` array of hex colors in `style_description`, you +can steer the dominant colors of the generated image. + +```json +"style_description": { + "aesthetics": "moody, cinematic", + "lighting": "low-key, deep shadows", + "photo": "35mm, f/1.4", + "medium": "photograph", + "color_palette": ["#1B1B2F", "#162447", "#1F4068", "#E43F5A", "#F5F5F5"] +} +``` + +Tips for effective color palette use: + +- **Up to 16 colors** in `style_description.color_palette` for the overall + image palette, and **up to 5 colors** per element in + `compositional_deconstruction.elements[*].color_palette`. +- **Include background colors** — if you want a dark background, include the + dark hex in the palette. +- **Contrast pairs** — include both your highlight and shadow colors for more + controlled lighting. +- **Uppercase hex only** — `#RRGGBB` form, no shorthand. + +### Example: warm sunset palette + +```json +{ + "high_level_description": "A lone sailboat on calm water at sunset.", + "style_description": { + "aesthetics": "serene, warm, golden hour", + "lighting": "golden hour backlighting, warm atmospheric haze", + "photo": "wide angle, f/8, long exposure", + "medium": "photograph", + "color_palette": ["#FF6B35", "#F7C59F", "#004E89", "#1A659E", "#2B2D42"] + }, + "compositional_deconstruction": { + "background": "A calm ocean stretching to a low horizon, sky washed in orange and pink with thin wisps of cloud.", + "elements": [ + {"type": "obj", "desc": "A single sailboat with a white triangular sail, silhouetted against the setting sun."} + ] + } +} +``` + + +### Example: corporate design palette + +```json +{ + "high_level_description": "A clean, modern business card layout for a tech company.", + "style_description": { + "aesthetics": "minimal, professional, geometric", + "lighting": "even, diffuse studio lighting", + "medium": "graphic_design", + "art_style": "flat vector design, generous whitespace, sans-serif typography", + "color_palette": ["#FFFFFF", "#F0F0F0", "#333333", "#0066FF", "#00CC88"] + }, + "compositional_deconstruction": { + "background": "A solid off-white card surface with subtle paper texture.", + "elements": [ + {"type": "text", "text": "ACME TECH", "desc": "Bold dark grey sans-serif company name across the upper third of the card."}, + {"type": "text", "text": "hello@acme.tech", "desc": "Small blue sans-serif contact email near the bottom of the card."} + ] + } +} +``` + + + +## Full example + +```json +{ + "high_level_description": "A medium-shot photograph of Formula 1 driver Max Verstappen wearing his Red Bull Racing racing suit and cap, smiling as he holds his racing helmet and talks to a man in a white shirt and black vest at a race track.", + "style_description": { + "aesthetics": "saturated primary colors, rule of thirds, joyful and triumphant", + "lighting": "overcast daylight, diffused, soft subtle shadows", + "photo": "shallow depth of field, sharp focus, eye-level, telephoto", + "medium": "photograph" + }, + "compositional_deconstruction": { + "background": "The background is an out-of-focus racing paddock or track environment. Several blurred figures are visible, including one in an orange shirt. A purple and white structure with a red 'F1' logo stands on the left. The scene is outdoors with daylight, though the sky is not visible.", + "elements": [ + {"type": "obj", "bbox": [55, 642, 1000, 937], "desc": "An older man standing in profile, facing left toward Max Verstappen. He has grey hair and fair skin. He is wearing a white long-sleeved button-down shirt with a navy blue quilted vest over it. He has a slight smile."}, + {"type": "obj", "bbox": [34, 137, 1000, 617], "desc": "Max Verstappen, a fair-skinned male Formula 1 driver, positioned in the center. He is facing forward with a joyful expression and a slight smile. He wears a navy blue Red Bull Racing team uniform with numerous sponsor logos and a matching baseball cap with the number '1'. He is holding a white and red racing helmet in his hands. He has a silver watch on his left wrist."}, + {"type": "obj", "bbox": [422, 212, 792, 452], "desc": "Max Verstappen's racing helmet, held in front of his chest. It features a white, red, and yellow design with the Red Bull logo and the 'Player 0.0' branding. The visor is clear and open."}, + {"type": "text", "bbox": [657, 0, 755, 142], "text": "F1", "desc": "Large, stylized red logo on a black and purple background in the lower left."}, + {"type": "text", "bbox": [768, 0, 818, 147], "text": "Formula 1\nWorld Championship™", "desc": "Small white sans-serif text below the F1 logo on the left side."}, + {"type": "text", "bbox": [78, 447, 117, 510], "text": "ORACLE\nRed Bull\nRacing", "desc": "Very small white and orange logo on the front of the navy blue cap."}, + {"type": "text", "bbox": [78, 417, 120, 440], "text": "1", "desc": "Bold red numeral '1' on the front left side of the navy blue cap."}, + {"type": "text", "bbox": [332, 442, 363, 483], "text": "Red Bull", "desc": "Small yellow and red text logo on the collar of the uniform."}, + {"type": "text", "bbox": [373, 490, 423, 532], "text": "RAUCH", "desc": "Small yellow and blue logo on the right chest of the uniform."}, + {"type": "text", "bbox": [422, 473, 500, 532], "text": "BYBIT\nHONDA", "desc": "Medium-sized white sans-serif text on the right chest of the uniform."}, + {"type": "text", "bbox": [410, 203, 442, 257], "text": "RAUCH", "desc": "Small yellow logo on the left upper arm of the uniform."}, + {"type": "text", "bbox": [530, 448, 627, 510], "text": "Red Bull", "desc": "Medium red text logo on the right side of the torso, part of the Red Bull graphic."}, + {"type": "text", "bbox": [680, 417, 768, 523], "text": "Red Bull", "desc": "Large red text logo across the lower torso of the uniform."}, + {"type": "text", "bbox": [797, 475, 815, 518], "text": "MAX", "desc": "Small white text next to a Dutch flag on the belt area of the uniform."}, + {"type": "text", "bbox": [558, 317, 715, 355], "text": "Player 0.0", "desc": "Black sans-serif text on a white band on the racing helmet."}, + {"type": "text", "bbox": [560, 800, 582, 835], "text": "IA.COM", "desc": "Small blue sans-serif text on the right sleeve of the white shirt."}, + {"type": "text", "bbox": [968, 8, 997, 332], "text": "© Anadolu Agency via Getty Images", "desc": "Small white watermark text in the bottom left corner."} + ] + } +} +``` + +## Safety filter + +NSFW prompts are blocked. Instead of an image, the model returns a gray screen +with the text "Image blocked by safety filter". False positive rates for safety +is higher for non-json like prompts. We are aware that this is an issue an we may +make a future checkpoint update to improve it. + +# Congratulations! + +You are now a certified Ideogram 4 prompter! + +With structured JSON captions, you have fine-grained control over composition, +color palettes, typography, and spatial layout — capabilities that go far +beyond what plain-text prompts can express! +We'd love to see what you create :-) +Share your results, experiments, and creative discoveries with the community, +especially the unexpected ones. Tag us on social media or open a discussion on +the repo. Happy generating! diff --git a/eng-vlack.png b/eng-vlack.png new file mode 100644 index 0000000000000000000000000000000000000000..780780ba718e10f319596e5882d832035df1cc86 GIT binary patch literal 242766 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

k%$IY`qV4H>Ng{7z!I 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 DlkdG} literal 0 HcmV?d00001 diff --git a/ideogram4NSFWComfyui_v11.json b/ideogram4NSFWComfyui_v11.json new file mode 100644 index 0000000..5965e48 --- /dev/null +++ b/ideogram4NSFWComfyui_v11.json @@ -0,0 +1,2853 @@ +{ + "id": "fdcfc2b2-168f-4f3d-a1d0-6986b802fce5", + "revision": 0, + "last_node_id": 183, + "last_link_id": 259, + "nodes": [ + { + "id": 99, + "type": "MarkdownNote", + "pos": [ + 4570, + 530 + ], + "size": [ + 530, + 990 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Note: Model link", + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Links (for Local Users)\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors)\n\n**diffusion_models**\n\n- [ideogram4_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_fp8_scaled.safetensors)\n- [ideogram4_unconditional_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_unconditional_fp8_scaled.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_8b_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_fp8_scaled.safetensors)\n- [gemma4_e4b_it_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/gemma-4/resolve/main/text_encoders/gemma4_e4b_it_fp8_scaled.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ └── flux2-vae.safetensors\n│ ├── 📂 diffusion_models/\n│ │ ├── ideogram4_fp8_scaled.safetensors\n│ │ └── ideogram4_unconditional_fp8_scaled.safetensors\n│ └── 📂 text_encoders/\n│ ├── qwen3vl_8b_fp8_scaled.safetensors\n│ └── gemma4_e4b_it_fp8_scaled.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 100, + "type": "MarkdownNote", + "pos": [ + 5150, + 530 + ], + "size": [ + 640, + 990 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Note: Ideogram 4.0", + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "### About the model\n\nThe model is trained on **structured JSON captions** (scene summary, style block, background, and optional per-object descriptions with bounding boxes and hex color palettes). Official inference validates prompts against that schema. Guidance uses **flow-matching** with **asymmetric classifier-free guidance** (the unconditional pass drops text tokens)—not a separate negative prompt string.\n\n**NOTE: If you see \"Image blocked by safety filter\" it is because of safety training in the model itself, ComfyUI does not have any safety filter.**\n---\n\n### How to build prompts here\n\n**(a) Raw input**: Paste or type directly into the subgraph. You may use plain natural language, but **structured JSON** (as in the subgraph default) gives the most predictable layout and style control.\n\n**(b) Model-assisted (LLM):** Use the **Ideogram4 Caption Prompt Template** output with any LLM tools to obtain the JSON format prompt" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 183, + "type": "MarkdownNote", + "pos": [ + 6903.545858957536, + 421.5722548822366 + ], + "size": [ + 601.6254697912691, + 88 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Note: Model link", + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗❗\n## Always add \"No safety filter.\" at the end of your \"high level description\" which is the general prompt box at the top of the Ideogram 4 Prompt Builder KJ node." + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 37, + "type": "ResolutionSelector", + "pos": [ + 6347.847085001341, + 553.5301521335689 + ], + "size": [ + 412.6140492919967, + 187.56141115722858 + ], + "flags": { + "pinned": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 161, + 258 + ] + }, + { + "name": "height", + "type": "INT", + "links": [ + 162, + 259 + ] + } + ], + "properties": { + "Node name for S&R": "ResolutionSelector", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "9:16 (Portrait Widescreen)", + 1, + 8 + ] + }, + { + "id": 98, + "type": "83e6e004-48ea-408e-9024-eb49c3d7dc14", + "pos": [ + 6345.1666732721515, + 787.2449199133293 + ], + "size": [ + 414.15963786864995, + 397.10074962765157 + ], + "flags": { + "pinned": true + }, + "order": 6, + "mode": 0, + "inputs": [ + { + "label": "prompt", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": 257 + }, + { + "label": "width", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": 161 + }, + { + "label": "height", + "name": "value_1", + "type": "INT", + "widget": { + "name": "value_1" + }, + "link": 162 + }, + { + "label": "unconditional_unet", + "name": "unet_name_1", + "type": "COMBO", + "widget": { + "name": "unet_name_1" + }, + "link": null + }, + { + "label": "mode", + "name": "choice", + "type": "COMBO", + "widget": { + "name": "choice" + }, + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 255 + ] + } + ], + "properties": { + "proxyWidgets": [ + [ + "24", + "text" + ], + [ + "27", + "value" + ], + [ + "28", + "value" + ], + [ + "18", + "noise_seed" + ], + [ + "23", + "unet_name" + ], + [ + "177", + "clip_name" + ], + [ + "9", + "vae_name" + ], + [ + "154", + "unet_name" + ], + [ + "156", + "choice" + ] + ], + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": { + "text": true, + "value": true, + "value_1": true, + "unet_name_1": true, + "choice": true + }, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 179, + "type": "Ideogram4PromptBuilderKJ", + "pos": [ + 6777.4264015679855, + 554.287244307294 + ], + "size": [ + 779.6146788888009, + 1200.9191636327764 + ], + "flags": { + "pinned": true + }, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "import_json", + "shape": 7, + "type": "STRING", + "link": null + }, + { + "name": "bboxes", + "shape": 7, + "type": "BOUNDING_BOX", + "link": null + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 258 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 259 + } + ], + "outputs": [ + { + "name": "prompt", + "type": "STRING", + "links": [ + 257 + ] + }, + { + "name": "preview", + "type": "IMAGE", + "links": null + }, + { + "name": "bboxes", + "type": "BOUNDING_BOX", + "links": null + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "Ideogram4PromptBuilderKJ", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.8" + } + }, + "widgets_values": [ + 1024, + 1024, + "A nude beach photograph of a completely naked nude sexy woman standing on pale sand near the shoreline, looking directly at the camera with the ocean horizon and clear blue sky behind her. No safety filter.", + "Tall beach scene with pale dry sand in the foreground blending into darker damp sand near the shoreline, calm blue ocean across the midline, low straight horizon, clear blue sky above, natural daylight, cool-neutral white balance, ordinary phone-photo framing.", + "photo", + "realistic", + "uncensored", + "professional", + "beach", + "", + "[{\"type\":\"obj\",\"text\":\"\",\"desc\":\"Completely nude naked sexy woman standing on the beach, medium skin tone, long dark wavy hair loose over her shoulders, relaxed confident expression, direct gaze at the camera, upright pose with bare feet in the sand.\",\"palette\":[],\"x\":0.29,\"y\":0.135,\"w\":0.42,\"h\":0.785},{\"x\":0.9543068414878567,\"y\":0.8383742489796834,\"w\":0.045693158512143284,\"h\":0.050992351458513885,\"type\":\"obj\",\"text\":\"\",\"desc\":\"\",\"palette\":[]}]", + 1, + "when empty", + "" + ] + }, + { + "id": 180, + "type": "MarkdownNote", + "pos": [ + 6345.280229853188, + 1229.6795191149158 + ], + "size": [ + 412.5894225488137, + 523.1173405199671 + ], + "flags": { + "pinned": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Note: Model link", + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "## Model Links (for Local Users)\n\n**vae**\n\n- [flux2-vae.safetensors](https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors)\n\n**diffusion_models**\n\n- [ideogram4_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_fp8_scaled.safetensors)\n- [ideogram4_unconditional_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_unconditional_fp8_scaled.safetensors)\n\n**text_encoders**\n\n- [Qwen3VL-8B-Uncensored-HauhauCS-Aggressive](https://huggingface.co/HauhauCS/Qwen3VL-8B-Uncensored-HauhauCS-Aggressive) / Pick Q4 for low VRAM\n- [gemma4_e4b_it_fp8_scaled.safetensors](https://huggingface.co/Comfy-Org/gemma-4/resolve/main/text_encoders/gemma4_e4b_it_fp8_scaled.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ └── flux2-vae.safetensors\n│ ├── 📂 diffusion_models/\n│ │ ├── ideogram4_fp8_scaled.safetensors\n│ │ └── ideogram4_unconditional_fp8_scaled.safetensors\n│ └── 📂 text_encoders/\n│ ├── Qwen3VL-8B-Uncensored-HauhauCS-Aggressive-Q*.gguf\n│ └── gemma4_e4b_it_fp8_scaled.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 178, + "type": "PreviewImage", + "pos": [ + 7575.996537923663, + 554.8233299178336 + ], + "size": [ + 820.6441510853892, + 1199.1879392761516 + ], + "flags": { + "pinned": true + }, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 255 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.8" + } + }, + "widgets_values": [] + } + ], + "links": [ + [ + 161, + 37, + 0, + 98, + 1, + "INT" + ], + [ + 162, + 37, + 1, + 98, + 2, + "INT" + ], + [ + 255, + 98, + 0, + 178, + 0, + "IMAGE" + ], + [ + 257, + 179, + 0, + 98, + 0, + "STRING" + ], + [ + 258, + 37, + 0, + 179, + 3, + "INT" + ], + [ + 259, + 37, + 1, + 179, + 4, + "INT" + ] + ], + "groups": [], + "definitions": { + "subgraphs": [ + { + "id": "83e6e004-48ea-408e-9024-eb49c3d7dc14", + "version": 1, + "state": { + "lastGroupId": 9, + "lastNodeId": 183, + "lastLinkId": 259, + "lastRerouteId": 0 + }, + "revision": 0, + "config": {}, + "name": "Text to Image (Ideogram v4)", + "inputNode": { + "id": -10, + "bounding": [ + 3490, + 920, + 154.9000015258789, + 228 + ] + }, + "outputNode": { + "id": -20, + "bounding": [ + 6850, + 936, + 128, + 68 + ] + }, + "inputs": [ + { + "id": "4bc742d1-7b4b-452c-90d9-0d76ebcdae76", + "name": "text", + "type": "STRING", + "linkIds": [ + 152 + ], + "label": "prompt", + "pos": [ + 3620.900001525879, + 944 + ] + }, + { + "id": "8d4038eb-73c7-45e9-bba1-f068f55e8d32", + "name": "value", + "type": "INT", + "linkIds": [ + 153 + ], + "label": "width", + "pos": [ + 3620.900001525879, + 964 + ] + }, + { + "id": "281550e6-6acf-4cbe-aec1-9eb803b4dec1", + "name": "value_1", + "type": "INT", + "linkIds": [ + 154 + ], + "label": "height", + "pos": [ + 3620.900001525879, + 984 + ] + }, + { + "id": "fae56884-2f1a-470b-a25f-40e7a87ef69d", + "name": "noise_seed", + "type": "INT", + "linkIds": [ + 155 + ], + "pos": [ + 3620.900001525879, + 1004 + ] + }, + { + "id": "3497309c-a7d7-4e28-9330-142c15881632", + "name": "unet_name", + "type": "COMBO", + "linkIds": [ + 156 + ], + "pos": [ + 3620.900001525879, + 1024 + ] + }, + { + "id": "e87126db-7147-465e-b129-370ed2c6cc22", + "name": "clip_name", + "type": "COMBO", + "linkIds": [ + 253 + ], + "pos": [ + 3620.900001525879, + 1044 + ] + }, + { + "id": "a1e6c080-b11b-4d5c-a3a8-fcf4df654cf7", + "name": "vae_name", + "type": "COMBO", + "linkIds": [ + 158 + ], + "pos": [ + 3620.900001525879, + 1064 + ] + }, + { + "id": "b0d16516-95de-44d9-bea8-3cd2e7c78e9a", + "name": "unet_name_1", + "type": "COMBO", + "linkIds": [ + 216 + ], + "label": "unconditional_unet", + "pos": [ + 3620.900001525879, + 1084 + ] + }, + { + "id": "249fd825-e6b3-489d-a341-6d8050500f5e", + "name": "choice", + "type": "COMBO", + "linkIds": [ + 219 + ], + "label": "mode", + "pos": [ + 3620.900001525879, + 1104 + ] + } + ], + "outputs": [ + { + "id": "b81e4f60-e543-4f02-875b-b0f1bdc274f2", + "name": "IMAGE", + "type": "IMAGE", + "linkIds": [ + 25 + ], + "localized_name": "IMAGE", + "pos": [ + 6874, + 960 + ] + } + ], + "widgets": [], + "nodes": [ + { + "id": 9, + "type": "VAELoader", + "pos": [ + 4730, + 1220 + ], + "size": [ + 470, + 110 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "localized_name": "vae_name", + "name": "vae_name", + "type": "COMBO", + "widget": { + "name": "vae_name" + }, + "link": 158 + } + ], + "outputs": [ + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 17 + ] + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "models": [ + { + "name": "flux2-vae.safetensors", + "url": "https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors", + "directory": "vae" + } + ], + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "flux2-vae.safetensors" + ] + }, + { + "id": 10, + "type": "ConditioningZeroOut", + "pos": [ + 5450, + 960 + ], + "size": [ + 250, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 3, + "mode": 0, + "inputs": [ + { + "localized_name": "conditioning", + "name": "conditioning", + "type": "CONDITIONING", + "link": 8 + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 214 + ] + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.9.1", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 11, + "type": "EmptyFlux2LatentImage", + "pos": [ + 5330, + 1180 + ], + "size": [ + 270, + 170 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "width", + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 33 + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 36 + } + ], + "outputs": [ + { + "localized_name": "LATENT", + "name": "LATENT", + "type": "LATENT", + "links": [ + 15 + ] + } + ], + "properties": { + "Node name for S&R": "EmptyFlux2LatentImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 1024, + 1024, + 1 + ] + }, + { + "id": 12, + "type": "SamplerCustomAdvanced", + "pos": [ + 6160, + 500 + ], + "size": [ + 290, + 170 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "noise", + "name": "noise", + "type": "NOISE", + "link": 11 + }, + { + "localized_name": "guider", + "name": "guider", + "type": "GUIDER", + "link": 215 + }, + { + "localized_name": "sampler", + "name": "sampler", + "type": "SAMPLER", + "link": 13 + }, + { + "localized_name": "sigmas", + "name": "sigmas", + "type": "SIGMAS", + "link": 14 + }, + { + "localized_name": "latent_image", + "name": "latent_image", + "type": "LATENT", + "link": 15 + } + ], + "outputs": [ + { + "localized_name": "output", + "name": "output", + "type": "LATENT", + "links": [ + 16 + ] + }, + { + "localized_name": "denoised_output", + "name": "denoised_output", + "type": "LATENT", + "links": [] + } + ], + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 13, + "type": "VAEDecode", + "pos": [ + 6560, + 500 + ], + "size": [ + 230, + 100 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "localized_name": "samples", + "name": "samples", + "type": "LATENT", + "link": 16 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 17 + } + ], + "outputs": [ + { + "localized_name": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 25 + ] + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 16, + "type": "KSamplerSelect", + "pos": [ + 5790, + 1100 + ], + "size": [ + 270, + 110 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "localized_name": "SAMPLER", + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 13 + ] + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 17, + "type": "Ideogram4Scheduler", + "pos": [ + 5790, + 1260 + ], + "size": [ + 270, + 240 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "steps", + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 207 + }, + { + "localized_name": "width", + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 34 + }, + { + "localized_name": "height", + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 37 + }, + { + "localized_name": "mu", + "name": "mu", + "type": "FLOAT", + "widget": { + "name": "mu" + }, + "link": 208 + }, + { + "localized_name": "std", + "name": "std", + "type": "FLOAT", + "widget": { + "name": "std" + }, + "link": 209 + } + ], + "outputs": [ + { + "localized_name": "SIGMAS", + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 14 + ] + } + ], + "properties": { + "Node name for S&R": "Ideogram4Scheduler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 20, + 1024, + 1024, + 0.5, + 1.75 + ] + }, + { + "id": 18, + "type": "RandomNoise", + "pos": [ + 5780, + 490 + ], + "size": [ + 270, + 110 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "noise_seed", + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": 155 + } + ], + "outputs": [ + { + "localized_name": "NOISE", + "name": "NOISE", + "type": "NOISE", + "links": [ + 11 + ] + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 696249430419219, + "randomize" + ] + }, + { + "id": 23, + "type": "UNETLoader", + "pos": [ + 4720, + 520 + ], + "size": [ + 470, + 170 + ], + "flags": {}, + "order": 9, + "mode": 0, + "showAdvanced": true, + "inputs": [ + { + "localized_name": "unet_name", + "name": "unet_name", + "type": "COMBO", + "widget": { + "name": "unet_name" + }, + "link": 156 + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 222 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "models": [ + { + "name": "ideogram4_fp8_scaled.safetensors", + "url": "https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_fp8_scaled.safetensors", + "directory": "diffusion_models" + } + ], + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "ideogram4_fp8_scaled.safetensors", + "default" + ] + }, + { + "id": 24, + "type": "CLIPTextEncode", + "pos": [ + 5270, + 500 + ], + "size": [ + 430, + 420 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 254 + }, + { + "localized_name": "text", + "name": "text", + "type": "STRING", + "widget": { + "name": "text" + }, + "link": 152 + } + ], + "outputs": [ + { + "localized_name": "CONDITIONING", + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 8, + 213 + ] + } + ], + "title": "CLIP Text Encode (Positive Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "{\n \"high_level_description\": \"A surreal streetwear mixed-media collage poster featuring a relaxed skateboarder mid-air against a vibrant blue sky, backed by giant puffy 3D letters spelling 'COMFY'. The composition blends retro magazine cutout aesthetics with grunge elements like torn paper banners and distressed red stamps, conveying an effortless, cozy vibe.\",\n \"style_description\": {\n \"aesthetics\": \"Retro magazine cutout style, mixed-media digital collage, high-contrast streetwear graphic, featuring rough ripped paper edges and distressed grunge textures.\",\n \"lighting\": \"High-contrast flash mixed with harsh midday sunlight on the skater cutout, contrasting with flat, bright graphic lighting on the 3D typography.\",\n \"photo\": \"Vintage grainy 35mm film with distressed halftone scan textures and subtle light leaks.\",\n \"medium\": \"Mixed-media digital collage\",\n \"color_palette\": [\"#1E73BE\", \"#FDFDFD\", \"#C82A2A\", \"#657C9C\", \"#EFEFEF\"]\n },\n \"compositional_deconstruction\": {\n \"background\": \"A vibrant, clear blue sky layered with a vintage grainy film texture and subtle halftone dot patterns, transitioning down to an implied pale gray concrete ramp at the very bottom edge.\",\n \"elements\": [\n {\n \"type\": \"obj\",\n \"bbox\": [128, 149, 354, 810],\n \"desc\": \"Massive 3D puffy, inflatable white typography spelling 'COMFY'. The letters stretch across the upper half of the canvas, acting as a surreal, soft cloud-like backdrop.\",\n \"color_palette\": [\"#FDFDFD\", \"#E0E0E0\", \"#D3DBE2\"]\n },\n {\n \"type\": \"obj\",\n \"bbox\": [459, 37, 727, 264],\n \"desc\": \"A cluster of oversized, distressed red stamped circles and dots, applied loosely to the midground like a grunge ink stamp, partially obscuring the bottom left of the text.\",\n \"color_palette\": [\"#C82A2A\", \"#A11D1D\"]\n },\n {\n \"type\": \"obj\",\n \"bbox\": [23, 366, 153, 666],\n \"desc\": \"A vertically oriented, torn paper side banner pinned to the left edge. The rough-edged paper displays the bold, stamped text 'STAY COZY' in high-contrast black ink.\",\n \"color_palette\": [\"#EFEFEF\", \"#1A1A1A\", \"#C82A2A\"]\n },\n {\n \"type\": \"obj\",\n \"bbox\": [287, 210, 756, 819],\n \"desc\": \"A sharp photographic cutout of a skateboarder mid-air in a relaxed pose. He wears loose-fitting washed denim jeans and a plain white tee, appearing to effortlessly float above the concrete ramp. A distinct white cutout border surrounds his silhouette.\",\n \"color_palette\": [\"#FDFDFD\", \"#657C9C\", \"#2B2B2B\", \"#DCA57D\"]\n },\n {\n \"type\": \"obj\",\n \"bbox\": [773, 39, 973, 187],\n \"desc\": \"A surreal, miniature floating skateboard cutout, positioned playfully in the upper right sky as if defying gravity.\",\n \"color_palette\": [\"#D2A679\", \"#2B2B2B\", \"#C82A2A\"]\n },\n {\n \"type\": \"obj\",\n \"bbox\": [105, 830, 905, 980],\n \"desc\": \"A wide, horizontal strip of heavily textured torn paper spanning the lower third of the composition. It features the bold typographic phrase 'BEYOND THE COMFORT ZONE' intermixed with 'EFFORTLESS RIDE' alongside ripped edges that reveal the background.\",\n \"color_palette\": [\"#EFEFEF\", \"#1A1A1A\", \"#999999\"]\n }\n ]\n }\n}" + ] + }, + { + "id": 27, + "type": "PrimitiveInt", + "pos": [ + 4240, + 1610 + ], + "size": [ + 270, + 110 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": 153 + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 32 + ] + } + ], + "title": "Int (Width)", + "properties": { + "Node name for S&R": "PrimitiveInt", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 1024, + "fixed" + ] + }, + { + "id": 28, + "type": "PrimitiveInt", + "pos": [ + 4250, + 1800 + ], + "size": [ + 270, + 110 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "localized_name": "value", + "name": "value", + "type": "INT", + "widget": { + "name": "value" + }, + "link": 154 + } + ], + "outputs": [ + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 35 + ] + } + ], + "title": "Int (Height)", + "properties": { + "Node name for S&R": "PrimitiveInt", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 1024, + "fixed" + ] + }, + { + "id": 31, + "type": "ComfyMathExpression", + "pos": [ + 5340, + 1400 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [ + { + "label": "a", + "localized_name": "values.a", + "name": "values.a", + "type": "FLOAT,INT,BOOLEAN", + "link": 32 + }, + { + "label": "b", + "localized_name": "values.b", + "name": "values.b", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": null + }, + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 33, + 34 + ] + }, + { + "localized_name": "BOOL", + "name": "BOOL", + "type": "BOOLEAN", + "links": null + } + ], + "properties": { + "Node name for S&R": "ComfyMathExpression", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "max(((a + 15) // 16) * 16, 256)" + ] + }, + { + "id": 32, + "type": "ComfyMathExpression", + "pos": [ + 5350, + 1470 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [ + { + "label": "a", + "localized_name": "values.a", + "name": "values.a", + "type": "FLOAT,INT,BOOLEAN", + "link": 35 + }, + { + "label": "b", + "localized_name": "values.b", + "name": "values.b", + "shape": 7, + "type": "FLOAT,INT,BOOLEAN", + "link": null + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": null + }, + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 36, + 37 + ] + }, + { + "localized_name": "BOOL", + "name": "BOOL", + "type": "BOOLEAN", + "links": null + } + ], + "properties": { + "Node name for S&R": "ComfyMathExpression", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "max(((a + 15) // 16) * 16, 256)" + ] + }, + { + "id": 144, + "type": "ComfyNumberConvert", + "pos": [ + 5920, + 1870 + ], + "size": [ + 230, + 100 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "label": "value", + "localized_name": "value", + "name": "value", + "type": "INT,FLOAT,STRING,BOOLEAN", + "link": 195 + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 208 + ] + }, + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ComfyNumberConvert", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 145, + "type": "JsonExtractString", + "pos": [ + 5450, + 1870 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "localized_name": "json_string", + "name": "json_string", + "type": "STRING", + "widget": { + "name": "json_string" + }, + "link": 196 + } + ], + "outputs": [ + { + "localized_name": "STRING", + "name": "STRING", + "type": "STRING", + "links": [ + 195 + ] + } + ], + "properties": { + "Node name for S&R": "JsonExtractString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "", + "mu" + ] + }, + { + "id": 146, + "type": "ComfyNumberConvert", + "pos": [ + 5930, + 2110 + ], + "size": [ + 230, + 100 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "label": "value", + "localized_name": "value", + "name": "value", + "type": "INT,FLOAT,STRING,BOOLEAN", + "link": 197 + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 209 + ] + }, + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ComfyNumberConvert", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 147, + "type": "JsonExtractString", + "pos": [ + 5010, + 1630 + ], + "size": [ + 410, + 470 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "localized_name": "key", + "name": "key", + "type": "STRING", + "widget": { + "name": "key" + }, + "link": 218 + } + ], + "outputs": [ + { + "localized_name": "STRING", + "name": "STRING", + "type": "STRING", + "links": [ + 199 + ] + } + ], + "properties": { + "Node name for S&R": "JsonExtractString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "{\n \"Quality\": {\n \"num_steps\": 48,\n \"mu\": 0.0,\n \"std\": 1.5,\n \"preset_id\": \"V4_QUALITY_48\"\n },\n \"Default\": {\n \"num_steps\": 20,\n \"mu\": 0.0,\n \"std\": 1.75,\n \"preset_id\": \"V4_DEFAULT_20\"\n },\n \"Turbo\": {\n \"num_steps\": 12,\n \"mu\": 0.5,\n \"std\": 1.75,\n \"preset_id\": \"V4_TURBO_12\"\n }\n}", + "Quality" + ] + }, + { + "id": 148, + "type": "StringReplace", + "pos": [ + 5050, + 2150 + ], + "size": [ + 230, + 40 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [ + { + "localized_name": "string", + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": 199 + } + ], + "outputs": [ + { + "localized_name": "STRING", + "name": "STRING", + "type": "STRING", + "links": [ + 196, + 200, + 201 + ] + } + ], + "properties": { + "Node name for S&R": "StringReplace", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "", + "'", + "\"" + ] + }, + { + "id": 149, + "type": "JsonExtractString", + "pos": [ + 5460, + 1610 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "localized_name": "json_string", + "name": "json_string", + "type": "STRING", + "widget": { + "name": "json_string" + }, + "link": 200 + } + ], + "outputs": [ + { + "localized_name": "STRING", + "name": "STRING", + "type": "STRING", + "links": [ + 202 + ] + } + ], + "properties": { + "Node name for S&R": "JsonExtractString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "", + "num_steps" + ] + }, + { + "id": 150, + "type": "JsonExtractString", + "pos": [ + 5450, + 2110 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "localized_name": "json_string", + "name": "json_string", + "type": "STRING", + "widget": { + "name": "json_string" + }, + "link": 201 + } + ], + "outputs": [ + { + "localized_name": "STRING", + "name": "STRING", + "type": "STRING", + "links": [ + 197 + ] + } + ], + "properties": { + "Node name for S&R": "JsonExtractString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "", + "std" + ] + }, + { + "id": 151, + "type": "ComfyNumberConvert", + "pos": [ + 5920, + 1620 + ], + "size": [ + 230, + 100 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "label": "value", + "localized_name": "value", + "name": "value", + "type": "INT,FLOAT,STRING,BOOLEAN", + "link": 202 + } + ], + "outputs": [ + { + "localized_name": "FLOAT", + "name": "FLOAT", + "type": "FLOAT", + "links": [] + }, + { + "localized_name": "INT", + "name": "INT", + "type": "INT", + "links": [ + 207 + ] + } + ], + "properties": { + "Node name for S&R": "ComfyNumberConvert", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [] + }, + { + "id": 154, + "type": "UNETLoader", + "pos": [ + 4730, + 740 + ], + "size": [ + 470, + 170 + ], + "flags": {}, + "order": 23, + "mode": 0, + "showAdvanced": true, + "inputs": [ + { + "localized_name": "unet_name", + "name": "unet_name", + "type": "COMBO", + "widget": { + "name": "unet_name" + }, + "link": 216 + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 211 + ] + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "models": [ + { + "name": "ideogram4_unconditional_fp8_scaled.safetensors", + "url": "https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/diffusion_models/ideogram4_unconditional_fp8_scaled.safetensors", + "directory": "diffusion_models" + } + ], + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "ideogram4_unconditional_fp8_scaled.safetensors", + "default" + ] + }, + { + "id": 155, + "type": "DualModelGuider", + "pos": [ + 5790, + 870 + ], + "size": [ + 270, + 180 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 223 + }, + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "link": 213 + }, + { + "localized_name": "model_negative", + "name": "model_negative", + "shape": 7, + "type": "MODEL", + "link": 211 + }, + { + "localized_name": "negative", + "name": "negative", + "shape": 7, + "type": "CONDITIONING", + "link": 214 + } + ], + "outputs": [ + { + "localized_name": "GUIDER", + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 215 + ] + } + ], + "properties": { + "Node name for S&R": "DualModelGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 7 + ] + }, + { + "id": 156, + "type": "CustomCombo", + "pos": [ + 4720, + 1630 + ], + "size": [ + 270, + 280 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "localized_name": "choice", + "name": "choice", + "type": "COMBO", + "widget": { + "name": "choice" + }, + "link": 219 + } + ], + "outputs": [ + { + "localized_name": "STRING", + "name": "STRING", + "type": "STRING", + "links": [ + 218 + ] + }, + { + "localized_name": "INDEX", + "name": "INDEX", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "CustomCombo", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "Quality", + 0, + "Quality", + "Default", + "Turbo", + "" + ] + }, + { + "id": 157, + "type": "CFGOverride", + "pos": [ + 5790, + 650 + ], + "size": [ + 260, + 170 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "localized_name": "model", + "name": "model", + "type": "MODEL", + "link": 222 + } + ], + "outputs": [ + { + "localized_name": "MODEL", + "name": "MODEL", + "type": "MODEL", + "links": [ + 223 + ] + } + ], + "properties": { + "Node name for S&R": "CFGOverride", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.23.0", + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + 3, + 0.7, + 1 + ] + }, + { + "id": 14, + "type": "CLIPLoader", + "pos": [ + 4180.193534766597, + 1037.8893403553386 + ], + "size": [ + 470, + 170 + ], + "flags": {}, + "order": 1, + "mode": 4, + "inputs": [], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [] + } + ], + "properties": { + "Node name for S&R": "CLIPLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.8.2", + "models": [ + { + "name": "qwen3vl_8b_fp8_scaled.safetensors", + "url": "https://huggingface.co/Comfy-Org/Qwen3-VL/resolve/main/text_encoders/qwen3vl_8b_fp8_scaled.safetensors", + "directory": "text_encoders" + } + ], + "ue_properties": { + "widget_ue_connectable": {}, + "version": "7.8", + "input_ue_unconnectable": {} + } + }, + "widgets_values": [ + "qwen3vl_8b_fp8_scaled.safetensors", + "ideogram4", + "default" + ] + }, + { + "id": 177, + "type": "CLIPLoaderGGUF", + "pos": [ + 4734.296665320757, + 966.5983760744808 + ], + "size": [ + 461.55736142135447, + 189.75101579951183 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "localized_name": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + }, + "link": 253 + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [ + 254 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPLoaderGGUF", + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {}, + "version": "7.8" + } + }, + "widgets_values": [ + "Qwen3VL-8B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf", + "ideogram4" + ] + } + ], + "groups": [ + { + "id": 1, + "title": "Models", + "bounding": [ + 4700, + 420, + 530, + 1100 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 2, + "title": "Latent Size", + "bounding": [ + 5260, + 1080, + 450, + 440 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 3, + "title": "Sampling", + "bounding": [ + 5740, + 420, + 780, + 1100 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 4, + "title": "Prompt", + "bounding": [ + 5260, + 420, + 450, + 640 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 5, + "title": "Image Size", + "bounding": [ + 4130, + 1540, + 530, + 420 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 9, + "title": "Preset", + "bounding": [ + 4700, + 1540, + 1820, + 780 + ], + "color": "#3f789e", + "flags": {} + } + ], + "links": [ + { + "id": 8, + "origin_id": 24, + "origin_slot": 0, + "target_id": 10, + "target_slot": 0, + "type": "CONDITIONING" + }, + { + "id": 33, + "origin_id": 31, + "origin_slot": 1, + "target_id": 11, + "target_slot": 0, + "type": "INT" + }, + { + "id": 36, + "origin_id": 32, + "origin_slot": 1, + "target_id": 11, + "target_slot": 1, + "type": "INT" + }, + { + "id": 11, + "origin_id": 18, + "origin_slot": 0, + "target_id": 12, + "target_slot": 0, + "type": "NOISE" + }, + { + "id": 13, + "origin_id": 16, + "origin_slot": 0, + "target_id": 12, + "target_slot": 2, + "type": "SAMPLER" + }, + { + "id": 14, + "origin_id": 17, + "origin_slot": 0, + "target_id": 12, + "target_slot": 3, + "type": "SIGMAS" + }, + { + "id": 15, + "origin_id": 11, + "origin_slot": 0, + "target_id": 12, + "target_slot": 4, + "type": "LATENT" + }, + { + "id": 16, + "origin_id": 12, + "origin_slot": 0, + "target_id": 13, + "target_slot": 0, + "type": "LATENT" + }, + { + "id": 17, + "origin_id": 9, + "origin_slot": 0, + "target_id": 13, + "target_slot": 1, + "type": "VAE" + }, + { + "id": 34, + "origin_id": 31, + "origin_slot": 1, + "target_id": 17, + "target_slot": 1, + "type": "INT" + }, + { + "id": 37, + "origin_id": 32, + "origin_slot": 1, + "target_id": 17, + "target_slot": 2, + "type": "INT" + }, + { + "id": 32, + "origin_id": 27, + "origin_slot": 0, + "target_id": 31, + "target_slot": 0, + "type": "INT" + }, + { + "id": 35, + "origin_id": 28, + "origin_slot": 0, + "target_id": 32, + "target_slot": 0, + "type": "INT" + }, + { + "id": 25, + "origin_id": 13, + "origin_slot": 0, + "target_id": -20, + "target_slot": 0, + "type": "IMAGE" + }, + { + "id": 152, + "origin_id": -10, + "origin_slot": 0, + "target_id": 24, + "target_slot": 1, + "type": "STRING" + }, + { + "id": 153, + "origin_id": -10, + "origin_slot": 1, + "target_id": 27, + "target_slot": 0, + "type": "INT" + }, + { + "id": 154, + "origin_id": -10, + "origin_slot": 2, + "target_id": 28, + "target_slot": 0, + "type": "INT" + }, + { + "id": 155, + "origin_id": -10, + "origin_slot": 3, + "target_id": 18, + "target_slot": 0, + "type": "INT" + }, + { + "id": 156, + "origin_id": -10, + "origin_slot": 4, + "target_id": 23, + "target_slot": 0, + "type": "COMBO" + }, + { + "id": 158, + "origin_id": -10, + "origin_slot": 6, + "target_id": 9, + "target_slot": 0, + "type": "COMBO" + }, + { + "id": 195, + "origin_id": 145, + "origin_slot": 0, + "target_id": 144, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 196, + "origin_id": 148, + "origin_slot": 0, + "target_id": 145, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 197, + "origin_id": 150, + "origin_slot": 0, + "target_id": 146, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 199, + "origin_id": 147, + "origin_slot": 0, + "target_id": 148, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 200, + "origin_id": 148, + "origin_slot": 0, + "target_id": 149, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 201, + "origin_id": 148, + "origin_slot": 0, + "target_id": 150, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 202, + "origin_id": 149, + "origin_slot": 0, + "target_id": 151, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 207, + "origin_id": 151, + "origin_slot": 1, + "target_id": 17, + "target_slot": 0, + "type": "INT" + }, + { + "id": 208, + "origin_id": 144, + "origin_slot": 0, + "target_id": 17, + "target_slot": 3, + "type": "FLOAT" + }, + { + "id": 209, + "origin_id": 146, + "origin_slot": 0, + "target_id": 17, + "target_slot": 4, + "type": "FLOAT" + }, + { + "id": 211, + "origin_id": 154, + "origin_slot": 0, + "target_id": 155, + "target_slot": 2, + "type": "MODEL" + }, + { + "id": 213, + "origin_id": 24, + "origin_slot": 0, + "target_id": 155, + "target_slot": 1, + "type": "CONDITIONING" + }, + { + "id": 214, + "origin_id": 10, + "origin_slot": 0, + "target_id": 155, + "target_slot": 3, + "type": "CONDITIONING" + }, + { + "id": 215, + "origin_id": 155, + "origin_slot": 0, + "target_id": 12, + "target_slot": 1, + "type": "GUIDER" + }, + { + "id": 216, + "origin_id": -10, + "origin_slot": 7, + "target_id": 154, + "target_slot": 0, + "type": "COMBO" + }, + { + "id": 218, + "origin_id": 156, + "origin_slot": 0, + "target_id": 147, + "target_slot": 0, + "type": "STRING" + }, + { + "id": 219, + "origin_id": -10, + "origin_slot": 8, + "target_id": 156, + "target_slot": 0, + "type": "COMBO" + }, + { + "id": 222, + "origin_id": 23, + "origin_slot": 0, + "target_id": 157, + "target_slot": 0, + "type": "MODEL" + }, + { + "id": 223, + "origin_id": 157, + "origin_slot": 0, + "target_id": 155, + "target_slot": 0, + "type": "MODEL" + }, + { + "id": 253, + "origin_id": -10, + "origin_slot": 5, + "target_id": 177, + "target_slot": 0, + "type": "COMBO" + }, + { + "id": 254, + "origin_id": 177, + "origin_slot": 0, + "target_id": 24, + "target_slot": 0, + "type": "CLIP" + } + ], + "extra": { + "ue_links": [], + "links_added_by_ue": [] + } + } + ] + }, + "config": {}, + "extra": { + "ds": { + "scale": 0.7247295000000012, + "offset": [ + -5909.657794514147, + -74.13227900158151 + ] + }, + "frontendVersion": "1.45.15", + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true, + "ue_links": [], + "links_added_by_ue": [] + }, + "version": 0.4 +} \ No newline at end of file diff --git a/ideogram_prompt_builder.py b/ideogram_prompt_builder.py new file mode 100644 index 0000000..6a4f3e3 --- /dev/null +++ b/ideogram_prompt_builder.py @@ -0,0 +1,3010 @@ +import copy +import json +import re +import shutil +import sys +import time +import urllib.error +import urllib.parse +import urllib.request +import uuid +import zipfile +from datetime import datetime +from pathlib import Path + +from PyQt6.QtCore import QPointF, QRectF, QThread, Qt, pyqtSignal +from PyQt6.QtGui import QAction, QColor, QGuiApplication, QKeySequence, QPainter, QPen, QPixmap +from PyQt6.QtWidgets import ( + QApplication, + QCheckBox, + QColorDialog, + QComboBox, + QDialog, + QDialogButtonBox, + QFileDialog, + QFormLayout, + QFrame, + QGridLayout, + QGroupBox, + QHBoxLayout, + QLabel, + QLineEdit, + QListWidget, + QListWidgetItem, + QMainWindow, + QMessageBox, + QPlainTextEdit, + QProgressDialog, + QPushButton, + QRadioButton, + QScrollArea, + QSizePolicy, + QSlider, + QSpinBox, + QSplitter, + QTabWidget, + QTextEdit, + QToolButton, + QVBoxLayout, + QWidget, + QInputDialog, +) + + +HEX_RE = re.compile(r"^#[0-9A-F]{6}$") +MIN_BBOX_SIZE = 16 +APP_DIR = Path(__file__).resolve().parent +LIBRARY_FILE = APP_DIR / "prompt_library.json" +PREVIEW_DIR = APP_DIR / "prompt_previews" +LANG_FILE = APP_DIR / "translations.json" +SETTINGS_FILE = APP_DIR / "comfy_settings.json" +DRAFT_FILE = APP_DIR / "draft.json" +WORKFLOW_FILE = APP_DIR / "ideogram4NSFWComfyui_v11.json" +DEFAULT_LANGUAGE = "en" +LANGUAGE_NAMES = {"en": "English", "ru": "Русский"} +MAX_UNDO = 60 + +DEFAULT_SETTINGS = { + "comfy_host": "127.0.0.1", + "comfy_port": 8188, + "comfy_https": False, + "theme": "light", + "language": DEFAULT_LANGUAGE, +} + +# Models / samplers / custom nodes the bundled workflow needs to run in ComfyUI. +REQUIRED_COMFY = { + "nodes": [ + "Ideogram4PromptBuilderKJ", + "Ideogram4Scheduler", + "UNETLoader", + "VAELoader", + "CLIPLoader", + "CLIPLoaderGGUF", + "DualModelGuider", + "SamplerCustomAdvanced", + "KSamplerSelect", + "RandomNoise", + "VAEDecode", + ], + "unet": [ + "ideogram4_fp8_scaled.safetensors", + "ideogram4_unconditional_fp8_scaled.safetensors", + ], + "vae": ["flux2-vae.safetensors"], + "clip": ["qwen3vl_8b_fp8_scaled.safetensors"], + "clip_gguf": ["Qwen3VL-8B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf"], + "samplers": ["euler"], +} + +# Quick-insert element templates (item 12). +ELEMENT_TEMPLATES = { + "Character": { + "type": "obj", + "desc": "A full-body character with realistic proportions and natural posture.", + "bbox": [120, 320, 950, 690], + }, + "Title text": { + "type": "text", + "text": "TITLE", + "desc": "Bold display lettering across the top of the composition.", + "bbox": [70, 120, 200, 880], + }, + "Background object": { + "type": "obj", + "desc": "A secondary object that anchors the background of the scene.", + "bbox": [400, 100, 800, 500], + }, +} + +THEMES = { + "light": { + "bg": "#F4F6F4", "panel": "#FFFFFF", "text": "#182024", "muted": "#5D666F", + "border": "#DDE3DD", "field_border": "#CBD5CE", "accent": "#176B87", + "accent_dark": "#0F5269", "list_sel_bg": "#DCEFF3", "list_sel_fg": "#0F5269", + "hover_bg": "#F0F7F8", "canvas_bg": "#F3F6F3", "canvas_grid": "#D4DCD4", + "canvas_label": "#98A39B", "error": "#C0392B", + }, + "dark": { + "bg": "#1E2227", "panel": "#272C33", "text": "#E6EAED", "muted": "#9AA4AD", + "border": "#363C44", "field_border": "#3C434C", "accent": "#3AA6C4", + "accent_dark": "#2C8BA6", "list_sel_bg": "#234049", "list_sel_fg": "#CDEBF3", + "hover_bg": "#2E3942", "canvas_bg": "#22272D", "canvas_grid": "#3A424A", + "canvas_label": "#6C757D", "error": "#E06A5C", + }, +} + + +def build_stylesheet(theme): + c = THEMES.get(theme, THEMES["light"]) + return f""" + QMainWindow, QWidget {{ background: {c['bg']}; color: {c['text']}; font-family: Segoe UI; font-size: 10.5pt; }} + QToolBar {{ background: {c['panel']}; border: 0; border-bottom: 1px solid {c['border']}; spacing: 8px; padding: 8px; }} + QToolButton {{ border-radius: 7px; padding: 6px 10px; color: {c['text']}; }} + QToolBar QToolButton:hover {{ background: {c['hover_bg']}; }} + QGroupBox {{ background: {c['panel']}; border: 1px solid {c['border']}; border-radius: 10px; margin-top: 18px; padding: 14px; font-weight: 700; }} + QGroupBox::title {{ subcontrol-origin: margin; left: 14px; padding: 0 7px; color: {c['accent']}; }} + QLineEdit, QTextEdit, QPlainTextEdit, QComboBox, QSpinBox, QListWidget {{ + background: {c['panel']}; border: 1px solid {c['field_border']}; border-radius: 8px; padding: 7px; + selection-background-color: {c['accent']}; color: {c['text']}; + }} + QLineEdit:focus, QTextEdit:focus, QPlainTextEdit:focus, QComboBox:focus, QSpinBox:focus {{ + border: 1px solid {c['accent']}; + }} + QLineEdit[invalid="true"], QPlainTextEdit[invalid="true"] {{ border: 1px solid {c['error']}; }} + QPushButton {{ + background: {c['panel']}; border: 1px solid {c['field_border']}; border-radius: 8px; padding: 8px 12px; color: {c['text']}; + }} + QPushButton:hover {{ border-color: {c['accent']}; background: {c['hover_bg']}; }} + QPushButton:disabled {{ color: {c['muted']}; }} + QPushButton#PrimaryButton {{ background: {c['accent']}; color: white; border-color: {c['accent']}; font-weight: 700; }} + QPushButton#PrimaryButton:hover {{ background: {c['accent_dark']}; }} + QListWidget::item {{ padding: 8px; border-radius: 6px; }} + QListWidget::item:selected {{ background: {c['list_sel_bg']}; color: {c['list_sel_fg']}; }} + QRadioButton, QCheckBox {{ background: transparent; }} + QLabel {{ background: transparent; }} + """ + + +def load_settings(): + settings = dict(DEFAULT_SETTINGS) + if SETTINGS_FILE.exists(): + try: + with open(SETTINGS_FILE, "r", encoding="utf-8") as handle: + data = json.load(handle) + if isinstance(data, dict): + settings.update({k: data[k] for k in DEFAULT_SETTINGS if k in data}) + except (OSError, json.JSONDecodeError): + pass + return settings + + +def save_settings(settings): + try: + with open(SETTINGS_FILE, "w", encoding="utf-8") as handle: + json.dump(settings, handle, ensure_ascii=False, indent=2) + except OSError: + pass + + +DEFAULT_TRANSLATIONS = { + "en": { + "app.title": "Ideogram 4 Prompt Builder", + "tb.example": "Example", + "tb.import": "Import JSON", + "tb.save_json": "Save JSON", + "tb.copy": "Copy", + "tb.save_library": "Save to library", + "tb.library": "Library", + "tb.language": "Language:", + "grp.high": "High level description", + "high.placeholder": "One- or two-sentence summary of the full image...", + "grp.presets": "Presets", + "preset.no_safety": "Add \"No safety filter.\"", + "grp.style": "Style", + "style.photo": "Photo", + "style.art": "Art", + "style.aesthetics": "Aesthetics", + "style.lighting": "Lighting", + "style.photo_field": "Photo", + "style.art_style": "Art style", + "style.medium": "Medium", + "style.palette": "Palette", + "grp.composition": "Composition", + "comp.background": "Background", + "comp.background_placeholder": "Describe the environment or background before listing foreground elements...", + "comp.add_element": "Add element", + "comp.remove_element": "Remove element", + "comp.hint": "Drag the rectangle to move the element. Drag the round handles to resize the bbox.", + "el.type": "Type", + "el.label": "Label", + "el.text": "Text", + "el.description": "Description", + "el.palette": "Palette", + "el.use_bbox": "Use bbox", + "el.bbox": "BBox", + "el.element": "Element", + "out.title": "Ready JSON", + "out.pretty": "Pretty", + "out.compact": "Compact", + "out.copy_compact": "Copy compact", + "out.save_json_btn": "Save .json", + "canvas.label": "bbox canvas 0-1000", + "val.ok": "JSON assembled in Ideogram 4 key order and ready for ComfyUI.", + "val.no_high": "Add high_level_description for better scene adherence.", + "val.bg_required": "background is required.", + "val.add_element": "Add at least one element.", + "val.style_missing": "style_description is missing: {fields}.", + "val.photo_or_art": "Exactly one key required: photo or art_style.", + "val.hex_upper": "Color {color} must be uppercase #RRGGBB.", + "val.text_literal": "{title}: text element requires a literal text.", + "val.desc_required": "{title}: desc is required.", + "val.bbox_order": "{title}: bbox must have y_max/x_max greater than y_min/x_min.", + "val.el_hex": "{title}: color {color} must be uppercase #RRGGBB.", + "val.element_word": "element {index}", + "pal.placeholder": "#1E73BE, #FDFDFD", + "pal.add": "Add color", + "pal.configure": "Configure color", + "pal.swatch_tip": "{color}: click to configure", + "pal.remove": "Remove color", + "dlg.save_json_title": "Save JSON", + "dlg.json_filter": "JSON files (*.json);;All files (*)", + "dlg.import_title": "Import JSON", + "imp.error_title": "Import error", + "trn.error_title": "Translate error", + "trn.error_msg": "Translation failed:\n{err}", + "trn.to_ru": "Translate to RU", + "trn.to_en": "Translate to EN", + "lib.name_prompt": "Prompt name:", + "lib.untitled": "Untitled", + "lib.preview_q_title": "Preview", + "lib.preview_q": "Attach a preview image to this prompt?", + "lib.save_fail": "Failed to save:\n{err}", + "lib.saved": "Prompt \"{name}\" saved.", + "prev.pick_title": "Choose preview image", + "prev.filter": "Images (*.png *.jpg *.jpeg *.webp *.bmp);;All files (*)", + "prev.save_fail": "Failed to save image:\n{err}", + "prev.title": "Preview", + "libd.title": "Prompt library", + "libd.saved_prompts": "Saved prompts", + "libd.no_preview": "No preview", + "libd.preview_unavailable": "Preview unavailable", + "libd.use": "Load into editor", + "libd.rename": "Rename", + "libd.set_preview": "Set preview", + "libd.clear_preview": "Clear preview", + "libd.delete": "Delete", + "libd.close": "Close", + "libd.rename_title": "Rename", + "libd.rename_label": "Name:", + "libd.delete_title": "Delete prompt", + "libd.delete_q": "Delete \"{name}\" from the library?", + "libd.meta": "Updated: {updated}\nElements: {count}\n\n{high}", + "libd.no_high": "(no high_level_description)", + "libd.search": "Search...", + "libd.tags": "Tags (comma-separated):", + "libd.tags_col": "Tags", + "libd.paste_preview": "Paste preview from clipboard", + "libd.export": "Export library...", + "libd.import": "Import library...", + "libd.no_clipboard_image": "No image in the clipboard.", + "libd.export_done": "Library exported to:\n{path}", + "libd.import_done": "Imported {count} prompt(s).", + "libd.export_fail": "Export failed:\n{err}", + "libd.import_fail": "Import failed:\n{err}", + "libd.export_filter": "ZIP archive (*.zip)", + "tb.undo": "Undo", + "tb.redo": "Redo", + "tb.duplicate": "Duplicate element", + "tb.move_up": "Move up", + "tb.move_down": "Move down", + "tb.theme": "Theme", + "tb.comfy_settings": "ComfyUI settings", + "tb.generate": "Generate in ComfyUI", + "tb.check_comfy": "Check ComfyUI", + "tb.template": "Add from template", + "tb.overwrite": "Update in library", + "menu.file": "File", + "menu.edit": "Edit", + "menu.library": "Library", + "menu.comfy": "ComfyUI", + "menu.view": "View", + "canvas.load_ref": "Reference image...", + "canvas.paste_ref": "Paste reference", + "canvas.clear_ref": "Clear reference", + "canvas.zoom": "Grid scale", + "canvas.ref_load_fail": "Could not load image.", + "counter.colors": "{count}/{limit} colors", + "set.title": "ComfyUI connection settings", + "set.host": "Host:", + "set.port": "Port:", + "set.https": "Use HTTPS", + "set.test": "Test connection", + "set.test_ok": "Connection OK. ComfyUI is reachable.", + "set.test_fail": "Connection failed:\n{err}", + "set.saved": "Settings saved.", + "comfy.checking": "Checking ComfyUI...", + "comfy.check_title": "ComfyUI dependency check", + "comfy.all_ok": "All required nodes and models are installed.", + "comfy.unreachable": "ComfyUI is unreachable at {url}:\n{err}", + "comfy.missing_header": "Missing on the server:", + "comfy.missing_nodes": "Custom nodes: {items}", + "comfy.missing_unet": "UNET models: {items}", + "comfy.missing_vae": "VAE: {items}", + "comfy.missing_clip": "CLIP: {items}", + "comfy.missing_clip_gguf": "CLIP GGUF: {items}", + "comfy.missing_samplers": "Samplers: {items}", + "comfy.generating": "Generating in ComfyUI...", + "comfy.gen_title": "Generation", + "comfy.gen_fail": "Generation failed:\n{err}", + "comfy.gen_done": "Image generated.", + "tab.json": "JSON", + "tab.result": "Result", + "result.empty": "Generated image will appear here.", + "result.save_lib": "Save to library", + "result.save_file": "Save image...", + "result.saved_file": "Image saved to:\n{path}", + "result.png_filter": "PNG image (*.png)", + "comfy.workflow_missing": "Workflow file not found:\n{path}", + "comfy.deps_missing_continue": "Some dependencies are missing. Generate anyway?", + "comfy.save_to_lib_q": "Save the generated image to the library?", + "draft.restore_title": "Restore draft", + "draft.restore_q": "An unsaved draft was found. Restore it?", + "tpl.choose_title": "Element template", + "tpl.choose_label": "Choose a template:", + "common.cancel": "Cancel", + "common.ok": "OK", + "common.close": "Close", + }, + "ru": { + "app.title": "Ideogram 4 Prompt Builder", + "tb.example": "Пример", + "tb.import": "Импорт JSON", + "tb.save_json": "Сохранить JSON", + "tb.copy": "Копировать", + "tb.save_library": "Сохранить в библиотеку", + "tb.library": "Библиотека", + "tb.language": "Язык:", + "grp.high": "Общее описание", + "high.placeholder": "Краткое описание всей сцены в одно-два предложения...", + "grp.presets": "Пресеты", + "preset.no_safety": "Добавить \"No safety filter.\"", + "grp.style": "Стиль", + "style.photo": "Фото", + "style.art": "Арт", + "style.aesthetics": "Эстетика", + "style.lighting": "Освещение", + "style.photo_field": "Фото", + "style.art_style": "Арт-стиль", + "style.medium": "Носитель", + "style.palette": "Палитра", + "grp.composition": "Композиция", + "comp.background": "Фон", + "comp.background_placeholder": "Опишите окружение или фон перед перечислением объектов переднего плана...", + "comp.add_element": "Добавить элемент", + "comp.remove_element": "Удалить элемент", + "comp.hint": "Перетаскивайте прямоугольник, чтобы переместить элемент. Тяните круглые маркеры, чтобы масштабировать bbox.", + "el.type": "Тип", + "el.label": "Метка", + "el.text": "Текст", + "el.description": "Описание", + "el.palette": "Палитра", + "el.use_bbox": "Использовать bbox", + "el.bbox": "BBox", + "el.element": "Элемент", + "out.title": "Готовый JSON", + "out.pretty": "Pretty", + "out.compact": "Compact", + "out.copy_compact": "Копировать compact", + "out.save_json_btn": "Сохранить .json", + "canvas.label": "bbox canvas 0-1000", + "val.ok": "JSON собран в порядке ключей Ideogram 4 и готов для ComfyUI.", + "val.no_high": "Добавьте high_level_description для лучшего следования сцене.", + "val.bg_required": "background обязателен.", + "val.add_element": "Добавьте хотя бы один элемент.", + "val.style_missing": "В style_description не хватает: {fields}.", + "val.photo_or_art": "Нужен ровно один ключ: photo или art_style.", + "val.hex_upper": "Цвет {color} должен быть uppercase #RRGGBB.", + "val.text_literal": "{title}: для text-элемента нужен literal text.", + "val.desc_required": "{title}: desc обязателен.", + "val.bbox_order": "{title}: bbox должен иметь y_max/x_max больше y_min/x_min.", + "val.el_hex": "{title}: цвет {color} должен быть uppercase #RRGGBB.", + "val.element_word": "element {index}", + "pal.placeholder": "#1E73BE, #FDFDFD", + "pal.add": "Добавить цвет", + "pal.configure": "Настроить цвет", + "pal.swatch_tip": "{color}: нажмите, чтобы настроить", + "pal.remove": "Удалить цвет", + "dlg.save_json_title": "Сохранить JSON", + "dlg.json_filter": "JSON файлы (*.json);;Все файлы (*)", + "dlg.import_title": "Импорт JSON", + "imp.error_title": "Ошибка импорта", + "trn.error_title": "Ошибка перевода", + "trn.error_msg": "Не удалось выполнить перевод:\n{err}", + "trn.to_ru": "Перевести на RU", + "trn.to_en": "Перевести на EN", + "lib.name_prompt": "Название промта:", + "lib.untitled": "Без названия", + "lib.preview_q_title": "Превью", + "lib.preview_q": "Добавить изображение превью к этому промту?", + "lib.save_fail": "Не удалось сохранить:\n{err}", + "lib.saved": "Промт «{name}» сохранён.", + "prev.pick_title": "Выбрать изображение превью", + "prev.filter": "Изображения (*.png *.jpg *.jpeg *.webp *.bmp);;Все файлы (*)", + "prev.save_fail": "Не удалось сохранить изображение:\n{err}", + "prev.title": "Превью", + "libd.title": "Библиотека промтов", + "libd.saved_prompts": "Сохранённые промты", + "libd.no_preview": "Нет превью", + "libd.preview_unavailable": "Превью недоступно", + "libd.use": "Загрузить в редактор", + "libd.rename": "Переименовать", + "libd.set_preview": "Задать превью", + "libd.clear_preview": "Убрать превью", + "libd.delete": "Удалить", + "libd.close": "Закрыть", + "libd.rename_title": "Переименовать", + "libd.rename_label": "Название:", + "libd.delete_title": "Удалить промт", + "libd.delete_q": "Удалить «{name}» из библиотеки?", + "libd.meta": "Обновлено: {updated}\nЭлементов: {count}\n\n{high}", + "libd.no_high": "(без high_level_description)", + "libd.search": "Поиск...", + "libd.tags": "Теги (через запятую):", + "libd.tags_col": "Теги", + "libd.paste_preview": "Вставить превью из буфера", + "libd.export": "Экспорт библиотеки...", + "libd.import": "Импорт библиотеки...", + "libd.no_clipboard_image": "В буфере обмена нет изображения.", + "libd.export_done": "Библиотека экспортирована в:\n{path}", + "libd.import_done": "Импортировано промтов: {count}.", + "libd.export_fail": "Не удалось экспортировать:\n{err}", + "libd.import_fail": "Не удалось импортировать:\n{err}", + "libd.export_filter": "ZIP архив (*.zip)", + "tb.undo": "Отменить", + "tb.redo": "Повторить", + "tb.duplicate": "Дублировать элемент", + "tb.move_up": "Вверх", + "tb.move_down": "Вниз", + "tb.theme": "Тема", + "tb.comfy_settings": "Настройки ComfyUI", + "tb.generate": "Сгенерировать в ComfyUI", + "tb.check_comfy": "Проверить ComfyUI", + "tb.template": "Добавить из шаблона", + "tb.overwrite": "Обновить в библиотеке", + "menu.file": "Файл", + "menu.edit": "Правка", + "menu.library": "Библиотека", + "menu.comfy": "ComfyUI", + "menu.view": "Вид", + "canvas.load_ref": "Референс-изображение...", + "canvas.paste_ref": "Вставить референс", + "canvas.clear_ref": "Убрать референс", + "canvas.zoom": "Масштаб сетки", + "canvas.ref_load_fail": "Не удалось загрузить изображение.", + "counter.colors": "{count}/{limit} цветов", + "set.title": "Настройки соединения с ComfyUI", + "set.host": "Хост:", + "set.port": "Порт:", + "set.https": "Использовать HTTPS", + "set.test": "Проверить соединение", + "set.test_ok": "Соединение установлено. ComfyUI доступен.", + "set.test_fail": "Не удалось подключиться:\n{err}", + "set.saved": "Настройки сохранены.", + "comfy.checking": "Проверка ComfyUI...", + "comfy.check_title": "Проверка зависимостей ComfyUI", + "comfy.all_ok": "Все необходимые ноды и модели установлены.", + "comfy.unreachable": "ComfyUI недоступен по адресу {url}:\n{err}", + "comfy.missing_header": "Отсутствует на сервере:", + "comfy.missing_nodes": "Кастомные ноды: {items}", + "comfy.missing_unet": "UNET-модели: {items}", + "comfy.missing_vae": "VAE: {items}", + "comfy.missing_clip": "CLIP: {items}", + "comfy.missing_clip_gguf": "CLIP GGUF: {items}", + "comfy.missing_samplers": "Семплеры: {items}", + "comfy.generating": "Генерация в ComfyUI...", + "comfy.gen_title": "Генерация", + "comfy.gen_fail": "Не удалось сгенерировать:\n{err}", + "comfy.gen_done": "Изображение сгенерировано.", + "tab.json": "JSON", + "tab.result": "Результат", + "result.empty": "Здесь появится сгенерированное изображение.", + "result.save_lib": "Сохранить в библиотеку", + "result.save_file": "Сохранить изображение...", + "result.saved_file": "Изображение сохранено в:\n{path}", + "result.png_filter": "PNG изображение (*.png)", + "comfy.workflow_missing": "Файл workflow не найден:\n{path}", + "comfy.deps_missing_continue": "Некоторые зависимости отсутствуют. Всё равно сгенерировать?", + "comfy.save_to_lib_q": "Сохранить сгенерированное изображение в библиотеку?", + "draft.restore_title": "Восстановить черновик", + "draft.restore_q": "Найден несохранённый черновик. Восстановить его?", + "tpl.choose_title": "Шаблон элемента", + "tpl.choose_label": "Выберите шаблон:", + "common.cancel": "Отмена", + "common.ok": "ОК", + "common.close": "Закрыть", + }, +} + + +def ensure_translation_file(): + """Write the bundled translations to disk if no file exists yet.""" + if not LANG_FILE.exists(): + try: + with open(LANG_FILE, "w", encoding="utf-8") as handle: + json.dump(DEFAULT_TRANSLATIONS, handle, ensure_ascii=False, indent=2) + except OSError: + pass + + +def load_translations(): + """Load translations from the external file, falling back to bundled defaults.""" + ensure_translation_file() + try: + with open(LANG_FILE, "r", encoding="utf-8") as handle: + data = json.load(handle) + except (OSError, json.JSONDecodeError): + data = {} + if not isinstance(data, dict) or not data: + return {lang: dict(strings) for lang, strings in DEFAULT_TRANSLATIONS.items()} + return data + + +TRANSLATIONS = load_translations() +_saved_lang = load_settings().get("language", DEFAULT_LANGUAGE) +if _saved_lang in TRANSLATIONS: + CURRENT_LANG = _saved_lang +elif DEFAULT_LANGUAGE in TRANSLATIONS: + CURRENT_LANG = DEFAULT_LANGUAGE +else: + CURRENT_LANG = next(iter(TRANSLATIONS)) + + +def available_languages(): + return list(TRANSLATIONS.keys()) + + +def tr(key): + """Translate a key into the current language, falling back to English then the key.""" + for source in (TRANSLATIONS.get(CURRENT_LANG), TRANSLATIONS.get("en"), + DEFAULT_TRANSLATIONS.get(CURRENT_LANG), DEFAULT_TRANSLATIONS.get("en")): + if source and key in source: + return source[key] + return key + + +EXAMPLE_CAPTION = { + "high_level_description": ( + "A surreal streetwear mixed-media collage poster featuring a relaxed skateboarder mid-air " + "against a vibrant blue sky, backed by giant puffy 3D letters spelling 'COMFY'." + ), + "style_description": { + "aesthetics": "retro magazine cutout style, mixed-media digital collage, high-contrast streetwear graphic", + "lighting": "high-contrast flash mixed with harsh midday sunlight, flat bright graphic lighting on typography", + "photo": "vintage grainy 35mm film, distressed halftone scan textures", + "medium": "mixed-media digital collage", + "color_palette": ["#1E73BE", "#FDFDFD", "#C82A2A", "#657C9C", "#EFEFEF"], + }, + "compositional_deconstruction": { + "background": "A vibrant, clear blue sky layered with vintage grainy film texture and subtle halftone dot patterns.", + "elements": [ + { + "type": "obj", + "bbox": [128, 149, 354, 810], + "desc": "Massive 3D puffy white typography spelling 'COMFY' across the upper half of the canvas.", + "color_palette": ["#FDFDFD", "#E0E0E0", "#D3DBE2"], + }, + { + "type": "obj", + "bbox": [287, 210, 756, 819], + "desc": "A sharp photographic cutout of a skateboarder mid-air with a distinct white cutout border.", + "color_palette": ["#FDFDFD", "#657C9C", "#2B2B2B", "#DCA57D"], + }, + { + "type": "text", + "bbox": [105, 830, 905, 980], + "text": "BEYOND THE COMFORT ZONE", + "desc": "Bold black sans-serif text printed on a wide torn paper strip along the lower third.", + "color_palette": ["#EFEFEF", "#1A1A1A", "#999999"], + }, + ], + }, +} + + +PROMPT_PRESETS = { + "Adult beach photo": { + "mode": "photo", + "high": ( + "A nude beach photograph of an adult woman standing on pale sand near the shoreline, " + "looking directly at the camera with the ocean horizon and clear blue sky behind her." + ), + "aesthetics": "natural, sunlit, candid, tasteful adult glamour photography", + "lighting": "bright coastal daylight, clean shadows, soft reflected light from pale sand", + "photo": "full-body beach photography, 50mm lens, natural skin texture, realistic proportions", + "medium": "photograph", + "palette": ["#E7B48D", "#F5D0B8", "#F2E8DA", "#62A9D5", "#F6E8C8"], + "background": "A quiet tropical shoreline with pale sand, soft foamy waves, a distant ocean horizon, and a clear blue sky.", + "elements": [ + { + "type": "obj", + "label": "Adult woman", + "bbox": [120, 320, 950, 690], + "desc": "An adult woman with realistic skin texture and natural posture, standing barefoot on pale sand near the shoreline.", + "color_palette": ["#E7B48D", "#F5D0B8", "#F2E8DA"], + } + ], + }, + "Boudoir editorial": { + "mode": "photo", + "high": "A sensual boudoir editorial photograph of an adult woman reclining on rumpled white sheets in a softly lit private bedroom.", + "aesthetics": "intimate, elegant, editorial, warm, sensual", + "lighting": "soft window light, gentle highlights on skin, low contrast shadows", + "photo": "85mm portrait lens, shallow depth of field, natural skin detail, tasteful composition", + "medium": "photograph", + "palette": ["#F7EFE7", "#D8A181", "#8B5E4A", "#FFFFFF", "#2F2522"], + "background": "A quiet private bedroom with rumpled white sheets, warm neutral walls, and soft morning light through sheer curtains.", + "elements": [ + { + "type": "obj", + "label": "Adult model", + "bbox": [180, 170, 880, 840], + "desc": "An adult woman reclining on white sheets in an elegant boudoir pose, styled as a tasteful editorial photograph.", + "color_palette": ["#F7EFE7", "#D8A181", "#8B5E4A"], + } + ], + }, + "Fine-art nude": { + "mode": "photo", + "high": ( + "A fine-art nude studio photograph of an adult figure posed against a dark seamless backdrop, " + "emphasizing silhouette, form, and sculptural lighting." + ), + "aesthetics": "minimal, sculptural, gallery-grade, refined, dramatic", + "lighting": "single softbox side light, strong chiaroscuro, controlled studio shadows", + "photo": "black and white fine-art photography, medium format look, crisp tonal range", + "medium": "photograph", + "palette": ["#111111", "#E6E0D8", "#8F8A84", "#FFFFFF"], + "background": "A dark seamless studio backdrop with subtle falloff and no visible props.", + "elements": [ + { + "type": "obj", + "label": "Adult figure", + "bbox": [90, 250, 960, 760], + "desc": "An adult nude figure posed with an elegant sculptural silhouette, photographed as fine art with emphasis on form and light.", + "color_palette": ["#111111", "#E6E0D8", "#8F8A84"], + } + ], + }, + "Pin-up poster": { + "mode": "art", + "high": "A retro adult pin-up poster illustration with a confident glamour model, bold typography, and polished mid-century advertising composition.", + "aesthetics": "playful, glossy, retro, high-contrast, adult glamour", + "lighting": "painted studio highlights, warm key light, crisp graphic shadows", + "art_style": "mid-century pin-up illustration, clean outlines, poster-ready typography", + "medium": "illustration", + "palette": ["#F2B99B", "#E4433B", "#1D3557", "#FFF1C7", "#FFFFFF"], + "background": "A clean vintage poster background with a radial burst, decorative stars, and generous negative space for title text.", + "elements": [ + { + "type": "obj", + "label": "Pin-up model", + "bbox": [160, 260, 900, 720], + "desc": "A confident adult pin-up model in a stylized glamour pose, rendered with polished retro illustration details.", + "color_palette": ["#F2B99B", "#E4433B", "#1D3557"], + }, + { + "type": "text", + "label": "Title", + "text": "MIDNIGHT GLAMOUR", + "bbox": [70, 120, 170, 880], + "desc": "Large cream-colored retro display lettering arched across the top of the poster.", + "color_palette": ["#FFF1C7", "#1D3557"], + }, + ], + }, +} + + +def normalize_hex(value): + value = value.strip().upper() + if value and not value.startswith("#"): + value = f"#{value}" + return value + + +def parse_palette(value, limit): + colors = [] + for raw in value.split(","): + color = normalize_hex(raw) + if color: + colors.append(color) + return colors[:limit] + + +def palette_text(colors): + return ", ".join(colors or []) + + +def clamp(value, lower=0, upper=1000): + return max(lower, min(upper, int(round(value)))) + + +def google_translate_text(text, target_language): + query = urllib.parse.urlencode( + { + "client": "gtx", + "sl": "auto", + "tl": target_language, + "dt": "t", + "q": text, + } + ) + request = urllib.request.Request( + f"https://translate.googleapis.com/translate_a/single?{query}", + headers={"User-Agent": "Mozilla/5.0"}, + ) + with urllib.request.urlopen(request, timeout=12) as response: + payload = json.loads(response.read().decode("utf-8")) + return "".join(part[0] for part in payload[0] if part and part[0]).strip() + + +_TRANSLATION_CACHE = {} + + +def cached_translate(text, target_language): + """Translate with an in-memory cache (item 13) to avoid repeat network calls.""" + key = (target_language, text) + if key in _TRANSLATION_CACHE: + return _TRANSLATION_CACHE[key] + result = google_translate_text(text, target_language) + if result: + _TRANSLATION_CACHE[key] = result + return result + + +# --- ComfyUI integration -------------------------------------------------- + +class ComfyError(Exception): + pass + + +def comfy_base_url(settings): + scheme = "https" if settings.get("comfy_https") else "http" + return f"{scheme}://{settings.get('comfy_host', '127.0.0.1')}:{settings.get('comfy_port', 8188)}" + + +def comfy_get(settings, path, timeout=10): + url = f"{comfy_base_url(settings)}{path}" + request = urllib.request.Request(url, headers={"User-Agent": "IdeogramPromptBuilder"}) + with urllib.request.urlopen(request, timeout=timeout) as response: + return json.loads(response.read().decode("utf-8")) + + +def comfy_post(settings, path, payload, timeout=15): + url = f"{comfy_base_url(settings)}{path}" + data = json.dumps(payload).encode("utf-8") + request = urllib.request.Request( + url, data=data, headers={"Content-Type": "application/json", "User-Agent": "IdeogramPromptBuilder"} + ) + with urllib.request.urlopen(request, timeout=timeout) as response: + return json.loads(response.read().decode("utf-8")) + + +def comfy_test_connection(settings): + """Raise ComfyError if the server is not reachable, else return system stats.""" + try: + return comfy_get(settings, "/system_stats", timeout=6) + except (urllib.error.URLError, TimeoutError, OSError, json.JSONDecodeError) as error: + raise ComfyError(str(error)) + + +def comfy_object_info(settings): + try: + return comfy_get(settings, "/object_info", timeout=20) + except (urllib.error.URLError, TimeoutError, OSError, json.JSONDecodeError) as error: + raise ComfyError(str(error)) + + +def _combo_values(object_info, node, input_name): + """Return the list of allowed values for a combo input of a node, or [].""" + try: + spec = object_info[node]["input"] + for section in ("required", "optional"): + if input_name in spec.get(section, {}): + values = spec[section][input_name][0] + return values if isinstance(values, list) else [] + except (KeyError, TypeError, IndexError): + pass + return [] + + +def check_comfy_dependencies(settings): + """Compare REQUIRED_COMFY against a live server. Returns dict of missing items.""" + info = comfy_object_info(settings) + available_nodes = set(info.keys()) + missing = { + "nodes": [n for n in REQUIRED_COMFY["nodes"] if n not in available_nodes], + "unet": [], "vae": [], "clip": [], "clip_gguf": [], "samplers": [], + } + + unet_values = set(_combo_values(info, "UNETLoader", "unet_name")) + for model in REQUIRED_COMFY["unet"]: + if unet_values and model not in unet_values: + missing["unet"].append(model) + + vae_values = set(_combo_values(info, "VAELoader", "vae_name")) + for model in REQUIRED_COMFY["vae"]: + if vae_values and model not in vae_values: + missing["vae"].append(model) + + clip_values = set(_combo_values(info, "CLIPLoader", "clip_name")) + for model in REQUIRED_COMFY["clip"]: + if clip_values and model not in clip_values: + missing["clip"].append(model) + + gguf_values = set(_combo_values(info, "CLIPLoaderGGUF", "clip_name")) + for model in REQUIRED_COMFY["clip_gguf"]: + if "CLIPLoaderGGUF" not in available_nodes: + missing["clip_gguf"].append(model) + elif gguf_values and model not in gguf_values: + missing["clip_gguf"].append(model) + + sampler_values = set(_combo_values(info, "KSamplerSelect", "sampler_name")) + for sampler in REQUIRED_COMFY["samplers"]: + if sampler_values and sampler not in sampler_values: + missing["samplers"].append(sampler) + + return missing + + +def _input_name_by_slot(node, slot): + inputs = node.get("inputs", []) + if 0 <= slot < len(inputs): + return inputs[slot].get("name") + return None + + +WIDGET_SCALAR_TYPES = {"INT", "FLOAT", "STRING", "BOOLEAN", "COMBO"} + + +def _is_widget_type(type_spec): + # Combos arrive either as a raw list of options or as the literal "COMBO" string, + # depending on the ComfyUI version; both render a widget. + return isinstance(type_spec, list) or type_spec in WIDGET_SCALAR_TYPES + + +def _make_api_entry(node, object_info): + """Convert a UI node into an API entry, mapping widget values to input names. + + When ``object_info`` describes the node class, widget values are mapped to the + authoritative widget input order (combos and INT/FLOAT/STRING/BOOLEAN), skipping the + extra value that ``control_after_generate`` inputs (e.g. seeds) store. Links override + these defaults later. Falls back to the UI ``inputs`` widget flags when the class is + unknown. + """ + entry = {"class_type": node["type"], "inputs": {}} + widgets = node.get("widgets_values", []) or [] + if not isinstance(widgets, list): + return entry + spec = (object_info.get(node["type"], {}) or {}).get("input", {}) if object_info else {} + if spec: + ordered = list(spec.get("required", {}).items()) + list(spec.get("optional", {}).items()) + idx = 0 + for name, definition in ordered: + type_spec = definition[0] if definition else None + if not _is_widget_type(type_spec): + continue + if idx >= len(widgets): + break + entry["inputs"][name] = widgets[idx] + idx += 1 + options = definition[1] if len(definition) > 1 and isinstance(definition[1], dict) else {} + if options.get("control_after_generate"): + idx += 1 # widgets_values stores the control value right after the widget + return entry + wi = 0 + for inp in node.get("inputs", []): + if inp.get("widget"): + if wi < len(widgets): + entry["inputs"][inp["name"]] = widgets[wi] + wi += 1 + return entry + + +def workflow_to_api_prompt(workflow, compact_caption, seed, object_info=None): + """Convert the bundled UI workflow (with its subgraph) into a ComfyUI API prompt. + + Subgraph instances are flattened: internal nodes are namespaced, internal links are + wired by id, and the subgraph boundary (instance inputs/outputs) is resolved so that + top-level wiring crosses into the subgraph correctly. The builder's caption is injected + into CLIPTextEncode (which prunes the original prompt-builder branch) and a fresh seed + into RandomNoise. + """ + subgraph_defs = {sg["id"]: sg for sg in workflow.get("definitions", {}).get("subgraphs", [])} + prompt = {} + + def key(scope, nid): + return str(nid) if scope is None else f"{scope}_{nid}" + + instances = [] # (instance_node, subgraph_def, scope) + for node in workflow.get("nodes", []): + node_type = node.get("type") + if node_type == "MarkdownNote": + continue + if node_type in subgraph_defs: + sg = subgraph_defs[node_type] + scope = str(node["id"]) + instances.append((node, sg, scope)) + for child in sg.get("nodes", []): + if child.get("type") == "MarkdownNote": + continue + prompt[key(scope, child["id"])] = _make_api_entry(child, object_info) + else: + prompt[str(node["id"])] = _make_api_entry(node, object_info) + + # Wire internal subgraph links and build boundary maps per instance. + boundary_in = {} # scope -> {input_name: [(internal_node_id, internal_slot), ...]} + boundary_out = {} # scope -> {output_name: (internal_node_id, internal_slot)} + for node, sg, scope in instances: + internal_ids = {n["id"] for n in sg.get("nodes", [])} + node_by_id = {n["id"]: n for n in sg.get("nodes", [])} + link_by_id = {l["id"]: l for l in sg.get("links", [])} + + for link in sg.get("links", []): + origin, target = link.get("origin_id"), link.get("target_id") + if origin in internal_ids and target in internal_ids: + tnode = node_by_id.get(target) + name = _input_name_by_slot(tnode, link.get("target_slot", 0)) + if name: + prompt[key(scope, target)]["inputs"][name] = [key(scope, origin), link.get("origin_slot", 0)] + + in_map = {} + for sg_input in sg.get("inputs", []): + targets = [] + for lid in sg_input.get("linkIds", []): + link = link_by_id.get(lid) + if link and link.get("target_id") in internal_ids: + targets.append((link["target_id"], link.get("target_slot", 0))) + in_map[sg_input["name"]] = targets + boundary_in[scope] = in_map + + out_map = {} + for sg_output in sg.get("outputs", []): + for lid in sg_output.get("linkIds", []): + link = link_by_id.get(lid) + if link and link.get("origin_id") in internal_ids: + out_map[sg_output["name"]] = (link["origin_id"], link.get("origin_slot", 0)) + break + boundary_out[scope] = out_map + + instance_by_id = {str(node["id"]): (node, sg, scope) for node, sg, scope in instances} + + def resolve_source(origin_id, origin_slot): + """Return [node_key, slot] for a link origin, crossing subgraph output boundaries.""" + sid = str(origin_id) + if sid in instance_by_id: + node, sg, scope = instance_by_id[sid] + out_name = _input_name_by_slot({"inputs": node.get("outputs", [])}, origin_slot) + internal = boundary_out.get(scope, {}).get(out_name) + if internal: + return [key(scope, internal[0]), internal[1]] + return None + return [sid, origin_slot] + + # Wire top-level links, crossing into subgraph instances where needed. + for link in workflow.get("links", []): + if not isinstance(link, list) or len(link) < 6: + continue + _lid, oid, oslot, tid, tslot, _type = link[:6] + source = resolve_source(oid, oslot) + if source is None: + continue + tkey = str(tid) + if tkey in instance_by_id: + node, sg, scope = instance_by_id[tkey] + inst_input = node.get("inputs", []) + in_name = inst_input[tslot].get("name") if 0 <= tslot < len(inst_input) else None + for (tnode, tnslot) in boundary_in.get(scope, {}).get(in_name, []): + name = _input_name_by_slot({"inputs": sg_node_inputs(sg, tnode)}, tnslot) + if name: + prompt[key(scope, tnode)]["inputs"][name] = source + elif tkey in prompt: + tnode = next((n for n in workflow.get("nodes", []) if str(n.get("id")) == tkey), None) + name = _input_name_by_slot(tnode, tslot) if tnode else None + if name: + prompt[tkey]["inputs"][name] = source + + # Inject builder data; overriding CLIPTextEncode.text prunes the prompt-builder branch. + for entry in prompt.values(): + if entry["class_type"] == "CLIPTextEncode": + entry["inputs"]["text"] = compact_caption + elif entry["class_type"] == "RandomNoise": + entry["inputs"]["noise_seed"] = seed + return prompt + + +def sg_node_inputs(sg, node_id): + for node in sg.get("nodes", []): + if node.get("id") == node_id: + return node.get("inputs", []) + return [] + + +def find_save_image_node(prompt): + for node_id, entry in prompt.items(): + if entry.get("class_type") in ("SaveImage", "PreviewImage"): + return node_id + return None + + +def comfy_generate(settings, workflow, compact_caption, seed, should_cancel=None): + """Submit the workflow to ComfyUI and return raw PNG bytes of the first output image.""" + try: + object_info = comfy_object_info(settings) + except ComfyError: + object_info = None + prompt = workflow_to_api_prompt(workflow, compact_caption, seed, object_info) + try: + result = comfy_post(settings, "/prompt", {"prompt": prompt}) + except urllib.error.HTTPError as error: + detail = "" + try: + detail = error.read().decode("utf-8", "replace") + except OSError: + pass + raise ComfyError(f"HTTP {error.code}: {detail[:400]}") + except (urllib.error.URLError, TimeoutError, OSError, json.JSONDecodeError) as error: + raise ComfyError(str(error)) + prompt_id = result.get("prompt_id") + if not prompt_id: + raise ComfyError(json.dumps(result)[:300]) + + for _ in range(600): # up to ~5 minutes + if should_cancel and should_cancel(): + raise ComfyError("cancelled") + try: + history = comfy_get(settings, f"/history/{prompt_id}", timeout=10) + except (urllib.error.URLError, TimeoutError, OSError, json.JSONDecodeError) as error: + raise ComfyError(str(error)) + if prompt_id in history: + outputs = history[prompt_id].get("outputs", {}) + for node_output in outputs.values(): + for image in node_output.get("images", []): + query = urllib.parse.urlencode( + {"filename": image["filename"], "subfolder": image.get("subfolder", ""), + "type": image.get("type", "output")} + ) + url = f"{comfy_base_url(settings)}/view?{query}" + request = urllib.request.Request(url, headers={"User-Agent": "IdeogramPromptBuilder"}) + with urllib.request.urlopen(request, timeout=30) as response: + return response.read() + raise ComfyError("No image in workflow output.") + time.sleep(0.5) + raise ComfyError("Timed out waiting for generation.") + + +class GenerationThread(QThread): + finished_ok = pyqtSignal(bytes) + failed = pyqtSignal(str) + + def __init__(self, settings, workflow, caption, seed, parent=None): + super().__init__(parent) + self.settings = settings + self.workflow = workflow + self.caption = caption + self.seed = seed + self._cancel = False + + def cancel(self): + self._cancel = True + + def run(self): + try: + data = comfy_generate( + self.settings, self.workflow, self.caption, self.seed, lambda: self._cancel, + ) + self.finished_ok.emit(data) + except ComfyError as error: + self.failed.emit(str(error)) + except Exception as error: # noqa: BLE001 - surface anything to the UI + self.failed.emit(str(error)) + + +def load_library(): + """Read the prompt library from disk, returning a list of entries.""" + if LIBRARY_FILE.exists(): + try: + with open(LIBRARY_FILE, "r", encoding="utf-8") as handle: + data = json.load(handle) + if isinstance(data, list): + return data + except (OSError, json.JSONDecodeError): + return [] + return [] + + +def save_library(entries): + """Persist the prompt library to disk.""" + with open(LIBRARY_FILE, "w", encoding="utf-8") as handle: + json.dump(entries, handle, ensure_ascii=False, indent=2) + + +def preview_file(entry): + """Resolve an entry's preview image to an existing path, or None.""" + name = entry.get("preview") + if not name: + return None + path = PREVIEW_DIR / name + return path if path.exists() else None + + +def remove_preview_file(entry): + """Delete the preview image associated with an entry, if any.""" + path = preview_file(entry) + if path: + try: + path.unlink() + except OSError: + pass + entry["preview"] = None + + +def attach_preview(entry, parent): + """Pick an image file and copy it into PREVIEW_DIR as this entry's preview.""" + path, _filter = QFileDialog.getOpenFileName( + parent, + tr("prev.pick_title"), + "", + tr("prev.filter"), + ) + if not path: + return False + try: + PREVIEW_DIR.mkdir(parents=True, exist_ok=True) + remove_preview_file(entry) + target_name = f"{entry['id']}{Path(path).suffix.lower() or '.png'}" + shutil.copyfile(path, PREVIEW_DIR / target_name) + except OSError as error: + QMessageBox.warning(parent, tr("prev.title"), tr("prev.save_fail").format(err=error)) + return False + entry["preview"] = target_name + entry["updated"] = datetime.now().isoformat(timespec="seconds") + return True + + +class PaletteEditor(QWidget): + changed = pyqtSignal() + + def __init__(self, limit, parent=None): + super().__init__(parent) + self.limit = limit + self._colors = [] + self._syncing = False + + layout = QVBoxLayout(self) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(8) + + top = QHBoxLayout() + self.line_edit = QLineEdit() + self.line_edit.setPlaceholderText(tr("pal.placeholder")) + self.add_button = QPushButton(tr("pal.add")) + self.add_button.clicked.connect(self.add_color) + self.line_edit.textChanged.connect(self._line_changed) + top.addWidget(self.line_edit, 1) + top.addWidget(self.add_button) + layout.addLayout(top) + + bottom = QHBoxLayout() + self.swatch_row = QHBoxLayout() + self.swatch_row.setSpacing(6) + self.swatch_row.addStretch() + bottom.addLayout(self.swatch_row, 1) + self.counter_label = QLabel("") + self.counter_label.setStyleSheet("color:#7A847C;background:transparent;") + bottom.addWidget(self.counter_label) + layout.addLayout(bottom) + self._update_counter() + + def text(self): + return palette_text(self._colors) + + def colors(self): + return list(self._colors) + + def set_text(self, text): + self.set_colors(parse_palette(text, self.limit)) + + def set_colors(self, colors): + self._colors = [normalize_hex(color) for color in colors if normalize_hex(color)][: self.limit] + self._sync_line() + self._render_swatches() + self.changed.emit() + + def add_color(self): + initial = QColor(self._colors[-1] if self._colors else "#FFFFFF") + color = QColorDialog.getColor(initial, self, tr("pal.configure")) + if not color.isValid(): + return + value = color.name().upper() + if value not in self._colors and len(self._colors) < self.limit: + self._colors.append(value) + self._sync_line() + self._render_swatches() + self.changed.emit() + + def edit_color(self, index): + color = QColorDialog.getColor(QColor(self._colors[index]), self, tr("pal.configure")) + if not color.isValid(): + return + self._colors[index] = color.name().upper() + self._sync_line() + self._render_swatches() + self.changed.emit() + + def remove_color(self, index): + del self._colors[index] + self._sync_line() + self._render_swatches() + self.changed.emit() + + def _line_changed(self): + if self._syncing: + return + self._colors = parse_palette(self.line_edit.text(), self.limit) + self._render_swatches() + self.changed.emit() + + def _sync_line(self): + self._syncing = True + self.line_edit.setText(palette_text(self._colors)) + self._syncing = False + + def _update_counter(self): + count = len(self._colors) + self.counter_label.setText(tr("counter.colors").format(count=count, limit=self.limit)) + # Highlight when any color is not a valid uppercase #RRGGBB or the limit is exceeded (item 10). + invalid = count > self.limit or any(not HEX_RE.match(c) for c in self._colors) + self.line_edit.setProperty("invalid", "true" if invalid else "false") + self.line_edit.style().unpolish(self.line_edit) + self.line_edit.style().polish(self.line_edit) + + def _render_swatches(self): + self._update_counter() + while self.swatch_row.count() > 1: + item = self.swatch_row.takeAt(0) + if item.widget(): + item.widget().deleteLater() + + for index, color in enumerate(self._colors): + holder = QWidget() + holder.setObjectName("SwatchHolder") + row = QHBoxLayout(holder) + row.setContentsMargins(0, 0, 0, 0) + row.setSpacing(2) + + swatch = QToolButton() + swatch.setToolTip(tr("pal.swatch_tip").format(color=color)) + swatch.setFixedSize(34, 28) + swatch.setStyleSheet( + f"QToolButton {{ background: {color}; border: 1px solid #AEB8B1; border-radius: 6px; }}" + ) + swatch.clicked.connect(lambda _checked=False, i=index: self.edit_color(i)) + remove = QToolButton() + remove.setText("×") + remove.setToolTip(tr("pal.remove")) + remove.setFixedSize(22, 28) + remove.clicked.connect(lambda _checked=False, i=index: self.remove_color(i)) + row.addWidget(swatch) + row.addWidget(remove) + self.swatch_row.insertWidget(index, holder) + + +class BBoxCanvas(QFrame): + selected = pyqtSignal(int) + bbox_changed = pyqtSignal(int, list) + + BASE_SIZE = 340 + + def __init__(self): + super().__init__() + self.elements = [] + self.selected_index = None + self.drag_mode = None + self.drag_index = None + self.drag_start = QPointF() + self.start_bbox = None + self.zoom = 1.0 + self.ref_pixmap = None + self.theme = THEMES["light"] + self.setMinimumHeight(360) + self.setMouseTracking(True) + self.setCursor(Qt.CursorShape.CrossCursor) + + def set_data(self, elements, selected_index): + self.elements = elements + self.selected_index = selected_index + self.update() + + def set_theme(self, theme): + self.theme = THEMES.get(theme, THEMES["light"]) + self.update() + + def set_reference(self, pixmap): + """Set (or clear with None) the background reference image; scales with the grid.""" + self.ref_pixmap = pixmap if pixmap and not pixmap.isNull() else None + self.update() + + def set_zoom(self, percent): + self.zoom = max(0.5, min(3.0, percent / 100.0)) + size = int(self.BASE_SIZE * self.zoom) + margin = 16 + # Grow minimums so the surrounding scroll area exposes scrollbars when zoomed in. + self.setMinimumHeight(max(360, size + margin * 2)) + self.setMinimumWidth(size + margin * 2 if self.zoom > 1.0 else 0) + self.update() + + def canvas_rect(self): + margin = 16 + size = self.BASE_SIZE * self.zoom + left = max(margin, (self.width() - size) / 2) + top = margin + return QRectF(left, top, size, size) + + def bbox_to_rect(self, bbox): + canvas = self.canvas_rect() + y1, x1, y2, x2 = bbox + return QRectF( + canvas.left() + canvas.width() * x1 / 1000, + canvas.top() + canvas.height() * y1 / 1000, + canvas.width() * (x2 - x1) / 1000, + canvas.height() * (y2 - y1) / 1000, + ) + + def point_to_bbox_delta(self, delta): + canvas = self.canvas_rect() + return delta.y() * 1000 / canvas.height(), delta.x() * 1000 / canvas.width() + + def hit_handle(self, point, rect): + handles = { + "nw": rect.topLeft(), + "n": QPointF(rect.center().x(), rect.top()), + "ne": rect.topRight(), + "e": QPointF(rect.right(), rect.center().y()), + "se": rect.bottomRight(), + "s": QPointF(rect.center().x(), rect.bottom()), + "sw": rect.bottomLeft(), + "w": QPointF(rect.left(), rect.center().y()), + } + for name, handle in handles.items(): + if QRectF(handle.x() - 7, handle.y() - 7, 14, 14).contains(point): + return name + return None + + def hit_test(self, point): + for index in range(len(self.elements) - 1, -1, -1): + element = self.elements[index] + if not element.get("use_bbox"): + continue + rect = self.bbox_to_rect(element["bbox"]) + handle = self.hit_handle(point, rect) + if handle: + return index, handle + if rect.contains(point): + return index, "move" + return None, None + + def mousePressEvent(self, event): + if event.button() != Qt.MouseButton.LeftButton: + return + index, mode = self.hit_test(event.position()) + if index is None: + return + self.drag_index = index + self.drag_mode = mode + self.drag_start = event.position() + self.start_bbox = list(self.elements[index]["bbox"]) + self.selected.emit(index) + + def mouseMoveEvent(self, event): + if self.drag_index is None: + index, mode = self.hit_test(event.position()) + self.setCursor(self.cursor_for_mode(mode)) + return + + dy, dx = self.point_to_bbox_delta(event.position() - self.drag_start) + y1, x1, y2, x2 = self.start_bbox + + if self.drag_mode == "move": + height = y2 - y1 + width = x2 - x1 + y1 = clamp(y1 + dy, 0, 1000 - height) + x1 = clamp(x1 + dx, 0, 1000 - width) + y2 = y1 + height + x2 = x1 + width + else: + if "n" in self.drag_mode: + y1 = clamp(y1 + dy, 0, y2 - MIN_BBOX_SIZE) + if "s" in self.drag_mode: + y2 = clamp(y2 + dy, y1 + MIN_BBOX_SIZE, 1000) + if "w" in self.drag_mode: + x1 = clamp(x1 + dx, 0, x2 - MIN_BBOX_SIZE) + if "e" in self.drag_mode: + x2 = clamp(x2 + dx, x1 + MIN_BBOX_SIZE, 1000) + + self.bbox_changed.emit(self.drag_index, [y1, x1, y2, x2]) + + def mouseReleaseEvent(self, event): + self.drag_index = None + self.drag_mode = None + self.start_bbox = None + self.setCursor(Qt.CursorShape.CrossCursor) + + def cursor_for_mode(self, mode): + mapping = { + "move": Qt.CursorShape.SizeAllCursor, + "n": Qt.CursorShape.SizeVerCursor, + "s": Qt.CursorShape.SizeVerCursor, + "e": Qt.CursorShape.SizeHorCursor, + "w": Qt.CursorShape.SizeHorCursor, + "nw": Qt.CursorShape.SizeFDiagCursor, + "se": Qt.CursorShape.SizeFDiagCursor, + "ne": Qt.CursorShape.SizeBDiagCursor, + "sw": Qt.CursorShape.SizeBDiagCursor, + } + return mapping.get(mode, Qt.CursorShape.CrossCursor) + + def paintEvent(self, event): + super().paintEvent(event) + painter = QPainter(self) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + canvas = self.canvas_rect() + + painter.setPen(QPen(QColor(self.theme["canvas_grid"]), 1)) + painter.setBrush(QColor(self.theme["canvas_bg"])) + painter.drawRoundedRect(canvas, 10, 10) + + # Reference image fills the grid square and therefore scales with the zoom. + if self.ref_pixmap is not None: + scaled = self.ref_pixmap.scaled( + int(canvas.width()), int(canvas.height()), + Qt.AspectRatioMode.KeepAspectRatio, + Qt.TransformationMode.SmoothTransformation, + ) + img_x = canvas.left() + (canvas.width() - scaled.width()) / 2 + img_y = canvas.top() + (canvas.height() - scaled.height()) / 2 + painter.setOpacity(0.85) + painter.drawPixmap(int(img_x), int(img_y), scaled) + painter.setOpacity(1.0) + + painter.setPen(QPen(QColor(self.theme["canvas_grid"]), 1)) + for step in range(1, 10): + x = canvas.left() + canvas.width() * step / 10 + y = canvas.top() + canvas.height() * step / 10 + painter.drawLine(int(x), int(canvas.top()), int(x), int(canvas.bottom())) + painter.drawLine(int(canvas.left()), int(y), int(canvas.right()), int(y)) + + painter.setPen(QPen(QColor(self.theme["canvas_label"]), 1)) + painter.drawText(int(canvas.left()) + 10, int(canvas.top()) + 22, tr("canvas.label")) + + for index, element in enumerate(self.elements): + if not element.get("use_bbox"): + continue + rect = self.bbox_to_rect(element["bbox"]) + base = QColor("#C470A8") if element["type"] == "text" else QColor(self.theme["accent"]) + fill = QColor(base) + fill.setAlpha(32) + painter.setBrush(fill) + painter.setPen(QPen(base, 3 if index == self.selected_index else 2)) + painter.drawRoundedRect(rect, 6, 6) + painter.setPen(base) + painter.drawText(rect.adjusted(7, 5, -7, -5), Qt.AlignmentFlag.AlignLeft, element.get("label") or str(index + 1)) + + if index == self.selected_index: + painter.setBrush(QColor(self.theme["panel"])) + painter.setPen(QPen(base, 2)) + for point in [ + rect.topLeft(), + QPointF(rect.center().x(), rect.top()), + rect.topRight(), + QPointF(rect.right(), rect.center().y()), + rect.bottomRight(), + QPointF(rect.center().x(), rect.bottom()), + rect.bottomLeft(), + QPointF(rect.left(), rect.center().y()), + ]: + painter.drawEllipse(point, 5, 5) + + +class ComfySettingsDialog(QDialog): + """Edit ComfyUI connection settings, persisted to comfy_settings.json.""" + + def __init__(self, settings, parent=None): + super().__init__(parent) + self.settings = dict(settings) + self.setWindowTitle(tr("set.title")) + self.setMinimumWidth(420) + + layout = QVBoxLayout(self) + form = QFormLayout() + self.host_edit = QLineEdit(str(self.settings.get("comfy_host", "127.0.0.1"))) + self.port_spin = QSpinBox() + self.port_spin.setRange(1, 65535) + self.port_spin.setValue(int(self.settings.get("comfy_port", 8188))) + self.https_check = QCheckBox(tr("set.https")) + self.https_check.setChecked(bool(self.settings.get("comfy_https", False))) + form.addRow(tr("set.host"), self.host_edit) + form.addRow(tr("set.port"), self.port_spin) + form.addRow("", self.https_check) + layout.addLayout(form) + + test_row = QHBoxLayout() + self.test_button = QPushButton(tr("set.test")) + self.test_button.clicked.connect(self.test_connection) + test_row.addWidget(self.test_button) + test_row.addStretch() + layout.addLayout(test_row) + + buttons = QDialogButtonBox( + QDialogButtonBox.StandardButton.Save | QDialogButtonBox.StandardButton.Cancel + ) + buttons.accepted.connect(self.accept) + buttons.rejected.connect(self.reject) + layout.addWidget(buttons) + + def values(self): + return { + "comfy_host": self.host_edit.text().strip() or "127.0.0.1", + "comfy_port": self.port_spin.value(), + "comfy_https": self.https_check.isChecked(), + } + + def test_connection(self): + probe = dict(self.settings) + probe.update(self.values()) + try: + comfy_test_connection(probe) + except ComfyError as error: + QMessageBox.warning(self, tr("set.title"), tr("set.test_fail").format(err=error)) + return + QMessageBox.information(self, tr("set.title"), tr("set.test_ok")) + + +class LibraryDialog(QDialog): + """Browse the prompt library: load, rename, attach a preview, or delete entries.""" + + def __init__(self, entries, parent=None): + super().__init__(parent) + self.entries = entries + self.selected_caption = None + self.selected_id = None + self._filtered = [] # list of original indices currently shown + self.setWindowTitle(tr("libd.title")) + self.resize(900, 600) + + layout = QHBoxLayout(self) + layout.setSpacing(14) + + left = QVBoxLayout() + left.addWidget(QLabel(tr("libd.saved_prompts"))) + self.search_edit = QLineEdit() + self.search_edit.setPlaceholderText(tr("libd.search")) + self.search_edit.textChanged.connect(lambda _t: self._refresh_list(0)) + left.addWidget(self.search_edit) + self.list_widget = QListWidget() + self.list_widget.setMinimumWidth(300) + self.list_widget.currentRowChanged.connect(self._show_details) + self.list_widget.itemDoubleClicked.connect(lambda _item: self.use_selected()) + left.addWidget(self.list_widget, 1) + io_row = QHBoxLayout() + export_button = QPushButton(tr("libd.export")) + export_button.clicked.connect(self.export_library) + import_button = QPushButton(tr("libd.import")) + import_button.clicked.connect(self.import_library) + io_row.addWidget(export_button) + io_row.addWidget(import_button) + left.addLayout(io_row) + layout.addLayout(left, 1) + + right = QVBoxLayout() + right.setSpacing(10) + self.preview_label = QLabel(tr("libd.no_preview")) + self.preview_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.preview_label.setMinimumSize(360, 260) + self.preview_label.setStyleSheet( + "background:palette(base);border:1px solid palette(mid);border-radius:8px;" + ) + right.addWidget(self.preview_label, 1) + + self.meta_label = QLabel("") + self.meta_label.setWordWrap(True) + right.addWidget(self.meta_label) + + right.addWidget(QLabel(tr("libd.tags"))) + self.tags_edit = QLineEdit() + self.tags_edit.editingFinished.connect(self._save_tags) + right.addWidget(self.tags_edit) + + button_row = QHBoxLayout() + self.use_button = QPushButton(tr("libd.use")) + self.use_button.setObjectName("PrimaryButton") + self.use_button.clicked.connect(self.use_selected) + self.rename_button = QPushButton(tr("libd.rename")) + self.rename_button.clicked.connect(self.rename_selected) + button_row.addWidget(self.use_button) + button_row.addWidget(self.rename_button) + right.addLayout(button_row) + + button_row2 = QHBoxLayout() + self.preview_button = QPushButton(tr("libd.set_preview")) + self.preview_button.clicked.connect(self.set_preview) + self.paste_preview_button = QPushButton(tr("libd.paste_preview")) + self.paste_preview_button.clicked.connect(self.paste_preview) + self.clear_preview_button = QPushButton(tr("libd.clear_preview")) + self.clear_preview_button.clicked.connect(self.clear_preview) + button_row2.addWidget(self.preview_button) + button_row2.addWidget(self.paste_preview_button) + button_row2.addWidget(self.clear_preview_button) + right.addLayout(button_row2) + + button_row3 = QHBoxLayout() + self.delete_button = QPushButton(tr("libd.delete")) + self.delete_button.clicked.connect(self.delete_selected) + close_button = QPushButton(tr("libd.close")) + close_button.clicked.connect(self.reject) + button_row3.addWidget(self.delete_button) + button_row3.addStretch() + button_row3.addWidget(close_button) + right.addLayout(button_row3) + layout.addLayout(right, 1) + + self._refresh_list(0 if self.entries else -1) + + def _matches(self, entry, query): + if not query: + return True + haystack = " ".join([ + entry.get("name", ""), + " ".join(entry.get("tags", []) or []), + entry.get("caption", {}).get("high_level_description", ""), + ]).lower() + return query in haystack + + def _refresh_list(self, select_row): + query = self.search_edit.text().strip().lower() + self.list_widget.blockSignals(True) + self.list_widget.clear() + self._filtered = [] + for index, entry in enumerate(self.entries): + if not self._matches(entry, query): + continue + self._filtered.append(index) + mark = "🖼 " if preview_file(entry) else "" + tags = entry.get("tags", []) or [] + suffix = f" [{', '.join(tags)}]" if tags else "" + self.list_widget.addItem(QListWidgetItem(f"{mark}{entry.get('name') or tr('lib.untitled')}{suffix}")) + self.list_widget.blockSignals(False) + if 0 <= select_row < len(self._filtered): + self.list_widget.setCurrentRow(select_row) + else: + self._show_details(self.list_widget.currentRow()) + + def _current_entry(self): + row = self.list_widget.currentRow() + if 0 <= row < len(self._filtered): + original = self._filtered[row] + return original, self.entries[original] + return None, None + + def _show_details(self, row): + has = 0 <= row < len(self._filtered) + for button in (self.use_button, self.rename_button, self.preview_button, + self.paste_preview_button, self.clear_preview_button, self.delete_button): + button.setEnabled(has) + self.tags_edit.setEnabled(has) + if not has: + self.preview_label.setText(tr("libd.no_preview")) + self.preview_label.setPixmap(QPixmap()) + self.meta_label.setText("") + self.tags_edit.blockSignals(True) + self.tags_edit.clear() + self.tags_edit.blockSignals(False) + return + entry = self.entries[self._filtered[row]] + self.tags_edit.blockSignals(True) + self.tags_edit.setText(", ".join(entry.get("tags", []) or [])) + self.tags_edit.blockSignals(False) + path = preview_file(entry) + if path: + pixmap = QPixmap(str(path)) + if not pixmap.isNull(): + self.preview_label.setPixmap( + pixmap.scaled( + self.preview_label.size(), + Qt.AspectRatioMode.KeepAspectRatio, + Qt.TransformationMode.SmoothTransformation, + ) + ) + else: + self.preview_label.setText(tr("libd.preview_unavailable")) + else: + self.preview_label.setPixmap(QPixmap()) + self.preview_label.setText(tr("libd.no_preview")) + caption = entry.get("caption", {}) + high = caption.get("high_level_description", "") or tr("libd.no_high") + count = len(caption.get("compositional_deconstruction", {}).get("elements", [])) + updated = entry.get("updated", entry.get("created", "")) + self.meta_label.setText(tr("libd.meta").format(updated=updated, count=count, high=high)) + + def use_selected(self): + _row, entry = self._current_entry() + if entry is None: + return + self.selected_caption = entry.get("caption", {}) + self.selected_id = entry.get("id") + self.accept() + + def rename_selected(self): + _row, entry = self._current_entry() + if entry is None: + return + name, ok = QInputDialog.getText(self, tr("libd.rename_title"), tr("libd.rename_label"), text=entry.get("name", "")) + if ok and name.strip(): + entry["name"] = name.strip() + entry["updated"] = datetime.now().isoformat(timespec="seconds") + save_library(self.entries) + self._refresh_list(self.list_widget.currentRow()) + + def _save_tags(self): + _row, entry = self._current_entry() + if entry is None: + return + tags = [t.strip() for t in self.tags_edit.text().split(",") if t.strip()] + if tags != (entry.get("tags") or []): + entry["tags"] = tags + entry["updated"] = datetime.now().isoformat(timespec="seconds") + save_library(self.entries) + self._refresh_list(self.list_widget.currentRow()) + + def set_preview(self): + _row, entry = self._current_entry() + if entry is None: + return + if attach_preview(entry, self): + save_library(self.entries) + self._refresh_list(self.list_widget.currentRow()) + + def paste_preview(self): + _row, entry = self._current_entry() + if entry is None: + return + image = QGuiApplication.clipboard().image() + if image.isNull(): + QMessageBox.information(self, tr("libd.paste_preview"), tr("libd.no_clipboard_image")) + return + try: + PREVIEW_DIR.mkdir(parents=True, exist_ok=True) + remove_preview_file(entry) + target_name = f"{entry['id']}.png" + image.save(str(PREVIEW_DIR / target_name), "PNG") + except OSError as error: + QMessageBox.warning(self, tr("prev.title"), tr("prev.save_fail").format(err=error)) + return + entry["preview"] = target_name + entry["updated"] = datetime.now().isoformat(timespec="seconds") + save_library(self.entries) + self._refresh_list(self.list_widget.currentRow()) + + def clear_preview(self): + _row, entry = self._current_entry() + if entry is None or not entry.get("preview"): + return + remove_preview_file(entry) + entry["updated"] = datetime.now().isoformat(timespec="seconds") + save_library(self.entries) + self._refresh_list(self.list_widget.currentRow()) + + def delete_selected(self): + original, entry = self._current_entry() + if entry is None: + return + confirm = QMessageBox.question( + self, + tr("libd.delete_title"), + tr("libd.delete_q").format(name=entry.get("name", "")), + ) + if confirm != QMessageBox.StandardButton.Yes: + return + row = self.list_widget.currentRow() + remove_preview_file(entry) + del self.entries[original] + save_library(self.entries) + self._refresh_list(min(row, len(self._filtered) - 1)) + + def export_library(self): + path, _filter = QFileDialog.getSaveFileName( + self, tr("libd.export"), "prompt_library.zip", tr("libd.export_filter") + ) + if not path: + return + try: + with zipfile.ZipFile(path, "w", zipfile.ZIP_DEFLATED) as archive: + archive.writestr("prompt_library.json", + json.dumps(self.entries, ensure_ascii=False, indent=2)) + for entry in self.entries: + preview = preview_file(entry) + if preview: + archive.write(preview, f"prompt_previews/{preview.name}") + except OSError as error: + QMessageBox.warning(self, tr("libd.export"), tr("libd.export_fail").format(err=error)) + return + QMessageBox.information(self, tr("libd.export"), tr("libd.export_done").format(path=path)) + + def import_library(self): + path, _filter = QFileDialog.getOpenFileName( + self, tr("libd.import"), "", tr("libd.export_filter") + ) + if not path: + return + try: + with zipfile.ZipFile(path, "r") as archive: + imported = json.loads(archive.read("prompt_library.json").decode("utf-8")) + PREVIEW_DIR.mkdir(parents=True, exist_ok=True) + existing_ids = {e.get("id") for e in self.entries} + added = 0 + for entry in imported: + if not isinstance(entry, dict): + continue + if entry.get("id") in existing_ids: + entry["id"] = uuid.uuid4().hex + preview = entry.get("preview") + if preview: + member = f"prompt_previews/{preview}" + if member in archive.namelist(): + with archive.open(member) as source: + (PREVIEW_DIR / preview).write_bytes(source.read()) + self.entries.append(entry) + existing_ids.add(entry.get("id")) + added += 1 + save_library(self.entries) + except (OSError, KeyError, json.JSONDecodeError, zipfile.BadZipFile) as error: + QMessageBox.warning(self, tr("libd.import"), tr("libd.import_fail").format(err=error)) + return + self._refresh_list(0) + QMessageBox.information(self, tr("libd.import"), tr("libd.import_done").format(count=added)) + + +class PromptBuilder(QMainWindow): + def __init__(self): + super().__init__() + self.elements = [] + self.selected_index = None + self._loading = False + self._toolbar = None + self.settings = load_settings() + self.theme = self.settings.get("theme", "light") + self._undo_stack = [] + self._redo_stack = [] + self._suspend_history = False + self._library_entry_id = None # id of the entry loaded from the library (item 7) + self._gen_thread = None + self.setWindowTitle(tr("app.title")) + self.resize(1460, 900) + self._build_ui() + if not self._restore_draft(): + self.load_caption(EXAMPLE_CAPTION) + self._push_history(initial=True) + + def set_language(self, language): + global CURRENT_LANG + if language == CURRENT_LANG or language not in TRANSLATIONS: + return + caption = self.current_caption() + ref = self.canvas.ref_pixmap if hasattr(self, "canvas") else None + CURRENT_LANG = language + self.settings["language"] = language + save_settings(self.settings) + self.setWindowTitle(tr("app.title")) + if self._toolbar is not None: + self.removeToolBar(self._toolbar) + self._toolbar.deleteLater() + self._toolbar = None + self._suspend_history = True + self._build_ui() + self.load_caption(caption) + if ref is not None: + self.canvas.set_reference(ref) + self._suspend_history = False + + def toggle_theme(self): + self.theme = "dark" if self.theme == "light" else "light" + self.settings["theme"] = self.theme + save_settings(self.settings) + self.setStyleSheet(build_stylesheet(self.theme)) + self.canvas.set_theme(self.theme) + + # --- Undo / redo (item 1) ------------------------------------------- + def _snapshot(self): + return copy.deepcopy(self.current_caption()) + + def _push_history(self, initial=False): + if self._suspend_history: + return + snap = self._snapshot() + if self._undo_stack and self._undo_stack[-1] == snap: + return + self._undo_stack.append(snap) + if len(self._undo_stack) > MAX_UNDO: + self._undo_stack.pop(0) + if not initial: + self._redo_stack.clear() + + def undo(self): + if len(self._undo_stack) < 2: + return + self._redo_stack.append(self._undo_stack.pop()) + target = copy.deepcopy(self._undo_stack[-1]) + self._suspend_history = True + self.load_caption(target) + self._suspend_history = False + + def redo(self): + if not self._redo_stack: + return + target = self._redo_stack.pop() + self._undo_stack.append(copy.deepcopy(target)) + self._suspend_history = True + self.load_caption(copy.deepcopy(target)) + self._suspend_history = False + + def install_translate_menu(self, widget): + widget.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) + widget.customContextMenuRequested.connect(lambda point, target=widget: self.show_translate_menu(target, point)) + + def show_translate_menu(self, widget, point): + menu = widget.createStandardContextMenu() + selected = self.selected_text(widget) + if selected: + menu.addSeparator() + ru_action = menu.addAction(tr("trn.to_ru")) + en_action = menu.addAction(tr("trn.to_en")) + ru_action.triggered.connect(lambda: self.translate_selection(widget, "ru")) + en_action.triggered.connect(lambda: self.translate_selection(widget, "en")) + menu.exec(widget.mapToGlobal(point)) + + def selected_text(self, widget): + if isinstance(widget, QLineEdit): + return widget.selectedText() + if isinstance(widget, (QTextEdit, QPlainTextEdit)): + return widget.textCursor().selectedText().replace("\u2029", "\n") + return "" + + def replace_selection(self, widget, replacement): + if isinstance(widget, QLineEdit): + widget.insert(replacement) + return + cursor = widget.textCursor() + cursor.insertText(replacement) + widget.setTextCursor(cursor) + + def translate_selection(self, widget, target_language): + selected = self.selected_text(widget) + if not selected.strip(): + return + try: + translated = google_translate_text(selected, target_language) + except (urllib.error.URLError, TimeoutError, json.JSONDecodeError, IndexError, KeyError, TypeError) as error: + QMessageBox.warning(self, tr("trn.error_title"), tr("trn.error_msg").format(err=error)) + return + if translated: + self.replace_selection(widget, translated) + + def _make_action(self, title, callback, shortcut=None): + action = QAction(title, self) + action.triggered.connect(callback) + if shortcut: + action.setShortcut(QKeySequence(shortcut)) + return action + + def _build_menubar(self): + bar = self.menuBar() + bar.clear() + file_menu = bar.addMenu(tr("menu.file")) + file_menu.addAction(self._make_action(tr("tb.example"), + lambda: self.load_caption(EXAMPLE_CAPTION, mark_history=True))) + file_menu.addAction(self._make_action(tr("tb.import"), self.import_json)) + file_menu.addAction(self._make_action(tr("tb.save_json"), self.save_json, "Ctrl+S")) + file_menu.addAction(self._make_action(tr("tb.copy"), self.copy_current_json)) + + edit_menu = bar.addMenu(tr("menu.edit")) + edit_menu.addAction(self._make_action(tr("tb.undo"), self.undo, "Ctrl+Z")) + edit_menu.addAction(self._make_action(tr("tb.redo"), self.redo, "Ctrl+Y")) + + lib_menu = bar.addMenu(tr("menu.library")) + lib_menu.addAction(self._make_action(tr("tb.save_library"), self.save_to_library)) + lib_menu.addAction(self._make_action(tr("tb.overwrite"), self.overwrite_in_library)) + lib_menu.addAction(self._make_action(tr("tb.library"), self.open_library)) + + comfy_menu = bar.addMenu(tr("menu.comfy")) + comfy_menu.addAction(self._make_action(tr("tb.comfy_settings"), self.open_comfy_settings)) + comfy_menu.addAction(self._make_action(tr("tb.check_comfy"), self.check_comfy)) + comfy_menu.addAction(self._make_action(tr("tb.generate"), self.generate_in_comfy)) + + view_menu = bar.addMenu(tr("menu.view")) + view_menu.addAction(self._make_action(tr("tb.theme"), self.toggle_theme)) + + def _build_ui(self): + self.setStyleSheet(build_stylesheet(self.theme)) + self._build_menubar() + toolbar = self.addToolBar("Main") + toolbar.setMovable(False) + self._toolbar = toolbar + # Slim toolbar: the most frequent actions only; everything lives in the menus too. + generate_action = self._make_action(tr("tb.generate"), self.generate_in_comfy) + toolbar.addAction(generate_action) + toolbar.addSeparator() + toolbar.addAction(self._make_action(tr("tb.undo"), self.undo)) + toolbar.addAction(self._make_action(tr("tb.redo"), self.redo)) + toolbar.addSeparator() + toolbar.addAction(self._make_action(tr("tb.save_library"), self.save_to_library)) + toolbar.addAction(self._make_action(tr("tb.library"), self.open_library)) + toolbar.addSeparator() + toolbar.addAction(self._make_action(tr("tb.copy"), self.copy_current_json)) + + spacer = QWidget() + spacer.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + toolbar.addWidget(spacer) + toolbar.addWidget(QLabel(tr("tb.language") + " ")) + self.language_combo = QComboBox() + for code in available_languages(): + self.language_combo.addItem(LANGUAGE_NAMES.get(code, code), code) + current_index = self.language_combo.findData(CURRENT_LANG) + if current_index >= 0: + self.language_combo.setCurrentIndex(current_index) + self.language_combo.currentIndexChanged.connect( + lambda _i: self.set_language(self.language_combo.currentData()) + ) + toolbar.addWidget(self.language_combo) + theme_action = QAction(tr("tb.theme"), self) + theme_action.triggered.connect(self.toggle_theme) + toolbar.addAction(theme_action) + + splitter = QSplitter(Qt.Orientation.Horizontal) + self.setCentralWidget(splitter) + + editor_scroll = QScrollArea() + editor_scroll.setWidgetResizable(True) + editor_widget = QWidget() + self.editor_layout = QVBoxLayout(editor_widget) + self.editor_layout.setContentsMargins(16, 16, 16, 16) + self.editor_layout.setSpacing(12) + editor_scroll.setWidget(editor_widget) + splitter.addWidget(editor_scroll) + + output_widget = QWidget() + output_layout = QVBoxLayout(output_widget) + output_layout.setContentsMargins(16, 16, 16, 16) + output_layout.setSpacing(10) + splitter.addWidget(output_widget) + splitter.setSizes([900, 560]) + + self._build_summary() + self._build_presets() + self._build_style() + self._build_composition() + self.editor_layout.addStretch() + self._build_output(output_layout) + + def _build_summary(self): + box = QGroupBox(tr("grp.high")) + layout = QVBoxLayout(box) + self.high_text = QTextEdit() + self.high_text.setMinimumHeight(110) + self.high_text.setPlaceholderText(tr("high.placeholder")) + self.high_text.textChanged.connect(self.update_output) + self.install_translate_menu(self.high_text) + layout.addWidget(self.high_text) + self.editor_layout.addWidget(box) + + def _build_presets(self): + box = QGroupBox(tr("grp.presets")) + layout = QGridLayout(box) + layout.setSpacing(8) + for index, name in enumerate(PROMPT_PRESETS): + button = QPushButton(name) + button.clicked.connect(lambda _checked=False, value=name: self.apply_preset(value)) + layout.addWidget(button, index // 2, index % 2) + no_safety = QPushButton(tr("preset.no_safety")) + no_safety.clicked.connect(self.append_no_safety_filter) + layout.addWidget(no_safety, 2, 0, 1, 2) + self.editor_layout.addWidget(box) + + def _build_style(self): + box = QGroupBox(tr("grp.style")) + layout = QVBoxLayout(box) + mode_row = QHBoxLayout() + self.photo_radio = QRadioButton(tr("style.photo")) + self.art_radio = QRadioButton(tr("style.art")) + self.photo_radio.setChecked(True) + self.photo_radio.toggled.connect(self._style_mode_changed) + mode_row.addWidget(self.photo_radio) + mode_row.addWidget(self.art_radio) + mode_row.addStretch() + layout.addLayout(mode_row) + + form = QFormLayout() + self.aesthetics_edit = QLineEdit() + self.lighting_edit = QLineEdit() + self.photo_edit = QLineEdit() + self.art_style_edit = QLineEdit() + self.medium_combo = QComboBox() + self.medium_combo.addItems( + ["photograph", "illustration", "3d_render", "painting", "graphic_design", "mixed-media digital collage"] + ) + self.palette_editor = PaletteEditor(limit=16) + self.install_translate_menu(self.aesthetics_edit) + self.install_translate_menu(self.lighting_edit) + self.install_translate_menu(self.photo_edit) + self.install_translate_menu(self.art_style_edit) + self.install_translate_menu(self.palette_editor.line_edit) + + form.addRow(tr("style.aesthetics"), self.aesthetics_edit) + form.addRow(tr("style.lighting"), self.lighting_edit) + self.photo_row_label = QLabel(tr("style.photo_field")) + self.art_row_label = QLabel(tr("style.art_style")) + form.addRow(self.photo_row_label, self.photo_edit) + form.addRow(self.art_row_label, self.art_style_edit) + form.addRow(tr("style.medium"), self.medium_combo) + form.addRow(tr("style.palette"), self.palette_editor) + layout.addLayout(form) + + for widget in [self.aesthetics_edit, self.lighting_edit, self.photo_edit, self.art_style_edit]: + widget.textChanged.connect(self.update_output) + self.medium_combo.currentTextChanged.connect(self.update_output) + self.palette_editor.changed.connect(self.update_output) + self.editor_layout.addWidget(box) + + def _build_composition(self): + box = QGroupBox(tr("grp.composition")) + layout = QVBoxLayout(box) + self.background_text = QTextEdit() + self.background_text.setMinimumHeight(95) + self.background_text.setPlaceholderText(tr("comp.background_placeholder")) + self.background_text.textChanged.connect(self.update_output) + self.install_translate_menu(self.background_text) + layout.addWidget(QLabel(tr("comp.background"))) + layout.addWidget(self.background_text) + + body = QHBoxLayout() + body.setSpacing(14) + self.element_list = QListWidget() + self.element_list.currentRowChanged.connect(self.select_element) + self.element_list.setMinimumWidth(280) + left = QVBoxLayout() + add_row = QHBoxLayout() + add_button = QPushButton(tr("comp.add_element")) + add_button.setObjectName("PrimaryButton") + add_button.clicked.connect(lambda: self.add_element()) + template_button = QPushButton(tr("tb.template")) + template_button.clicked.connect(self.add_from_template) + add_row.addWidget(add_button, 1) + add_row.addWidget(template_button) + left.addLayout(add_row) + left.addWidget(self.element_list, 1) + ops_row = QHBoxLayout() + for label, callback in [ + (tr("tb.duplicate"), self.duplicate_element), + (tr("tb.move_up"), lambda: self.move_element(-1)), + (tr("tb.move_down"), lambda: self.move_element(1)), + ]: + button = QPushButton(label) + button.clicked.connect(callback) + ops_row.addWidget(button) + left.addLayout(ops_row) + remove_button = QPushButton(tr("comp.remove_element")) + remove_button.clicked.connect(self.delete_element) + left.addWidget(remove_button) + body.addLayout(left, 1) + + right = QVBoxLayout() + self._build_element_form(right) + + ref_row = QHBoxLayout() + for label, callback in [ + (tr("canvas.load_ref"), self.load_reference_image), + (tr("canvas.paste_ref"), self.paste_reference_image), + (tr("canvas.clear_ref"), self.clear_reference_image), + ]: + button = QPushButton(label) + button.clicked.connect(callback) + ref_row.addWidget(button) + right.addLayout(ref_row) + + zoom_row = QHBoxLayout() + zoom_row.addWidget(QLabel(tr("canvas.zoom"))) + self.zoom_slider = QSlider(Qt.Orientation.Horizontal) + self.zoom_slider.setRange(50, 300) + self.zoom_slider.setValue(100) + self.zoom_label = QLabel("100%") + self.zoom_slider.valueChanged.connect(self._on_zoom_changed) + zoom_row.addWidget(self.zoom_slider, 1) + zoom_row.addWidget(self.zoom_label) + right.addLayout(zoom_row) + + self.canvas = BBoxCanvas() + self.canvas.set_theme(self.theme) + self.canvas.selected.connect(self.select_element) + self.canvas.bbox_changed.connect(self.update_bbox_from_canvas) + canvas_scroll = QScrollArea() + canvas_scroll.setWidgetResizable(True) + canvas_scroll.setWidget(self.canvas) + canvas_scroll.setMinimumHeight(380) + right.addWidget(canvas_scroll) + hint = QLabel(tr("comp.hint")) + hint.setWordWrap(True) + hint.setStyleSheet(f"color:{THEMES[self.theme]['muted']};background:transparent;") + right.addWidget(hint) + body.addLayout(right, 2) + layout.addLayout(body) + self.editor_layout.addWidget(box) + + def _build_element_form(self, parent_layout): + form_box = QFrame() + form_layout = QFormLayout(form_box) + self.element_type = QComboBox() + self.element_type.addItems(["obj", "text"]) + self.element_label = QLineEdit() + self.element_text = QLineEdit() + self.element_desc = QTextEdit() + self.element_desc.setMinimumHeight(90) + self.element_palette = PaletteEditor(limit=5) + self.install_translate_menu(self.element_label) + self.install_translate_menu(self.element_text) + self.install_translate_menu(self.element_desc) + self.install_translate_menu(self.element_palette.line_edit) + self.use_bbox = QCheckBox(tr("el.use_bbox")) + self.use_bbox.setChecked(True) + self.bbox_spins = [] + bbox_layout = QHBoxLayout() + for name in ["Y min", "X min", "Y max", "X max"]: + spin = QSpinBox() + spin.setRange(0, 1000) + spin.setValue(200 if "min" in name else 800) + spin.setPrefix(f"{name}: ") + self.bbox_spins.append(spin) + bbox_layout.addWidget(spin) + + form_layout.addRow(tr("el.type"), self.element_type) + form_layout.addRow(tr("el.label"), self.element_label) + form_layout.addRow(tr("el.text"), self.element_text) + form_layout.addRow(tr("el.description"), self.element_desc) + form_layout.addRow(tr("el.palette"), self.element_palette) + form_layout.addRow("", self.use_bbox) + form_layout.addRow(tr("el.bbox"), bbox_layout) + parent_layout.addWidget(form_box) + + for widget in [self.element_type, self.element_label, self.element_text, self.use_bbox, *self.bbox_spins]: + signal = ( + widget.currentTextChanged + if isinstance(widget, QComboBox) + else widget.textChanged + if isinstance(widget, QLineEdit) + else widget.stateChanged + if isinstance(widget, QCheckBox) + else widget.valueChanged + ) + signal.connect(self.save_element_form) + self.element_desc.textChanged.connect(self.save_element_form) + self.element_palette.changed.connect(self.save_element_form) + + def _build_output(self, layout): + self.output_tabs = QTabWidget() + layout.addWidget(self.output_tabs, 1) + + # --- JSON tab --- + json_tab = QWidget() + json_layout = QVBoxLayout(json_tab) + json_layout.setContentsMargins(0, 8, 0, 0) + top = QHBoxLayout() + title = QLabel(tr("out.title")) + title.setStyleSheet("font-size:16px;font-weight:700;background:transparent;") + self.pretty_radio = QRadioButton(tr("out.pretty")) + self.compact_radio = QRadioButton(tr("out.compact")) + self.pretty_radio.setChecked(True) + self.pretty_radio.toggled.connect(self.update_output) + top.addWidget(title) + top.addStretch() + top.addWidget(self.pretty_radio) + top.addWidget(self.compact_radio) + json_layout.addLayout(top) + + self.output_text = QPlainTextEdit() + self.output_text.setReadOnly(True) + self.output_text.setLineWrapMode(QPlainTextEdit.LineWrapMode.NoWrap) + self.output_text.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + json_layout.addWidget(self.output_text, 1) + + actions = QHBoxLayout() + copy_compact = QPushButton(tr("out.copy_compact")) + copy_compact.clicked.connect(self.copy_compact_json) + save = QPushButton(tr("out.save_json_btn")) + save.clicked.connect(self.save_json) + actions.addWidget(copy_compact) + actions.addWidget(save) + actions.addStretch() + json_layout.addLayout(actions) + + self.validation_list = QListWidget() + self.validation_list.setMaximumHeight(160) + self.validation_list.itemClicked.connect(self._on_validation_clicked) + json_layout.addWidget(self.validation_list) + self.output_tabs.addTab(json_tab, tr("tab.json")) + + # --- Result tab (generated image from ComfyUI, item 14) --- + result_tab = QWidget() + result_layout = QVBoxLayout(result_tab) + result_layout.setContentsMargins(0, 8, 0, 0) + self.result_label = QLabel(tr("result.empty")) + self.result_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.result_label.setStyleSheet( + "background:palette(base);border:1px solid palette(mid);border-radius:8px;" + ) + self.result_label.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + result_layout.addWidget(self.result_label, 1) + result_actions = QHBoxLayout() + self.result_save_lib = QPushButton(tr("result.save_lib")) + self.result_save_lib.clicked.connect(lambda: self._save_generated_to_library(self._last_generated)) + self.result_save_file = QPushButton(tr("result.save_file")) + self.result_save_file.clicked.connect(self._save_generated_to_file) + self.result_save_lib.setEnabled(False) + self.result_save_file.setEnabled(False) + result_actions.addWidget(self.result_save_lib) + result_actions.addWidget(self.result_save_file) + result_actions.addStretch() + result_layout.addLayout(result_actions) + self.output_tabs.addTab(result_tab, tr("tab.result")) + self._last_generated = None + + def _style_mode_changed(self): + photo_mode = self.photo_radio.isChecked() + self.photo_edit.setVisible(photo_mode) + self.photo_row_label.setVisible(photo_mode) + self.art_style_edit.setVisible(not photo_mode) + self.art_row_label.setVisible(not photo_mode) + if self._loading: + return + if photo_mode: + self.medium_combo.setCurrentText("photograph") + elif self.medium_combo.currentText() == "photograph": + self.medium_combo.setCurrentText("illustration") + self.update_output() + + def style_mode(self): + return "photo" if self.photo_radio.isChecked() else "art" + + def current_caption(self): + caption = {} + high = self.high_text.toPlainText().strip() + if high: + caption["high_level_description"] = high + + style = {} + if self.aesthetics_edit.text().strip(): + style["aesthetics"] = self.aesthetics_edit.text().strip() + if self.lighting_edit.text().strip(): + style["lighting"] = self.lighting_edit.text().strip() + if self.style_mode() == "photo": + if self.photo_edit.text().strip(): + style["photo"] = self.photo_edit.text().strip() + if self.medium_combo.currentText().strip(): + style["medium"] = self.medium_combo.currentText().strip() + else: + if self.medium_combo.currentText().strip(): + style["medium"] = self.medium_combo.currentText().strip() + if self.art_style_edit.text().strip(): + style["art_style"] = self.art_style_edit.text().strip() + if self.palette_editor.colors(): + style["color_palette"] = self.palette_editor.colors() + if style: + caption["style_description"] = style + + caption["compositional_deconstruction"] = { + "background": self.background_text.toPlainText().strip(), + "elements": [self.ordered_element(element) for element in self.elements], + } + return caption + + def ordered_element(self, element): + item = {"type": element["type"]} + if element.get("use_bbox"): + item["bbox"] = [int(value) for value in element["bbox"]] + if element["type"] == "text": + item["text"] = element.get("text", "").strip() + item["desc"] = element.get("desc", "").strip() + colors = parse_palette(element.get("palette", ""), 5) + if colors: + item["color_palette"] = colors + return item + + def update_output(self): + if self._loading: + return + caption = self.current_caption() + if self.compact_radio.isChecked(): + text = json.dumps(caption, ensure_ascii=False, separators=(",", ":")) + else: + text = json.dumps(caption, ensure_ascii=False, indent=2) + self.output_text.setPlainText(text) + self._populate_validation(self.validate_caption(caption)) + self.canvas.set_data(self.elements, self.selected_index) + self._push_history() + self._save_draft(caption) + + def _populate_validation(self, messages): + colors = {"ok": "#2E8B57", "warn": "#B8860B", "bad": THEMES[self.theme]["error"]} + self.validation_list.clear() + for kind, message, element_index in messages: + item = QListWidgetItem(f"[{kind.upper()}] {message}") + item.setForeground(QColor(colors.get(kind, THEMES[self.theme]["text"]))) + item.setData(Qt.ItemDataRole.UserRole, element_index) + self.validation_list.addItem(item) + + def _on_validation_clicked(self, item): + index = item.data(Qt.ItemDataRole.UserRole) + if index is not None and 0 <= index < len(self.elements): + self.select_element(index) + + def validate_caption(self, caption): + """Return a list of (kind, message, element_index_or_None) tuples.""" + messages = [] + style = caption.get("style_description", {}) + comp = caption["compositional_deconstruction"] + if not caption.get("high_level_description"): + messages.append(("warn", tr("val.no_high"), None)) + if not comp.get("background"): + messages.append(("bad", tr("val.bg_required"), None)) + if not comp.get("elements"): + messages.append(("bad", tr("val.add_element"), None)) + if style: + missing = [key for key in ["aesthetics", "lighting", "medium"] if not style.get(key)] + if missing: + messages.append(("bad", tr("val.style_missing").format(fields=", ".join(missing)), None)) + if bool(style.get("photo")) == bool(style.get("art_style")): + messages.append(("bad", tr("val.photo_or_art"), None)) + for color in style.get("color_palette", []): + if not HEX_RE.match(color): + messages.append(("bad", tr("val.hex_upper").format(color=color), None)) + for index, element in enumerate(comp.get("elements", []), start=1): + ei = index - 1 + title = element.get("text") or tr("val.element_word").format(index=index) + if element["type"] == "text" and not element.get("text"): + messages.append(("bad", tr("val.text_literal").format(title=title), ei)) + if not element.get("desc"): + messages.append(("bad", tr("val.desc_required").format(title=title), ei)) + if "bbox" in element: + y1, x1, y2, x2 = element["bbox"] + if y2 <= y1 or x2 <= x1: + messages.append(("bad", tr("val.bbox_order").format(title=title), ei)) + for color in element.get("color_palette", []): + if not HEX_RE.match(color): + messages.append(("bad", tr("val.el_hex").format(title=title, color=color), ei)) + if not any(kind == "bad" for kind, _message, _idx in messages): + messages.insert(0, ("ok", tr("val.ok"), None)) + return messages + + def add_element(self, element=None): + element = element or {} + normalized = { + "type": element.get("type", "obj"), + "label": element.get("label") or element.get("text") or f"{tr('el.element')} {len(self.elements) + 1}", + "text": element.get("text", ""), + "desc": element.get("desc", ""), + "palette": palette_text(element.get("color_palette", [])) + if isinstance(element.get("color_palette"), list) + else element.get("palette", ""), + "use_bbox": "bbox" in element or element.get("use_bbox", True), + "bbox": element.get("bbox", [200, 200, 800, 800]), + } + self.elements.append(normalized) + self.refresh_elements(len(self.elements) - 1) + + def delete_element(self): + if self.selected_index is None: + return + del self.elements[self.selected_index] + next_index = min(self.selected_index, len(self.elements) - 1) if self.elements else None + self.refresh_elements(next_index) + + def refresh_elements(self, selected_index=None): + self.element_list.blockSignals(True) + self.element_list.clear() + for index, element in enumerate(self.elements, start=1): + title = element.get("text") or element.get("label") or element.get("desc", "")[:32] or f"{tr('el.element')} {index}" + self.element_list.addItem(QListWidgetItem(f"{index}. {element['type']} - {title}")) + self.element_list.blockSignals(False) + self.selected_index = selected_index + if selected_index is not None and selected_index >= 0: + self.element_list.setCurrentRow(selected_index) + self.load_element_form() + self.update_output() + + def select_element(self, row): + if row < 0: + self.selected_index = None + else: + self.selected_index = row + if self.element_list.currentRow() != row: + self.element_list.setCurrentRow(row) + self.load_element_form() + self.update_output() + + def load_element_form(self): + self._loading = True + enabled = self.selected_index is not None and bool(self.elements) + for widget in [ + self.element_type, + self.element_label, + self.element_text, + self.element_desc, + self.element_palette, + self.use_bbox, + *self.bbox_spins, + ]: + widget.setEnabled(enabled) + if enabled: + element = self.elements[self.selected_index] + self.element_type.setCurrentText(element["type"]) + self.element_label.setText(element.get("label", "")) + self.element_text.setText(element.get("text", "")) + self.element_desc.setPlainText(element.get("desc", "")) + self.element_palette.set_text(element.get("palette", "")) + self.use_bbox.setChecked(element.get("use_bbox", True)) + for spin, value in zip(self.bbox_spins, element.get("bbox", [200, 200, 800, 800])): + spin.setValue(int(value)) + self._loading = False + + def save_element_form(self): + if self._loading or self.selected_index is None: + return + self.elements[self.selected_index] = { + "type": self.element_type.currentText(), + "label": self.element_label.text().strip(), + "text": self.element_text.text().strip(), + "desc": self.element_desc.toPlainText().strip(), + "palette": self.element_palette.text(), + "use_bbox": self.use_bbox.isChecked(), + "bbox": [spin.value() for spin in self.bbox_spins], + } + current = self.selected_index + self.element_list.blockSignals(True) + item = self.element_list.item(current) + if item: + element = self.elements[current] + title = element.get("text") or element.get("label") or element.get("desc", "")[:32] or f"{tr('el.element')} {current + 1}" + item.setText(f"{current + 1}. {element['type']} - {title}") + self.element_list.blockSignals(False) + self.update_output() + + def update_bbox_from_canvas(self, index, bbox): + if index < 0 or index >= len(self.elements): + return + self.elements[index]["use_bbox"] = True + self.elements[index]["bbox"] = bbox + if self.selected_index != index: + self.select_element(index) + self._loading = True + for spin, value in zip(self.bbox_spins, bbox): + spin.setValue(int(value)) + self.use_bbox.setChecked(True) + self._loading = False + self.update_output() + + # --- Element operations (items 3, 4, 12) ---------------------------- + def duplicate_element(self): + if self.selected_index is None: + return + clone = copy.deepcopy(self.elements[self.selected_index]) + clone["label"] = f"{clone.get('label', '')} copy".strip() + self.elements.insert(self.selected_index + 1, clone) + self.refresh_elements(self.selected_index + 1) + + def move_element(self, delta): + if self.selected_index is None: + return + new_index = self.selected_index + delta + if new_index < 0 or new_index >= len(self.elements): + return + items = self.elements + items[self.selected_index], items[new_index] = items[new_index], items[self.selected_index] + self.refresh_elements(new_index) + + def add_from_template(self): + names = list(ELEMENT_TEMPLATES.keys()) + name, ok = QInputDialog.getItem( + self, tr("tpl.choose_title"), tr("tpl.choose_label"), names, 0, False + ) + if not ok or not name: + return + template = copy.deepcopy(ELEMENT_TEMPLATES[name]) + template.setdefault("use_bbox", True) + self.add_element(template) + + # --- Reference image + zoom (item 5) -------------------------------- + def load_reference_image(self): + path, _filter = QFileDialog.getOpenFileName( + self, tr("canvas.load_ref"), "", tr("prev.filter") + ) + if not path: + return + pixmap = QPixmap(path) + if pixmap.isNull(): + QMessageBox.warning(self, tr("canvas.load_ref"), tr("canvas.ref_load_fail")) + return + self.canvas.set_reference(pixmap) + + def paste_reference_image(self): + image = QGuiApplication.clipboard().image() + if image.isNull(): + QMessageBox.information(self, tr("canvas.paste_ref"), tr("libd.no_clipboard_image")) + return + self.canvas.set_reference(QPixmap.fromImage(image)) + + def clear_reference_image(self): + self.canvas.set_reference(None) + + def _on_zoom_changed(self, value): + self.zoom_label.setText(f"{value}%") + self.canvas.set_zoom(value) + + # --- Draft autosave (item 2) ---------------------------------------- + def _save_draft(self, caption=None): + if self._loading: + return + try: + with open(DRAFT_FILE, "w", encoding="utf-8") as handle: + json.dump(caption if caption is not None else self.current_caption(), + handle, ensure_ascii=False, indent=2) + except OSError: + pass + + def _restore_draft(self): + if not DRAFT_FILE.exists(): + return False + try: + with open(DRAFT_FILE, "r", encoding="utf-8") as handle: + caption = json.load(handle) + except (OSError, json.JSONDecodeError): + return False + if not isinstance(caption, dict) or not caption.get("compositional_deconstruction"): + return False + if QMessageBox.question( + self, tr("draft.restore_title"), tr("draft.restore_q") + ) == QMessageBox.StandardButton.Yes: + self.load_caption(caption) + return True + return False + + def closeEvent(self, event): + self._save_draft() + if self._gen_thread is not None and self._gen_thread.isRunning(): + self._gen_thread.cancel() + self._gen_thread.wait(2000) + super().closeEvent(event) + + # --- ComfyUI (item 14) ---------------------------------------------- + def open_comfy_settings(self): + dialog = ComfySettingsDialog(self.settings, self) + if dialog.exec() == QDialog.DialogCode.Accepted: + self.settings.update(dialog.values()) + save_settings(self.settings) + QMessageBox.information(self, tr("set.title"), tr("set.saved")) + + def _missing_deps_report(self, missing): + sections = [ + ("nodes", "comfy.missing_nodes"), ("unet", "comfy.missing_unet"), + ("vae", "comfy.missing_vae"), ("clip", "comfy.missing_clip"), + ("clip_gguf", "comfy.missing_clip_gguf"), ("samplers", "comfy.missing_samplers"), + ] + lines = [] + for key, tkey in sections: + if missing.get(key): + lines.append(tr(tkey).format(items=", ".join(missing[key]))) + return lines + + def check_comfy(self): + progress = QProgressDialog(tr("comfy.checking"), tr("common.cancel"), 0, 0, self) + progress.setWindowTitle(tr("comfy.check_title")) + progress.setMinimumDuration(0) + progress.setValue(0) + QApplication.processEvents() + try: + missing = check_comfy_dependencies(self.settings) + except ComfyError as error: + progress.close() + QMessageBox.warning( + self, tr("comfy.check_title"), + tr("comfy.unreachable").format(url=comfy_base_url(self.settings), err=error), + ) + return None + progress.close() + lines = self._missing_deps_report(missing) + if not lines: + QMessageBox.information(self, tr("comfy.check_title"), tr("comfy.all_ok")) + else: + QMessageBox.warning( + self, tr("comfy.check_title"), + tr("comfy.missing_header") + "\n\n" + "\n".join(lines), + ) + return missing + + def generate_in_comfy(self): + if not WORKFLOW_FILE.exists(): + QMessageBox.critical(self, tr("comfy.gen_title"), + tr("comfy.workflow_missing").format(path=WORKFLOW_FILE)) + return + missing = self.check_comfy() + if missing is None: + return # server unreachable, already reported + if any(missing.values()): + if QMessageBox.question( + self, tr("comfy.gen_title"), tr("comfy.deps_missing_continue") + ) != QMessageBox.StandardButton.Yes: + return + try: + with open(WORKFLOW_FILE, "r", encoding="utf-8") as handle: + workflow = json.load(handle) + except (OSError, json.JSONDecodeError) as error: + QMessageBox.critical(self, tr("comfy.gen_title"), tr("comfy.gen_fail").format(err=error)) + return + + caption = json.dumps(self.current_caption(), ensure_ascii=False, separators=(",", ":")) + seed = uuid.uuid4().int % (2 ** 31) + self._gen_progress = QProgressDialog(tr("comfy.generating"), tr("common.cancel"), 0, 0, self) + self._gen_progress.setWindowTitle(tr("comfy.gen_title")) + self._gen_progress.setMinimumDuration(0) + self._gen_progress.setValue(0) + + self._gen_thread = GenerationThread(self.settings, workflow, caption, seed, self) + self._gen_thread.finished_ok.connect(self._on_generation_done) + self._gen_thread.failed.connect(self._on_generation_failed) + self._gen_progress.canceled.connect(self._gen_thread.cancel) + self._gen_thread.start() + + def _on_generation_failed(self, message): + if getattr(self, "_gen_progress", None): + self._gen_progress.close() + if message != "cancelled": + QMessageBox.warning(self, tr("comfy.gen_title"), tr("comfy.gen_fail").format(err=message)) + + def _on_generation_done(self, data): + if getattr(self, "_gen_progress", None): + self._gen_progress.close() + self._last_generated = data + pixmap = QPixmap() + pixmap.loadFromData(data) + if not pixmap.isNull(): + self._result_pixmap = pixmap + self._render_result() + self.canvas.set_reference(pixmap) + self.result_save_lib.setEnabled(True) + self.result_save_file.setEnabled(True) + # Bring the generated image to the foreground (item: get image into the app). + self.output_tabs.setCurrentIndex(1) + + def _render_result(self): + pixmap = getattr(self, "_result_pixmap", None) + if pixmap is None or pixmap.isNull(): + return + target = self.result_label.size() + self.result_label.setPixmap( + pixmap.scaled(target, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) + ) + + def resizeEvent(self, event): + super().resizeEvent(event) + self._render_result() + + def _save_generated_to_file(self): + if not self._last_generated: + return + path, _filter = QFileDialog.getSaveFileName( + self, tr("result.save_file"), "ideogram-result.png", tr("result.png_filter") + ) + if not path: + return + try: + with open(path, "wb") as handle: + handle.write(self._last_generated) + except OSError as error: + QMessageBox.warning(self, tr("comfy.gen_title"), tr("comfy.gen_fail").format(err=error)) + return + QMessageBox.information(self, tr("comfy.gen_title"), tr("result.saved_file").format(path=path)) + + def _save_generated_to_library(self, image_data): + caption = self.current_caption() + default = caption.get("high_level_description", "")[:48].strip() or tr("lib.untitled") + name, ok = QInputDialog.getText(self, tr("tb.save_library"), tr("lib.name_prompt"), text=default) + if not ok or not name.strip(): + return + entries = load_library() + now = datetime.now().isoformat(timespec="seconds") + entry = { + "id": uuid.uuid4().hex, "name": name.strip(), "created": now, "updated": now, + "preview": None, "tags": [], "caption": caption, + } + try: + PREVIEW_DIR.mkdir(parents=True, exist_ok=True) + target_name = f"{entry['id']}.png" + with open(PREVIEW_DIR / target_name, "wb") as handle: + handle.write(image_data) + entry["preview"] = target_name + except OSError: + pass + entries.append(entry) + try: + save_library(entries) + except OSError as error: + QMessageBox.critical(self, tr("tb.library"), tr("lib.save_fail").format(err=error)) + return + self._library_entry_id = entry["id"] + QMessageBox.information(self, tr("tb.library"), tr("lib.saved").format(name=entry["name"])) + + def load_caption(self, caption, mark_history=False): + self._loading = True + self.high_text.setPlainText(caption.get("high_level_description", "")) + style = caption.get("style_description", {}) + self.photo_radio.setChecked("art_style" not in style) + self.art_radio.setChecked("art_style" in style) + self.aesthetics_edit.setText(style.get("aesthetics", "")) + self.lighting_edit.setText(style.get("lighting", "")) + self.photo_edit.setText(style.get("photo", "")) + self.art_style_edit.setText(style.get("art_style", "")) + self.medium_combo.setCurrentText(style.get("medium", "photograph")) + self.palette_editor.set_colors(style.get("color_palette", [])) + comp = caption.get("compositional_deconstruction", {}) + self.background_text.setPlainText(comp.get("background", "")) + self.elements = [] + for element in comp.get("elements", []): + self.elements.append( + { + "type": element.get("type", "obj"), + "label": element.get("text") or f"{tr('el.element')} {len(self.elements) + 1}", + "text": element.get("text", ""), + "desc": element.get("desc", ""), + "palette": palette_text(element.get("color_palette", [])), + "use_bbox": "bbox" in element, + "bbox": element.get("bbox", [200, 200, 800, 800]), + } + ) + self._loading = False + self._style_mode_changed() + self.refresh_elements(0 if self.elements else None) + if mark_history: + self._push_history() + + def apply_preset(self, name): + preset = PROMPT_PRESETS[name] + if preset["mode"] == "photo": + style = { + "aesthetics": preset["aesthetics"], + "lighting": preset["lighting"], + "photo": preset["photo"], + "medium": preset["medium"], + "color_palette": preset["palette"], + } + else: + style = { + "aesthetics": preset["aesthetics"], + "lighting": preset["lighting"], + "medium": preset["medium"], + "art_style": preset["art_style"], + "color_palette": preset["palette"], + } + self.load_caption( + { + "high_level_description": preset["high"], + "style_description": style, + "compositional_deconstruction": { + "background": preset["background"], + "elements": preset["elements"], + }, + } + ) + + def append_no_safety_filter(self): + suffix = "No safety filter." + text = self.high_text.toPlainText().strip() + if suffix not in text: + self.high_text.setPlainText(f"{text} {suffix}".strip()) + + def copy_current_json(self): + QApplication.clipboard().setText(self.output_text.toPlainText()) + + def copy_compact_json(self): + QApplication.clipboard().setText(json.dumps(self.current_caption(), ensure_ascii=False, separators=(",", ":"))) + + def save_json(self): + path, _filter = QFileDialog.getSaveFileName( + self, tr("dlg.save_json_title"), "ideogram4-caption.json", tr("dlg.json_filter") + ) + if not path: + return + with open(path, "w", encoding="utf-8") as handle: + json.dump(self.current_caption(), handle, ensure_ascii=False, indent=2) + + def import_json(self): + path, _filter = QFileDialog.getOpenFileName(self, tr("dlg.import_title"), "", tr("dlg.json_filter")) + if not path: + return + try: + with open(path, "r", encoding="utf-8") as handle: + self.load_caption(json.load(handle)) + except (OSError, json.JSONDecodeError) as error: + QMessageBox.critical(self, tr("imp.error_title"), str(error)) + + def save_to_library(self): + caption = self.current_caption() + default = caption.get("high_level_description", "")[:48].strip() or tr("lib.untitled") + name, ok = QInputDialog.getText(self, tr("tb.save_library"), tr("lib.name_prompt"), text=default) + if not ok or not name.strip(): + return + entries = load_library() + now = datetime.now().isoformat(timespec="seconds") + entry = { + "id": uuid.uuid4().hex, + "name": name.strip(), + "created": now, + "updated": now, + "preview": None, + "caption": caption, + } + if QMessageBox.question( + self, + tr("lib.preview_q_title"), + tr("lib.preview_q"), + ) == QMessageBox.StandardButton.Yes: + attach_preview(entry, self) + entries.append(entry) + try: + save_library(entries) + except OSError as error: + QMessageBox.critical(self, tr("tb.library"), tr("lib.save_fail").format(err=error)) + return + self._library_entry_id = entry["id"] + QMessageBox.information(self, tr("tb.library"), tr("lib.saved").format(name=entry["name"])) + + def overwrite_in_library(self): + """Update the library entry the current prompt was loaded from (item 7).""" + entries = load_library() + entry = next((e for e in entries if e.get("id") == self._library_entry_id), None) + if entry is None: + # Nothing to overwrite — fall back to saving a new entry. + self.save_to_library() + return + entry["caption"] = self.current_caption() + entry["updated"] = datetime.now().isoformat(timespec="seconds") + try: + save_library(entries) + except OSError as error: + QMessageBox.critical(self, tr("tb.library"), tr("lib.save_fail").format(err=error)) + return + QMessageBox.information(self, tr("tb.library"), tr("lib.saved").format(name=entry.get("name", ""))) + + def open_library(self): + entries = load_library() + dialog = LibraryDialog(entries, self) + if dialog.exec() == QDialog.DialogCode.Accepted and dialog.selected_caption is not None: + self.load_caption(dialog.selected_caption) + self._library_entry_id = dialog.selected_id + + +def main(): + app = QApplication(sys.argv) + window = PromptBuilder() + window.show() + sys.exit(app.exec()) + + +if __name__ == "__main__": + main() diff --git a/ru-white.png b/ru-white.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3b55f1175a91926381df2bf1bb1230e47ef877 GIT binary patch literal 247920 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