๐ท Wangz Camera Prompt Studio
Your whole camera grammar in one node โ zero models, zero API keys, just prompt glue
- prompt
Wangz Camera Prompt Studio does exactly what its name promises: it turns the fiddly business of typing "right side, extreme low-angle, wide shot, 28mm lens, shallow depth of field, film grain, golden hour" into seven dropdowns and one text box. The name is also a small lie you'll love - it calls no API, loads no model, and needs no key. It's a prompt assembly node: pure string glue. That's the best kind of ComfyUI tool, because it can't OOM your machine and can't corrupt a latent.
Why you'd reach for it: camera and lens language is the single highest-leverage thing you can put in a modern prompt, and block-structured prompts beat a comma soup on the LLM-encoded models (Flux Klein, Z-Image, that whole family) that dominate local generation now. This node is basically a UI for that block structure - the angle, the camera spec, the subject, and the mood each stay a separate, reusable chunk instead of one uneditable wall of text. The author's README frames it as merging two nodes you'd otherwise chain - Qwen Multiangle Camera plus CR Prompt Text - into one clean box with no spaghetti wires.
How it works
Under the hood it's boring in the best way: a single function reads the dropdowns, builds five blocks, and joins them. The order is fixed - angle block, then camera spec (lens + depth of field + film filter), then your base_prompt, then the mood - separated by whatever separator you pick (comma, newline, or comma+newline), with tail_params stuck on the very end. Any dropdown set to none is dropped entirely, so you're not paying tokens for a filter you didn't want. The output is a single STRING named prompt, and you can wire it into a CLIP Text Encode, into an LLM-encoded model's prompt input, or just read it off the node and paste it somewhere else.
The inputs that actually matter
horizontal_angle,vertical_angle,shot_distance- these three build the angle block ("front-right quarter slightly high-angle close-up"). The defaults are sane; you'll mostly be twiddlingvertical_angleandshot_distance.base_prompt- your actual subject ("Japanese Gothic-style ribbon-decorated maid girl" by default). This is where the real content lives.tail_params- defaults to--ar 16:9 --v 6.0, which is Midjourney syntax. Great if you're pasting into Midjourney. See the gotcha below if you're not.external_angle_prompt(optional) - if you connect Qwen Multiangle Camera'spromptoutput here, its angle text completely replaces the dropdown angle block. Handy when you want a 3D-angle node driving the shot while this node still handles lens, mood, and assembly.
Install
ComfyUI Manager โ "Install via Git URL" โ paste https://github.com/wjs0502m-design/Wangz_camera_prompt_studio, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/wjs0502m-design/Wangz_camera_prompt_studio
Then restart ComfyUI and search "Camera Prompt Studio" or "๐ท" (it's under category Wangz/camera). There's no requirements.txt and no model download - the whole thing is stdlib Python, so install takes about three seconds.
Where people get burned
- The
<sks>prefix is on by default.include_angle_prefixprepends<sks>to every angle block. That token only means something if you're using a LoRA/embedding trained with<sks>as its trigger word. If you aren't, it's dead text burning tokens at the LLM attention cap - flip it off. - Those Midjourney flags will bite you in ComfyUI. Feed
--ar 16:9 --v 6.0into a ComfyUI prompt encoder and you're literally prompting the word "--ar". Emptytail_paramsfor ComfyUI-internal use. - The prefix is silently skipped on the external path. In the source,
include_angle_prefixonly applies to the dropdown branch - connectexternal_angle_promptand the<sks>you thought you'd set never gets added. It's not a bug, just easy to miss. - Don't blank the subject. With an empty
base_promptand everything atnone, this node happily emits a near-empty string. Keep at least your subject in there.
This is a natural-language composer, so it shines on LLM-encoded models and Midjourney-style destinations. If your whole stack is Pony or Illustrious danbooru tags, it'll still work - "name a physical piece of equipment" lands on CLIP models too - but it's a different dialect than you're used to. For everything else, this is the one clean node for shot grammar.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| horizontal_angle | COMBO | front-right quarter | 8 options: front, front-right quarter, right side, rear-right quarter, rear, rear-left quarter, +2 |
| vertical_angle | COMBO | slightly high-angle | 6 options: extreme low-angle, low-angle, eye-level, slightly high-angle, high-angle, bird's eye view |
| shot_distance | COMBO | close-up | 8 options: extreme close-up, close-up, medium close-up, medium shot, medium full shot, full shot, +2 |
| lens_type | COMBO | 85mm portrait lens | 11 options: none, 85mm portrait lens, 50mm standard lens, 35mm cinematic lens, 28mm wide-angle lens, 135mm telephoto lens, +5 |
| depth_of_field | COMBO | shallow depth of field, bokeh background | 7 options: none, shallow depth of field, bokeh background, extremely shallow depth of field, heavy bokeh, deep sharp focus, everything in focus, out of focus, dreamy blur, rack focus, subject sharp background soft, +1 |
| film_filter | COMBO | none | 10 options: none, mist diffusion filter, soft glow, 35mm film grain, analog texture, light leak effect, warm color bleed, cross-process film effect, shifted colors, infrared film effect, +4 |
| mood_preset | COMBO | none | 9 options: none, city pop retro, 1980s Japan aesthetic, neon reflections, warm summer night, ethereal dreamy, soft pastel haze, otherworldly glow, dark moody cinematic, high contrast, dramatic shadows, golden hour, warm sunlight, glowing rim light, neon noir, rain-soaked streets, cyberpunk atmosphere, +3 |
| base_prompt | STRING | Japanese Gothic-style ribbon-decorated maid girl | โ |
| tail_params | STRING | --ar 16:9 --v 6.0 | โ |
| separator | COMBO | comma | 3 options: comma, newline, comma+newline |
| include_angle_prefix | BOOLEAN | true | โ |
| external_angle_promptopt | STRING | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | โ |