# Ideogram 4 Local Execution in ComfyUI Multiple paths exist to generate with Ideogram 4. The simplest is the cloud API node (`IdeogramV4`), but it requires a `comfy.org` API key. For local execution without cloud dependency, use the native `Ideogram4Scheduler` + model files. ## Path A: Cloud API Node (Simplest, but requires key) **Node:** `IdeogramV4` **Location:** `comfy_api_nodes/nodes_ideogram.py` **Requires:** `COMFY_CLOUD_API_KEY` env var or login **Error without auth:** ``` Unauthorized: Please login first to use this node. ``` Works with structured JSON prompt (scene + style + background blocks). The easiest if you have the key. --- ## Path B: Local Native Pipeline (No API key, but 28 GB disk needed) **Recommended when:** No comfy.org auth available or prefer full local execution. ### Required Model Files | File | Size | Folder | Source | |---|---|---|---| | `ideogram4_fp8_scaled.safetensors` | ~8.6 GB | `models/diffusion_models/` | HuggingFace: `Comfy-Org/Ideogram-4` | | `ideogram4_unconditional_fp8_scaled.safetensors` | ~8.6 GB | `models/diffusion_models/` | HuggingFace: `Comfy-Org/Ideogram-4` | | `flux2-vae.safetensors` | ~320 MB | `models/vae/` | HuggingFace: `Comfy-Org/flux2-dev` | | `qwen3vl_8b_fp8_scaled.safetensors` | ~9.9 GB | `models/text_encoders/` | HuggingFace: `Comfy-Org/Qwen3-VL` | | `gemma4_e4b_it_fp8_scaled.safetensors` | ~5.4 GB (optional alt) | `models/text_encoders/` | HuggingFace: `Comfy-Org/gemma-4` | **Total: ~28 GB** ### Model Verification Recipe A file can have the correct size on disk but still fail to load with `SafetensorError: incomplete metadata`. This happens when a download is interrupted and resumed incorrectly, or when the file was copied incompletely. Use this Python script to verify any `.safetensors` file before trusting it: ```python import struct, json, os def verify_safetensors(path): """Check header metadata against actual file size.""" actual = os.path.getsize(path) f = open(path, 'rb') header_len = struct.unpack(" actual else 0, } # Example result = verify_safetensors("models/text_encoders/qwen3vl_8b_fp8_scaled.safetensors") print(result) # If ok=False, the file is corrupt and MUST be re-downloaded. ``` **Command line shortcut (in Container):** ```bash python3 -c " import struct, json, os; p='/opt/ComfyUI/models/text_encoders/qwen3vl_8b_fp8_scaled.safetensors' f=open(p,'rb'); h=struct.unpack('