Files
monkeyforever2andClaude Fable 5 29d541afa3 v4: honest iPhone 17 ISP pipeline, Photographic Styles, UI fixes
Engine rewrite:
- Remove fake Display P3 stage (sRGB->XYZ->P3 round-trip was a no-op
  hiding a plain saturation multiply) and redundant strength multipliers
- Fix box blur: was a trailing window shifted diagonally with zero-padded
  borders; now centered with edge replication
- Fix non-monotonic highlight soft-clip (banding above white)
- White balance and tone mapping in linear light (luminance-preserving)
- Smart HDR: Durand-style log-luminance base/detail local tone mapping
- Color science in Oklab: hue-preserving vibrance, real skin-tone
  protection mask, subtle split-tone signature
- Single two-scale detail stage (texture + clarity) with tanh halo
  suppression, replacing three overlapping sharpeners
- Photon-weighted grain, natural-falloff vignette in linear light
- 15 iPhone 17 Photographic Styles presets (moods + undertones + B&W)
- Delete dead camera_profiles.py

LUT engine: tetrahedral interpolation (industry standard) with chunked
memory-safe application; document that the Apple Log LUT expects log input

UI: rebuild for new params; sizing via getMinHeight/getMaxHeight +
computeSize (no more guessed heights), remount safety net for workflow
reload store clears, sanitize values restored by position from old saves

Tests: 16-case suite covering blur centering, Oklab round-trip, styles,
skin protection, tetrahedral exactness, node API

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 01:17:12 +02:00

182 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📷 Camera Forensic Realism Engine v4
Makes AI-generated images look like they were shot on an **iPhone 17** by emulating Apple's ISP color pipeline — with honest, physically-grounded color science.
> No placebo sliders. Every stage in v4 does real, verifiable work: white balance and tone mapping in linear light, local HDR in log-luminance, color rendering in Oklab, and tetrahedral LUT interpolation.
---
## ✨ Processing Stages
| # | Stage | What It Does |
|---|-------|-------------|
| 1 | **White Balance** | Channel gains in **linear light**, luminance-preserving (warming doesn't brighten) |
| 2 | **Global Tone** | Exposure, shadow lift, midtone contrast around the 0.18 pivot, Reinhard highlight rolloff |
| 3 | **Smart HDR** | Durand-style local tone mapping in log-luminance — shadows up, highlights down, detail untouched |
| 4 | **Color Science** | **Oklab** rendering: hue-preserving vibrance, real skin protection, iPhone split-tone (cool shadows / warm highlights) |
| 5 | **Detail** | Single two-scale stage (texture + clarity) with tanh halo suppression, luminance-only |
| 6 | **Optics & Sensor** | Natural 1/(1+kr²)² vignette in linear light + photon-weighted grain |
Plus **14 iPhone 17 Photographic Styles** presets (undertones + moods) applied as offsets on top of your sliders.
### What changed from v2/v3
- ❌ **Removed the fake "Display P3" stage** — it converted sRGB→XYZ→P3 and back (a mathematical no-op) and the only real effect was a plain saturation multiply. Replaced with genuine Oklab vibrance.
- ❌ **Removed redundant multiplier sliders** (`wb_strength`, `tone_strength`, `sensor_strength`) — `master_strength` is now the one honest mix control.
- ❌ **Merged three overlapping sharpeners** (detail boost / Deep Fusion / ISP sharpening) into one coherent detail stage.
- 🐛 **Fixed the box blur** used by HDR and sharpening — it was a trailing window that shifted every blur diagonally and darkened the top/left borders.
- 🐛 **Fixed the non-monotonic highlight clip** that could cause banding above white.
- ✅ Skin handling is now an actual protection mask (Oklab hue ≈ 50°, plausible chroma/lightness) instead of a brightness filter on every warm pixel.
---
## 🚀 Installation
### Option 1: Git Clone (Recommended)
```bash
cd ComfyUI/custom_nodes
git clone https://github.com/MONKEYFOREVER2/ComfyUI-CameraForensicRealism.git
cd ComfyUI-CameraForensicRealism
pip install -r requirements.txt
```
Restart ComfyUI.
### Option 2: Manual Download
1. Click the green **Code** button → **Download ZIP**
2. Extract into `ComfyUI/custom_nodes/` as `ComfyUI-CameraForensicRealism`
3. `pip install -r requirements.txt`
4. Restart ComfyUI
---
## 🎯 Finding the Node
**Right-click** → **Add Node** → **image/forensic** → **📷 Camera Forensic Realism (iPhone 17)**
## ⚡ Quick Start
1. Place the node **after** your detailers/post-processing and **before** SaveImage
2. Pick a **Photographic Style** (start with `Standard`)
3. Defaults are tuned for the iPhone 17 look — adjust to taste
```
[Generate] → [Upscale] → [FaceDetailer] → [📷 Camera Forensic Realism] → [SaveImage]
```
---
## 🔧 Parameters
### Master
| Parameter | Default | Description |
|-----------|---------|-------------|
| `photographic_style` | `Standard` | iPhone 17 Photographic Style preset (see below) |
| `master_strength` | `0.85` | Final blend between original and processed image |
| `seed` | `0` | Grain reproducibility |
### Photographic Styles
**Moods:** `Standard`, `Natural`, `Luminous`, `Vibrant`, `Dramatic`, `Quiet`, `Cozy`, `Ethereal`, `Muted B&W`, `Stark B&W`
**Undertones:** `Amber`, `Gold`, `Rose Gold`, `Cool Rose`, `Neutral`
Styles are applied as offsets on top of your slider values, mirroring how Apple's 2nd-gen Photographic Styles re-tune the same pipeline.
### White Balance
| Parameter | Default | Description |
|-----------|---------|-------------|
| `enable_white_balance` | `True` | Linear-light channel gains, luminance-preserving |
| `wb_temperature` | `0.12` | Cool (blue) ← → Warm (orange). iPhone AWB ≈ 0.1–0.15 |
| `wb_tint` | `0.0` | Green ← → Magenta |
### Global Tone
| Parameter | Default | Description |
|-----------|---------|-------------|
| `enable_tone` | `True` | Linear-light tone mapping |
| `exposure` | `0.05` | EV adjustment — iPhone meters slightly bright |
| `contrast` | `0.15` | Midtone contrast around the 0.18 photographic pivot |
| `shadows` | `0.35` | Luminance-masked shadow lift + tiny black-point lift |
| `highlights` | `0.5` | Reinhard soft-knee rolloff — smooth, monotonic, never clips |
### Smart HDR
| Parameter | Default | Description |
|-----------|---------|-------------|
| `enable_smart_hdr` | `True` | Local tone mapping in log-luminance |
| `hdr_strength` | `0.35` | Local dynamic range compression amount |
### Color Science (Oklab)
| Parameter | Default | Description |
|-----------|---------|-------------|
| `enable_color` | `True` | Perceptual color rendering |
| `vibrance` | `0.4` | Smart saturation — boosts muted colors more, hue-preserving |
| `skin_protection` | `0.7` | Shields skin from vibrance + caps skin chroma (no orange faces) |
| `shadow_tint` | `0.25` | Subtle cool/blue shadows — the iPhone blue-black signature |
| `highlight_warmth` | `0.2` | Golden warmth in highlights |
### Detail
| Parameter | Default | Description |
|-----------|---------|-------------|
| `enable_detail` | `True` | Two-scale luminance detail, halo-suppressed |
| `texture` | `0.35` | Fine scale (~1px): pores, fabric, hair |
| `clarity` | `0.2` | Mid scale (~2% of frame): local punch |
### Optics & Sensor
| Parameter | Default | Description |
|-----------|---------|-------------|
| `enable_optics` | `True` | Vignette + grain |
| `grain` | `0.2` | Photon-weighted noise, stronger in shadows |
| `vignette` | `0.25` | Natural falloff in linear light — iPhone is well-corrected, keep low |
---
## 🎨 LUT Nodes
Two dedicated nodes for applying `.cube` 3D LUTs with **tetrahedral interpolation** (the industry-standard method used by Resolve and camera ISPs — more accurate than trilinear, especially on the neutral axis).
### Recommended settings
I recommend setting the strength to around 0.05 to 0.10
```
[🎨 LUT Loader] → [🎨 LUT Apply] → [SaveImage]
↑
[Your Image]
```
### 🎨 LUT Loader
| Parameter | Description |
|-----------|-------------|
| `lut_name` | Dropdown of `.cube` files from the `luts/` folder |
### 🎨 LUT Apply
| Parameter | Default | Description |
|-----------|---------|-------------|
| `strength` | `0.85` | 0.0 = original, 1.0 = full LUT |
### Bundled LUTs
| File | Type | Correct input |
|------|------|--------------|
| `AppleLog2_to_Rec709_33_Grid.cube` | Technical conversion | **Apple Log footage only** — do *not* apply to regular sRGB images |
| `Presetpro - Portra 800.cube` | Creative film look | Regular sRGB images |
Drop your own `.cube` files into `luts/` and restart ComfyUI.
---
## 📋 Requirements
- **ComfyUI** (latest version recommended)
- **Python 3.10+**
- **numpy** and **torch** (already included with ComfyUI)
## 🤝 Contributing
Pull requests are welcome — new Photographic Style tunings, LUTs, or pipeline improvements.
## 📄 License
MIT License — free to use, modify, and distribute.