π± Artha Gemini Camera
Build a camera spec without knowing a lens from a stock setting
- image
- camera
- markdown
Artha Gemini Camera isn't a camera - there's no shutter to click and no sensor to fill. It's a spec-sheet builder that turns a pile of filmmaking dropdowns into one typed ARTHACAM object, which is exactly what the rest of the pack wants before it writes your prompt. Think of it as the "settings" half of Artha's prompt-assembly pipeline: this node, plus Artha Gemini Light and Artha Gemini Scenery, feed their outputs into Artha Gemini Compose, and Compose is what actually wordsmiths the final description.
That division of labor matters. Camera vocabulary is one of the highest-leverage things you can add to a modern prompt - LLM-encoded image models were trained on real captions, so "85mm, f/1.4, shot on Portra 400" says more than a paragraph of vague prose. But most of us can't name sixteen camera attributes on demand, and that's the entire trick this node plays.
What you get
Sixteen combo boxes, each pre-populated from a compose.json that ships with the pack: type, context, shot, lenses, angles, motion, focal length, depth of field, aspect ratio, sensor type, camera style, framing, camera models, filmstock, color, and texture. Every dropdown is a curated list of real terms - MEDIUM CLOSE UP SHOT, 35MM, 85MM, DOLLY IN/OUT, STATIC SHOT, 9:16 - and every one defaults to NONE, meaning it's left out of the build. You don't have to pick all sixteen. Pick two or three that matter and move on.
The node then hands back two outputs:
camera- theARTHACAMobject you wire into Artha Gemini Compose'scamerainput.markdown- a plain-text cheat sheet listing every option in every dropdown, built from the same JSON. Handy the first time, so you can see what "motion" actually contains without opening each box.
Two toggles change the behavior. randomize rolls one value per category, which is a fun way to break out of your usual look and genuinely useful for generating variations in a batch. use_image flips the node into vision mode: give it an image and it asks Gemini to reverse-engineer what camera settings the photo was likely shot with, and returns that description instead of the dict. That's the one mode that requires an API key and a network call - the plain picker mode is pure local Python.
Where people get burned
The biggest gotcha is expecting this node to produce the final prompt. It doesn't; it produces ingredients. If you wire camera straight into a KSampler you'll get a type error, because ARTHACAM only plugs into Artha's own compose node. And in vision mode, remember the node is reading a JPEG, not measuring a camera - "fetched from the uploaded image" means Gemini's best guess, which is good for matching a vibe and hopeless for pixel-accurate technical truth.
The node shares the pack's standard API plumbing: api_key, model (defaults to gemini-2.5-flash), max_tokens (5000), and temperature (0.7). Leave the key blank and it falls back to api.json in the pack folder, then to the GEMINI_API_KEY environment variable.
Install
Install once for the whole pack - every π± node lives in Cyrostar/ComfyUI-Artha-Nodes. Easiest route is ComfyUI Manager: search "Artha" and install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Cyrostar/ComfyUI-Artha-Nodes
cd ComfyUI-Artha-Nodes
pip install -r requirements.txt
Then restart ComfyUI. The Gemini nodes are the part that needs the key from Google AI Studio; this one only needs it if you switch on use_image. If the camera output comes back empty, check the ComfyUI console - these nodes print API errors there and hand back an empty string rather than throwing.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| type | COMBO | NONE | 13 options: NONE, DSLR, MIRRORLESS, PHONE, FILM CAMERA, DIGITAL CINEMA CAMERA, +7 |
| context | COMBO | NONE | 11 options: NONE, PROFESSIONAL, CONSUMER, HOBBYIST, SURVEILLANCE, CINEMATIC, +5 |
| shot | COMBO | NONE | 8 options: NONE, CLOSE UP SHOT, EXTREME CLOSE UP SHOT, MEDIUM SHOT, MEDIUM CLOSE UP SHOT, MEDIUM LONG SHOT, +2 |
| lenses | COMBO | NONE | 6 options: NONE, WIDE ANGLE LENS, STANDARD LENS, TELEPHOTO LENS, MACRO LENS, FISHEYE LENS |
| angles | COMBO | NONE | 6 options: NONE, OVER THE SHOULDER, HIGH ANGLE, LOW ANGLE, TILTED ANGLE, AERIAL ANGLE |
| motion | COMBO | NONE | 16 options: NONE, PUSH IN, PULL BACK, DOLLY IN/OUT, ZOOM IN/OUT, TRACKING (FOLLOW), +10 |
| focal_length | COMBO | NONE | 8 options: NONE, 14MM, 24MM, 35MM, 50MM, 85MM, +2 |
| depth_of_field | COMBO | NONE | 4 options: NONE, SHALLOW DOF, DEEP DOF, SELECTIVE FOCUS |
| aspect_ratio | COMBO | NONE | 14 options: NONE, 1:1, 4:3, 3:2, 5:4, 6:4.5, +8 |
| sensor_type | COMBO | NONE | 7 options: NONE, FULL FRAME, APS-C, MICRO FOUR THIRDS, MEDIUM FORMAT, DIGITAL CINEMA CAMERA, +1 |
| camera_style | COMBO | NONE | 7 options: NONE, HANDHELD, TRIPOD, DRONE, ROBOTIC ARM, STABILIZED GIMBAL, +1 |
| framing | COMBO | NONE | 6 options: NONE, CENTERED, LEFT THIRD, RIGHT THIRD, LOW FRAME, HIGH FRAME |
| camera_models | COMBO | NONE | 24 options: NONE, LEICA M6, CANON AE-1, NIKON F3, FUJI X100V, SONY A7S III, +18 |
| filmstock | COMBO | NONE | 16 options: NONE, KODAK VISION3 500T, KODAK VISION3 250D, KODAK EKTACHROME, KODAK PORTRA 400, KODAK GOLD 200, +10 |
| color | COMBO | NONE | 16 options: NONE, WARM TONE, COOL TONE, HIGH SATURATION, LOW SATURATION, MONOCHROME, +10 |
| texture | COMBO | NONE | 9 options: NONE, FILM_GRAIN, VIGNETTE, BLOOM, HALATION, CHROMATIC_ABERRATION, +3 |
| api_key | STRING | API key will be visible in plain text. Consider adding your api to the api.json located inside this custom node folder. | |
| model | COMBO | gemini-2.5-flash | 5 options: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.0-flash, gemini-2.0-flash-lite |
| max_tokens | INT | 50001β8192 | For Gemini models, a token is equivalent to about 4 characters. 100 tokens is equal to about 60β80 English words. |
| temperature | FLOAT | 0.70β2 | A temperature of 0 means only the most likely tokens are selected. Higher values increase randomness. |
| randomize | BOOLEAN | false | β |
| use_image | BOOLEAN | false | β |
| imageopt | IMAGE | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera | ARTHACAM | β |
| markdown | STRING | β |