# azhagurajpandians/comfyui-aces-exr-toolkit architecture

> Architecture diagram of the GitHub repository azhagurajpandians/comfyui-aces-exr-toolkit, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/azhagurajpandians/comfyui-aces-exr-toolkit
- Repository: https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit

## Overview

ComfyUI ACES EXR Toolkit adds image-processing nodes and a browser viewer to ComfyUI. A workflow takes EXR files or generated image tensors through loading, HDR preparation, color transformation or tone mapping, inspection, and optional EXR export. The README documents additional layer, metadata, and sequence capabilities. The sequence API and viewer fetch behavior are visible in source; many node implementations are only partially sampled, so their internal call wiring is not expanded.

Main entry points: [`nodes.py`](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py) (Load EXR path/sequence), [`api.py`](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/api.py) (Sequence info API), [`js/aces_sequence_loader.js`](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/js/aces_sequence_loader.js) (Sequence detection UI), [`js/nodex_hdr_viewer.js`](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/js/nodex_hdr_viewer.js) (WebGL HDR viewer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_loading["EXR Input"]
  node_load_exr["Load EXR<br/>[nodes.py]"]
  node_load_path["Load EXR path/sequence<br/>[nodes.py]"]
  node_sequence_ui["Sequence detection UI"]
  node_sequence_api["Sequence info API<br/>[api.py]"]
  node_layer_load["Load EXR layer<br/>[nodes.py]"]
  node_metadata["EXR metadata reader<br/>[nodes.py]"]
end

subgraph group_processing["HDR Processing"]
  node_synthetic_hdr["Synthetic HDR expansion<br/>[nodes.py]"]
  node_bracket_merge["Exposure bracket merge<br/>[nodes.py]"]
  node_exposure["HDR exposure adjust<br/>[nodes.py]"]
  node_color_transform["ACES color transform<br/>[nodes.py]"]
  node_tone_map["HDR tone map<br/>[nodes.py]"]
end

subgraph group_inspection["Viewing"]
  node_viewer_node["Nodex HDR viewer node<br/>[nodes.py]"]
  node_viewer_ui["WebGL HDR viewer"]
  node_viewer_api["Viewer frame API<br/>[api.py]"]
  node_temp_files["ComfyUI temp frames"]
end

subgraph group_export["EXR Output"]
  node_save_exr["Save multi-layer EXR<br/>[nodes.py]"]
  node_output_files["EXR output files"]
end

node_user(("Workflow user"))
node_comfy["ComfyUI runtime"]
node_input_files["EXR input files"]
node_ocio["OpenColorIO"]

node_user -->|"runs workflows"| node_comfy
node_input_files -->|"loads file"| node_load_exr
node_input_files -->|"loads sequence"| node_load_path
node_input_files -->|"reads layers"| node_layer_load
node_input_files -->|"reads header"| node_metadata
node_comfy -->|"invokes node"| node_load_exr
node_comfy -->|"invokes node"| node_load_path
node_comfy -->|"invokes node"| node_layer_load
node_comfy -->|"invokes node"| node_metadata
node_comfy -->|"invokes node"| node_synthetic_hdr
node_comfy -->|"invokes node"| node_bracket_merge
node_comfy -->|"invokes node"| node_exposure
node_comfy -->|"invokes node"| node_color_transform
node_comfy -->|"invokes node"| node_tone_map
node_comfy -->|"invokes node"| node_viewer_node
node_comfy -->|"invokes node"| node_save_exr
node_sequence_ui -->|"requests range"| node_sequence_api
node_sequence_api -->|"detects sequence"| node_load_path
node_color_transform -.->|"applies transform"| node_ocio
node_viewer_node -->|"provides frames"| node_temp_files
node_viewer_ui -->|"fetches frames"| node_viewer_api
node_viewer_api -->|"reads frame"| node_temp_files
node_save_exr -->|"writes EXR"| node_output_files

click node_load_exr "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_load_path "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_sequence_ui "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/js/aces_sequence_loader.js"
click node_sequence_api "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/api.py"
click node_layer_load "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_metadata "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_synthetic_hdr "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_bracket_merge "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_exposure "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_color_transform "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_tone_map "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_viewer_node "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"
click node_viewer_ui "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/js/nodex_hdr_viewer.js"
click node_viewer_api "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/api.py"
click node_save_exr "https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_load_exr,node_load_path,node_sequence_ui,node_sequence_api,node_layer_load,node_metadata,node_user,node_comfy toneBlue
class node_synthetic_hdr,node_bracket_merge,node_exposure,node_color_transform,node_tone_map toneAmber
class node_viewer_node,node_viewer_ui,node_viewer_api,node_temp_files toneMint
class node_save_exr,node_output_files toneRose
class node_input_files,node_ocio toneIndigo
```

## Components

### EXR Input

- [Load EXR](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [Load EXR path/sequence](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [Sequence detection UI](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/js/aces_sequence_loader.js): `js/aces_sequence_loader.js`
- [Sequence info API](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/api.py): `api.py`
- [Load EXR layer](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [EXR metadata reader](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`

### HDR Processing

- [Synthetic HDR expansion](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [Exposure bracket merge](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [HDR exposure adjust](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [ACES color transform](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [HDR tone map](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`

### Viewing

- [Nodex HDR viewer node](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- [WebGL HDR viewer](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/js/nodex_hdr_viewer.js): `js/nodex_hdr_viewer.js`
- [Viewer frame API](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/api.py): `api.py`
- **ComfyUI temp frames**

### EXR Output

- [Save multi-layer EXR](https://github.com/azhagurajpandians/comfyui-aces-exr-toolkit/blob/main/nodes.py): `nodes.py`
- **EXR output files**

### Other components

- **Workflow user**
- **ComfyUI runtime**
- **EXR input files**
- **OpenColorIO**

## Connections

- Workflow user → ComfyUI runtime: runs workflows
- EXR input files → Load EXR: loads file
- EXR input files → Load EXR path/sequence: loads sequence
- EXR input files → Load EXR layer: reads layers
- EXR input files → EXR metadata reader: reads header
- ComfyUI runtime → Load EXR: invokes node
- ComfyUI runtime → Load EXR path/sequence: invokes node
- ComfyUI runtime → Load EXR layer: invokes node
- ComfyUI runtime → EXR metadata reader: invokes node
- ComfyUI runtime → Synthetic HDR expansion: invokes node
- ComfyUI runtime → Exposure bracket merge: invokes node
- ComfyUI runtime → HDR exposure adjust: invokes node
- ComfyUI runtime → ACES color transform: invokes node
- ComfyUI runtime → HDR tone map: invokes node
- ComfyUI runtime → Nodex HDR viewer node: invokes node
- ComfyUI runtime → Save multi-layer EXR: invokes node
- Sequence detection UI → Sequence info API: requests range
- Sequence info API → Load EXR path/sequence: detects sequence
- ACES color transform → OpenColorIO: applies transform
- Nodex HDR viewer node → ComfyUI temp frames: provides frames
- WebGL HDR viewer → Viewer frame API: fetches frames
- Viewer frame API → ComfyUI temp frames: reads frame
- Save multi-layer EXR → EXR output files: writes EXR
