ComfyUI-zveroboy-photo 是一套专为 ComfyUI 设计的自定义节点库,通过模拟真实相机的传感器特性、噪声模式和元数据(EXIF),为 AI 生成的图像注入“物理真实感”。
- GitHub:https://github.com/thezveroboy/ComfyUI-zveroboy-photo
这不仅是一个美学增强工具,更是一个研究性工具,用于探索当前 AI 图像检测器的边界。它证明了仅凭表面特征(如噪声分布、EXIF 缺失)不足以可靠地识别 AI 图像,从而推动检测技术向更深层的语义分析发展。

⚖️ 伦理声明:本工具旨在揭示检测算法的不完美性,促进更 robust 的防御技术发展,而非用于恶意欺骗或虚假信息传播。请负责任地使用。
主要目标:
- 研究 AI 图像检测器的漏洞——证明简单的特征(噪声、EXIF)不足以实现可靠的检测
- 模仿真实相机——添加真实的传感器特性、噪声和元数据
- 保护作者身份——使自动图像分类复杂化
- 增强照片真实感——添加美观的颗粒感和模拟胶片质感
节点描述
1. PhotoAddNoise(基础)
目的: 添加高斯噪声以保护 AI 检测器
参数:
noise_level(0.0-1.0)- 噪声强度
特性:
- 减少蓝色通道中的噪声(x0.8)以模仿真实传感器
- 所有通道均匀白噪声
使用场景:
- 快速基本保护
- 最小质量影响
- 值为 0.01-0.02 以获得微妙效果
2. PhotoAddGrain(美学)
目的: 添加胶片颗粒以获得视觉效果
参数:
grain_strength- 颗粒强度grain_size(1-10)- 颗粒大小
特性:
- 单色颗粒(亮度)
- 叠加混合算法
- 颗粒缩放以模仿不同胶片
使用场景:
- 艺术处理
- 模拟胶片摄影
- 不用于保护(太明显)
3. PhotoAddExif
目的: 嵌入相机元数据以模仿真实拍摄
参数:
preset- 相机选择(Canon/Sony/Nikon/Fujifilm/Leica/iPhone)artist、software、copyright- 作者数据body_serial、lens_serial- 序列号(自动生成)focal_length_mm、fnumber、exposure_1_over_s、iso- 拍摄参数datetime_original- 拍摄日期
特性:
- 返回 Base64 格式的 EXIF 字符串,用于节点间传输
- 使用
presets.py中的预设 - 自动生成随机序列号
使用场景:
- 在保存为 JPG 之前始终使用
- 用于模仿特定相机
- 与
PhotoSaveJpg结合使用
4. PhotoLoadRaw
目的: 加载 RAW 和 HEIC 图像并提取 EXIF
参数:
raw_file- 完整文件路径
支持的格式:
- HEIC(iPhone,通过 pillow-heif)
- DNG(Apple ProRAW、相机)
- NEF(尼康)
- ARW(索尼)
- CR2/CR3(佳能)
特性:
- 两阶段加载:先 Pillow,后 rawpy
- 提取现有 EXIF 数据
- 转换为 ComfyUI RGB 张量
使用场景:
- 使用相机/iPhone 原始文件
- 保持最大质量
- 提取元数据以供后续修改
5. PhotoSaveJpg
目的: 保存为 JPEG 并嵌入 EXIF 数据
参数:
exif_data- Base64 格式的 EXIF 字符串(来自 PhotoAddExif)filename_prefix- 文件名前缀quality(1-100)- JPEG 质量
特性:
- 保存到 ComfyUI 输出目录
- 文件名中包含时间戳
- 哈夫曼编码优化
使用场景:
- 最终保存
- 用于发布/分享
- 需要 EXIF 元数据时
6. PhotoSaveRaw
目的: 保存为无损格式(TIFF/DNG)并包含色彩矩阵
参数:
format- TIFF 或 DNGpreset- 用于矩阵的相机选择exif_data- 元数据
特性:
- DNG:写入 ColorMatrix1/2、AsShotNeutral、CalibrationIlluminant
- TIFF:带 EXIF 的标准无损格式
- 使用
tifffile确保正确的 DNG 结构 - 无损保留所有数据
使用场景:
- 最高质量存档
- 传输到专业编辑器
- 隐藏处理痕迹(TIFF 看起来像 RAW)
7. PhotoAdvancedNoise(传感器模拟)
目的: 高级相机传感器噪声模仿,用于绕过检测器
参数:
noise_strength(0.0-0.5)- 总体强度color_correlation- 拜耳模式模仿(每通道不同噪声)add_grain_layer- 额外颗粒层grain_size- 颗粒大小jpeg_compression- 最终压缩
特性:
- 散粒噪声:取决于像素亮度(arr ** 0.5)
- 读取噪声:恒定分量
- 色彩相关性:R x1.2、G x0.9、B x1.4(类似真实传感器)
- JPEG 伪影:掩盖 AI 平滑度
使用场景:
- 替代 PhotoAddNoise 以获得更好的保护
- 值为 0.005-0.008 以获得微妙效果
- 禁用
add_grain_layer以避免质量损失 jpeg_compression95-98
8. Realism7NoiseExif(一体化)
目的: 综合“一站式”处理,快速获得结果
参数:
- 所有 EXIF 参数(如 PhotoAddExif)
noise_level- 噪声jpeg_quality_first/final- 双重压缩random_color_jitter- 随机色彩校正jitter_strength- 抖动强度(亮度/色彩/对比度)
特性:
- 顺序:抖动 -> 噪声 -> JPEG(低质量)-> JPEG(高质量 + EXIF)
- 双重 JPEG 产生压缩伪影
- 色彩抖动模仿处理变化
使用场景:
- 无需节点链的快速处理
- 当需要一次性完成所有操作时
- 用于批量生成“真实”图像
典型工作流
工作流 1:基本 AI 图像保护
Load Image -> PhotoAddNoise (0.012) -> PhotoAddExif -> PhotoSaveJpg (95)
工作流 2:最大真实感
Load Image -> PhotoAdvancedNoise (0.006, grain=False) -> PhotoAddExif -> PhotoSaveJpg (96)
工作流 3:RAW 处理
PhotoLoadRaw -> PhotoAdvancedNoise -> PhotoAddExif -> PhotoSaveRaw (DNG)
工作流 4:美学处理
Load Image -> PhotoAddGrain (0.08, size=3) -> PhotoAddExif -> PhotoSaveJpg
参数建议
| 任务 | 噪声水平 | 颗粒 | JPEG 质量 | EXIF |
|---|---|---|---|---|
| 微妙保护 | 0.005-0.008 | 关 | 95-98 | 必需 |
| 中等保护 | 0.01-0.015 | 关 | 92-95 | 必需 |
| 强力保护 | 0.02-0.03 | 尺寸 2-3 | 88-92 | 必需 |
| 美学效果 | 0 | 0.08-0.12,尺寸 3-4 | 95+ | 可选 |
技术特性
- Base64 EXIF 传输 - 允许元数据在 ComfyUI 节点之间传输
- 色彩矩阵 - 使用 Calibration Illuminant 正确写入 DNG
- HEIC 支持 - 通过 pillow-heif 兼容 iPhone
- RAW 加载 - 适用于所有格式的通用加载器
- 相机预设 - 可扩展的
presets.py文件
重要说明
- 不要使用 >0.03 的噪声 - 肉眼可见
- 始终添加 EXIF - 没有它保护就毫无意义
- JPEG 压缩 95+ - 较低值会降低质量
- PhotoAdvancedNoise 优于 PhotoAddNoise - 更真实的传感器噪声
- 颗粒和噪声是不同的 - 颗粒用于美学,噪声用于保护















