Nodes/ruben-bilbox-comfyui/Ruben-BilboX PromptGeek Photo Prompt
ComfyUI Node

Ruben-BilboX PromptGeek Photo Prompt

Pick the Camera, Film Stock, and Photographer — Then Watch the Prompt Build Itself

By RubenAlba95·Created about a year ago·Updated 12 months ago· 9
Ruben-BilboX PromptGeek Photo Prompt
    • full_composed_prompt
    • subject_only
    style
    subject
    framing
    setting_background
    lighting
    camera_angle
    camera_properties
    film_types
    lenses
    filters_effects
    photographers
    preview
    log_promptNo

    Most photorealistic prompts are a wish list that starts with "photo of" and then you type from memory. This node is the antidote: it hands you the vocabulary a photographer actually uses - film stocks, camera bodies, lighting names, 38 photographers - as dropdowns whose tooltips show a sample photo before you commit. Its data comes from PromptGeek's Creating Photorealistic Images With AI book, and the point is that you don't need to know what "chiaroscuro" means in a prompt; the node shows you.

    There's a backstory worth knowing. The original was BilboX's "photographers helper node," posted to r/comfyui in early 2024 and then abandoned. Its main draw - live style previews - broke as ComfyUI's UI evolved. RubenAlba95 (Rubendarr on Reddit) forked it in April 2025, fixed the preview, and this is that fork. So you're getting a node whose entire reason to exist is the part that had rotted.

    How it actually works (spoiler: not in Python)

    Here's the honest mechanism, because the README doesn't spell it out: the node composes the prompt in your browser, not on the backend. The Python class is basically a passthrough - it loads a JSON of options to populate the dropdowns, then returns whatever's sitting in the preview widget. The real work happens in the pack's frontend extension, which watches the node, stitches your picks into the PromptGeek template, and writes the result into a read-only preview widget. That preview string is what comes out as full_composed_prompt.

    The template, from the source: [style] photo of [subject], [framing], [setting_background], [lighting], [camera_angle], [camera_properties], [film_types], [lenses], [filters_effects], in the style of [photographer]. Note the subject placeholder tells you the expected shape: [SUBJECT], [IMPORTANT FEATURE], [MORE DETAILS], [POSE OR ACTION] - you type "a woman in a red coat, freckles, walking through rain," and the dropdowns do the rest.

    The inputs and outputs that matter

    You set exactly two things by hand and pick the rest from menus:

    • subject - the only free-text field that's truly yours. This is the heart of the prompt; everything else is garnish.
    • preview - auto-filled and read-only once the frontend is working. Don't fight it.
    • style, framing, lighting, camera_angle, camera_properties, film_types, lenses, filters_effects, photographers - curated dropdowns, roughly 4 to 39 options each. Hover a choice to see an example image and a description.
    • log_prompt - flip to "Yes" and the composed prompt prints to your console. Useful when you're checking what got wired where.

    Outputs: full_composed_prompt (STRING) is the finished positive prompt - wire it straight into a CLIP Text Encode. subject_only (STRING) is just your subject text, handy if you want to feed the subject to a separate node like an IPAdapter or a second encode without re-typing it.

    Install

    It's in the ComfyUI registry, so the easy route is ComfyUI Manager → search "ruben-bilbox-comfyui". Otherwise:

    cd ComfyUI/custom_nodes
    git clone https://github.com/RubenAlba95/ruben-bilbox-comfyui.git
    

    Then restart ComfyUI. No model files to download. The pack's requirements (colour-science, numpy, imageio, opencv-python) exist for the post-processing nodes that share the pack - the photo prompt node itself is dependency-light, since all its magic lives in the browser. Manager should pull the deps for you; a manual clone may need a pip install -r requirements.txt for the LUT/vignette nodes, not for this one.

    Where people get burned

    Because composition is browser-side, everything hinges on the frontend extension loading. If preview stays empty, your full_composed_prompt output is empty - that's the classic failure, and it's the exact bug this fork was made to fix. Restart ComfyUI, hard-refresh the browser (Ctrl+Shift+R - cached JS is the usual suspect), and check the browser console for errors.

    A couple more from the community thread where the author launched this: Manager's "install from GitHub" occasionally failed to clone for people - use the registry install or the manual clone instead. And one cloud-host user (mimicPC) never got the node to appear at all, which fits - a node that ships a web directory is more fragile on hosted ComfyUI than on your own box.

    One thing to know about the pack generally: its __init__.py registers a server endpoint that can shut down or restart the machine. That's a bizarre bonus feature - fine on your localhost, but don't install this on a server you don't fully trust.

    My take: this is aimed at the SDXL-era comma-block style of prompting, which is exactly the dialect that still works there. Camera names and film stocks are high-leverage on LLM-encoder models like Flux and Z-Image too, so the vocabulary isn't wasted on newer checkpoints. It's a niche tool and 100% optional - but if you're stuck typing the same "shot on ..." boilerplate by hand, it earns its keep.

    CategoryBilboX

    Inputs (13)

    NameTypeDefaultDescription
    styleCOMBO19 options: , abstract, analogue, beauty, candid, documentary photography, +13
    subjectSTRING
    framingCOMBO5 options: , close up on face, full body, head shot, upper body
    setting_backgroundSTRING
    lightingCOMBO21 options: , bounced lighting, candlelight, chiaroscuro, cinematic lighting, soft diffused lighting, +15
    camera_angleCOMBO5 options: , dutch angle, from above/high angle, from below/low angle, eye level
    camera_propertiesCOMBO21 options: , Aaton LTR, ARRI ALEXA 65, Bolex H16, RED Digital Cinema Camera, Canon EOS 5D, +15
    film_typesCOMBO13 options: , Agfa Vista, Cinestill 800T, Ektar 100, film grain, Ilford HP5 Plus, +7
    lensesCOMBO4 options: , 50mm, 8mm Fisheye Lens, Voigtländer Nokton 50mm f1.1
    filters_effectsCOMBO20 options: , black and white, color filter, bokeh, desaturated, grunge filter, +14
    photographersCOMBO39 options: , Alberto Seveso, Alex Timmermans, Alfred Stieglitz, Ando Fuchs, Anne Brigman, +33
    previewSTRING
    log_promptCOMBONo2 options: No, Yes

    Outputs (2)

    NameTypeDescription
    full_composed_promptSTRING
    subject_onlySTRING