Qwen Camera Prompt Builder
Point the camera without writing the prompt by hand
- prompt_text
If you've seen the Qwen-Edit-2509 Multiple-Angles LoRA in action, you know the trick isn't hard - the whole thing lives in the prompt. The LoRA taught Qwen-Image-Edit that phrases like "rotate the camera 90 degrees to the left around the subject" should re-shoot your reference image from a new angle, no ControlNet checkpoint involved. What Qwen Camera Prompt Builder does is make sure you always phrase it right. It's a row of dropdowns that assemble a camera-move sentence for you, so the text you feed the model matches the wording it was actually trained on instead of whatever you'd free-type at 2 a.m.
It's the dropdown-based cousin of mercu-lore's slider-driven Multiple-Angle-Camera-Control node, the one that showed up a week after the LoRA blew up. Different UX, same job: turn a menu into the exact camera-instruction string, no manual prompt writing. Both are only worth adding once you're doing a batch of angle tests, because honestly, you can type "tilt the camera up slightly." The value is not making up the phrasing - and never wondering why one of your shots ignored your intent.
How it works
Under the hood this is about as simple as a custom node gets: it's string concatenation. There's no model, no API call, no key, no weights to download. build_prompt collects every dropdown that isn't set to "None", optionally appends two fixed phrases, tacks on your free text, joins it all with spaces, and hands you one string.
The single output is prompt_text (STRING), and that's the whole point of the pack. Wire it into the positive prompt slot of a Qwen-Edit workflow - it goes into your conditioning where you'd normally put the edit instruction, alongside the reference image going in through the model's image input. The node just makes text; loading the 2509 model, the Multiple-Angles LoRA, the VAE and the sampler all happens elsewhere in your graph.
The inputs that matter
All five dropdowns - core_movement (forward/back/left/right/up/down), orbit_rotation (the 45/90/180-degree turns), vertical_view (tilts, bird's-eye, high/low angle), lens_framing (wide-angle through long shot), and combined_action (pre-made move-plus-shot combos) - default to None and can be mixed freely. Combined actions get concatenated first, so they effectively take priority if you pick several. Beyond those, three widgets do the real work:
keep_character_consistency- a toggle that appends "Ensure that the character's face and body proportions remain unchanged." Useful, but read it as a request, not a guarantee. Qwen-Edit re-emits the whole frame and faces still drift, especially on faces the model hasn't seen much of.enable_light_restoration- a toggle for a relight phrase ("Remove the shadows and use soft lighting to relight the image."), built for the light-restoration LoRA that ships alongside the Multiple-Angles stack.extra_instruction- the free-text escape hatch. This is where you put everything the dropdowns can't say.
Installing it
The README keeps it old-school: grab the ZIP from GitHub, extract into ComfyUI/custom_nodes, restart. It's registered with ComfyUI Manager as ComfyUI-Qwen-Camera-Selector if you prefer to search there. The node shows up under Qwen / Utils → Qwen Camera Prompt Builder. There are no dependencies - the repo has no requirements.txt and the whole thing is one pure-Python file - so install is genuinely restart-and-go.
Where people get burned
The sharpest complaints about this workflow aren't about the node at all - they're about the quant. On the Multiple-Angles stack, people repeatedly report that a Q4 GGUF of Qwen-Image-Edit mangles facial features and kills consistency, and that the fp8 version behaves far better. If your re-shots come back with the wrong face, blame the checkpoint, not the prompt builder. Similarly, if the original image comes back subtly changed ("it messes up the original pic a bit," as one user put it), that's the model re-emitting the whole frame - an inherent edit-model property the 2511 revision was built to mitigate. The prompt node can't fix either; it just writes the sentence. Keep your dropdown choices deliberate, set the toggles you mean, and let the LoRA do the cinematography.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| core_movementopt | COMBO | None | 7 options: None, Move the camera forward., Move the camera backward., Move the camera left., Move the camera right., Move the camera up., +1 |
| orbit_rotationopt | COMBO | None | 10 options: None, Rotate the camera 45 degrees to the left around the subject., Rotate the camera 90 degrees to the left around the subject., Rotate the camera 45 degrees to the right around the subject., Rotate the camera 90 degrees to the right around the subject., Rotate the camera 45 degrees to the left., +4 |
| vertical_viewopt | COMBO | None | 9 options: None, Tilt the camera up slightly., Tilt the camera up a lot., Tilt the camera down slightly., Tilt the camera down a lot., Turn the camera to a top-down view., +3 |
| lens_framingopt | COMBO | None | 8 options: None, Turn the camera to a wide-angle lens., Turn the camera to an ultra-wide-angle lens., Turn the camera to a close-up., Turn the camera to an extreme close-up of the face., Turn the camera to a medium shot of the subject., +2 |
| combined_actionopt | COMBO | None | 6 options: None, Move the camera forward and turn the camera to a close-up., Move the camera backward and turn the camera to a wide-angle lens., Rotate the camera 45 degrees to the left around the subject and tilt the camera down slightly., Rotate the camera 45 degrees to the right around the subject and tilt the camera up slightly., Move the camera up and turn the camera to a bird’s-eye view. |
| keep_character_consistencyopt | BOOLEAN | false | — |
| enable_light_restorationopt | BOOLEAN | false | — |
| extra_instructionopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt_text | STRING | — |