Nox Prompt Camera Master
One dropdown stack for shot, lens, and motion language
- camera_prompt
- framing_summary
- rigging_notes
- preset_status
Naming a physical camera is one of the highest-leverage phrases you can put in a prompt on modern models - the encoder was trained on real captions, so "85mm, medium close-up, low angle" does more work than "beautiful, detailed" ever did. Nox Prompt Camera Master is the pack's way of writing that language for you. Instead of remembering the difference between a dutch angle and a low angle, you pick shot_size, lens_angle, and camera_basic from dropdowns and it composes a camera prompt block, a framing summary, and rigging notes.
The README flags it as having an alias, NoxPromptCameraLanguage, for legacy graphs - if you have an old workflow with that node name, this is the same thing, so don't go hunting for a separate node. Its intended role in the pack is as the camera half of the "Camera Master + Lighting Master feed the Builder" pipeline.
How it works
Same machinery as the rest of the pack: curated dictionaries in constants.py for each dropdown, resolved into prompt fragments and summaries, assembled into the three outputs. shot_size, lens_angle, camera_basic, and camera_advanced cover framing; lens_focal and lens_type handle optics; motion_type, camera_motions, movement_beats, and camera_rig cover camera movement; time_of_day, color_tone, and visual_style tie into the look; and focus_subject / focus_environment keep the attention split under your control. There are safety-focused fields too - safety_considerations and rig_support - which the author clearly carries through every node in this pack.
Every dropdown has a Custom Input option that unlocks a *_custom field, and there are free-text slots (accent_keywords, camera_language, additional_notes) for the stuff vocabulary can't say.
Inputs and outputs that matter
The three required fields are shot_size, lens_angle, and camera_basic - set those three and you already have a credible camera prompt. lens_focal is the one I'd add next; on sentence-based models it's cheap and effective. Outputs: camera_prompt (the text to encode), framing_summary (what the framing actually is, in plain English), rigging_notes (the technical notes you'd give a crew - keep these out of the encode and in your production doc), and preset_status. The camera_prompt is what you feed into Nox Prompt Builder's camera_prompt input or into Pipeline Combiner.
Installing it
Whole pack, one install. ComfyUI Manager: search "Nox Prompter", install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/jamesk9526/NoxPrompter-ComfyUI-CustomNode
Restart, find the NoxPrompter category. Pure Python, no extra dependencies.
Gotchas
The README's clone URL and folder name are stale (ComfyNoxPrompter); the repo is the one above. Presets land in presets/ inside the pack folder, so watch write permissions. And a real caveat about how this reads: camera language is at its most powerful on LLM-encoded models like Wan 2.2 and Flux-style encoders - on SDXL-lineage checkpoints the same phrases still help, but they compete with booru-tag vocabulary, so keep the camera clause compact and don't bury your subject tags under it.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| shot_size | COMBO | Medium Shot | 22 options: None, Close-up, Medium Close-up, Medium Shot, Medium Long Shot, Long Shot, +16 |
| lens_angle | COMBO | Three-Quarter | 21 options: None, Over-the-shoulder, High Angle, Low Angle, Tilted Angle, Aerial Shot, +15 |
| camera_basic | COMBO | Dolly In | 25 options: None, Dolly In, Push-in, Pull-out, Pan Right, Pan Left, +19 |
| lens_focalopt | COMBO | Medium | 19 options: None, Medium, Wide Angle, Long, Telephoto, Fisheye, +13 |
| lens_typeopt | COMBO | Single Shot | 20 options: None, Single Shot, Two Shot, Three Shot, Group Shot, Establishing Shot, +14 |
| compositionopt | COMBO | Balanced | 21 options: None, Centered, Balanced, Right-weighted, Left-weighted, Symmetrical, +15 |
| time_of_dayopt | COMBO | None | 25 options: None, Daytime, Nighttime, Dusk, Sunset, Dawn, +19 |
| motion_typeopt | COMBO | None | 29 options: None, Running, Skateboarding, Soccer, Tennis, Ping Pong, +23 |
| camera_advancedopt | COMBO | Steadicam Glide | 33 options: None, Handheld, Compound, Following, Orbit, Steadicam Glide, +27 |
| camera_rigopt | COMBO | Cinematic | 12 options: None, Cinematic, Noir, Documentary, Hyperreal, Dreamscape, +6 |
| special_effectopt | COMBO | None | 21 options: None, Tilt-shift, Time-lapse, Light Trails, Chromatic Bloom, Particle Swarm, +15 |
| color_toneopt | COMBO | None | 19 options: None, Warm Tone, Cool Tone, High Saturation, Low Saturation, Pastel Tone, +13 |
| visual_styleopt | COMBO | None | 35 options: None, Felt Style, 3D Cartoon, Pixel Art, Puppet Animation, 3D Game, +29 |
| focus_subjectopt | STRING | — | |
| focus_environmentopt | STRING | — | |
| movement_beatsopt | STRING | — | |
| camera_motionsopt | STRING | — | |
| accent_keywordsopt | STRING | — | |
| camera_languageopt | STRING | — | |
| rig_supportopt | STRING | stabilized gimbal team | — |
| safety_considerationsopt | STRING | confirm clearance paths and harness checks | — |
| additional_notesopt | STRING | — | |
| shot_size_customopt | STRING | — | |
| lens_angle_customopt | STRING | — | |
| camera_basic_customopt | STRING | — | |
| lens_focal_customopt | STRING | — | |
| lens_type_customopt | STRING | — | |
| composition_customopt | STRING | — | |
| time_of_day_customopt | STRING | — | |
| motion_type_customopt | STRING | — | |
| camera_advanced_customopt | STRING | — | |
| camera_rig_customopt | STRING | — | |
| special_effect_customopt | STRING | — | |
| color_tone_customopt | STRING | — | |
| visual_style_customopt | STRING | — | |
| preset_actionopt | COMBO | none | 4 options: none, save, load, list |
| preset_nameopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| camera_prompt | STRING | — |
| framing_summary | STRING | — |
| rigging_notes | STRING | — |
| preset_status | STRING | — |