feat(ai-studio): export final selections
This commit is contained in:
@@ -27,7 +27,8 @@ GUI(PySide6 QTabWidget,6 Tab)
|
||||
├── ai 文本生成(提示词+旧标题→新标题)/ 图像生成(提示词+旧封面→新封面)
|
||||
├── image_studio AI工场项目/资产/job/终选顺序数据服务
|
||||
├── image_studio_images 远程原图安全下载、缩略图、原图落盘
|
||||
└── image_studio_generation cmhub 托管多图异步 submit/poll/download 编排
|
||||
├── image_studio_generation cmhub 托管多图异步 submit/poll/download 编排
|
||||
└── image_studio_export 终选图片本地 JPEG 转码、目录安全导出
|
||||
|
|
||||
v
|
||||
Google Chrome(每账号独立 --user-data-dir + --remote-debugging-port) + AI 服务(默认 cmhub 网关;direct 仅内部兼容/回滚)
|
||||
@@ -39,7 +40,7 @@ Shopee 卖家中心页面 / 本地图片目录
|
||||
真实组件:
|
||||
|
||||
- GUI 入口:根目录 `main.py` 调用 `app/gui/` 包(PySide6 + `QMainWindow` + `QTabWidget`,6 Tab);包入口 `app/gui/__init__.py` 提供 `main()` 并兼容 `from app import gui` / `from app.gui import MainWindow`;也支持 `python -m app`。
|
||||
- 核心模块统一放在正式代码包 `app/`:`appconfig.py`、`db.py`、`excel.py`、`config.py`、`accounts.py`、`chrome.py`、`editor.py`、`workers.py`、`ai.py`、`prompts.py`、`image_studio.py`、`image_studio_images.py`、`image_studio_generation.py`;CDP 底座迁入 `app/cdp.py`(当前根目录 `cdp.py` 为已验证来源)。
|
||||
- 核心模块统一放在正式代码包 `app/`:`appconfig.py`、`db.py`、`excel.py`、`config.py`、`accounts.py`、`chrome.py`、`editor.py`、`workers.py`、`ai.py`、`prompts.py`、`image_studio.py`、`image_studio_images.py`、`image_studio_generation.py`、`image_studio_export.py`;CDP 底座迁入 `app/cdp.py`(当前根目录 `cdp.py` 为已验证来源)。
|
||||
- 已验证脚本(重构进模块):`prototypes/demo.py`、`prototypes/set_title.py`、`prototypes/set_cover.py`、`prototypes/get_title.py`、`prototypes/cookies.py`、`prototypes/inspect_images.py`、`prototypes/grab.py`。
|
||||
- 外部依赖:本机 Google Chrome;Shopee;AI 服务(文本+图像;普通产品默认 cmhub 网关,由 `data/config.json` 的 `ai.cmhub` + `data/config/cmhub.json` 配置;direct 直连模型清单仅作为内部兼容/手工回滚路径保留);`openpyxl`。
|
||||
|
||||
|
||||
+5
-2
@@ -186,7 +186,7 @@
|
||||
│ [完整提示词输入框] │
|
||||
│ 类型[主图▼] 数量[4] 比例[1:1▼] cmhub扣点/余额提示 │
|
||||
│ [开始生成][停止] 进度条 运行日志 │
|
||||
│ 底部:主图终选 / 详情图终选(拖入、插入、重排、移出) │
|
||||
│ 底部:主图终选 / 详情图终选(拖入、插入、重排、移出) [导出终选] │
|
||||
└───────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -200,7 +200,10 @@
|
||||
- 终选列表内可拖动重排,Delete 或右键「移出终选」只移出终选,不删除照片池资产或本地文件;拖放/移出失败时刷新回 SQLite 中的持久化顺序。
|
||||
- 主图推荐 1:1;比例不匹配只用黄色轻提示和 tooltip 提醒,不硬拦。文件缺失或尚未下载的照片不能拖入终选。
|
||||
- 拉主图、下载原图、生图 submit/poll/download 均通过 worker 执行,主线程只刷新 UI;运行中禁用项目切换、模板编辑、源图选择、终选拖放和生成设置,停止为协作式停止。
|
||||
- 本小节当前覆盖 T-591/T-592:导出 JPEG 由 T-593 接入,不自动上传或修改蝦皮。
|
||||
- 「导出终选」可在主图/详情图未满目标数量时导出当前终选;主图和详情图总数为 0 时阻断。用户选择导出父目录后,程序在其下创建商品 ID 子目录,按终选顺序转码为 `商品ID_主图_1.jpg`、`商品ID_详情图_1.jpg`,透明图铺白底输出真正 JPEG。
|
||||
- 商品目录已存在时只提供三选:覆盖本软件导出的图片(仅删除匹配当前商品命名规则的旧主图/详情图,保留用户其它文件)、新建带时间目录、取消;不提供合并,也不递归清空用户目录。
|
||||
- 导出前会预检所有终选源文件和图片解码,先写 staging,转码失败不创建商品目录、不留下半套新图;成功后中文提示实际目录和主图/详情图数量,并提供打开目录。
|
||||
- 本小节当前覆盖 T-591/T-593:主界面、终选排序和本地导出已接入;不自动上传或修改蝦皮,BYOK/自定义 Provider 仍后置。
|
||||
|
||||
## 流程导航
|
||||
|
||||
|
||||
+7
-2
@@ -3,7 +3,7 @@ id: T-593
|
||||
title: AI工场部分导出、JPEG 转码与已存在商品目录安全处理
|
||||
phase: 7
|
||||
deps: [T-592]
|
||||
status: TODO
|
||||
status: DONE
|
||||
created: 2026-07-11
|
||||
---
|
||||
|
||||
@@ -39,4 +39,9 @@ created: 2026-07-11
|
||||
|
||||
## 执行记录
|
||||
|
||||
(完成后记录文件安全测试和人工导出验证。)
|
||||
- 2026-07-11:完成 AI工场终选本地导出。
|
||||
- 新增 `app/image_studio_export.py`:读取 AI工场主图/详情图终选顺序,预检源文件和图片解码,按 `商品ID_主图_1.jpg` / `商品ID_详情图_1.jpg` 连续命名转码为真正 JPEG,透明图铺白底。
|
||||
- 目录安全:默认目标为用户选择父目录下的 `<商品ID>/`;目录已存在时支持“覆盖本软件导出的图片”(仅删除当前商品受管命名文件,保留用户其它文件)或“新建带时间目录”;不提供合并、不递归清空目录。
|
||||
- GUI:⑥ AI工场底部新增「导出终选」按钮,允许部分导出,0 张阻断;导出通过 `ImageStudioExportWorker` 后台执行,成功后中文提示主图/详情图数量、目录,并可打开目录。
|
||||
- 更新 `docs/routes.md` 和 `docs/04-architecture.md`,明确导出服务职责和不自动上传蝦皮边界。
|
||||
- 验证:主工作区 targeted 测试通过;因无关默认提示词脏文件仍会影响全量 unittest,已在干净 worktree 仅套用 T-593 diff 后运行 `python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(367 tests)和 `git diff --check`,全部通过。
|
||||
|
||||
Reference in New Issue
Block a user