Nodes/ComfyUI-Zero2JSON/πŸ“ Z2J Camera Angle
ComfyUI Node

πŸ“ Z2J Camera Angle

Naming the camera is the highest-leverage phrase β€” Z2J Camera Angle automates it

By MushroomFleetΒ·Created 7 months agoΒ·Updated 5 months agoΒ· 1
πŸ“ Z2J Camera Angle
    • text
    β—„seed0β–Ί
    β—„prompt_index0β–Ί
    β—„profilecamera_angle_default.jsonβ–Ί
    β—„prefixβ–Ί
    β—„suffixβ–Ί
    β—„angle_typeanyβ–Ί

    There's a line in the community's own research that says naming a physical camera is the highest-leverage phrase you can type. Not a buzzword, a real shot description - and Z2J Camera Angle is the ComfyUI-Zero2JSON node that writes those for you. It composes a vertical angle, a horizontal angle, a movement and a perspective into one deterministic sentence: "low angle looking up, over-the-shoulder, smooth tracking, wide-angle distortion." That's not a tag salad; that's a camera direction a DP would recognize.

    It's the angle member of the camera family in the pack, feeding the FLUX2_CameraRig's angle input in the FLUX2-JSON workflow. It pairs with Z2J Camera Distance (how far), Z2J Camera DoF (how much is sharp) and Z2J Camera Focus (what the eye lands on). Together they turn "shot" from a vibe into a set of reproducible numbers.

    How it works

    Standard position-as-seed: (seed, prompt_index, slot) hashed with xxhash32, hash picks a template and one option per pool. The camera_angle_default.json profile has 4 templates over four pools - vertical_angle (9), horizontal_angle (6), movement (9), perspective (9) - about 17,500 combinations. Vertical runs from eye level to worm's-eye, horizontal from straight-on to POV, movement from locked-off to dolly push, perspective from natural to fisheye.

    The inputs that matter

    • seed - world seed.
    • prompt_index - position coordinate; bump to walk the shot space.
    • profile - dropdown of camera_angle_*.json files; custom profiles appear after restart.
    • prefix / suffix - anchors around the angle phrase.
    • angle_type - a filter dropdown (eye_level / high / low / birds_eye / worms_eye / dutch). Fine print: in v1.0.0 as shipped this is declared but ignored by the generator. It doesn't constrain the output yet. Check for a newer release.

    Output is a single text string.

    Install

    All seventeen nodes, one repo:

    cd ComfyUI/custom_nodes
    git clone https://github.com/MushroomFleet/ComfyUI-Zero2JSON
    cd ComfyUI-Zero2JSON
    pip install -r requirements.txt
    

    Restart ComfyUI. Only dependency: xxhash>=3.0.0 - no models, no keys. Manager users: search "ComfyUI-Zero2JSON".

    Where people get burned

    Angle words are positional and therefore absolute: "bird's eye view" and "worm's eye view" in the same prompt are mutually exclusive, and the model will render whichever is louder. Pick one angle node per shot and don't fight it from the scene or subject-position nodes. Also be aware that a strong camera phrase can dwarf a weak subject description - if you generate a dramatic low angle but the subject is vaguely described, you get a dramatic angle of something. Order your prompt so the subject lands before the camera tells it how to be seen.

    CategoryZero2JSON/Camera

    Inputs (6)

    NameTypeDefaultDescription
    seedINT00–4294967295World seed for deterministic generation
    prompt_indexINT00–4294967295Position in infinite prompt space
    profileoptCOMBOcamera_angle_default.jsonSelect vocabulary profile
    prefixoptSTRINGText to prepend to generated prompt
    suffixoptSTRINGText to append to generated prompt
    angle_typeoptCOMBOanyFilter by angle type

    Outputs (1)

    NameTypeDescription
    textSTRINGβ€”