Nodes/ComfyUI-FLUX2-JSON/FLUX2 Camera Rig πŸ“·
ComfyUI Node

FLUX2 Camera Rig πŸ“·

Fake photography settings that actually read like photography

By MushroomFleetΒ·Created 9 months agoΒ·Updated 5 months agoΒ· 27
FLUX2 Camera Rig πŸ“·
    • camera
    • camera_summary
    β—„presetNoneβ–Ί
    β—„angleβ–Ί
    β—„angle_presetβ–Ί
    β—„distanceβ–Ί
    β—„custom_distanceβ–Ί
    β—„lens_mm0β–Ί
    β—„lens_descriptionβ–Ί
    β—„f_numberβ–Ί
    β—„iso0β–Ί
    β—„depth_of_fieldβ–Ί
    β—„depth_presetβ–Ί
    β—„focusβ–Ί
    β—„override_presetfalseβ–Ί

    If "photorealistic" is your goal, the difference between "a camera shot it" and "an image that looks camera-shot" usually comes down to concrete numbers: an 85mm lens, f/2.0, ISO 200, shallow depth of field. FLUX2_CameraRig turns that pile of photography vocabulary into a single structured camera object that lands in your FLUX.2 JSON prompt - and because FLUX.2's encoder is an LLM, it actually reads those settings like a photographer's brief instead of lumping them into a tag soup.

    It's one of the eight nodes in ComfyUI-FLUX2-JSON (MushroomFleet's "FLUX2 Prompt Builder"). It's the most mechanical-feeling node in the suite, which is a good thing: cameras have real parameters, and this node makes you pick them.

    Start with a preset, then break it

    The required input is preset, defaulting to None. The six presets are straight out of a photography textbook (values straight from the pack source):

    • Portrait - 85mm, f/2.0, shallow DOF, eye level
    • Product Photography - 85mm, f/5.6, moderate DOF, slight overhead
    • Landscape - 24mm, f/11, deep DOF, wide shot
    • Macro - 100mm, f/2.8, very shallow DOF, extreme close-up
    • Street Photography - 35mm, f/5.6, moderate DOF, eye level
    • Wide Angle - 16mm, f/8, deep DOF, expansive

    The override_preset toggle is where people get confused, so read this twice: when it's False (default), the preset fills in the defaults and any individual field you set overrides that one field - so pick "Portrait," then bump lens_mm to 50 and you get a preset with a 50mm lens. When it's True, the preset is ignored entirely and only your manual values count. The README's troubleshooting entry says it plainly: "Camera preset not applying? Make sure override_preset is False." You don't need the toggle unless you're deliberately starting from scratch.

    The knobs that matter most for a beginner:

    • lens_mm (0–400 slider) - focal length. The README's lens guide is the cheat sheet: 16–24mm ultra-wide, 35–50mm natural, 85–135mm flattering portraits, 200mm+ telephoto compression. Leave at 0 and the preset's lens stands.
    • f_number (dropdown f/1.4 β†’ f/16) - aperture. f/1.4–2.0 for bokeh, f/2.8–5.6 for products, f/8–16 for landscapes.
    • iso (0–6400 slider) - sensitivity; higher means more grain. The README's photorealism formula is 35–85mm + f/2.8–8 + ISO 100–400.
    • angle_preset / depth_preset - dropdowns (eye level, high angle, bird's eye; very shallow through everything sharp) that spare you typing the same five words repeatedly.
    • distance - framing from extreme close-up to extreme wide; custom_distance covers the gaps when you set distance to "Custom."

    The camera object it builds uses the keys angle, distance, lens, lens-mm, f-number, ISO, depth_of_field, and focus - note the odd capitalization (ISO, lens-mm, f-number) is intentional, straight from the preset definitions, and it's what lands in your JSON.

    Two outputs: camera (type FLUX2_CAMERA, into PromptAssembler's camera input) and camera_summary (a STRING listing the settings, useful to eyeball before you render).

    Install and gotchas

    Install once for the whole pack - Manager, search "FLUX2 Prompt Builder," or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/MushroomFleet/ComfyUI-FLUX2-JSON.git
    

    No models, no deps, stdlib only. It's under FLUX2_Prompt_Builder/Camera.

    The realistic gotcha: none of this does anything if your actual sampler workflow isn't a FLUX.2 model - the JSON is a prompt for FLUX.2's VLM encoder, not a set of parameters ComfyUI applies to the sampler. Also, don't set everything manually and then wonder why the preset isn't showing up - check override_preset, it's the first thing that bites.

    CategoryFLUX2_Prompt_Builder/Camera

    Inputs (13)

    NameTypeDefaultDescription
    presetCOMBONone7 options: None, Portrait, Product Photography, Landscape, Macro, Street Photography, +1
    angleoptSTRINGβ€”
    angle_presetoptCOMBO7 options: , Eye level, High angle, Low angle, Bird's eye view, Worm's eye view, +1
    distanceoptCOMBO8 options: , Extreme close-up, Close-up, Medium shot, Full shot, Wide shot, +2
    custom_distanceoptSTRINGβ€”
    lens_mmoptINT00–400β€”
    lens_descriptionoptSTRINGβ€”
    f_numberoptCOMBO10 options: , f/1.4, f/1.8, f/2.0, f/2.8, f/4, +4
    isooptINT00–6400β€”
    depth_of_fieldoptSTRINGβ€”
    depth_presetoptCOMBO6 options: , Very shallow (bokeh), Shallow, Moderate, Deep, Everything sharp
    focusoptSTRINGβ€”
    override_presetoptBOOLEANfalseβ€”

    Outputs (2)

    NameTypeDescription
    cameraFLUX2_CAMERAβ€”
    camera_summarySTRINGβ€”