← 返回知识库
# COS → 生图 → 审图 → 网页 全管线文档
> 更新: 2026-07-05 | 包含5号(生图端) + 4号(管线端)
---
## 一、管线全景
```
5号(生图端) 4号(管线端)
┌───────────────┐ ┌──────────────────┐
│ GPT DALL-E │ 上传 COS │ dedup.py │
│ 批量生图 │ ──────────→ │ 下载到本地 │
│ │ │ │
│ _L.jpg 首图 │ │ sync_cos_to_ │
│ _s1.jpg 场景 │ │ review.py │
│ _c.jpg 搭配 │ │ → 写入审图数据库 │
└───────────────┘ │ │
│ review_server.py │
│ → 8899 审图网页 │
│ │
│ 审图通过 → │
│ upload_approved.py│
│ → 上传回COS │
│ │
│ gallery-server.py│
│ → 8895 展示网页 │
│ │
│ Next.js 商城前端 │
│ → 3000 商品详情页 │
└──────────────────┘
```
---
## 二、文件清单
### 5号服务器(生图端)
| 文件 | 功能 |
|------|------|
| `/root/tagger-agent/scripts/gpt-lookbook-loop.py` | **主生图脚本** — 从队列读取任务,通过 ChatGPT DALL-E 批量生成图片 |
| `/root/tagger-agent/scripts/prompt_gen.py` | **提示词引擎** — 生成4组prompt:[Lookbook1, Lookbook2, Editorial1, Editorial2] |
| `/root/tagger-agent/scripts/gen_outfit_plan.py` | **搭配方案生成** — v4算法,从DB读336款生成100套搭配方案 |
| `/root/tagger-agent/scripts/outfit_matcher_v4.py` | **搭配算法v4** — 融合算法,含促销过滤 |
| `/root/tagger-agent/scripts/run_pipeline.py` | **流水线调度** — 统一管理 sync/tag/outfit/audit/build_queue/lookbook 六阶段 |
| `/root/tagger-agent/scripts/cos_image_audit.py` | **COS缺图审计** — 扫COS `generated/` 确定缺图SKU |
| `/root/.hermes/scripts/queue-supplement.py` | **队列补充** — 为缺图单品添加 solo 任务 |
| `/root/scripts/upload_lookbook_to_cos.py` | **COS上传** — 将本地lookbook图上传到COS `generated/` |
| `/root/scripts/push-to-feishu.py` | **飞书推送** — 每15分钟扫最新目录推未推送图 |
### 5号关键目录
| 路径 | 内容 |
|------|------|
| `/data/lookbook/output/` | 生成图输出目录(含各batch子目录 + latest 软链接) |
| `/data/lookbook/output/latest/` | 软链接 → 最新batch目录 |
| `/data/lookbook/inbox/` | 输入文件(模特参考图、模板) |
| `/root/tagger-agent/output/generation_queue.json` | 生图队列(447 jobs) |
| `/root/tagger-agent/output/generation_progress.json` | 队列进度跟踪 |
| `/root/tagger-agent/config/` | 配置文件目录 |
| `/root/kling_pipeline_work/high_score_outfits.json` | 搭配方案(100套) |
### 5号配置文件
| 文件 | 内容 |
|------|------|
| `config/environment.json` | 环境配置:模特参考图路径、输出尺寸 |
| `config/gallery.json` | 图库配置:输出目录、JPG质量、是否强制JPG |
### 4号服务器(管线端)
| 文件 | 功能 |
|------|------|
| `/data/xinan-fashion/sync_cos_to_review.py` | **COS→审图同步** — 扫COS `generated/`,解析 `_c.jpg`/`_s1.jpg`/`_s2.jpg`/`_L.jpg`,写入 `review_images` 表 |
| `/data/xinan-fashion/gallery-server.py` | **Gallery展示** — 从 `/cos_local/` 生成图片浏览网页(端口8895) |
| `/data/pipeline_test/scripts/review/review_server.py` | **审图服务器** — 动态生成审图Web页面(端口8899) |
| `/data/pipeline_test/scripts/cos/upload_approved.py` | **已审上传** — 审图通过的图片回传COS + 更新fashion.db |
| `/data/dedup.py` | COS下载器(按文件名去重) |
| `/data/clean_and_sync.py` | COS全桶扫描下载 |
| `/data/dedup_images.py` | pHash视觉去重 |
| `/data/compress_images.py` | JPG压缩到quality=65 |
| `/data/build_image_index.py` | 构建图片索引 → `/data/image_index.json` |
| `/data/xinan-fashion/src/app/` | Next.js商城前端(端口3000) |
### 4号关键目录
| 路径 | 内容 |
|------|------|
| `/data/cos_images/` | 从COS下载的原图(待审) |
| `/data/cos_approved/` | 审图通过的图片 |
| `/data/cos_trash/` | 视觉去重淘汰的图片 |
| `/data/image_index.json` | 图片索引(build_image_index.py输出) |
| `/data/review_results.json` | 审图裁决结果 |
| `/data/xinan-fashion/data/fashion.db` | 商品数据库 |
---
## 三、命名规则(管线兼容)
| 后缀 | 类型 | 用途 | 管线状态 |
|------|------|------|---------|
| `_L.jpg` | **Lookbook 首图** | 商品封面/卡片首图 | ✅ 已支持(2026-07-05新增) |
| `_s1.jpg` | Scene 场景图1 | 户外场景展示 | ✅ 已有支持 |
| `_s2.jpg` | Scene 场景图2 | 户外场景展示2 | ✅ 已有支持 |
| `_c.jpg` | Collage 搭配图 | 搭配示意图 | ✅ 已有支持 |
**展示优先级:** `_L.jpg` > `_c.jpg` > `_s1.jpg` > `_s2.jpg` > `_L.png`(兼容)
**格式兼容:** 优先 JPG,无 JPG 时兼容 PNG。
---
## 四、流水线全流程
### 阶段1:生图(5号,每5小时)
```
gen_outfit_plan.py → 100套搭配方案
↓
run_pipeline.py build_queue → COS缺图审计 + 搭配匹配 → generation_queue.json
↓
queue-supplement.py → 补单品solo任务
↓
gpt-lookbook-loop.py 50 → ChatGPT DALL-E 批量生图
├── _L.jpg(影棚首图,prompts[0])
└── _s1.jpg(户外场景,prompts[2])
```
### 阶段2:上传COS(5号)
```
upload_lookbook_to_cos.py → 上传 /data/lookbook/output/latest/* → COS generated/
```
### 阶段3:下载同步(4号)
```
dedup.py / clean_and_sync.py → COS generated/ → /data/cos_images/
↓
sync_cos_to_review.py → 解析命名 → 写入 review_images 表
├── _L.jpg → image_type='cover'
├── _c.jpg → image_type='generated'
├── _s1.jpg / _s2.jpg → image_type='scene'
```
### 阶段4:审图(4号)
```
review_server.py(8899)→ 浏览/裁决/批量过审
↓
upload_approved.py → 已审图片 → COS generated/ + 更新fashion.db
```
### 阶段5:展示(4号)
```
gallery-server.py(8895)→ 从 cos_approved/ 生成展示网页
Next.js(3000)→ 从 fashion.db 生成商品详情页
Nginx → shop.hunanningyuan.cloud 反向代理
```
---
## 五、注意事项
### 5.1 命名铁律
- **必须用管线已识别的后缀**:`_L.jpg` / `_c.jpg` / `_s1.jpg` / `_s2.jpg`
- **禁止**使用 `_E.png`、`_L.png`、`_X.png` 等非标准命名
- `_L.png` 会被自动转成 `_L.jpg` 上传COS
### 5.2 格式要求
- 优先 JPG(网页加载快)
- PNG 自动转 JPG(quality=85)
- 脚本内置 `normalize_image_bytes()` 自动处理
### 5.3 队列维护
- `failed` 状态的任务可直接重置为 `queued`(no_reason 是状态残留)
- 每日第一次 build_queue 自动跳过,加 `--force` 强制重建
- `queue-supplement.py` 必须在 `build_queue` 之后运行
### 5.4 配额管理
- GPT DALL-E 日配额有限(100张/天左右)
- 每10张休息20分钟(REST_EVERY=10, REST_MINUTES=20)
- 连续3+超时 → DALL-E Plus 额度用完 → kill进程等5小时
### 5.5 双变体生成逻辑
- 每个队列job:先发影棚prompt → 等结果 → 换prompt → 等结果
- **不关session、不重新上传图片**,只换文字prompt
- `_L.jpg` 和 `_s1.jpg` 跳过检测互相独立
- 共享同一组模特+服装参考图
### 5.6 4号sync_cos需支持的后缀
`sync_cos_to_review.py` 目前支持 `_c.jpg` / `_s1.jpg` / `_s2.jpg` / `_L.jpg`。
如果新增其他后缀,必须在 `list_cos_files()` 和 `parse_filename()` 中同时添加。
### 5.7 首图自动回退
`_L.jpg` 作为商品首图,有图就用,没图就自动往后推用 `_c.jpg` 或 `_s1.jpg`。