The DPRW (Diffusion-based Perceptual Robust Watermarking) node is a custom node designed for ComfyUI, aimed at protecting generated images by embedding watermarks into latent noise. It leverages the characteristics of diffusion models to embed and extract watermark information without significantly affecting image quality. The DPRW node provides three main functional categories, assisting users in adding watermarks, extracting watermarks, and performing advanced sampling during the image generation process.
论文:"Diversity-Preserving Robust Watermarking for Diffusion Model Generated Images".
论文项目:https://github.com/lthero-big/DPRW/
DPRW(Diffusion-based Perceptual Robust Watermarking)节点是为 ComfyUI 设计的自定义节点,旨在通过将水印嵌入到潜在噪声中来保护生成的图像。它利用扩散模型的特性,在不显著影响图像质量的情况下嵌入和提取水印信息。DPRW 节点提供了三个主要功能类,帮助用户在图像生成过程中添加水印、提取水印并进行高级采样。
DPRLatent
: 用于创建带水印的潜在噪声。DPRExtractor
: 从潜在表示中提取水印。DPRKSamplerAdvanced
: 高级采样器,支持使用带水印的潜在噪声生成图像。在使用 DPRW 节点之前,您需要安装 ComfyUI 并确保其版本兼容。以下是安装步骤:
进入 ComfyUI 目录 在终端或命令行中运行以下命令:
cd ComfyUI/custom_nodes/
添加 DPRW 节点
将包含 DPRW 节点的 Python 文件复制到 ComfyUI 的 custom_nodes
目录
git clone https://github.com/lthero-big/Comfyui-DPRWatermark.git
启动 ComfyUI 在 ComfyUI 目录下运行:
python main.py
example_workflows
中包含一个使用FLUX生成DPRW水印图片并进行水印提取的工作流
以下是一个完整的工作流示例:
创建带水印噪声
EmptyLatentImage
节点生成初始潜在表示。DPR_Latent
节点,连接初始潜在表示,设置 message
为 "MyWatermark"。生成图像
DPR_KSamplerAdvanced
节点。add_dprw_noise
为 "enable"。VAEDecode
节点解码为图像。提取水印
DPRExtractor
节点,连接采样后的潜在表示。key
、nonce
和 window_size
,运行以提取水印。key
:256 位密钥(64 个十六进制字符),用于加密水印。nonce
:128 位 nonce(32 个十六进制字符),增强加密安全性。message
:水印内容,建议简短以确保嵌入效率。window_size
:窗口大小影响水印的鲁棒性和容量,建议从小值开始测试。DPRW 节点的使用涉及创建带水印的潜在噪声、提取水印以及使用高级采样器生成图像。以下是每个类的详细说明和使用方法。
功能:将水印嵌入到潜在噪声中。
| 参数 | 类型 | 默认值 | 描述 |
|------------------|---------|--------------------------------------------|----------------------------------------|
| init_latent
| LATENT | - | 初始潜在表示(必须是包含样本的字典) |
| use_seed
| INT | 1 (0 或 1) | 是否使用固定种子 (1 表示是,0 表示否) |
| seed
| INT | 42 | 随机种子,范围 [0, 0xffffffff] |
| key
| STRING | "5822ff9cce6772f714192f..." | 256 位加密密钥(64 个十六进制字符) |
| nonce
| STRING | "05072fd1c2265f6f2e2a40..." | 128 位加密 nonce(32 个十六进制字符) |
| message
| STRING | "lthero" | 要嵌入的水印消息 |
| latent_channels
| INT | 4 (4 或 16) | 潜在通道数,若非FLUX等模型,只能使用4;FLUX模型必须使用16 |
| window_size
| INT | 1 | 水印嵌入窗口大小,影响鲁棒性和容量 |
DPR_Latent
节点。LATENT
类型,例如从 EmptyLatentImage
节点生成)。key
和 nonce
用于加密水印,确保安全性。message
是您想嵌入的信息(例如版权声明)。window_size
建议从 1 开始,根据需求调整(较大值增强鲁棒性)。LATENT
类型)。LATENT
:包含带水印噪声的潜在表示。功能:从潜在表示中提取嵌入的水印。
| 参数 | 类型 | 默认值 | 描述 |
|---------------|---------|--------------------------------------------|----------------------------------------|
| latents
| LATENT | - | 包含水印的潜在表示 |
| key
| STRING | "5822ff9cce6772f714192f..." | 用于解密的密钥(必须与嵌入时一致) |
| nonce
| STRING | "05072fd1c2265f6f2e2a40..." | 用于解密的 nonce(必须与嵌入时一致) |
| message
| STRING | "lthero" | 原始消息,用于准确性评估 |
| window_size
| INT | 1 (1 至 100) | 提取时的窗口大小(必须与嵌入时一致) |
DPR_Extractor
节点。DPRLatent
或 DPRKSamplerAdvanced
)。key
、nonce
和 window_size
。STRING
:提取的二进制水印(位字符串)。STRING
:解码后的消息(文本字符串)。LATENT
:原始潜在表示(用于进一步处理)。key
或 nonce
不匹配,将无法正确提取水印。功能:使用带水印的潜在噪声生成图像。
| 参数 | 类型 | 默认值 | 描述 |
|--------------------------|--------------|---------------------------|----------------------------------------|
| model
| MODEL | - | 扩散模型 |
| add_dprw_noise
| STRING | "enable" / "disable" | 是否使用 DPRW 水印噪声 |
| add_noise
| STRING | "enable" / "disable" | 是否添加常规噪声 |
| noise_seed
| INT | 42 | 噪声种子,范围 [0, 0xffffffffffffffff] |
| steps
| INT | 20 (1 至 10000) | 采样步数 |
| cfg
| FLOAT | 8.0 (0.0 至 100.0) | CFG 值(引导强度) |
| sampler_name
| STRING | KSampler.SAMPLERS | 采样器类型(如 DDIM、Euler 等) |
| scheduler
| STRING | KSampler.SCHEDULERS | 调度器类型 |
| positive
| CONDITIONING | - | 正面条件 |
| negative
| CONDITIONING | - | 负面条件 |
| latent_image
| LATENT | - | 输入潜在图像 |
| dprw_latent_noise
| LATENT | - | DPRW 带水印噪声(从 DPRLatent
输出) |
| start_at_step
| INT | 0 (0 至 10000) | 开始步数 |
| end_at_step
| INT | 10000 (0 至 10000) | 结束步数 |
| return_with_leftover_noise
| STRING | "disable" / "enable" | 是否返回带剩余噪声的图像 |
DPR_KSamplerAdvanced
节点。model
:扩散模型(例如 Stable Diffusion 模型)。latent_image
:初始潜在图像。dprw_latent_noise
:从 DPRLatent
输出的带水印噪声。positive
和 negative
:条件(通常来自文本提示)。add_dprw_noise
设为 "enable" 以使用水印噪声。sampler_name
(如 "ddim")和 scheduler
。LATENT
:生成的潜在表示,可进一步解码为图像。通过以上步骤,您可以快速上手 DPRW 节点,为您的图像生成添加水印保护!如果有任何问题,请查阅日志或咨询 ComfyUI 社区。