Nodes/Artha-Gemini/🔱 Gemini Camera
ComfyUI Node

🔱 Gemini Camera

Lens, film stock, motion, and every shot in between

By Cyrostar·Created about a year ago·Updated about a year ago· 1
🔱 Gemini Camera
    • camera
    • markdown
    â—„typeNONEâ–º
    â—„contextNONEâ–º
    â—„shotNONEâ–º
    â—„lensesNONEâ–º
    â—„anglesNONEâ–º
    â—„motionNONEâ–º
    â—„focal_lengthNONEâ–º
    â—„depth_of_fieldNONEâ–º
    â—„aspect_ratioNONEâ–º
    â—„sensor_typeNONEâ–º
    â—„camera_styleNONEâ–º
    â—„framingNONEâ–º
    â—„camera_modelsNONEâ–º
    â—„filmstockNONEâ–º
    â—„colorNONEâ–º
    â—„textureNONEâ–º
    â—„api_keyâ–º
    â—„modelgemini-2.5-flashâ–º
    â—„max_tokens5000â–º
    â—„temperature0.7â–º
    â—„randomizefalseâ–º
    â—„use_imagefalseâ–º
    ◄image▾►

    If you've read the modern guidance on LLM-encoded models, you know the single highest-leverage phrase you can put in a prompt is the name of a physical camera. Gemini Camera takes that idea and builds it a UI: 16 dropdowns that cover everything a film student would specify - camera type, shot size, lens, angle, focal length, depth of field, aspect ratio, sensor type, framing, and even a camera model dropdown that goes from Leica M6 to ARRI Alexa Mini to GoPro. There's a motion dropdown (push-in, dolly zoom, whip pan, steadicam, orbiting…) that's clearly there for video work, and a filmstock dropdown full of Kodak and Fuji emulsions. If you want your image to look shot on Portra 400, you no longer have to remember the recipe - it's a menu item.

    It's one of the 🔱 Artha-Gemini nodes (Artha/LLM/GEMINI), and it lives on the composition side of the family: camera (type ARTHACAM) wires into Gemini Compose, alongside subject, style, light and scene. That's the node that merges the composition pieces into a single prompt, the way Gemini Portrait merges the character pieces.

    How it works

    Standard Artha two-mode pattern. With use_image off, no API call happens - your selections are packed into a dict and sent down the camera wire for Compose to consume. randomize fills every field with a random pick from its options, which is actually a nice way to generate variations when you want to batch a look. With use_image on, the node hands your image to Gemini Vision with a camera-analysis agent that returns a CAMERA … bullet list of what it thinks the photo was shot with. The agent has one fun rule baked in: if it detects the image is a painting or illustration, it returns CAMERA: NONE rather than inventing settings - so feeding it anime art doesn't produce garbage about apertures.

    Like Gemini Style, it also emits a markdown output: the entire option catalog (all 16 categories and their descriptions) rendered as a reference document you can view with the pack's Gemini Markdown display node. Given there are 24 camera models and 15 film stocks, the reference actually earns its place on the canvas.

    The inputs that matter

    • type - the camera body category (DSLR, mirrorless, phone, drone, 360…).
    • lenses + focal_length - the pair that sells the look hardest. A 50mm portrait read is worth a paragraph of prose.
    • motion - skip it for stills, set it for video. This is where the "or video prompting" in the pack's description comes from.
    • aspect_ratio and framing - decide the shape of the frame before anything downstream.
    • camera_models + filmstock - the named-physics pair. Leica M6 + Portra 400 says everything about color and grain.

    Everything else - context, shot, angles, depth_of_field, sensor_type, camera_style, color, texture - is refinement you add when the basics aren't enough. Then the standard pack cluster: api_key, model (gemini-2.5-flash), max_tokens, temperature, randomize, use_image, image.

    Install & gotchas

    Same pack, one install, every 🔱 node:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Cyrostar/Artha-Gemini
    cd Artha-Gemini
    pip install -r requirements.txt
    

    Restart ComfyUI (or let ComfyUI Manager handle it - search "Artha-Gemini"). No model downloads; the only external need is a Gemini API key from Google AI Studio, and only use_image mode spends it.

    The usual two traps apply: image is a file dropdown (upload a file or pick one from ComfyUI/input), not an IMAGE tensor socket - and image mode bills a Gemini call every run. If you put your key in the api_key field it sits in plain text in the workflow JSON; the pack's api.json (gemini_api_key) or a GEMINI_API_KEY env var keeps it out of your saved files. And note the dropdown mode needs no key at all, so you can build camera specs entirely offline if you're only feeding your own choices to Compose.

    CategoryArtha/LLM/GEMINI

    Inputs (23)

    NameTypeDefaultDescription
    typeCOMBONONE13 options: NONE, DSLR, MIRRORLESS, PHONE, FILM CAMERA, DIGITAL CINEMA CAMERA, +7
    contextCOMBONONE11 options: NONE, PROFESSIONAL, CONSUMER, HOBBYIST, SURVEILLANCE, CINEMATIC, +5
    shotCOMBONONE8 options: NONE, CLOSE UP SHOT, EXTREME CLOSE UP SHOT, MEDIUM SHOT, MEDIUM CLOSE UP SHOT, MEDIUM LONG SHOT, +2
    lensesCOMBONONE6 options: NONE, WIDE ANGLE LENS, STANDARD LENS, TELEPHOTO LENS, MACRO LENS, FISHEYE LENS
    anglesCOMBONONE6 options: NONE, OVER THE SHOULDER, HIGH ANGLE, LOW ANGLE, TILTED ANGLE, AERIAL ANGLE
    motionCOMBONONE16 options: NONE, PUSH IN, PULL BACK, DOLLY IN/OUT, ZOOM IN/OUT, TRACKING (FOLLOW), +10
    focal_lengthCOMBONONE8 options: NONE, 14MM, 24MM, 35MM, 50MM, 85MM, +2
    depth_of_fieldCOMBONONE4 options: NONE, SHALLOW DOF, DEEP DOF, SELECTIVE FOCUS
    aspect_ratioCOMBONONE14 options: NONE, 1:1, 4:3, 3:2, 5:4, 6:4.5, +8
    sensor_typeCOMBONONE7 options: NONE, FULL FRAME, APS-C, MICRO FOUR THIRDS, MEDIUM FORMAT, DIGITAL CINEMA CAMERA, +1
    camera_styleCOMBONONE7 options: NONE, HANDHELD, TRIPOD, DRONE, ROBOTIC ARM, STABILIZED GIMBAL, +1
    framingCOMBONONE6 options: NONE, CENTERED, LEFT THIRD, RIGHT THIRD, LOW FRAME, HIGH FRAME
    camera_modelsCOMBONONE24 options: NONE, LEICA M6, CANON AE-1, NIKON F3, FUJI X100V, SONY A7S III, +18
    filmstockCOMBONONE16 options: NONE, KODAK VISION3 500T, KODAK VISION3 250D, KODAK EKTACHROME, KODAK PORTRA 400, KODAK GOLD 200, +10
    colorCOMBONONE16 options: NONE, WARM TONE, COOL TONE, HIGH SATURATION, LOW SATURATION, MONOCHROME, +10
    textureCOMBONONE9 options: NONE, FILM_GRAIN, VIGNETTE, BLOOM, HALATION, CHROMATIC_ABERRATION, +3
    api_keySTRINGAPI key will be visible in plain text. Consider adding your api to the api.json located inside this custom node folder.
    modelCOMBOgemini-2.5-flash5 options: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.0-flash, gemini-2.0-flash-lite
    max_tokensINT50001–8192For Gemini models, a token is equivalent to about 4 characters. 100 tokens is equal to about 60-80 English words.
    temperatureFLOAT0.70–2A temperature of 0 means only the most likely tokens are selected, and there's no randomness. Conversely, a high temperature injects a high degree of randomness into the tokens selected by the model, leading to more unexpected, surprising model responses.
    randomizeBOOLEANfalse—
    use_imageBOOLEANfalse—
    imageCOMBO1 options: example.png

    Outputs (2)

    NameTypeDescription
    cameraARTHACAM—
    markdownSTRING—