diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts index 4df116a69..2ace8ea1b 100644 --- a/app/(chat)/api/chat/route.ts +++ b/app/(chat)/api/chat/route.ts @@ -3053,14 +3053,17 @@ function buildHeuristicReplacementScenePlan(params: { ? "前置分析未明确当前参考图存在人物展示需求,兜底阶段默认不使用模特图。" : "当前未提供模特图。", sceneSummary: params.shouldReplace - ? "保持当前参考图版式与场景结构,只替换参考图中的产品主体。" + ? "保留参考图版式骨架、构图和主体位置,但把旧场景视觉内容按工作流目标风格重建。" : "当前参考图不满足替换条件。", cameraSummary: "保持参考图原有机位、构图和景别,不做整体重画。", - placementSummary: "产品应落在参考图当前主体所在区域,不允许新增无关主体。", + placementSummary: "产品应落在参考图当前主体所在区域,并围绕该区域同步重建新的场景内容。", preserveSummary: "文字排版、标题区、分割线、留白和信息层级必须保留。", - styleSummary: "沿用当前工作流风格设定,但只作用于产品相关场景内容。", - avoidSummary: "不要把所有输入产品角度图同时强行出现在一张图中。", - generationPrompt: params.reason, + styleSummary: "除版式骨架外,墙面、地面、背景家具、软装、灯光、摆件和空间氛围都要按工作流风格重建。", + avoidSummary: + "不要只换产品不换场景,不要把参考图原有背景物件和空间氛围原样保留下来,不要把所有输入产品角度图同时强行出现在一张图中。", + generationPrompt: params.shouldReplace + ? `以工作流目标风格重建当前这一屏的场景,只保留版式、机位、文字区与留白结构。${params.reason}` + : params.reason, analysisModelName: null, analysisSource: "heuristic", }; @@ -3398,12 +3401,15 @@ async function analyzeReplacementExecutionPlan(params: { ? "你只需要根据当前参考图判断:这一屏是否存在真实的人物展示需求;如果没有人物需求,useModelImage 必须为 false。" : "本轮没有模特图,useModelImage 必须为 false。", "这张图片是唯一的详情参考图底板,它决定当前这一屏的版式、文字排版、机位、构图、留白和信息层级。", + "这张参考图不是要求原样保留的场景照片。原图里的沙发、床、柜体、墙面、地面、窗帘、灯具、摆件、桌面道具、背景家具和环境光氛围,都可以在后续生图阶段按前置工作流风格重建。", "请完成以下任务:", "1. 判断 shouldReplace:当前参考图里是否存在清晰、主要、适合被替换的家具商品主体。", "2. 判断 useModelImage,并说明原因。", "3. 提炼 sceneSummary、cameraSummary、placementSummary、preserveSummary、styleSummary、avoidSummary。", "4. 输出 generationPrompt:这是一段给后续生图模型的本屏生成指令,描述这一屏需要的场景、机位、主体位置、周边环境重建方向以及必须保留的内容。", - "5. sceneSummary 和 styleSummary 必须尽量描述产品周边环境、软装、灯光、材质氛围与空间气质,而不是只重复“替换产品”。", + "5. sceneSummary、styleSummary 和 generationPrompt 必须优先描述“按前置工作流重建后的目标场景”,而不是只复述参考图当前已有场景。", + "6. 如果前置工作流风格与当前参考图原场景冲突,必须保留版式骨架,但放弃原场景物件本身,以前置工作流指定的空间风格、软装、灯光和氛围为准。", + "7. avoidSummary 里要明确避免“只替换产品、不重建场景”这类结果。", workflowPromptExcerpt ? `当前风格与场景限制(来自前置工作流与模式模板):\n${workflowPromptExcerpt}` : "", @@ -3586,19 +3592,23 @@ function buildAgentReplacementPrompt(params: { ...imageOrderLines, ...scenePlanLines, "你现在做的不是重新生成一张新图,而是编辑最后一张参考图本身。", + "要把最后一张参考图理解为“页面版式底板 + 构图参考”,不是“旧场景照片必须原样保留”。", "前面“工作流设定”里的场景组合、空间风格、硬装方案、软装方案、灯光氛围、人群设定,必须作为当前这一屏的强制场景改造要求生效。", - "执行时要基于这些场景组合要求,重建产品主体周边的场景元素、材质氛围、软装陈列、灯光与色调,使当前这一屏呈现出与第一步已选风格一致的场景效果。", - "允许改造的是产品主体周边的场景内容,不仅仅是替换产品本身;但参考图里的文字排版、标题区、信息区、分割线、留白和版式结构必须保留。", + "执行时要基于这些场景组合要求,重建产品主体周边乃至整屏视觉中的场景元素、材质氛围、软装陈列、灯光与色调,使当前这一屏呈现出与第一步已选风格一致的场景效果。", + "允许改造的不只是产品主体周边的一小块区域;除文字排版、标题区、信息区、分割线、留白和版式结构外,原参考图里的旧场景视觉内容都可以按目标风格整体重建。", "如果前面商品图、模特图与最后一张参考图底板存在冲突,始终以最后一张参考图底板的版式、机位、构图和信息层级为最高优先级。", "最后一张参考图是唯一底板,必须保留这张图的文字排版、品牌字样、标题区、卖点区、分割线、留白、机位、构图和信息层级。", "前面的商品图和模特图用于替换参考图中的产品主体,并按工作流设定去改造与产品直接相关的场景内容,但不能改变参考图的版式设计。", + "可被替换重建的内容包括但不限于:背景墙面、地面材质、沙发、床、背景柜、窗帘、灯具、地毯、挂画、摆件、桌面道具、空间色调、环境光氛围。", params.productImageCount > 1 ? `前面的 ${params.productImageCount} 张商品输入图都属于同一产品的多角度/多细节白底图,请综合这些图片理解产品结构、材质、颜色、比例、边角、开孔、五金与细节,不可只参考第一张。` : "前面的商品输入图就是当前要替换进去的产品白底图,请准确保持该产品的结构、材质、颜色、比例和细节。", - "请先识别最后一张参考图中需要被替换的产品主体所在区域,再在原位置完成替换,不要改动无关区域。", - "请严格保留最后一张参考图的版式结构、镜头关系、构图、文字排版、留白位置和信息层级;但产品主体周边的环境、陈列、材质、灯光氛围、软装小物、空间质感需要按第一步工作流设定进行重建。", + "请先识别最后一张参考图中需要被替换的产品主体所在区域,并围绕这个区域在同一版式骨架下重建新的场景画面;不要只做局部抠图式换产品。", + "请严格保留最后一张参考图的版式结构、镜头关系、构图、文字排版、留白位置和信息层级;但画面中的旧场景家具、背景物件、材质、灯光氛围、软装小物、空间质感需要按第一步工作流设定进行明显重建。", + "如果第一步工作流风格与参考图原场景冲突,必须保留版式骨架,但放弃原场景物件本身,以第一步工作流风格为准。", "前面的输入商品图用于提供商品主体、材质、颜色和细节特征;如有模特图,请只在参考图本身包含人物展示时再参考模特图。", "绝对不要忽略最后一张参考图去生成一张无关的新场景图。", + "如果生成结果仍然保留了参考图原有的大部分场景物件,只是把产品换掉,则视为执行失败;你必须让场景风格发生清晰可见的变化。", "绝对不要移动、删除、改写、重排参考图里的任何文字与排版元素。", "输出结果必须保持最后一张参考图底板的原始纵横比与画布尺寸,不允许擅自改成长图、横图或裁掉任何版面区域。", "如果参考图中没有可替换的产品主体,应直接沿用参考图,不要硬生成。",