Cyberdelia Camera Prompt Presets
Camera and photography style presets for ComfyUI, with JSON libraries, dynamic dropdowns and custom uploads. By Cyberdelia AI Lab.
Cyberdelia Camera Prompt Presets — ComfyUI
<p align="center"> <img src="https://raw.githubusercontent.com/cyberdeliaAI/comfyui-cyberdelia-metadata/main/assets/icon.png" alt="Cyberdelia AI Lab" width="200"> </p>By Cyberdelia AI Lab · Comfy Registry publisher
Choose a JSON library and a named camera or photographic-process preset from a dropdown. The node appends the selected camera suffix, or leaves the base prompt unchanged when None (no camera prompt) is selected.
Installation
-
With GitHub access to this private repository, open a terminal in your ComfyUI
custom_nodesdirectory. -
Clone the repository:
git clone https://github.com/cyberdeliaAI/ComfyUI-Camera-Prompt-Presets.gitOr download ZIP via GitHub Code → Download ZIP and extract the folder into
ComfyUI/custom_nodes/. For a private repository, GitHub authentication is required. -
Restart ComfyUI and refresh the browser (hard refresh if needed).
-
Add node prompt → camera → Camera Prompt Presets (JSON).
-
Connect
final_promptto the positive text encoder of your Krea 2 workflow.
No pip packages are required beyond the normal ComfyUI installation.
How to use
base_prompt: type a scene prompt or convert this widget to an input and connect another STRING node.library: choose from the eight included JSON libraries or your own uploaded JSON files. New nodes default todefault.json.preset: dynamically shows None (no camera prompt) plus the titles in the selected JSON. Choose None to leave the base prompt unchanged (no camera suffix).Upload JSON...: pick a JSON file from your computer. It is checked and stored on the ComfyUI server inComfyUI/input/camera_prompt_presets/. After upload, the new file is selected automatically.Refresh libraries: refresh the library list and choices after editing a JSON on disk.
Outputs:
final_prompt— base prompt + two newlines + camera suffixcamera_suffix— selected camera prompt onlypreset_title— selected title, orNone (no camera prompt)when disabled
When you queue the workflow, the server reads the selected JSON file again. Edited libraries are automatically detected as changed by ComfyUI caching. The dropdown refreshes when you switch libraries, upload, or press Refresh libraries.
JSON format
{
"presets": [
{
"title": "Early phone - Medium",
"category": "Mobile Phone",
"prompt": "An authentic amateur snapshot from a cheap 2005 mobile phone..."
},
{
"title": "Indoor harsh flash",
"category": "Flash",
"prompt": "A casual early-2000s snapshot with flat direct flash..."
}
]
}
The title and prompt fields are required; category is optional and reserved for later filtering/grouping. None (no camera prompt) is a reserved preset title supplied automatically by the node and should not be included in JSON. It does not currently create a separate category dropdown. Preset titles must be unique within each library. The default library is built_in:default.json and its first preset is Mobile Phone | Medium (2005).
The bundled default.json provides 16 curated everyday camera presets across mobile phones, digital compacts, webcams, film and camcorders. The bundled early_mobile_phone.json library includes 24 full prompts and 10 compact prompts from the Krea 2 mobile-phone prompt collection. The included other_camera_looks.json contains 14 more camera styles, such as cheap digital compacts, webcams, VHS, disposable film, instant film and early smartphone cameras.
Included JSON libraries
| Library | Presets | Use |
|---|---:|---|
| default.json | 16 | Curated popular choices (duplicates of full libraries) |
| early_mobile_phone.json | 34 | Early-2000s cheap mobile cameras |
| other_camera_looks.json | 14 | Digital compacts, webcams, VHS, instant photos |
| analog_film.json | 8 | Color/B&W negative, slide and film processing |
| historical_processes.json | 7 | Daguerreotypes through 1960s family prints |
| lens_effects.json | 8 | Fisheye, macro, tilt-shift and unusual optics |
| professional_photography.json | 8 | Studio, editorial, street, architecture, sports |
| sdxl_tag_suffixes.json | 6 | SDXL tag-style suffixes; not Krea 2 optimized |
There are 101 selectable library entries, including 16 intentionally duplicated curated defaults; 85 unique prompts. None is a built-in no-effect choice, not a JSON entry. Use one camera style at a time to avoid contradicting your base prompt's lighting or camera.
Example JSON files and scenes
The examples/ folder provides ready-to-copy templates and sample base prompts:
examples/minimal.json— smallest practical JSON format, 3 presetsexamples/custom_camera_presets.json— expanded format with categories and 5 presetsexamples/BASE_PROMPTS.md— six example base prompts and suggested camera presets
The JSON example files are templates: to use one, upload it using Upload JSON..., or copy it into libraries/ and press Refresh presets. The shipped libraries/default.json is recognized automatically and is the initial dropdown library. Changing the default JSON file on disk does not require editing the Python node.
Notes
- Uploaded files remain in
ComfyUI/input/camera_prompt_presets/and may be edited in any text editor. Re-uploading a filename replaces that uploaded file. - The
libraryselection is saved as a reference in the workflow. If you move the workflow to another ComfyUI computer, also copy the JSON file. If a saved library or preset is missing, the node retains the original selection, displays a warning in its title, and fails validation when queued instead of silently substituting a different camera effect. Selecting None always outputs only the base prompt, even when the library is unavailable. - Changing the JSON files does not require restarting ComfyUI; press
Refresh librariesto update the dropdown list. - Intended for self-hosted ComfyUI installations with access to custom nodes and their server extensions; this has not been validated on ComfyUI Cloud or other restricted hosts.
- This is a new implementation and has passed local Python and JavaScript checks, but has not yet been tested in a running ComfyUI editor.
Troubleshooting
- Dropdown does not update: hard refresh the ComfyUI browser, then click
Refresh libraries. - Workflow reports invalid preset: the title was renamed or removed from JSON. The node preserves the original title and shows a warning; restore the JSON or explicitly choose another preset. Use None if you do not want a camera effect.
- Uploaded file missing after moving computers: copy the corresponding
.jsonfrominput/camera_prompt_presets/. - Syntax error: JSON requires double-quoted keys/values and no trailing commas.
Cyberdelia publishing setup
This repository uses the same GPL-3.0 license and Cyberdelia astronaut artwork as Cyberdelia Image Metadata. The Tests workflow runs Python and frontend checks and supplies the badge above.
The pyproject.toml file targets the cyberdelia Registry publisher. Registry publication is manual only via Publish workflow, and requires the GitHub Actions secret REGISTRY_ACCESS_TOKEN. The repository is currently private and has not been published to the Registry. Do a real ComfyUI UI smoke test and make the code accessible before the first public release. Never commit API tokens.
The icon currently links to the shared Cyberdelia artwork in the public Image Metadata repository. A unique icon can replace it later.
Local checks
Run python -m unittest discover -s tests -v in this folder to exercise the JSON parser and prompt composition. Frontend syntax can be checked with node --check web/camera_prompts.js. These checks are not a substitute for testing the browser dropdown with your installed version of ComfyUI.