Camera Presets
Shot language you don't have to type from memory
- camera_prompt
Naming the shot is one of the cheapest quality moves in prompting. "Low angle, dramatic perspective, foreshortening" tells the model what a camera did a lot more reliably than "epic, dramatic, cool" ever will - the models were trained on captions that name real photographic situations, so the vocabulary carries real weight. Camera Presets is a tiny dictionary of exactly that kind of shot language: pick a framing from a dropdown, get a ready-made camera prompt string.
How it works
There's no model, no API, nothing clever - it's a lookup table. Each preset maps to a short prose phrase describing a shot type. You select the preset, the node returns the matching string, and you feed that into your positive prompt. The strings are written in the plain descriptive style that works across SDXL and the newer LLM-encoded models - concrete physical referents, not quality fluff.
The one genuinely useful design choice is the custom_override input. If you fill it in, it replaces the dropdown entirely - the preset is ignored and your text goes straight out. So the node doubles as a "remember my favorite shot description" box when you want to keep a specific framing phrase around without retyping it.
The options
Seven presets:
- Cinematic Hero - low angle, dramatic perspective, foreshortening
- Dynamic Action - dutch angle, tilted camera, wide angle lens
- Intimate Portrait - close-up, eye level, shallow depth of field
- Character Showcase - full body, eye level, centered composition
- Over-the-Shoulder Scene - OTS framing, medium shot, depth of field
- Epic Wide Scene - wide shot, low angle, cinematic framing
- None / Custom - empty output; use the override
Inputs: preset (the dropdown) and optional custom_override (multiline). Output: camera_prompt, a plain STRING that wires straight into a prompt field or a concat node.
When it's actually worth it
Honestly, these are phrases you could type. The value is consistency and speed: when you're batching a character across different shots and want the same framing language every time, or when you're building a template workflow you'll share. One node, one stable string, no typos, no "was it low-angle or low angle" second-guessing mid-batch. That's the whole pitch, and it's a fair one for a node this cheap.
Installing it
Ships in jan-prompt-presets (https://github.com/kursopiko/jan-prompt-presets) by JAN (@kursopiko). Via ComfyUI Manager: search jan-prompt-presets, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/kursopiko/jan-prompt-presets
Restart ComfyUI. No dependencies, no model downloads - it's a dict in a Python file. Look for it under prompt/presets.
Troubleshooting
- Empty output. You're on "None / Custom" with no override filled in. Pick a real preset or type something in the override.
- My override is being ignored. Double-check it's not just whitespace - the override is stripped, so a box full of spaces counts as empty and falls back to the dropdown.
- Node missing. Pack not installed or no restart yet; search the
prompt/presetscategory.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | None / Custom | Select a predefined camera/shot preset for your SDXL prompt. |
| custom_overrideopt | STRING | If filled, this overrides the dropdown selection entirely. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| camera_prompt | STRING | — |