B&W Film Camera
The fake camera that decides how your image 'sees'
- image
- film_format
- camera_roll
- film_latent_preview
Most film-sim tools are just LUTs and grain on top of a finished image. CameraLab is not that. It's the front end of the comfyui-jbnodes pipeline: the step where a full-color image actually gets taken by a camera - lens filter in front, light source chosen, film stock's spectral response doing the work - and comes out the other side as a latent B&W "negative" that the rest of the pipeline develops and prints.
The name on the box is "B&W Film Camera" and that's the honest read. You feed it a color IMAGE (from Load Image, or from a decoded KSampler output) and it hands you a camera_roll - the pack's CAMERA type that carries the image plus all the metadata the next nodes need.
How it works
CameraLab does three physically-motivated things in one pass. It applies the selected Wratten filter as a real spectral transmission curve (not a color grade - the pack's wratten_filters.json has measured per-wavelength transmission data). It reweights the scene by the chosen light_source color temperature, from Tungsten (2856 K) through Daylight (6500 K) to Shade (7500 K), plus the ISO 7589 standard illuminants. And it runs the result through the film stock's spectral sensitivity to produce the latent image. The red filter turning a blue sky black isn't a trick - it's the filter's transmission curve doing exactly what the glass would do.
The filter choice is where the character comes from, and the list is proper Wratten: No. 8 (K2) Yellow, No. 11 (X1) light yellow-green, No. 15 (G) very deep yellow, No. 25 (A) Red, No. 38 light blue, No. 66 very light green, and more. Yellow is the subtle correction filter; red is the dramatic one that crushes skies and lightens skin against them.
Inputs and outputs
The inputs that matter:
- filter - the Wratten filter. Start with None, then try the yellows before you jump to red.
- light_source - sets white balance context. Daylight for most things; Shade will warm (and thus shift the B&W tonal separation).
- film_format - a
FILMFORMATobject, usually from FilmAspectRatio or CropFilmAspectRatio. It sizes grain and frame behavior downstream. - film - dynamic dropdown populated with the bundled stock list (Tri-X 400, HP5+, T-Max, Delta, Acros, XP2, and a lot more). Currently a single camera option; the dropdown is a dynamic widget that fills in from the browser UI.
Outputs are camera_roll (the CAMERA object) and film_latent_preview, an IMAGE preview you can eyeball while you're tuning. Note what you're looking at: that preview is the latent image before development. It will look flat and strange - that's correct. The real tonal curve shows up after DeveloperLab.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/AlbertJBurton/comfyui-jbnodes.git
cd comfyui-jbnodes
pip install -r requirements.txt
Restart ComfyUI, or grab it via ComfyUI Manager by searching "comfyui-jbnodes." Dependencies are numpy, torch, colour-science, scipy, Pillow - colour-science and scipy are the ones Manager will have to pull that a stock ComfyUI lacks.
Gotchas
- The output is a
CAMERAobject, not an image. Don't wirecamera_rollinto a preview node - usefilm_latent_previewto look, and feedcamera_rollinto FilmGrainLab/DeveloperLab. - The
filmandcameradropdowns are dynamic widgets. They populate in the browser UI; if you're hitting the node via a raw API call they can arrive as[None]and the node has aVALIDATE_INPUTSbypass for exactly that reason. In normal ComfyUI usage it just works. - It's beta software, so expect the occasional breaking change between versions - the README says so in bold.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| film_format | FILMFORMAT | — | |
| camera | COMBO | 1 options: | |
| filter | COMBO | None | 7 options: None, No. 8 (K2) - Yellow, No. 11 (X1) - Light Yellow-Green, No. 15 (G) - Very Deep Yellow, No. 25 (A) - Red, No. 38 - Light Blue, +1 |
| film | COMBO | 1 options: | |
| light_sourceopt | COMBO | 9 options: Tungsten (2856 K), Cool White (5000 K), Flash (5500 K), Overcast Sky (6000 K), Daylight (6500 K), Shade (7500 K), +3 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera_roll | CAMERA | — |
| film_latent_preview | IMAGE | — |