CHARON Camera From DA3
Get a real camera into Nuke without typing a single matrix
- nukecam_file
- nukecam_text
If you've ever tried to move a scanned or reconstructed scene into Nuke, you know the pain: a pile of camera JSON, a few 4×4 extrinsics matrices, and the joy of hand-translating them into a Camera3 node. CHARON_Camera_From_DA3 is the node that does that translation for you. Paste in the JSON your capture tool exported, get back a ready-to-paste Nuke camera - focal length, apertures, translate and rotate all filled in.
It's the tail end of the CHARON pipeline. Your scan tool (the "DA3" in the name - the format ships per-image intrinsics/extrinsics JSON) produces the cameras, CHARON_3D_Auto_Align orients the mesh, and this node turns the captured cameras into something compositing software actually speaks.
The math is the reason this node exists. DA3 extrinsics are world-to-camera; the node inverts them to camera-to-world, pulls the camera position, and converts the rotation to Euler XYZ degrees. The clever bit is the focal length: pixel-space intrinsics (fx, fy from the K matrix) don't paste into Nuke, so it converts to physical millimeters - fx * sensor_width_mm / image_width - and derives the vertical aperture from your image aspect ratio. That's exactly the step people botch doing it by hand.
The inputs that matter:
extrinsics_json/intrinsics_json- multiline STRING inputs. Paste DA3's output in (or wire it from a node that emits the JSON); there's no file-path input.batch_index- which captured frame to use (0–999). Your JSON is a list of per-image cameras; this picks one.image_width/image_height- must match your source resolution, or the vertical aperture comes out wrong.sensor_width_mm- defaults to 36 (full-frame). It scales the focal conversion, so don't leave it if your camera isn't a full-frame stand-in.transform_json(optional) - feed it the output ofCHARON_3D_Auto_Alignto move the camera so it matches the aligned mesh. That chaining is the whole point of the pack.
Outputs are nukecam_file (a .nukecam path in ComfyUI's output folder, if save_nukecam is on) and nukecam_text (the Camera3 snippet itself). To use it, paste nukecam_text into Nuke's script editor and run - or drag the saved file in. The snippet targets Nuke 16.0 (version 16.0 v3), which newer versions read fine. The node also advertises the file in ui.files, so it shows up in Comfy's history like a rendered image.
Where people get burned: the JSON shape is specific. The node expects DA3's format, roughly {"extrinsics": [{"image_0": [[...]]}]} - if you feed it someone else's reconstruction export you'll get "Missing 'extrinsics' list in JSON" or "Batch index X out of range". And the transform_json composition is additive Euler/translation - fine for the align node's small corrections, but don't expect it to chain arbitrary transforms.
No API, no key, all local. It's a niche node for a niche pipeline - but if you're on that pipeline, it's the difference between ten minutes of spreadsheet work and a paste.
Install (shared with the whole pack):
cd ComfyUI/custom_nodes
git clone https://github.com/keghoang/ComfyUI-Charon
cd ComfyUI-Charon
pip install -r requirements.txt # only trimesh; NumPy ships with ComfyUI
Restart ComfyUI, and the nodes appear under CHARON/3D. ComfyUI Manager can also install it - search "ComfyUI-Charon". No model downloads, no keys.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| extrinsics_json | STRING | DA3 extrinsics JSON output | |
| intrinsics_json | STRING | DA3 intrinsics JSON output | |
| batch_index | INT | 00–999 | Which image index to extract |
| image_width | INT | 1920 | Source image width in pixels |
| image_height | INT | 1080 | Source image height in pixels |
| sensor_width_mm | FLOAT | 36.00 | Virtual sensor width (horizontal aperture) in mm |
| transform_jsonopt | STRING | Optional transform JSON from CHARON_3D_Auto_Align (rotation/translation) | |
| save_nukecamopt | BOOLEAN | true | Write a .nukecam text snippet to the output directory |
| nukecam_prefixopt | STRING | charon_camera | Filename prefix for .nukecam export |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| nukecam_file | STRING | — |
| nukecam_text | STRING | — |