"""全能创作 · 预设(契约 §6)。 首页那 8+6 张预设卡不只是个名字 —— 每个预设代表一套**明确的拍法**。 只把「达人口播种草」四个字塞进提示词,模型只能靠猜;这里给它可执行的约束。 新增预设 = 在下面加一条,前端 `omni-create.tsx` 的 PRESET 列表加一张卡。两边的 key 必须是同一个中文名(会话建的时候原样存进 CreationConversation.preset)。 """ from __future__ import annotations VIDEO_PRESETS: dict[str, str] = { "剧情反转带货": ( "轻剧情短片。必须有一个具体的困境场景 → 意外转折 → 商品成为解决问题的关键道具。" "商品不能在开头硬推,要等冲突立住了再自然介入。禁止把普通不便夸成严重后果。" ), "商品拟人广告": ( "把商品当成有性格的角色,但默认采用无脸拟人:商品本体保持真实完整,不在瓶身、包装或机身上新增卡通五官。" "性格通过整个商品轻微倾斜、转向、弹跳、进退,配合镜头、光影、环境反应和音效来表达。" "商品需要说台词时使用画外角色声,商品本体不做口型。整体轻快有趣、精致克制,不是儿童贴纸玩具风。" "只有用户明确说要可见的卡通五官时才采用有脸拟人。商品材质、颜色、结构和包装必须与参考图一致。" ), "达人口播种草": ( "真人出镜口播,生活化语气,像朋友分享而不是念广告稿。开头一句话建立停留理由," "中段讲清使用场景和一个核心卖点,结尾给明确行动理由。禁止万能主播腔和空卖点。" ), "商品图一键成片": ( "从商品参考图出发建立镜头语言:主图定调 → 补场景 → 补使用动作 → 收尾。" "节奏清晰,转场干净。商品外观严格以参考图为准。" ), "鱼眼换装": ( "鱼眼/广角近距离透视,连续换装节奏。**人物面部和身形必须全程一致**," "只有服装在变。每次换装用一个明确动作触发。" ), "点触换款": ( "统一构图和机位,用点击/触碰动作触发商品款式切换,快速展示多个 SKU。" "背景、光线、机位全程不变 —— 变化只发生在商品本身。" ), "探店漫游": ( "以空间动线串联:入口 → 环境 → 关键细节 → 服务/主推项目。" "镜头连续移动有路线感,不要碎切。" ), "品牌质感大片": ( "强调光影、材质和镜头节奏,建立品牌识别。慢节奏、精致构图、克制的色彩。" "少即是多,不要堆信息。" ), } IMAGE_PRESETS: dict[str, str] = { "商品场景套图": ( "一组风格统一的电商图:主图(干净突出商品)、场景图(真实使用环境)、细节图(材质/工艺特写)。" "三张的光线、色调、质感必须是同一套。" ), "极简棚拍": "干净背景、柔和投影、主体明确居中。大量留白,不加多余道具。适合主图和详情页头图。", "清透自然光人像": "自然光,保留真实肤质和毛孔,不磨皮不过曝。氛围清透,人物状态放松自然。", "生活方式场景": "把商品放进真实生活空间和使用动作里,强调自然可信的生活气息,不要摆拍感。", "高级奢华质感": "深色环境 + 局部高光 + 材质细节特写,强化品牌高级感。对比强但不失细节。", "复古胶片风格": "低饱和、细腻颗粒、柔和对比、偏暖或偏青的胶片色调。怀旧情绪但不脏。", } ALL_PRESETS: dict[str, str] = {**VIDEO_PRESETS, **IMAGE_PRESETS} def preset_guidance(name: str) -> str: """预设名 → 拍法约束。认不出的名字返回 "" —— 前端加了新卡但这里还没写时, 退回「只有名字」的行为,不要报错。""" return ALL_PRESETS.get((name or "").strip(), "")