Magic Photo Prompter 🪄
A photoreal prompt builder that makes you sound like a photographer
- STRING
The Magic Photo Prompter is the rare custom node that does one thing, does it locally, and asks for nothing but a dropdown click. You pick a camera, a composition, a time of day, a color grade, a lighting setup, and an environment - six dropdowns total - and it hands back a finished positive prompt you can wire straight into a CLIP Text Encode. No API key, no model download, no Python dependency beyond what ComfyUI already has. It's the second half of the ComfyUI-Merlin pack, sitting next to the Gemini Prompt Expander, but where that node talks to Google, this one is pure offline glue.
Why you'd reach for it: the photorealism playbook has basically converged on "describe the scene the way a photographer would" - name the actual camera body, the lighting rig, the time of day. That advice shows up everywhere, from the old SDXL lazy guides to the 2026 Z-Image writeups, and it's the highest-leverage thing you can type. The Magic Photo Prompter just turns that advice into menus so you stop misspelling "chiaroscuro" and start churning out consistent looks. It's not a magic bullet for realism - the checkpoint and sampler do that work - but it removes the "which words do photoreal people use" tax from every prompt.
How it works
The trick is that every dropdown value is a canned phrase. The node loads them from a magic_options.json file that ships in the pack, so "Canon AE-1" becomes "shot on Canon AE-1", "Golden Hour" becomes "during the golden hour", "Bleach Bypass" becomes "with gritty bleach bypass look". When you hit run it collects your selections, drops the ones set to "None", joins the survivors with ". ", and prepends "Photograph of " to the whole thing. So you end up with a prompt shaped like:
Photograph of a woman reading by a window. intriguing asymmetrical composition.
in the glamorous Roaring Twenties. in the still pre-dawn hours.
with flattering, wraparound light for portraits. shot on Canon AE-1.
with warm color grading
That "Photograph of" prefix is baked in, which is the node's personality: it's aimed at photoreal work, full stop. Feed this into an anime checkpoint and the tone clash is your problem, not the node's.
The inputs and outputs that matter
Every input is optional, and there are only seven of them, so there's nothing to get lost in. The one you'll actually type in is prompt (a plain multiline text box) - your subject and scene. The six dropdowns are camera (52 choices, real bodies like the Canon EOS R5 up to a Yashica Mat), composition_shot (51), time_of_day (31), color_grading (33), lighting (31), and environment (51). Each defaults to "None", which just means "skip this part". The single output is a STRING - the assembled prompt - and it goes into a CLIP Text Encode's positive input, then into your sampler. That's the whole data flow.
The ordering is worth knowing: the node concatenates in a fixed order (your prompt, composition, environment, time of day, lighting, camera, color grading), and earlier tokens carry more attention on CLIP-based encoders. Your subject sits first, which is exactly where you want it.
Installing it
Same drill as any custom node - this is a two-node pack, and the install is shared. Easiest is ComfyUI Manager: search for "ComfyUI-Merlin" and hit install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/Xclbr7/ComfyUI-Merlin.git
Then restart ComfyUI. That's the whole install - no requirements.txt, no weights to chase, no model files. The only moving part is magic_options.json, which is a dependency in the same way a recipe is.
Gotchas
The biggest one is that the dropdowns are baked in when the node is created. If you edit magic_options.json to add your own camera or environment, you have to delete the node from the graph and add it again (or restart ComfyUI) before the new choices show up. Not a restart-everything thing, just a re-add.
Second: because it only ever produces "Photograph of …" text, don't expect it to help with stylized or anime outputs. And there's no negative prompt side here - this node builds positives only, which is fine, since the current guidance-distilled models barely read negatives anyway. For a genuinely tiny utility node, it earns its place by making the single most effective photoreal phrase - naming the camera - a one-click choice.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| promptopt | STRING | — | |
| cameraopt | COMBO | 52 options: None, Canon AE-1, Canon EOS 5D Mark IV, Canon EOS R10, Canon EOS R3, Canon EOS R5, +46 | |
| composition_shotopt | COMBO | 51 options: None, Asymmetry, Balance, Bird's Eye View, Bokeh, Centered Composition, +45 | |
| time_of_dayopt | COMBO | 31 options: None, Pre-Dawn, First Light, Astronomical Twilight, Nautical Twilight, Civil Twilight, +25 | |
| color_gradingopt | COMBO | 33 options: None, Analogous Colors, Black and White, Bleach Bypass, Cinematic Teal and Orange, Complementary Colors, +27 | |
| lightingopt | COMBO | 31 options: None, Backlight, Beauty Dish, Blue Hour, Bounce Flash, Broad Lighting, +25 | |
| environmentopt | COMBO | 51 options: None, 1920s Art Deco, 1950s Retro, Abandoned Amusement Park, Alien Planet, Ancient Egypt, +45 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |