diff --git a/app/api/scene-fusion/route.ts b/app/api/scene-fusion/route.ts index 990c5b8..8d9e23d 100644 --- a/app/api/scene-fusion/route.ts +++ b/app/api/scene-fusion/route.ts @@ -26,8 +26,8 @@ const sceneFusionRequestSchema = z.object({ })).min(1, "至少需要一个场景图").max(20, "最多支持20个场景图"), }); -// 默认提示词(当数据库未配置时使用) -const FALLBACK_PROMPT = "将图1的产品替换到图2的场景中,保持图1产品的外观、颜色和细节不变,自然融合到图2的环境中。"; +// 默认提示词(当数据库未配置时使用)- 优化版本,强调保持产品原样 +const FALLBACK_PROMPT = "严格按照图1产品的原始形状、尺寸比例、颜色、材质和所有细节,将其完整地放置到图2的场景中。禁止对产品进行任何变形、拉伸、压缩或颜色改变。产品必须与图1完全一致,只改变其所处的环境背景。"; /** * 获取场景裂变配置 @@ -238,12 +238,13 @@ function buildPrompt( let prompt = defaultPrompt; // 如果用户提供了具体的产品名称和被替换物体名称,构建更精确的提示词 + // 所有模板都强调:严格保持产品原样,禁止变形 if (productName && targetName) { - prompt = `将图1中的"${productName}"替换掉图2场景中的"${targetName}",保持"${productName}"的外观、颜色和细节不变,自然融合到图2的环境中。`; + prompt = `严格按照图1中"${productName}"的原始形状、尺寸比例、颜色、材质和所有细节,将其完整地放置到图2场景中,替换掉图2中的"${targetName}"。禁止对"${productName}"进行任何变形、拉伸、压缩或颜色改变。"${productName}"必须与图1完全一致。`; } else if (productName) { - prompt = `将图1中的"${productName}"融合到图2的场景中,保持"${productName}"的外观、颜色和细节不变,自然融合到图2的环境中。`; + prompt = `严格按照图1中"${productName}"的原始形状、尺寸比例、颜色、材质和所有细节,将其完整地放置到图2的场景中。禁止对"${productName}"进行任何变形、拉伸、压缩或颜色改变。"${productName}"必须与图1完全一致。`; } else if (targetName) { - prompt = `将图1的产品替换掉图2场景中的"${targetName}",保持图1产品的外观、颜色和细节不变,自然融合到图2的环境中。`; + prompt = `严格按照图1产品的原始形状、尺寸比例、颜色、材质和所有细节,将其完整地放置到图2场景中,替换掉图2中的"${targetName}"。禁止对产品进行任何变形、拉伸、压缩或颜色改变。产品必须与图1完全一致。`; } // 添加用户补充的关键词 diff --git a/components/scene-fusion-view.tsx b/components/scene-fusion-view.tsx index 9ed3d80..01a2f19 100644 --- a/components/scene-fusion-view.tsx +++ b/components/scene-fusion-view.tsx @@ -557,14 +557,14 @@ export function SceneFusionView({ onBack }: SceneFusionViewProps) {