[English Version] | Русская версия ниже
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.
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.
- ✅ TIFF 16-bit —
uint16, zero compression (IMWRITE_TIFF_COMPRESSION = 1), full0–65535range - ✅ 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=1before 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
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
cd ComfyUI/custom_nodes
git clone [https://github.com/OrakulStudio/ComfyUI-Orakul-SVP](https://github.com/OrakulStudio/ComfyUI-Orakul-SVP)
If venv is already activated ((venv) is lit at the beginning of the line)
pip install opencv-python-headless
KSampler → OrakulSVPNode → Save Image
- Add OrakulSVPNode to your workflow
- Connect
IMAGEfrom KSampler (or any image source) - Connect output to standard Save Image node
- Toggle
save_tiffandsave_exras needed in the node UI - 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 |
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/.
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.
| 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 |
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
- ComfyUI (all current versions)
- Python 3.10+
- PyTorch (CUDA / CPU)
opencv-pythonoropencv-python-headless- Windows / Linux
- 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
- 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
Orakul Studio — Chernihiv, Ukraine 🇺🇦
Flux2 · ComfyUI · RTX 4090 · No quantization · No compromises
MIT — use it, fork it, improve it.
Профессиональный экспорт из ComfyUI — PNG + TIFF 16-bit + EXR 32-bit float
Одна нода. Три формата. Без сжатия. Без компромиссов.
Создано для Flux2 в нативном разрешении на серьёзном железе.
ComfyUI по умолчанию сохраняет PNG в 8 бит. Для веба нормально. Для печати, стока или HDR постобработки нет: теряется половина тонального диапазона сразу при сохранении.
OrakulSVPNode встаёт в пайплайн после KSampler и молча экспортирует мастер-файлы параллельно:
| Формат | Битность | Применение |
|---|---|---|
| PNG | 8-bit | Веб, превью, загрузка на сток (через Save Image) |
| TIFF | 16-bit RAW | Печать, Photoshop, Lightroom, мастера для Adobe Stock |
| EXR | 32-bit float | HDR-композитинг, VFX, Nuke, DaVinci Resolve |
Все три одновременно если нужно. Или любая комбинация. Переключается в UI ноды.
- ✅ TIFF 16-bit —
uint16, нулевое сжатие (IMWRITE_TIFF_COMPRESSION = 1), полный диапазон0–65535 - ✅ EXR 32-bit float — настоящий HDR,
float32, линейные данные света сохранены полностью - ✅ Полная поддержка batch — каждый кадр батча сохраняется отдельным файлом
- ✅ Накопительный режим — существующие файлы не удаляются, нумерация продолжается
- ✅ Раздельное управление — TIFF и EXR включаются независимо в UI ноды
- ✅ Безопасная запись EXR — изолированный subprocess устанавливает
OPENCV_IO_ENABLE_OPENEXR=1до загрузки cv2, обходя уже инициализированную среду ComfyUI - ✅ Автозачистка — временные файлы EXR subprocess удаляются после каждого кадра
- ✅ Трёхязычные логи — RU / UA / EN
ComfyUI/
├── output/
│ ├── ComfyUI_00001_.png ← 8-bit PNG через Save Image ноду
│ └── 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
cd ComfyUI/custom_nodes
git clone https://github.com/OrakulStudio/ComfyUI-Orakul-SVP
pip install opencv-python-headlessПерезапустить ComfyUI. Нода появится в категории Orakul Studio.
KSampler → OrakulSVPNode → Save Image
- Добавить OrakulSVPNode в workflow
- Подключить
IMAGEот KSampler (или любого источника) - Выход ноды подключить к стандартному Save Image
- Включить
save_tiffи/илиsave_exrв UI ноды - Запустить генерацию
Входы ноды:
| Вход | Тип | По умолчанию | Описание |
|---|---|---|---|
images |
IMAGE | — | Тензор изображения из пайплайна |
save_tiff |
BOOLEAN | True |
Сохранить 16-bit TIFF в temp_svp |
save_exr |
BOOLEAN | False |
Сохранить 32-bit EXR в temp_svp |
Нода никогда не удаляет существующие файлы. Каждый прогон продолжает нумерацию с места остановки:
Прогон 1 (batch=2, TIFF+EXR): ORAKUL_RAW_0001.tif, ORAKUL_RAW_0001.exr
ORAKUL_RAW_0002.tif, ORAKUL_RAW_0002.exr
Прогон 2 (batch=1, только TIFF): ORAKUL_RAW_0003.tif
Прогон 3 (batch=1, только EXR): ORAKUL_RAW_0004.exr
Для сброса — вручную очистить папку output/temp_svp/.
OpenCV требует установки OPENCV_IO_ENABLE_OPENEXR=1 до импорта библиотеки. ComfyUI импортирует cv2 при запуске задолго до вызова вашей ноды. Установка переменной в runtime не имеет эффекта.
Решение: записать крохотный изолированный Python-скрипт и выполнить его через subprocess.run() с интерпретатором ComfyUI (sys.executable). Subprocess стартует чистым, устанавливает переменную первым делом, записывает EXR. Временный скрипт и временный .npy файл удаляются сразу после.
Никаких внешних зависимостей. Никакого monkey-patching. Никаких хаков ломающих другие ноды.
| Параметр | TIFF | EXR |
|---|---|---|
| Битность | 16-bit uint | 32-bit float |
| Сжатие | NONE | OpenEXR default |
| Цветовое пространство | RGB→BGR (OpenCV) | RGB→BGR (OpenCV) |
| Диапазон значений | 0–65535 | 0.0–1.0 float |
| Размер файла @ 2752×1536 | ~24–25 MB | ~48–50 MB |
RU 🛠️⚙️Orakul Engine: Режим MASTER RAW инициализирован TIFF(16-bit) EXR(32-bit float).
RU 🎞️🛠️Orakul Engine: Добавление батча (2 кадров)...
->RU 👍 TIFF 16-bit сохранен: ORAKUL_RAW_0001.tif
->RU 👍 EXR 32-bit float сохранен: ORAKUL_RAW_0001.exr
->RU 👍 TIFF 16-bit сохранен: ORAKUL_RAW_0002.tif
->RU 👍 EXR 32-bit float сохранен: ORAKUL_RAW_0002.exr
- ComfyUI (все актуальные версии)
- Python 3.10+
- PyTorch (CUDA / CPU)
opencv-pythonилиopencv-python-headless- Windows / Linux
- Стоковые фотографы — загружаете TIFF мастера на Adobe Stock, Shutterstock, Getty
- Полиграфия — TIFF 16-bit принимается напрямую в препресс без конвертации
- VFX / композитинг — EXR 32-bit для Nuke, DaVinci Resolve, Blender compositor
- Архивирование — храните мастера с полными данными, экспортируйте в любой формат позже
- Выбор папки через параметр ноды
- Опция сжатия LZW/ZIP для TIFF
- Встраивание EXIF/IPTC метаданных (для стоковых воркфлоу)
- Многослойный EXR с раздельными каналами R/G/B/A
Orakul Studio — Chernihiv, Ukraine 🇺🇦
Flux2 · ComfyUI · RTX 4090 · No quantization · No compromises
MIT — используй, форкай, улучшай.
