Files
facok-ComfyUI-LCS/README_zh.md
T

7.2 KiB
Raw Blame History

ComfyUI-LCS

基于潜在颜色子空间(Latent Color Subspace)的免训练颜色控制。

注意: 本项目为非官方社区实现。官方代码见 ExplainableML/LCS。

基于论文 "The Latent Color Subspace"(ICML 2026):扩散模型潜在 patch 空间中的颜色完全存在于一个 3 维子空间(PCA 捕获 100% 颜色方差),剩余 61 维编码结构与细节,与颜色正交。

本插件在扩散采样过程中直接操作 3D LCS 控制颜色——无需训练、无需 LoRA、无需后处理。

English README

LCS 与传统后处理调色的区别

LCS 在扩散采样过程中操作,而非生成之后——这是与传统调色(Photoshop、滤镜等)的根本区别。

传统后处理 LCS
时机 VAE 解码后,像素空间 采样过程中,潜在空间
机制 对成品图像施加颜色滤镜 在生成中途修改 3D 颜色子空间
模型感知 无——结构已定型 模型在后续步骤中自适应颜色偏移
效果 颜色容易显得"涂上去的" 颜色与内容自然融合

例:想要暖橙色日落,后处理会给全图叠橙色(阴影和肤色变脏),而 LCS 在采样早期推动颜色子空间,模型生成的云层、光照、反射与暖色调内在一致。

核心发现:颜色与结构在潜在 patch 空间中正交——可以单独控制颜色而不干扰结构。

已测试模型

模型 状态
FLUX 已测试
z-image 已测试
z-image-turbo 已测试

LCS 按 VAE 校准,理论上适用于任何使用兼容 VAE 架构的模型。欢迎反馈其他模型的测试结果。

功能

  • 颜色引导 — 将颜色推向任意目标色
  • 批量多色 — 为批次中每张图像指定不同颜色
  • 色调调整 — 对比度、亮度、饱和度、色温,支持一键预设
  • 局部控制 — 可选遮罩,实现区域性颜色变化
  • 潜在颜色预览 — 无需 VAE 解码即可可视化颜色结构
  • 步骤观察器 — 保存每步颜色预览,用于调试

安装

cd ComfyUI/custom_nodes
git clone https://github.com/facok/ComfyUI-LCS.git

依赖(通常 ComfyUI 已自带):

pip install einops safetensors

快速开始

基本颜色控制

LCS Load Data → LCS Color Intervene → KSampler
                       ↑
                  (选择颜色)
  1. LCS Load Data — 连接 VAE(首次运行自动校准)
  2. LCS Color Intervene — 连接 MODEL 和 LCS_DATA,选择目标颜色
  3. 将输出 MODEL 连接到 KSampler

色调调整

LCS Load Data → LCS Tone Adjust → KSampler
  1. LCS Load Data → LCS Tone Adjust
  2. 选择预设(如 "Cinematic")或手动调整滑条

3d3c82eb0e89ed1608e40ac7a8cc3408

批量多色生成

LCS Load Data → LCS Color Batch → KSampler
                      ↓
                  batch_size → EmptyLatentImage

输入逗号分隔的十六进制颜色(如 #FF0000,#00FF00,#0000FF),每个颜色对应一个批次项。

节点一览

校准

节点 说明
LCS Load Data 自动校准并按 VAE 缓存 LCS 数据。通过 VAE 权重指纹自动管理缓存——连接 VAE 即可。

每个 VAE 只需校准一次,结果自动缓存,后续运行瞬时加载。

干预

节点 说明
LCS Color Intervene 将颜色引导至目标色。支持 Type I(LCS 平移)、Type II(HSL 偏移)或插值模式。
LCS Color Batch 每个批次项施加不同目标颜色。输出 batch_size 可连接 EmptyLatentImage。
LCS Tone Adjust 对比度、亮度、饱和度、色温调整。预设下拉菜单,滑条实时同步。

观察

节点 说明
LCS Preview Colors 将潜在颜色解码为 RGB 预览图,无需 VAE 解码。
LCS Step Observer 将每步颜色预览 PNG 保存至 ComfyUI 临时目录。

干预模式

模式 说明 适用场景
interpolated(默认) 以 sigma 为权重混合 Type I 和 Type II 通用场景
type_i 3D LCS 空间中的直接平移 强烈的全局颜色偏移
type_ii 通过双锥几何进行逐 patch HSL 插值 精确的局部颜色控制

关键参数

  • strength(0.0–2.0):干预强度。1.0 = 完整干预,0.0 = 无干预。
  • start_step / end_step:干预步骤范围。论文最优:50 步中的第 8–10 步。
  • mask:可选。下采样至 patch 网格分辨率,用于局部控制。

色调预设

选择预设后滑条实时更新。可在预设基础上微调。选择 Custom 可完全手动设置。

预设 对比度 亮度 饱和度 色温
Base 1.0 0.0 1.0 0.0
Cinematic 1.20 -0.05 0.90 0.05
HDR 1.40 0.0 1.20 0.0
Vivid 1.10 0.0 1.50 0.0
Dramatic 1.50 -0.10 0.85 0.0
Low Key 1.30 -0.20 0.80 0.0
High Key 0.80 0.20 0.90 0.0
Warm 1.05 0.03 1.10 0.30
Cool 1.05 0.0 1.05 -0.30
Desaturated 1.0 0.0 0.40 0.0

工作原理

  1. 投影 — 将去噪预测转换到 64D patch 空间,投影到 3D LCS 基底
  2. 分解 — 将 3D 颜色坐标与 61D 结构残差分离
  3. 归一化 — 使用学习的 alpha/beta 统计量变换至参考时间步(t=50)
  4. 操作 — 在 3D LCS 中偏移颜色、调整色调或进行其他变换
  5. 重建 — 反归一化,加回保留的 61D 残差,转换回潜在空间

61D 残差(结构、纹理、细节)始终不被修改——只有 3D 颜色子空间会被改变。

文件结构

ComfyUI-LCS/
├── __init__.py           # 入口(V3 + V2 兼容)
├── requirements.txt
├── core/
│   ├── calibration.py    # PCA 校准流程
│   ├── color_space.py    # 双锥 LCS ↔ HSL 映射
│   ├── defaults.py       # 论文中的 Alpha/beta 表
│   ├── lcs_data.py       # LCSData 数据类
│   ├── patchify.py       # Patch ↔ 潜在空间转换
│   └── timestep.py       # Sigma/时间步工具
├── nodes/
│   ├── calibrate.py      # LCSLoadData(自动校准 + 缓存)
│   ├── intervene.py      # LCSColorIntervene, LCSColorBatch, LCSToneAdjust
│   └── observe.py        # LCSPreviewColors, LCSStepObserver
├── data/                 # 缓存的校准文件
└── web/js/
    └── tone_preset.js    # 前端预设同步

引用

官方仓库:ExplainableML/LCS

@article{pach2026latentcolorsubspace,
  title={The Latent Color Subspace: Emergent Order in High-Dimensional Chaos},
  author={Mateusz Pach and Jessica Bader and Quentin Bouniot and Serge Belongie and Zeynep Akata},
  journal={arxiv},
  year={2026}
}

致谢

感谢 Mateusz Pach、Jessica Bader、Quentin Bouniot、Serge Belongie 和 Zeynep Akata,他们的研究使免训练颜色控制成为可能。

许可证

MIT