PickPix 是一个基于 Python + PySide6 的多方法图片对比、书签管理和批量裁剪工具,适合在多组结果图之间做逐帧对比、统一框选和批量导出。
当前版本支持:
- 多方法结果并排预览
- 本地目录与 SFTP 远程目录输入/输出
- 每个方法独立帧偏移
- 克隆方法与差分方法生成
- 每一帧单独维护裁剪框列表
- 工程保存、另存、导入恢复
- 书签跳转
- 当前帧批量裁剪与全帧批量裁剪
输出统一保存为 PNG。读取时优先按当前输入模板扫描,常见场景为 EXR/PNG 序列。
- 左侧预览区可同时显示多个方法的同一帧结果
- 方法列表支持勾选显示、全选、全不选
- 每个方法可以设置帧偏移,便于时序对齐对比
- 克隆:复制一个现有方法,方便设置不同偏移进行对比
- 差分:从两个源方法生成绝对误差图方法
说明:
- 差分方法会按当前帧实时生成,不依赖预先落盘文件
- 克隆方法和差分方法都会随工程文件保存和恢复
- 每一帧都有自己的裁剪框列表
- 切换帧时,不会再清空已经添加过的裁剪框
- 切回某一帧时,会自动恢复该帧之前保存的裁剪框列表
- 工程保存时会把所有帧的裁剪框一起写入工程文件
支持:
- 保存工程
- 工程另存
- 导入工程
工程文件会保存:
- 输入源列表
- 输出目标
- 当前帧
- 方法显示状态
- 方法偏移
- 克隆/差分方法定义
- 每一帧的裁剪框列表
- 书签
- 预览大小
- 缩放和平移状态
说明:工程文件中的远程输入/输出只保存服务器引用和远程路径,不再保存远程账号密码。服务器信息保存在软件自己的配置文件中。
- Python 3.10+
- Windows 已验证
依赖见 requirements.txt:
- Pillow
- numpy
- opencv-python
- paramiko
- PyYAML
- PySide6
安装依赖:
pip install -r requirements.txt如果在中国大陆环境安装较慢,可使用镜像:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple源码运行:
python pickpix.py当前入口为 pickpix.py,会启动 PySide6 图形界面。
仓库已配置 GitHub Actions 工作流 release.yml。
行为如下:
- 当代码 push 到
main或master时,自动在 Windows 环境构建dist/pickpix.exe - 构建后会补齐
dist/config/paths.yaml - 工作流会自动更新 GitHub 上 tag 为
latest的 Release - Release 中会上传以下产物:
pickpix.exepaths.yamlpickpix-windows.zip
如果需要,也可以在 GitHub Actions 页面手动触发一次发布。
支持两种常见组织方式。
方式 A:选择一个总目录,目录下每个子目录视为一个方法。
input_root/
method_a/
frame0001.exr
frame0002.exr
method_b/
frame0001.png
frame0002.png
方式 B:直接选择某个方法目录。
method_a/
frame0001.exr
frame0002.exr
远程 SFTP 输入与本地规则一致,只是路径位于服务器上。
输入扫描模板可在界面“设置”中修改。
规则:
- 每行一个模板
- 必须包含
{number}占位符 *可表示任意文本
示例:
frame{number}.exrframe{number}.png*.{number}.exr
推荐流程:
- 点击“添加输入文件夹”或“添加远程输入”。
- 点击“选择输出文件夹”或“选择远程输出”。
- 在右侧方法列表里选择需要显示的方法。
- 切换到目标帧。
- 鼠标左键拖拽绘制裁剪框。
- 点击“添加到裁剪列表”。
- 如有需要,继续为当前帧添加多个裁剪框。
- 切换到其他帧时,重复添加该帧自己的裁剪框。
- 完成后执行“批量裁剪当前帧”或“批量裁剪所有帧”。
- 如需中断后继续,可使用“保存工程”或“工程另存”。
- 支持勾选显示与隐藏
- 支持为每个方法单独设置偏移
- “克隆”用于复制当前方法
- “移除”会删除当前方法;如果有依赖它的差分方法,会一并删除
- “生成差分”会从两个源方法生成新的差分方法
- 上一帧 / 下一帧:循环切换
- 上 10 帧 / 下 10 帧:按 10 帧跳转,到首尾时自动停住
- 跳转:输入帧号后定位到指定帧
- 收藏当前帧 / 取消收藏当前帧
- 上一书签 / 下一书签 / 书签下拉跳转
- Ctrl + 鼠标滚轮:缩放
- 右键拖拽:平移
- 重置 1:1:恢复默认缩放和平移
- 顶部“预览大小”滑块:调整所有方法预览的单元尺寸
- 左键拖拽:绘制矩形框
- Shift + 左键拖拽:绘制正方形框
- 添加到裁剪列表:把当前框加入当前帧的裁剪框列表
- 双击裁剪框列表项:删除单个框
- 清空所有裁剪框:清空当前帧的裁剪框列表
- 手动输入坐标:通过 X、Y、宽度、高度直接生成当前框
- 右侧工具栏通过分隔条与左侧预览区分开
- 可以拖动中间分隔条调整左右宽度
会使用“当前帧”的裁剪框列表,对当前显示方法执行裁剪。
输出内容:
- 当前帧目录下每个方法的裁剪图:
frame帧号/method_x/frame帧号_box1.png、frame帧号_box2.png等 - 当前帧目录下每个方法的框可视化图:
frame帧号/method_x/frame帧号_boxes_map.png - 当前帧目录根部的总览图:
frame帧号/frame帧号_summary.png
会遍历所有“有裁剪框的帧”,并按每一帧各自的裁剪框列表处理。
也就是说:
- 帧 A 使用帧 A 的裁剪框
- 帧 B 使用帧 B 的裁剪框
- 没有裁剪框的帧会被自动跳过
输出内容:
- 每个方法每一帧的裁剪图
- 每个方法每一帧的框可视化图
说明:
- 该模式不会生成 summary 拼图
- 差分方法会在每一帧实时生成后再参与裁剪输出
output_root/
frame0001/
frame0001_summary.png
method_a/
frame0001_box1.png
frame0001_box2.png
frame0001_boxes_map.png
method_b/
frame0001_box1.png
frame0001_boxes_map.png
frame0002/
method_a/
frame0002_box1.png
服务器信息会保存在软件目录下的 config/paths.yaml 的 servers 节点中。你可以直接编辑 YAML,也可以在软件里点击“服务器管理”进行维护。
示例:
servers:
server_1:
label: Server 191
host: 1.2.3.4
port: 22
username: your_user
password: your_password说明:
- 可以配置多个服务器预设
- 可以在软件里新增、删除、修改服务器,并测试连接
- 远程输入和远程输出都会从这份服务器列表中选择
- 工程文件只会记录所选服务器的 key 和标签,不会保存密码
- 远程路径必须是绝对路径,且以
/开头
已验证的打包命令:
e:/study/Pickpix/.venv/Scripts/python.exe -m PyInstaller --noconfirm --clean --onefile --windowed --name pickpix pickpix.py打包完成后,需要保留配置文件:
dist/config/paths.yaml如果手动打包,记得把 config/paths.yaml 复制到 dist/config/paths.yaml。
pickpix.py
requirements.txt
config/
paths.yaml
pickpix_app/
backend/
frontend/
qt/
app.py
dialogs.py
flow_layout.py
preview_canvas.py
- 旧版 Tkinter 前端代码仍在仓库中保留作参考,但当前运行入口已经切换为 PySide6 前端
dist/pickpix.exe已可直接启动使用- 工程文件建议单独管理;虽然远程密码已不再写入工程文件,但服务器配置仍属于本机软件数据