Blender Camera Shot
Your Blender camera, translated into words a diffusion model gets
- camera_prompt
- shot_recipe_json
- summary_json
The core frustration of camera-matched AI work is that Blender stores a camera as numbers - focal length, location, rotation - and diffusion models only understand sentences. MKRBlenderCameraShot is the translation layer: feed it camera_json, and it writes a prompt like "three quarter composition, low angle viewpoint, 85mm lens" plus a structured shot recipe. No API, no key, no magic - it's deterministic text generation from your camera data, which is exactly what you want when you're trying to reproduce a real framing across generations.
It's part of MKRShift_Nodes by criskb. Install via ComfyUI Manager (search "MKRShift_Nodes") or git clone https://github.com/criskb/MKRShift_Nodes into custom_nodes/, restart. It appears under MKRShift Nodes → Addons → Blender.
How it works
The node takes the camera payload and buckets your lens into a category (lens_bucket - wide / normal / tele), reads the resolution ratio, and uses the camera's position and rotation to describe the viewpoint. Crucially, it doesn't need the full scene packet - just the camera sub-object, so you can wire it straight off a camera_json output from MKRBlenderSceneImport or paste a camera payload on its own.
The three inputs
camera_json- required, the camera data from the Blender bridge.subject_name- optional; names the character or subject so the prompt isn't "a subject".intent_hint- optional free text for the director's intent ("dramatic reveal", "product beauty shot") that gets folded into the prompt.
Outputs: camera_prompt (the sentence to feed your CLIP encoder), shot_recipe_json (a structured v1 recipe with camera name, lens, resolution, location, and the prompt), and summary_json (camera name, aspect ratio, lens, warnings).
Where people get burned
The prompt quality depends entirely on the quality of the camera payload. A default Blender camera sitting at the origin with no rotation produces a prompt that's honest but uninteresting - "0mm lens, level viewpoint" - because the data genuinely says that. So set up your camera in Blender like you mean it. Also, this node describes the camera; it does not move it or hand you a ControlNet conditioning for it. If you want the geometry to force the framing, that's a separate workflow. As a text-generation utility it's solid, and it beats typing "dynamic camera angle" and praying.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| camera_json | STRING | — | |
| subject_name | STRING | — | |
| intent_hint | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| camera_prompt | STRING | — |
| shot_recipe_json | STRING | — |
| summary_json | STRING | — |