Camera & Lens Prompt
Why naming the actual glass beats 'cinematic, 8k, masterpiece'
- prompt
- technical_data_str
What it is
A prompt builder. You pick a camera body, a lens series, a focal length, an aperture, a shutter angle and an ISO from dropdowns full of real equipment names, and it assembles a correctly-worded prompt plus a plain-text technical report. It does not touch images and it does not sample anything.
The idea is that the gear is the anchor. The KB's photorealism material is unambiguous on this: on modern LLM-encoder models, "name a physical camera, not a mood" is described as the whole trick - the encoder actually knows the gear, and a specific equipment spec does more work than any combination of realism adjectives. The same source is equally clear that the classic quality boosters are now measurably inert: a 400-generation A/B test on Z-Image Turbo found "realistic/candid/amateur" combinations and standard prompt spam were indistinguishable from nothing. Spend the tokens on the camera instead.
That's the entire case for this node. It's a lookup table of real cameras and lenses wrapped around a sentence template, and the reason it's useful is that most people can't name a real lens off the top of their head but can pick one from a list.
What's in the lists
20 camera bodies, mostly ARRI and RED with Blackmagic, Panavision and a 15/70mm IMAX rig thrown in - Alexa 35, Alexa Mini LF, RED Gemini 5K, URSA Mini Pro 12K, Panavision DXL2. 18 lens series, from ARRI Master Anamorphic and Master Primes to Cooke Anamorphic/i, Leica Summilux-C and vintage Canon K-35s. 22 focal lengths from an 8mm fisheye to a 300mm super tele. 12 apertures from T0.95 to T22. Seven shutter angles - 180° standard, 45° for the Saving Private Ryan look, 360° for maximum blur, plus the flicker-free 172.8° and 144° for 50Hz and 60Hz territories. Nine ISOs from 50 to 12800.
How the prompt is assembled
Each widget has a job and a placement. base_prompt opens the sentence (after the shot type, if set) and gets a closing full stop if it lacks one. camera is written as "Shot on <camera>", lens_series as "using <lens>", focal_length as "at <N>mm" with its descriptive word dropped - you get "35mm", not "35mm Classic". shot_type prefixes the whole thing as "<shot type> of <base prompt>", and camera_movement becomes its own sentence after the subject.
aperture, shutter and iso are always included - they're the depth-of-field, motion-blur and grain cues, and they have no None option. The others do, so you can go as minimal as "prompt + aperture + shutter + ISO" and skip the gear entirely if a LoRA is already carrying the look.
Outputs
prompt is the string you wire into your CLIP or text-encode node. technical_data_str is a plain-text report - including the chosen camera's sensor - for your own reference or a note node. Nothing else, and nothing that touches pixels.
Where it fits
It's most useful on models with real language understanding: Flux 2 Klein, Z-Image, Qwen-Edit and similar, where a full sentence about a Cooke S7/i at T2.8 is parsed rather than pattern-matched. On an SD 1.5 clip-encoder setup you'll get less for your trouble - there, the keyword-trigger era advice still applies.
Pair it with the deterministic lens artefacts elsewhere in this pack and you've built a coherent look pipeline: name the glass in the prompt, then add the aberration, streaks and grain that real glass produces. Prompting the optics and faking the optics is a stronger combination than either alone, and it's the most defensible reason to have a text-only node sitting in a VFX pack.
Install
ComfyUI Manager → search Radiance → install → restart → refresh the browser. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt
Windows portable users: use ComfyUI's bundled python_embeded\python.exe for pip. No models, no configuration - the camera and lens tables are plain Python in the pack.
Gotchas
- It doesn't generate anything. A green run produces a string. If your graph doesn't feed it to an encoder, nothing happens.
- T-stop is not f-stop. The aperture values are T-stops, which is correct for cine glass and will be understood as a depth-of-field cue by the model. If you're mixing in a
f/1.8phrase from a photography prompt elsewhere, you're saying it twice. - Focal-length descriptors get dropped. Picking "50mm Standard" writes "at 50mm". That's intentional; it avoids fighting the camera/lens names.
- Piling on the gear doesn't beat one coherent choice. A camera, one lens series and a sensible focal length reads like a shot list. Every field filled plus a paragraph of style words reads like a spec sheet, and models respond less well to those.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| base_prompt | STRING | A cinematic shot of... | Subject and scene description. It opens the prompt (after the shot type, if set) and gets a closing full stop if it has none. |
| camera | COMBO | ARRI Alexa 35 | Camera body named in the prompt as 'Shot on <camera>'; its sensor is listed in the technical report. Text only, no image processing. None omits it. |
| lens_series | COMBO | ARRI Master Anamorphic | Lens set named in the prompt as 'using <lens>'. None omits it. |
| focal_length | COMBO | 50mm Standard | Focal length added as 'at <N>mm' (the descriptive word is dropped). Variable / Zoom omits it. |
| aperture | COMBO | T2.0 (Cinematic Separation) | T-stop written into the prompt as 'aperture T<N>', a depth-of-field cue for the model. Always included. |
| shutter | COMBO | 180° (Standard Motion - 1/48s) | Shutter angle written as 'shutter <angle>°', a motion-blur cue for the model. Always included. |
| iso | COMBO | 800 ISO (Native Digital) | ISO written as 'ISO <N>', a noise and grain cue for the model. Always included. |
| shot_typeopt | COMBO | Medium Shot | Framing prefixed to the prompt as '<shot type> of <base prompt>'. None omits it. |
| camera_movementopt | COMBO | None | Camera move added as its own sentence after the subject. None omits it. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| technical_data_str | STRING | — |