comfyui-EncryptSave
comfyui image encrypt and save.
Nodes (1)
ComfyUI Encrypt Save
0.1.0:已实现并完成 Windows 本地验证。 提供独立的 Encrypt Save Image 节点,像内置 SaveImage 一样接收图片和文件名前缀,将完整 PNG(含工作流元数据)保存为 .png.enc。
使用无密码 XOR 混淆,文件自带还原参数,不需要密钥或联网;这不提供密码学保密。面向用户的一键还原工具后续单独开发,当前安装包不包含该工具。 现在保存的文件采用已固定的 CESV v1 格式。
安装
- 解压
comfyui-encrypt-save-0.1.0.zip,将其中的comfyui-encrypt-save文件夹放到ComfyUI/custom_nodes/。 - 确认入口是
ComfyUI/custom_nodes/comfyui-encrypt-save/__init__.py,避免重复套一层同名目录。 - 重启 ComfyUI 并刷新网页,搜索 Encrypt Save Image,或在
image/save分类中添加。
也可以在 ComfyUI 目录中通过 Git 安装:
git clone https://github.com/chou18194766xx/comfyui-EncryptSave.git custom_nodes/comfyui-encrypt-save
已有旧仓库安装时,在其原目录执行 git pull 更新。ZIP 升级时先将旧副本移出 custom_nodes,再放入新目录。旧工作流中的 EncryptSaveAES(Encrypt and Save (AES))需要替换为本版的 EncryptSaveImage;本版不读取旧 AES 文件。
使用 ComfyUI 已有的 PyTorch、NumPy 和 Pillow,无需安装 Crypto 等密码学库。如环境缺少 NumPy 或 Pillow,在 ComfyUI 使用的 Python 环境中安装本目录的 requirements.txt。
保存插件和 ComfyUI Encrypt Preview 分别安装、分别打包,互不依赖。
使用
将 IMAGE 接到 images,填写 filename_prefix 后执行。默认在 ComfyUI 配置的输出目录生成 ComfyUI_00001_.png.enc。节点显示保存数量、相对路径和下载链接;长列表可以在节点内滚动。点击“下载”获得原始 .png.enc 文件。
支持中文子目录、流水号、原生日期和节点变量。例如:
作品/%date:yyyy-MM-dd%/ComfyUI_%width%x%height%_%batch_num%
%batch_num% 从 0 开始。直接调用 ComfyUI API 时,日期和节点变量等前端模板需要由调用方先展开。
图片按原生规则量化为 8 位 PNG,保留分辨率与 RGBA 透明通道,压缩级别为 4。prompt、workflow 等元数据随整个 PNG 一起混淆;启动 ComfyUI 时使用 --disable-metadata,本节点也不写入这些元数据。无损还原指恢复生成的 PNG 字节,不是恢复输入张量的全部浮点精度。
节点的 images 输出直接传递原输入,可以继续连接其他节点。需要预览时,可以把同一图片分别接到保存、预览节点,也可以把保存节点输出接到独立的 Encrypt Preview Image。
保存遵守 ComfyUI 执行缓存:相同工作流命中缓存时展示已有文件,不重复落盘。需要再次保存时可修改前缀;仅修改前缀会复用上游图片。每次实际保存分配新流水号,不覆盖旧文件。
失败与资源边界
逐张编码与写入。插件创建的 .part 临时文件也只含混淆数据,不先写明文 PNG。发布前刷新文件,完整写入后才显示下载入口。
- 某张失败或用户取消:保留已经完成的文件,停止后续保存,向 ComfyUI 报错并清理未发布的临时文件。
- 磁盘满、权限不足、短写和重名竞争:不会用半成品覆盖已有文件;临时文件清理失败会报告警告。
- 下载文件已被移动或删除:显示文件不存在,不假报下载成功。
- 单张最多 67,108,864 像素,PNG 最多 512 MiB,每批元数据最多 16 MiB;不设固定批次数上限。
额外图像缓冲区按单张释放;ComfyUI 上游批量 IMAGE 张量本身仍占用内存。进程意外终止可能留下 .part,它们不会被当作完成文件,也不会自动扫描删除。
已验证范围
验证环境:Windows 10、Python 3.12.3、ComfyUI 0.35.0、前端 1.51.10、PyTorch 2.8.0 CPU、NumPy 2.5.2、Pillow 11.3.0。
- 18 项 Python 测试、6 项 JavaScript 测试通过,覆盖格式、独立还原、输入校验、写入故障、并发重名、取消和前端状态。
- 真实 ComfyUI 验证了独立安装、两个插件同时启用、缓存、中文路径、元数据开关、灰度/RGB/RGBA、下载、100 张批次,以及 8192×8192 灰度图片。
- 传统画布和 Nodes 2.0 的文件列表、历史恢复、下载均已检查;Nodes 2.0 的 100 条结果保持在固定滚动区域内,末尾文件实际下载完成。
同一 CPU、同一磁盘、同样的 100 张 1024×1024 RGB 输入,保存节点单次实测如下:
| 项目 | 本插件 | 内置 SaveImage | | --- | ---: | ---: | | 整批节点耗时 | 9.14 秒 | 8.42 秒 | | 本节点首张发布 | 103 毫秒 | 未单独采集 | | 节点期间观测到的 RSS 增量 | 16.8 MiB | 30.8 MiB |
测试机器为 Ryzen 7 2700X、约 32 GiB 内存;输入为 Kodak 照片的四种平移变体。这是一次 CPU 本地测试,不是所有图片和磁盘的速度或内存保证。每个文件比其内部 PNG 固定增加 48 字节。
Linux 尚未实际验证:本机 WSL 因缺少虚拟化组件无法启动;硬链接发布路径仅在 Windows 上做了故障测试。网络盘和掉电恢复未验证。前缀模板适配复用了前端内部 applyTextReplacements,其他前端版本仍需验证;helper 不可用时,模板展开会明确报错。
源码与协议
完整行为、CESV v1 文件头和后续客户端契约见 DESIGN.md。固定的完整文件样例见 format-example.json。新格式不读取旧项目的 AES 或像素打乱文件。
仓库中的 tests/README.md 提供测试说明,tests/fixtures/cesv-v1.json 包含灰度/RGB/RGBA 固定向量。原始集成与界面结果留存在本地开发工作区的 test-results/,不随仓库发布。安装 ZIP 只包含运行文件、用户文档和许可证,不含测试节点、测试结果或测试环境。