📷 FoW - Shot Category Light
Order a 'Low Angle close-up' from a menu, not from memory
- clip
- Shot Conditioning
- Shot Text
A camera operator in a drop-down
FoW - Shot Category Light (the "Shot Agent") handles every camera-and-composition tag in your positive prompt: shot type, camera angle, composition, movement, lens, subject placement. Instead of remembering that "Dutch angle" is a thing, you click "Open Shot Catalogue," tick Low Angle and Close-Up, and the node encodes your selections into conditioning. It's the most cinematic-flavored node in the suite and honestly the most fun to poke around.
It's part of SirWillance's FoW_Suite_LIGHT, the free Light tier of the "Force of Will" suite - one self-taught dev's two-month first project, MIT-licensed, aimed at beginners. The catalog in Light tier is small but coherent: six groups (Shot Type, Camera Angle, Composition, Camera Movement, Lens Type, Subject Placement) with a couple of tokens each. Higher tiers promise bigger catalogs.
How it works
Like every Agent node in the pack, the backend is a straight encode:
tokens = clip.tokenize(user_input)
cond = clip.encode_from_tokens_scheduled(tokens)
return (cond, user_input)
Your CLIP encodes the selected text; you get conditioning plus the raw text back. The frontend does the real work: the node hides its user_input widget and presents the catalog as a modal. Every token has a tooltip - "Positions the camera below the subject, making them appear larger or more powerful." - and selections are saved into the node so they survive a save/reload.
The inputs that matter
- clip (CLIP) - the text encoder from your checkpoint.
- user_input (STRING, multiline) - hidden; the modal writes your chosen shot tokens into it.
Outputs are Shot Conditioning (CONDITIONING) and Shot Text (STRING). The conditioning feeds a positive Fusion node; Shot Text is there when you want to eyeball or log what got picked.
Installing it
The suite is one install:
cd ComfyUI/custom_nodes
git clone https://github.com/SirWillance/FoW_Suite_LIGHT
Restart ComfyUI, and everything lands under "🧿 FoW - Light". ComfyUI Manager works too - search "Force of Will Suite Light". No extra dependencies or model downloads.
Where people get burned
Shot tags are the ones most likely to contradict each other, and this node lets you tick them all at once - Close-Up + Wide Shot + Full Shot in the same prompt is how you get a model that ignores every one of them. Pick one shot type, one angle, one composition, and let the subject bucket do the rest. Also worth knowing: on LLM-encoded checkpoints the catalog's plain-English tags still work as instructions, but on older SD 1.5 models camera jargon is weak unless the model was trained on it - the model you're actually running decides, not the menu. The tooltips here are genuinely good, and the "Shot Text" output makes it easy to see exactly what you asked for.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | CLIP model for encoding | |
| user_input | STRING | — | |
| default_catalogue | STRING | {"catalogue": {"FoW - Shots": [{"category": "Shot Catalogue - Light", "name": "Shot Type", "tokens": [{"value": "Close-Up", "enable": false, "tooltip": "Focuses tightly on the subject, showing detail and emotion."}, {"value": "Medium Shot", "enable": false, "tooltip": "Shows the subject from the waist up, providing context."}, {"value": "Wide Shot", "enable": false, "tooltip": "Shows the subject in relation to their surroundings, emphasizing environment."}, {"value": "Full Shot", "enable": false, "tooltip": "A view of a figure in its entirety"}]}, {"category": "Shot Catalogue - Light", "name": "Camera Angle", "tokens": [{"value": "Eye-Level", "enable": false, "tooltip": "Positions the camera at the same height as the subject's eyes, creating a neutral perspective."}, {"value": "High Angle", "enable": false, "tooltip": "Positions the camera above the subject, making them appear smaller or weaker."}, {"value": "Low Angle", "enable": false, "tooltip": "Positions the camera below the subject, making them appear larger or more powerful."}]}, {"category": "Shot Catalogue - Light", "name": "Composition", "tokens": [{"value": "Centered", "enable": false, "tooltip": "Places the subject in the exact middle of the frame, emphasizing balance and stability."}, {"value": "Rule of Thirds", "enable": false, "tooltip": "Divides the frame into thirds, placing key elements along these lines or intersections for visual interest."}]}, {"category": "Shot Catalogue - Light", "name": "Camera Movement", "tokens": [{"value": "Static", "enable": false, "tooltip": "Keeps the camera stationary, focusing on the subject without any movement."}, {"value": "Panning", "enable": false, "tooltip": "Horizontally rotates the camera on a fixed axis, following a moving subject or revealing a wide scene."}, {"value": "Tilting", "enable": false, "tooltip": "Vertically rotates the camera on a fixed axis, scanning up or down a subject or scene."}]}, {"category": "Shot Catalogue - Light", "name": "Lens Type", "tokens": [{"value": "Standard", "enable": false, "tooltip": "Provides a natural perspective, similar to human vision."}]}, {"category": "Shot Catalogue - Light", "name": "Subject Placement", "tokens": [{"value": "Foreground", "enable": false, "tooltip": "Places the subject in the foreground, making them the primary focus of the image."}, {"value": "Background", "enable": false, "tooltip": "Places the subject in the background, emphasizing their relationship to the environment."}]}]}} | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| Shot Conditioning | CONDITIONING | — |
| Shot Text | STRING | — |