# Clover 修改处理方案 · 第三批(❌ 需新建/重构)+ 修3叠字 > 这批是新建模块或重构,技术不确定性高、且多数需北哥给业务定义。 > 不像第一二批能直接给 before/after,这里给:现状/改造思路/影响文件/风险/待定义点。 --- ## 修3 · 瓶身中文小字乱码(叠字兜底)【L·技术最不确定】 **根因**:gpt-image-2 画中文小字会糊/乱码(记忆 clover-image-gen-mixed-text-rendering 已记)。 现状 storyboard 把所有文字(overlay_text)都塞进prompt让模型画(image_gen.py:140附近)。 **改造思路**(模型出底图 + 代码叠字): 1. storyboard 区分"模型画的"vs"代码叠的":大标题模型画(已清晰),瓶身小字/品牌词/卖点改代码叠。 2. 新建 `image_text_overlay.py`:PIL 加载中文字体(思源黑体开源),按坐标叠字到底图。 3. image_gen 生图后、后处理前,调叠字。 4. prompt 负向约束模型"不要在瓶身画文字"。 **影响文件**:新增 `image_text_overlay.py`、`storyboard.py`(标记哪些字代码叠)、`image_gen.py`(接叠字)、字体资源(assets/fonts/)。 **风险(高)**:①叠字坐标/字号要按每张构图调,模型出图位置不固定→坐标难定 ②哪些字叠/哪些画的边界要试 ③字体版权(用SIL开源思源) ④可能要调好几轮才自然。 **待定义点**:这期做不做?我的建议——**先验证模型把大标题画清楚(已能),瓶身小字这种高不确定项放二期**,一期先用"少画字、关键字代码叠品牌词"最小版本试。 **最小版本(降risk)**:只代码叠"品牌词"一处(位置固定在底部),不碰瓶身小字。工作量降到M。 --- ## 建1 · 生图≥3套【L】 **根因**:`storyboard.py:119 plan_image_set` 只产1套storyboard,`image_gen.py:156 generate_storyboard_images` 只跑1套,返回扁平list。无"套"概念。 **现状结构**: ``` plan_image_set → {storyboard: [6张item]} # 1套 generate_storyboard_images → gather 6张 → [6个结果] # 扁平 pipeline_io → 存6张 ImageCandidate ``` **改造思路**:外层套循环。 ``` for set_idx in range(3): # 3套 plan = plan_image_set(..., variant=set_idx) # 套间差异 套结果 = gather(...) 返回 [[套1的6张],[套2的6张],[套3的6张]] ImageCandidate 加 set_no 字段;前端按套分组展示选择 ``` **影响文件**:`storyboard.py`(plan加variant参数做差异)、`image_gen.py`(外层循环)、`pipeline_io.py`(存set_no)、`models/task.py`(ImageCandidate加set_no列+迁移)、前端图片选择页(按套展示)。 **风险**:①生图成本×3、apiports限流(记忆:限并发2)→3套18张要控并发别打爆 ②"套间差异"是什么没定 ③前端展示改动较大。 **待定义点(必须北哥/你定)**: - 3套的差异维度?候选:a)不同文案角度各出一套 b)同角度不同视觉风格 c)不同封面方案 - 套数固定3还是用户可选1/3/5? - 是否每套都6张,还是套数×张数用户配? --- ## 建2 · 产品图视觉分析 visualIdentity【M】 **根因**:banana 有(上传产品图→提主色/字体/风格),Clover 的 `build_visual_system`(storyboard.py:127)只用了文案锚点,没做产品图视觉提取。 **改造思路**:产品图上传后(或生图前)调多模态分析→提主色/包装风格→存产品档案→生图prompt注入"保持与参考图一致的主色/风格"。 **影响文件**:新增 `visual_identity.py`、products上传接口接入分析、product表加 visual_json 列+迁移、storyboard注入。 **风险**:多模态调用成本+延迟;分析准确度。 **待定义点**:一期必要还是二期?我建议二期(现已强制带产品参考图给 /images/edits,视觉一致性已有基本保证,视觉提取是锦上添花)。 --- ## 建3 · 标杆 AI 出8特征【L·需北哥定义】 **根因**:`benchmarks.py` 纯CRUD,BenchmarkCreate 只 screenshot_url/highlights/link_url 三字段,零AI分析。 **改造思路**:录标杆(截图/文本)→AI分析出8个特征维度→存库→生成时可参考。 **影响文件**:`api/v1/benchmarks.py`、新增标杆分析service、BenchmarkNote加 features_json 列+迁移、前端标杆展示。 **风险**:与建4(裂变)强耦合——8特征是裂变的输入。 **待定义点(必须北哥给)**:8特征具体是哪8个?(如:钩子类型/痛点/人设/结构/卖点呈现/情绪/视觉/标题公式?)北哥不给定义,做不了。 --- ## 建4 · 爆款裂变全套【XL·最大块·需北哥给完整流程】 **根因**:全栈零代码,整块缺失。 **完整流程(待北哥确认)**:选标杆→选参考度档位(高/中/低)→选裂变维度→基于标杆8特征生成变体→裂变后评分。 **影响文件(大量新增)**:后端 裂变service+router、裂变记录表+迁移、前端裂变页(选标杆/档位/维度/看结果)。强依赖建3的8特征。 **风险**:**这是独立新功能,不是修补**。工作量远超其他项。依赖建3。 **待定义点(必须北哥给)**: - 完整裂变流程定义 - "参考度档位"高/中/低分别意味着多大改动? - 裂变维度有哪些可选? - 裂变后评分用现五维还是另立标准? **建议**:**单独立项**,与bug修复彻底分开。北哥不给流程定义无法开工。 --- ## 建5 · 去水印强制3:4比例【S】 **根因**:`image_postprocessor.py process_image` 只重编码+重采样,无比例校验/裁切。 **现状代码**(image_postprocessor.py:41-49): ```python img = Image.open(io.BytesIO(image_bytes)).convert("RGB") original_size = img.size if resample_strength >= 1: w, h = original_size small_w, small_h = int(w * 0.98), int(h * 0.98) img = img.resize((small_w, small_h), Image.LANCZOS) img = img.resize(original_size, Image.LANCZOS) ``` **改后**:开头加3:4校验+居中裁切。 ```python img = Image.open(io.BytesIO(image_bytes)).convert("RGB") # 强制3:4(1080×1440):偏差超阈值则居中裁切 w, h = img.size target_ratio = 3 / 4 cur_ratio = w / h if abs(cur_ratio - target_ratio) > 0.02: if cur_ratio > target_ratio: # 太宽→裁宽 new_w = int(h * target_ratio) left = (w - new_w) // 2 img = img.crop((left, 0, left + new_w, h)) else: # 太高→裁高 new_h = int(w / target_ratio) top = (h - new_h) // 2 img = img.crop((0, top, w, top + new_h)) original_size = img.size # 裁后尺寸 ``` **影响文件**:`backend/app/services/ai_engine/image_postprocessor.py`(约12行)。 **风险**:居中裁切可能切到边缘内容;gpt-image-2 本就按1080×1440出图,多数已是3:4,裁切是兜底保险。 **验收**:故意喂非3:4图→输出严格3:4。 --- ## 建6 · 客户输入物整体导出【M】 **根因**:只有产出物打包(package_exporter),无产品/标杆等输入物导出。数据归属红线:客户原始数据可导出。 **改造思路**:加 `GET /products/export`、`GET /benchmarks/export`,导出该workspace全部输入物为zip(含json+上传的图)。 **影响文件**:新增导出router+service。 **风险**:导出格式(json/csv/zip)、是否含上传的图要定。 **待定义点**:格式?一期必要还是二期?建议二期(飞轮启动+北哥测试期客户数据导出诉求不急)。 --- ## 建7 · 图片 lightbox 放大【S】 **根因**:全局无放大逻辑,img直接渲染,看不清细节。 **改造思路**:图片卡加点击放大遮罩(轻量自写或 yet-another-react-lightbox)。 **影响文件**:前端图片相关组件(images页/confirm页)+新增Lightbox组件。 **风险**:无。 **验收**:点图弹出大图遮罩。 **建议**:直接做,体验刚需且简单。 --- ## 建8 · 套版预览(封面+内页拼笔记)【M】 **根因**:confirm页只网格分开展示图(ConfirmPreviewImages),没拼成"一条小红书笔记长相"。 **改造思路**:confirm页加"笔记预览"视图:封面图+内页轮播+文案标题正文,按小红书样式排。 **影响文件**:前端confirm页+新增笔记预览组件。 **风险**:还原小红书样式要调。 **待定义点**:一期必要还是二期?建议二期(confirm已能逐个看图+文案,拼版是体验增强非阻断)。 --- ## 建9 · 任务级并发上限【M】 **根因**:只有 celery worker_prefetch_multiplier=1(worker层),无用户/任务级并发限制。用户狂点开任务可能堆爆。 **改造思路**:任务创建时查该用户在跑任务数(DB status查或Redis计数),超N则拒绝/排队。 **影响文件**:任务创建router、可能加Redis计数。 **风险**:限制策略要定。 **待定义点**:每用户允许几个并发任务(建议2-3)?超限拒绝还是排队? --- ## 第三批小结 | 项 | 性质 | 建议期次 | 阻塞点 | |---|---|---|---| | 修3叠字 | 重构·高不确定 | 一期最小版(只叠品牌词)/二期完整 | 技术验证 | | 建1 3套图 | 重构 | 看北哥要不要 | 套间差异定义 | | 建2 视觉分析 | 新建 | 二期 | — | | 建3 标杆8特征 | 新建 | 看北哥 | **8特征定义** | | 建4 爆款裂变 | 新建·XL | **单独立项** | **完整流程定义** | | 建5 强制3:4 | 改造·小 | 一期可做 | — | | 建6 输入导出 | 新建 | 二期 | 格式 | | 建7 lightbox | 新建·小 | 一期可做 | — | | 建8 套版预览 | 新建 | 二期 | — | | 建9 并发上限 | 改造 | 一期可做 | 并发数 | **无歧义可直接做**:建5(3:4)、建7(lightbox)、建9(并发,定个数即可)。 **需北哥给定义才能动**:建3(8特征)、建4(裂变流程)。 **建议二期**:建2、建6、建8。 **技术验证后再定**:修3叠字。