Kiko FLUX2 Prompt Builder
Your FLUX 2 prompt is a photo brief β build it visually
- json_prompt
- text_prompt
- prompt_only
If you've been writing FLUX 2 or Z-Image prompts as one long sentence, you're leaving the best part on the table. Both are LLM-encoded models - they want instructions with structure, not tag soup, and the community's single highest-leverage trick for photorealistic output is naming a physical camera: a Canon EOS 5D, a Hasselblad, an 85mm at f/1.8. Kiko FLUX2 Prompt Builder is a visual GUI that builds exactly that kind of structured, photography-brief-style prompt for you - camera settings, film stock, lighting, colors, composition - then hands you the JSON or the plain text.
The name is a bit of a lie in the other direction: it doesn't call FLUX 2's API, needs no key, downloads no model. It's a front-end form bolted onto a string formatter, and it works with Z-Image and anything else that accepts structured prompts (the author verified z-image personally).
How it works
The node is two halves. The first is a custom web UI (the web/kikoPromptBuilder.js extension) that gives you the pretty part: preset dropdowns, a camera/film-stock database, lighting and mood pickers, and hex color swatches. That UI serializes everything into one builder_payload string, which the backend merges in order - defaults, then payload, then your explicit inputs, then preset defaults - and finally emits three strings. No CLIP calls, no API, nothing to download; all the camera and film-stock data ships as JSON files inside the pack.
The inputs that matter
You'll actually touch a fraction of these. prompt is the only required one and the only one you must fill in yourself - "Main scene description" is your hook. The two you'll set next:
preset- 21 one-click starting points: intimate, boudoir, fashion, landscape, astro, macro, culinary, cinematic, product, automotive, and more.customkeeps whatever manual fields you've typed, so a preset is a starting skeleton, not a reset.- The
camera_*fields - angle, shot, lens, aperture, ISO, focus, andcamera_model(the film stock / camera body line). This is the good stuff. If you type85mminto the lens field,numeric_lens_format(on by default) turns it into a clean"lens-mm": 85in the JSON; flip it off and it stays a string.include_empty_fields(off by default) drops empty keys so your JSON doesn't look like a half-filled form.
Everything else - style, lighting, color_palette, color_mood, composition - fills the same kind of slot. The builder_payload field says "Managed by UI," so leave it alone.
The three outputs
json_prompt is the structured version, ready for FLUX 2's JSON prompt support or a Z-Image workflow. text_prompt is the same info flattened into prose - "Camera: eye level angle, medium close-up, 85mm lens, f/1.8. Shot on Canon EOS 5D Mark IVβ¦" - which is what you feed a standard CLIP Text Encode node. prompt_only is just the scene description, for when the rest is noise. For a normal ComfyUI setup, wire text_prompt into your text encoder and don't overthink it.
Install
Easiest route: ComfyUI Manager β search "Kiko FLUX2 Prompt Builder" β Install, then restart. Or the old-fashioned way:
cd ComfyUI/custom_nodes
git clone https://github.com/ComfyAssets/kiko-flux2-prompt-builder.git
# restart ComfyUI
There's also a ZIP download option. No dependencies, no models, nothing to configure - requirements.txt is genuinely empty of anything beyond ComfyUI's built-ins.
Where people get burned
- Old ComfyUI versions choke on JSON in the CLIP node. Pasting
json_promptstraight into a text encoder has only worked since ComfyUI gained the support - the author runsgit pull origin/masterand always stays on master. If pasting JSON silently fails, update ComfyUI first. - Camera models are flaky on FLUX 2 Dev. Community reports say lens and composition land fine on Dev, but naming specific bodies (Canon 1D, Hasselblad, Nikon D850) only really sticks in FLUX 2 Pro. If your film-stock line gets ignored, that's the model, not this node.
- JSON isn't magic. One honest thread skeptic called it "Word++ all over again," and the reasonable middle ground is that the model parses it as a structured text block, not data - a well-written paragraph does the same work. What the node actually buys you is a repeatable form and consistent structure, which is a real win when you're batch-testing camera settings. Just don't expect the brackets to do the prompting for you.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Main scene description | |
| presetopt | COMBO | custom | Load preset values; custom keeps your manual fields |
| styleopt | STRING | β | |
| camera_angleopt | STRING | β | |
| camera_shotopt | STRING | β | |
| camera_lensopt | STRING | β | |
| camera_apertureopt | STRING | β | |
| camera_isoopt | STRING | β | |
| camera_focusopt | STRING | β | |
| camera_modelopt | STRING | β | |
| lightingopt | STRING | β | |
| color_paletteopt | STRING | β | |
| color_moodopt | STRING | β | |
| compositionopt | STRING | β | |
| include_empty_fieldsopt | BOOLEAN | false | β |
| numeric_lens_formatopt | BOOLEAN | true | β |
| builder_payloadopt | STRING | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| json_prompt | STRING | β |
| text_prompt | STRING | β |
| prompt_only | STRING | β |