
这个工具解决什么问题
现在出图基本离不开 AI:一套商品图、一批封面、几十张分镜,可能是 ComfyUI 跑的、Midjourney 出的,也可能是 ChatGPT 或即梦生成的。生成完打开文件夹,看到的是这样一堆名字:00012-1234567890.png、ComfyUI_00001_.png、ChatGPT Image 2026年5月3日 15_22_11.png、xxx_upscaled_4.png。麻烦有三处:一是看不出先后顺序,想按生成顺序交稿得自己数;二是尺寸五花八门,512x768、832x1216、1024x1024 混在一起,上传到后台或投稿时对不齐;三是名字里带着一串机器码,直接发给客户或同事很不专业。手工一个个改,几十张就是小半个小时,还容易把顺序搞乱。
- 原来的做法:在资源管理器里全选、按 F2 重命名成「新建文件夹 (1)」这种名字,再把尺寸不一的图手工挑出来分类;或者干脆不改名,交付时再一张张解释「这张是主图、那张是细节图」
- 用这个工具:选好文件夹点一下按钮,工具自动识别每张图的来源、按生成序号排序、按规则重新编号命名,需要的话再按尺寸自动分到 1024x1024/ 这类子目录里
- 省下来的:几十张图的整理从半小时压到几秒,顺序不会错,尺寸一眼能看出来
技术实现
整个工具只用 Python 标准库(tkinter + struct + csv + shutil),运行期不需要 pip 安装任何东西,打包后是单个 exe,全程本地处理、不联网、不上传任何图片。技术上有三个刻意的取舍:第一,读图片宽高不引 Pillow,而是自己解析五种格式的文件头——只需要宽高这一个信息,为它引入几十 MB 的图像库不划算,单文件 exe 因此能控制在 10MB 以内;第二,改名这类有风险的操作一律「先规划、后执行」,先把排序、命名、目标路径、重名冲突全部算完再动文件,冲突消解放在计划阶段,保证绝不覆盖用户已有的文件;第三,就地改名走两阶段提交并强制留一份改名记录,改坏了能原样退回去。界面与核心逻辑分离,解析、识别、规划、执行四层都是纯函数,可以脱离界面单独做回归测试。
- 零依赖读宽高:自己解析五种图片文件头:read_image_size() 按魔数分派:PNG 读 IHDR 的 4 字节宽高(大端);JPEG 逐段扫描找 SOFn,并排除落在 0xC0-0xCF 区间但不是帧起始的 0xC4/0xC8/0xCC;GIF 直接读逻辑屏幕描述符的第 6-9 字节,不需要解 LZW;BMP 兼容 BITMAPCOREHEADER(12 字节) 与 40 字节以上两种 DIB 头,高度为负时取绝对值;WebP 按第 12 字节起的 fourcc 分 VP8X / VP8L / VP8 三种取值路径。全程只读文件头不加载像素,坏图一律返回「尺寸未知」而不抛异常。
- 生成序号抽取必须卡字母数字边界:用 (?<![0-9A-Za-z])(\d+)(?![0-9A-Za-z]) 而不是朴素的 \d+。这是踩过坑的:Gemini_Generated_Image_a1b2c3.png 里的 a1b2c3 会被朴素正则拆成 1、2、3,于是整批 Gemini 图都被赋上序号 3、排序全乱。抽到数字串后还按工具习惯取用——SD WebUI 取第一个(00012-1234567890 里 00012 是序号),Midjourney / ComfyUI 取最后一个,其余取第一个长度 ≥2 的数字串,避免把分辨率当成序号。
- 13 条指纹正则识别出图来源:GENERATOR_PATTERNS 覆盖 Stable Diffusion WebUI、ComfyUI、Midjourney、ChatGPT/DALL·E、Gemini、豆包/Seedream、即梦、通义万相、可灵、Sora、NovelAI、FLUX、SD 网格图。识别结果既用于命名模板里的 {gen} 占位符,也显示在结果表的「来源」列;识别不出来统一记为「未识别」,不影响改名。
- 先规划后执行 + 重名自动让位:build_plan() 只做纯计算,把排序、模板渲染、目标路径、冲突消解一次算完;execute_plan() 才碰文件。冲突判定同时看两处:本批次已占用的目标路径,以及磁盘上已存在且不属于本批次源文件的路径——命中就追加 _2、_3 后缀。也就是说覆盖用户文件这件事在逻辑上不可能发生,只有就地改名时「A 改成 B 的名字」被放行(因为 B 也在本批次里会被改走)。
- 就地改名的两阶段提交与撤销记录:直接 rename 会遇到连环撞名(A→B 时 B 还存在)。做法是先把所有源文件改成 .__renaming_<i>__.ext 临时名,再逐个改成最终名;某一步失败会尽力把临时名还原,并把失败原因返回给界面弹窗。改名记录 CSV(UTF-8 BOM,Excel 双击不乱码)在改名之前就落盘,列含 子目录/旧文件名/新文件名/宽/高/生成器;undo_from_record() 倒序恢复,只处理「新名在、旧名不在」的行,个别文件被手动动过也不影响其余恢复。
- 后台线程 + 队列刷新,界面不假死:tkinter 不允许跨线程操作控件。扫描、改名、撤销都跑在 threading.Thread 里,用 queue.Queue 回传 status / progress / fill / finish / error 五类消息,主线程用 root.after(80, self._pump) 轮询消费并刷新进度条与表格。统一入口 _run_bg() 把后台异常兜成弹窗提示;另接管 sys.excepthook,未捕获异常会写 %TEMP%\image_tidy_crash.log 并弹窗,避免「点了没反应」。
技术栈:Python 3.8+、零第三方依赖(纯标准库)、tkinter 图形界面、PyInstaller 单文件打包、自写图片文件头解析
已知局限:只能读静态图片的文件头:文件被截断或格式非常规时读不出宽高,会在「尺寸」列显示「尺寸未知」(不影响改名,只是不参与按尺寸分组)。不解析 PNG tEXt 块与 EXIF 里的 AI 提示词,所以按提示词归档需要定制。WebP 的 VP8/VP8L 分支按偏移解析,遇到非标准封装可能读不出尺寸。图片处理类需求(缩放、转码、打水印)本工具不做,那需要引入图像库,另做更合适。
操作教程
- 打开程序并选文件夹
双击「AI 出图批量重命名整理.exe」。点「源文件夹」右边的「选择文件夹…」,选中装着 AI 出图的目录;也可以直接把文件夹拖到程序图标上,路径会自动填好
预期结果:窗口打开,源文件夹一栏出现你选的路径;若用拖拽方式启动,会自动开始扫描 - 点「① 扫描预览」看结果
点一下「① 扫描预览」,等进度条走完
预期结果:表格列出每张图:序号、原文件名、整理后的新文件名、尺寸、大小、来源(例如 ComfyUI / FLUX / Midjourney);下方状态栏显示共几张图、几种来源、几种尺寸、几张能取到生成序号 - 需要的话调整命名规则
改「文件名前缀」;在「命名模板」下拉里选一个(如 {n}_{size}),也可以直接输入;「序号位数」决定补零长度,「起始序号」决定从几号开始;「排序依据」默认按文件名里的生成序号,也可以换成修改时间
预期结果:改完再点一次「① 扫描预览」,表格里的「整理后的新文件名」立刻按新规则刷新 - 确认输出方式
默认选「复制并改名到输出文件夹」——原文件一张不动。输出目录会自动填成源目录下的「整理输出」,也可以自己点「选择文件夹…」换一个。如果确实要就地改名,切到「就地改名」
预期结果:选复制模式时输出文件夹一栏可编辑;切到就地改名后该栏置灰,提示会说明会在源目录写一份改名记录 - 点「② 开始整理」
点「② 开始整理」,等进度条走完。需要按尺寸分目录的话,先勾上「按尺寸分子文件夹」再点
预期结果:弹出完成提示,写明整理了几张、跳过几张;点「打开目标文件夹」能看到整理后的结果 - 导出清单 / 需要时撤销
点「导出清单 CSV…」把「原文件名 → 新文件名 → 尺寸 → 大小 → 来源」导成一份 CSV 交付留档;就地改名改错了,点「撤销一次改名…」选源目录里的「改名记录_时间.csv」即可恢复
预期结果:CSV 用 Excel 双击打开中文不乱码;撤销后文件名回到改名前,与原来完全一致
复制模式下原文件不会被修改,随便试都不会出事。第一次用建议先用复制模式跑一遍,确认命名规则符合预期,再决定要不要就地改名。
常见问题
技术实现与后续维护
本工具由我们自行开发并持续维护,每次改动都在本地跑过完整自测。结构上刻意把核心逻辑与界面分开:解析、识别、规则、执行四层都是纯函数,可以脱离界面单独做回归;改名这类有风险的操作一律「先规划、后执行」,就地改动还会留一份可撤销的记录。下面说明它的技术构成与可扩展方向,方便你判断是否契合自己的场景。
技术构成:
界面层—— tkinter 窗体:文件夹选择区、命名规则区、执行按钮区、结果表格与进度条;耗时任务走后台线程 + 队列回传刷新解析层—— PNG / JPEG / GIF / BMP / WebP 五种文件头解析,零依赖取宽高,坏图不抛异常识别层—— 13 条出图工具指纹正则,以及带字母数字边界约束的生成序号抽取规则层—— 命名模板渲染(8 个占位符)、Windows 非法字符清洗、自然排序(数字段优先)执行层—— 先规划后执行、重名冲突消解、两阶段就地改名、按记录撤销、清单 CSV 导出
运行环境:
运行环境:Windows 10/11(64 位)。免安装——解压后双击 exe 即可,不需要装 Python、不需要联网、不需要任何运行库;程序全程在本机处理图片,不上传任何文件。运行内存占用视图片数量与尺寸而定(程序只读文件头,不加载图片像素)。
可扩展方向:
- 接入图像库,支持统一缩放、格式转换、批量加水印
- 解析 PNG tEXt 块与 EXIF 里的 AI 提示词,按提示词归档并写入清单
- 重复图检测:同批内算内容哈希,把完全相同的图归到「_重复」子目录
- 命名规则升级为小规则集,支持按尺寸走不同前缀等条件分支
- 监听某个导出目录,出现新图自动整理(适合长期批量出图的流程)
本工具免费提供使用,但不对外分发源码。如果你需要在本工具基础上做功能调整、对接内部系统或长期维护,可以联系我们做二次开发,源码与工程文档可在定制合作中一并交付。
需要其它功能?可以定制
这个工具只做一件事:用 AI 生成了一堆图,文件名乱、尺寸不统一,整理费时间。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。
常见的定制需求:
- 出图后自动统一尺寸、加水印并连续编号
- 把生成提示词写进文件名或清单,方便复盘与复用
- 按项目 / 角色 / 批次自动分目录归档
- 对接你们的内部素材库或电商后台上传流程
- 把图片整理这一步接进现有的批量交付脚本
- 联系方式:邮箱/微信见站内「联系我们」页面,或在本文下方留言
- 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
- 交付形式:定制项目可交付可执行程序,按需一并交付源码与工程文档,支持长期维护
使用说明与免责声明
- 本工具在本地运行,不联网、不上传任何数据到服务器。
- 涉及文件改写的功能,请在使用前备份原始文件。
- 软件完全免费,可自由使用与转发,请勿用于倒卖。
- 因误操作造成的数据问题请自行承担。

