[GH-ISSUE #2888] ComfyUI-Orakul-SVP-16bit-EXR-TIFF #1050

Open
opened 2026-10-27 21:25:19 +00:00 by bsakaguchi · 0 comments
Owner

Originally created by @OrakulStudio on GitHub (May 18, 2026).
Original GitHub issue: https://github.com/Comfy-Org/ComfyUI-Manager/issues/2888

ComfyUI-Orakul-SVP

Professional Dual/Triple Export Node PNG + TIFF 16-bit + EXR 32-bit float

One node. Three formats. Zero compression. Zero compromise.
Designed for Flux2 native resolution workflows on high-end hardware.


What It Does

ComfyUI saves PNG in 8-bit by default. That's fine for web. It's not fine for print, stock, or HDR post-processing you lose half the tonal range the moment you click Save.

OrakulSVPNode plugs directly into your workflow after KSampler and silently exports master files in parallel:

Format Bit depth Use case
PNG 8-bit Web, preview, stock upload (via Save Image)
TIFF 16-bit RAW Print, Photoshop, Lightroom, Adobe Stock masters
EXR 32-bit float HDR compositing, VFX, Nuke, DaVinci Resolve

All three simultaneously if you want. Or any combination. Your call.


Features

  • ✅ TIFF 16-bit — uint16, zero compression (IMWRITE_TIFF_COMPRESSION = 1), full 0–65535 range
  • ✅ EXR 32-bit float — true HDR, float32, full linear light data preserved
  • ✅ Full batch support — every frame in the batch saved as individual file
  • ✅ Accumulation mode — existing files never deleted, sequential numbering continues
  • ✅ Toggle per format — enable/disable TIFF and EXR independently via node UI
  • ✅ Safe EXR writing — uses isolated subprocess to set OPENCV_IO_ENABLE_OPENEXR=1 before cv2 loads, bypassing ComfyUI's already-initialized environment
  • ✅ Auto cleanup — temp files from EXR subprocess removed after each frame
  • ✅ Trilingual console logs — RU / UA / EN

File Structure

ComfyUI/
├── output/
│   ├── ComfyUI_00001_.png          ← 8-bit PNG via Save Image node
│   └── temp_svp/
│       ├── ORAKUL_RAW_0001.tif     ← 16-bit RAW TIFF
│       ├── ORAKUL_RAW_0001.exr     ← 32-bit float EXR
│       ├── ORAKUL_RAW_0002.tif
│       ├── ORAKUL_RAW_0002.exr
│       └── ...
└── custom_nodes/
    └── ComfyUI-Orakul-SVP/
        ├── orakul_svp_node.py
        ├── __init__.py
        └── README.md

Installation

cd ComfyUI/custom_nodes
git clone https://github.com/OrakulStudio/ComfyUI-Orakul-SVP
pip install opencv-python-headless

Restart ComfyUI. Node appears in Orakul Studio category.


Usage

KSampler → OrakulSVPNode → Save Image

Simple and clean interface

Снимок экрана 2026-05-03 092559
  1. Add OrakulSVPNode to your workflow
  2. Connect IMAGE from KSampler (or any image source)
  3. Connect output to standard Save Image node
  4. Toggle save_tiff and save_exr as needed in the node UI
  5. Run

Node inputs:

Input Type Default Description
images IMAGE — Image tensor from pipeline
save_tiff BOOLEAN True Save 16-bit TIFF to temp_svp
save_exr BOOLEAN False Save 32-bit EXR to temp_svp

Accumulation Mode

The node never deletes existing files. Each run continues numbering from where the last run stopped:

Run 1 (batch=2, TIFF+EXR): ORAKUL_RAW_0001.tif, ORAKUL_RAW_0001.exr
                             ORAKUL_RAW_0002.tif, ORAKUL_RAW_0002.exr
Run 2 (batch=1, TIFF only): ORAKUL_RAW_0003.tif
Run 3 (batch=1, EXR only):  ORAKUL_RAW_0004.exr

To reset — manually clear output/temp_svp/.


Why Subprocess for EXR?

OpenCV requires OPENCV_IO_ENABLE_OPENEXR=1 to be set before the library is imported. ComfyUI imports cv2 at startup — long before your node runs. Setting the env variable at runtime has no effect.

The solution: write a tiny isolated Python script and execute it via subprocess.run() using ComfyUI's own interpreter (sys.executable). The subprocess starts fresh, sets the variable first, then writes the EXR. Temp script and temp .npy data file are removed immediately after.

No external dependencies. No monkey-patching. No hacks that break other nodes.


Technical Details

Parameter TIFF EXR
Bit depth 16-bit uint 32-bit float
Compression NONE OpenEXR default
Color space RGB→BGR (OpenCV) RGB→BGR (OpenCV)
Value range 0–65535 0.0–1.0 float
File size @ 2752×1536 ~24–25 MB ~48–50 MB

Console Output Example

RU 🛠️⚙️Orakul Engine: Режим MASTER RAW инициализирован TIFF(16-bit) EXR(32-bit float).
RU 🎞️🛠️Orakul Engine: Добавление батча (2 кадров)...
 ->EN 👍 TIFF 16-bit saved: ORAKUL_RAW_0001.tif
 ->EN 👍 EXR 32-bit float saved: ORAKUL_RAW_0001.exr
 ->EN 👍 TIFF 16-bit saved: ORAKUL_RAW_0002.tif
 ->EN 👍 EXR 32-bit float saved: ORAKUL_RAW_0002.exr

Professional trilingual logging system (RU/UA/EN)

Снимок экрана 2026-05-03 103633

Compatibility

  • ComfyUI (all current versions)
  • Python 3.10+
  • PyTorch (CUDA / CPU)
  • opencv-python or opencv-python-headless
  • Windows / Linux

Who Is This For

  • Stock photographers — upload TIFF masters to Adobe Stock, Shutterstock, Getty
  • Print & prepress — 16-bit TIFF accepted directly, no conversion needed
  • VFX / compositing — EXR 32-bit for Nuke, DaVinci Resolve, Blender compositor
  • Archiving — store master files with full data intact, re-export to any format later

Roadmap

  • Custom output folder via node parameter
  • LZW/ZIP compression option for TIFF
  • EXIF/IPTC metadata embedding (for stock workflows)
  • Multi-layer EXR with separate R/G/B/A channels

Author

Orakul Studio Chernihiv, Ukraine 🇺🇦
Flux2 · ComfyUI · RTX 4090 · No quantization · No compromises


License

MIT — use it, fork it, improve it.

ComfyUI-Orakul-SVP.zip

Originally created by @OrakulStudio on GitHub (May 18, 2026). Original GitHub issue: https://github.com/Comfy-Org/ComfyUI-Manager/issues/2888 # ComfyUI-Orakul-SVP **Professional Dual/Triple Export Node PNG + TIFF 16-bit + EXR 32-bit float** > One node. Three formats. Zero compression. Zero compromise. > Designed for Flux2 native resolution workflows on high-end hardware. --- ## What It Does ComfyUI saves PNG in 8-bit by default. That's fine for web. It's not fine for print, stock, or HDR post-processing you lose half the tonal range the moment you click Save. **OrakulSVPNode** plugs directly into your workflow after KSampler and silently exports master files in parallel: | Format | Bit depth | Use case | |---|---|---| | PNG | 8-bit | Web, preview, stock upload (via Save Image) | | TIFF | 16-bit RAW | Print, Photoshop, Lightroom, Adobe Stock masters | | EXR | 32-bit float | HDR compositing, VFX, Nuke, DaVinci Resolve | All three simultaneously if you want. Or any combination. Your call. --- ## Features - ✅ **TIFF 16-bit** — `uint16`, zero compression (`IMWRITE_TIFF_COMPRESSION = 1`), full `0–65535` range - ✅ **EXR 32-bit float** — true HDR, `float32`, full linear light data preserved - ✅ **Full batch support** — every frame in the batch saved as individual file - ✅ **Accumulation mode** — existing files never deleted, sequential numbering continues - ✅ **Toggle per format** — enable/disable TIFF and EXR independently via node UI - ✅ **Safe EXR writing** — uses isolated subprocess to set `OPENCV_IO_ENABLE_OPENEXR=1` before cv2 loads, bypassing ComfyUI's already-initialized environment - ✅ **Auto cleanup** — temp files from EXR subprocess removed after each frame - ✅ **Trilingual console logs** — RU / UA / EN --- ## File Structure ``` ComfyUI/ ├── output/ │ ├── ComfyUI_00001_.png ← 8-bit PNG via Save Image node │ └── temp_svp/ │ ├── ORAKUL_RAW_0001.tif ← 16-bit RAW TIFF │ ├── ORAKUL_RAW_0001.exr ← 32-bit float EXR │ ├── ORAKUL_RAW_0002.tif │ ├── ORAKUL_RAW_0002.exr │ └── ... └── custom_nodes/ └── ComfyUI-Orakul-SVP/ ├── orakul_svp_node.py ├── __init__.py └── README.md ``` --- ## Installation ```bash cd ComfyUI/custom_nodes git clone https://github.com/OrakulStudio/ComfyUI-Orakul-SVP pip install opencv-python-headless ``` Restart ComfyUI. Node appears in **`Orakul Studio`** category. --- ## Usage ``` KSampler → OrakulSVPNode → Save Image ``` ## Simple and clean interface <img width="967" height="531" alt="Снимок экрана 2026-05-03 092559" src="https://github.com/user-attachments/assets/a29702bb-a593-472e-826f-d1b05bfa6c3b" /> 1. Add **OrakulSVPNode** to your workflow 2. Connect `IMAGE` from KSampler (or any image source) 3. Connect output to standard **Save Image** node 4. Toggle `save_tiff` and `save_exr` as needed in the node UI 5. Run **Node inputs:** | Input | Type | Default | Description | |---|---|---|---| | `images` | IMAGE | — | Image tensor from pipeline | | `save_tiff` | BOOLEAN | `True` | Save 16-bit TIFF to temp_svp | | `save_exr` | BOOLEAN | `False` | Save 32-bit EXR to temp_svp | --- ## Accumulation Mode The node never deletes existing files. Each run continues numbering from where the last run stopped: ``` Run 1 (batch=2, TIFF+EXR): ORAKUL_RAW_0001.tif, ORAKUL_RAW_0001.exr ORAKUL_RAW_0002.tif, ORAKUL_RAW_0002.exr Run 2 (batch=1, TIFF only): ORAKUL_RAW_0003.tif Run 3 (batch=1, EXR only): ORAKUL_RAW_0004.exr ``` To reset — manually clear `output/temp_svp/`. --- ## Why Subprocess for EXR? OpenCV requires `OPENCV_IO_ENABLE_OPENEXR=1` to be set **before** the library is imported. ComfyUI imports cv2 at startup — long before your node runs. Setting the env variable at runtime has no effect. The solution: write a tiny isolated Python script and execute it via `subprocess.run()` using ComfyUI's own interpreter (`sys.executable`). The subprocess starts fresh, sets the variable first, then writes the EXR. Temp script and temp `.npy` data file are removed immediately after. No external dependencies. No monkey-patching. No hacks that break other nodes. --- ## Technical Details | Parameter | TIFF | EXR | |---|---|---| | Bit depth | 16-bit uint | 32-bit float | | Compression | NONE | OpenEXR default | | Color space | RGB→BGR (OpenCV) | RGB→BGR (OpenCV) | | Value range | 0–65535 | 0.0–1.0 float | | File size @ 2752×1536 | ~24–25 MB | ~48–50 MB | --- ## Console Output Example ``` RU 🛠️⚙️Orakul Engine: Режим MASTER RAW инициализирован TIFF(16-bit) EXR(32-bit float). RU 🎞️🛠️Orakul Engine: Добавление батча (2 кадров)... ->EN 👍 TIFF 16-bit saved: ORAKUL_RAW_0001.tif ->EN 👍 EXR 32-bit float saved: ORAKUL_RAW_0001.exr ->EN 👍 TIFF 16-bit saved: ORAKUL_RAW_0002.tif ->EN 👍 EXR 32-bit float saved: ORAKUL_RAW_0002.exr ``` ## Professional trilingual logging system (RU/UA/EN) <img width="3133" height="1726" alt="Снимок экрана 2026-05-03 103633" src="https://github.com/user-attachments/assets/3b23e6fb-ba85-4cee-ba12-ca3c00b3c132" /> --- ## Compatibility - ComfyUI (all current versions) - Python 3.10+ - PyTorch (CUDA / CPU) - `opencv-python` or `opencv-python-headless` - Windows / Linux --- ## Who Is This For - **Stock photographers** — upload TIFF masters to Adobe Stock, Shutterstock, Getty - **Print & prepress** — 16-bit TIFF accepted directly, no conversion needed - **VFX / compositing** — EXR 32-bit for Nuke, DaVinci Resolve, Blender compositor - **Archiving** — store master files with full data intact, re-export to any format later --- ## Roadmap - [ ] Custom output folder via node parameter - [ ] LZW/ZIP compression option for TIFF - [ ] EXIF/IPTC metadata embedding (for stock workflows) - [ ] Multi-layer EXR with separate R/G/B/A channels --- ## Author [Orakul Studio](https://github.com/OrakulStudio) Chernihiv, Ukraine 🇺🇦 Flux2 · ComfyUI · RTX 4090 · No quantization · No compromises --- ## License MIT — use it, fork it, improve it. [ComfyUI-Orakul-SVP.zip](https://github.com/user-attachments/files/27979724/ComfyUI-Orakul-SVP.zip)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/ComfyUI-Manager#1050
No description provided.