| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- const freeze = (value) => Object.freeze(value);
- function recipe(id, family, pageGoal, visualEvidence, cameraLanguage, relation, composition, safeZone) {
- return freeze({ id, family, page_goal: pageGoal, visual_evidence: visualEvidence, camera_language: cameraLanguage, relation, composition, safe_zone: safeZone });
- }
- export const REFERENCE_FIRST_PAGE_TEMPLATES = freeze({
- white_complete: recipe(
- "white_complete", "white_background", "建立商品基准识别",
- "完整商品外形、准确颜色、Logo与包装原有识别元素清晰可见",
- "接近平视的正面或轻微三分之四观察,全景,透视克制",
- "商品自然稳定地落在支撑面,无遮挡、无人物、无道具",
- "纯白背景,商品居中,主体约占画面合理范围,四周保留均衡呼吸空间",
- "不规划营销文字;只保留商品自身原有文字"
- ),
- selling_form: recipe(
- "selling_form", "selling_point", "证明完整形态、轮廓或结构优势",
- "用一张画面同时看清商品整体和最具识别力的可见结构",
- "三分之四全景或中近景,结构方向清晰,避免与白底正面机位重复",
- "商品保持自然承载,辅助道具只解释结构或功能关系",
- "主体偏一侧,另一侧形成低细节信息区;前中后景服务结构层次",
- "在不遮挡轮廓、Logo和关键结构的一侧预留中等标题区"
- ),
- selling_material: recipe(
- "selling_material", "selling_point", "证明材质、工艺、表面或关键局部",
- "整体识别锚点与一个真实可见局部同时出现,局部纹理不改变原材质",
- "微距或近景,侧向柔光呈现纹理和光泽;保留足够整体轮廓用于身份识别",
- "商品不变形,不用特效伪造纹理;布光变化不能表现为另一种材质",
- "局部细节为主视觉中心,整体商品作为次级锚点,背景低干扰",
- "在纹理主视觉相反方向预留短标题和一句证据短句区域"
- ),
- selling_operation: recipe(
- "selling_operation", "selling_point", "证明关键操作、接口或功能关系",
- "可见操作区域、接口、开合或使用触点与完整商品关系明确",
- "中近景,观察轴正对操作关系,避免为了戏剧性遮挡关键部位",
- "允许局部手部示范,但手不能覆盖关键结构和品牌识别",
- "动作路径清晰,一页只说明一个操作结论",
- "在动作路径之外预留结构化信息区"
- ),
- selling_brand: recipe(
- "selling_brand", "selling_point", "强化包装视觉与品牌识别",
- "商品自身真实 Logo、品牌标识、配色和包装原字保持可读且一致",
- "正面或轻微侧向中近景,光线均匀,避免反光破坏原字",
- "不新增假包装、赠品或包装清单",
- "品牌识别区域清晰,商品仍是唯一主角",
- "远离包装原字预留后置短标题区域"
- ),
- scene_core_environment: recipe(
- "scene_core_environment", "usage_scene", "展示商品最自然的核心使用空间",
- "商品、承载面和环境关系符合参考设定所表达的使用方式",
- "环境中景或中近景,空间层次完整,机位与卖点页明显不同",
- "商品稳定处于自然位置,道具数量受控且与使用直接相关",
- "建立明确前中后景,商品位于视觉焦点,环境不抢主体",
- "在低细节墙面、天空、地面或侧边空间预留中等信息区"
- ),
- scene_human_interaction: recipe(
- "scene_human_interaction", "usage_scene", "展示人物与商品的真实使用关系",
- "人物动作、接触部位、商品姿态和使用结果在单帧内可理解",
- "动作中景或局部身体近景,快门感自然,避免摆拍僵硬",
- "人物只服务商品使用,手部或身体不能不合理穿透、覆盖或扭曲商品",
- "动作线与商品形成视觉关系,人物脸部不是画面唯一中心",
- "避开人脸、手部和商品互动区域预留短标题区"
- ),
- scene_lifestyle: recipe(
- "scene_lifestyle", "usage_scene", "建立与商品匹配的日常生活方式",
- "环境材质、道具和光线支持商品调性,但不引入无关叙事",
- "较宽环境镜头,允许浅景深,商品仍清晰可识别",
- "商品处于正在被使用或随时可使用的自然状态",
- "氛围层次丰富但只有一个商品视觉中心",
- "利用自然负空间预留低到中等密度文案区"
- ),
- scene_mobile_outdoor: recipe(
- "scene_mobile_outdoor", "usage_scene", "解释商品在移动或户外状态中的使用",
- "携带、穿戴、手持或环境承载关系完整可信",
- "动态三分之四或跟随视角,地平线水平,商品不因动势而变形",
- "人物动作符合重力、人体和商品使用逻辑",
- "环境动势与商品方向协调,商品颜色和材质不受滤镜改变",
- "在运动方向前方或背景低细节区预留短文案"
- ),
- scene_installed: recipe(
- "scene_installed", "usage_scene", "展示安装、摆放或环境融合关系",
- "商品与墙面、桌面、地面、设备或空间的连接方式清楚",
- "平视或轻俯视中景,空间基准线稳定",
- "安装/摆放遵循参考设定,不虚构无法支持的内部结构",
- "商品与环境边界清晰,参照物用于解释位置和尺度",
- "在连接关系之外预留结构化说明区"
- ),
- decision_scale_fit: recipe(
- "decision_scale_fit", "purchase_decision", "帮助判断尺度、体积、穿戴或空间适配",
- "通过真实人物、手部、常见参照物或空间比例表达相对尺度,不生成具体数字",
- "接近平视的中景或全景,透视克制,参照关系可比较",
- "参照物不能遮挡商品关键轮廓,人物姿态自然",
- "商品和参照物形成明确比例组,避免装饰性杂物",
- "预留适合后置尺度说明的规则信息区"
- ),
- decision_usage_threshold: recipe(
- "decision_usage_threshold", "purchase_decision", "回答操作门槛或典型使用障碍",
- "一个清晰的使用前后关系、操作触点或空间门槛视觉结论",
- "正对关系的中近景,不使用复杂多格拼图",
- "动作、商品和环境形成单一因果关系,不虚构性能结果",
- "主次层级清晰,避免一页同时解释多个问题",
- "预留标题加两行以内说明区域"
- ),
- decision_context_match: recipe(
- "decision_context_match", "purchase_decision", "帮助判断商品与目标环境或使用方式是否匹配",
- "同时呈现完整商品和一个关键环境关系,避免无依据兼容性声明",
- "稳定三分之四中景,环境基准清晰",
- "商品自然处于目标环境,关系来自创意简报的可支持线索",
- "商品与目标空间形成清楚边界和视觉对比",
- "在环境负空间预留结构化判断信息区"
- ),
- decision_value_summary: recipe(
- "decision_value_summary", "purchase_decision", "以完整商品和核心价值完成详情页收束",
- "完整商品、核心识别元素和前页视觉语言在一张单图中形成统一结论",
- "稳定完整视角,避免复制白底图;通过场景光线或构图完成收束",
- "不虚构附件、赠品、包装清单或参数",
- "主体层级明确、画面完整、结尾感强,保留一个清晰信息区",
- "预留适合后置主标题与简短行动提示的区域"
- ),
- });
- export const DEFAULT_PAGE_TEMPLATE_IDS = freeze([
- "white_complete", "selling_form", "selling_material", "scene_core_environment",
- "scene_human_interaction", "decision_scale_fit", "decision_value_summary",
- ]);
- export function pageTemplate(id) {
- const value = REFERENCE_FIRST_PAGE_TEMPLATES[String(id || "")];
- if (!value) throw new Error(`REFERENCE_FIRST_PAGE_TEMPLATE_UNKNOWN:${String(id)}`);
- return value;
- }
- export function templatesForFamily(family) {
- return Object.values(REFERENCE_FIRST_PAGE_TEMPLATES).filter((value) => value.family === family);
- }
- export function pageTemplatePrompt(template) {
- if (!template?.id) throw new Error("REFERENCE_FIRST_PAGE_TEMPLATE_REQUIRED");
- return [
- `页面定位:${template.family};页面配方:${template.id}。`,
- `页面任务:${template.page_goal}。`,
- `必须形成的视觉证据:${template.visual_evidence}。`,
- `摄影语言:${template.camera_language}。`,
- `商品、人物与环境关系:${template.relation}。`,
- `构图要求:${template.composition}。`,
- `后置文字预留:${template.safe_zone}。该区域只是生成构图目标,不是已经验证的叠字安全区。`,
- ].join("\n");
- }
|