FLUX2 Camera Rig π·
Fake photography settings that actually read like photography
- camera
- camera_summary
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_distancecovers 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.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | None | 7 options: None, Portrait, Product Photography, Landscape, Macro, Street Photography, +1 |
| angleopt | STRING | β | |
| angle_presetopt | COMBO | 7 options: , Eye level, High angle, Low angle, Bird's eye view, Worm's eye view, +1 | |
| distanceopt | COMBO | 8 options: , Extreme close-up, Close-up, Medium shot, Full shot, Wide shot, +2 | |
| custom_distanceopt | STRING | β | |
| lens_mmopt | INT | 00β400 | β |
| lens_descriptionopt | STRING | β | |
| f_numberopt | COMBO | 10 options: , f/1.4, f/1.8, f/2.0, f/2.8, f/4, +4 | |
| isoopt | INT | 00β6400 | β |
| depth_of_fieldopt | STRING | β | |
| depth_presetopt | COMBO | 6 options: , Very shallow (bokeh), Shallow, Moderate, Deep, Everything sharp | |
| focusopt | STRING | β | |
| override_presetopt | BOOLEAN | false | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera | FLUX2_CAMERA | β |
| camera_summary | STRING | β |