101 lines
9.0 KiB
Python
101 lines
9.0 KiB
Python
"""全能创作 · 预设(契约 §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] = {
|
|
"电影感": "电影级摄影质感,宽容度高,强烈但自然的明暗层次,深邃阴影,柔和高光,冷暖色彩对比,轻微青橙调,真实环境光,局部轮廓光,适度暗角,细腻胶片颗粒,低饱和高级色调,电影调色,富有叙事感,真实摄影质感,避免过度HDR。",
|
|
"日式清新": "日系清新摄影,高明度,低对比,柔和自然光,干净通透的空气感,白色与浅色占比高,低饱和淡彩,轻微偏冷色温,柔和肤色与高光,阴影浅淡,画面轻盈,曝光稍高但保留细节,清透自然,简洁治愈。",
|
|
"复古胶片": "复古胶片摄影,模拟35mm胶片质感,暖棕与米黄色调,轻微褪色,黑位微微抬起,低对比度,柔和高光,细腻胶片颗粒,轻微色偏,适度暗角,少量灰尘与划痕,真实模拟胶片扫描质感,怀旧而自然,避免强烈漏光与大面积炫光。",
|
|
"暖调生活感": "温暖生活方式摄影,自然暖阳,柔和金黄色调,真实环境光,低至中等对比,温暖肤色,柔和阴影,轻微逆光,舒适自然的曝光,细腻质感,生活气息浓厚,真实、不刻意、治愈温馨,轻微暖色电影调色。",
|
|
"高质感杂志": "高级时尚杂志摄影,编辑大片质感,中低饱和,高级灰色调,精准曝光,硬朗且具有雕塑感的光影,深邃阴影,清晰轮廓,高级商业摄影质感,细节锐利但不过度锐化,极简色彩控制,克制、高级、时尚、冷静。",
|
|
"梦幻柔光": "梦幻柔光摄影,低对比度,柔焦效果,柔和高光扩散,轻微Bloom光晕,浅色粉彩色调,柔和暖白曝光,低饱和,空气感与雾化感,细腻柔软的光线,背景高光形成柔美散景,浪漫、轻盈、唯美,保留主体细节。",
|
|
"黑金高级": "黑金奢华商业摄影,深黑背景,金色高光,低调曝光,高对比度,强烈明暗塑形,精准轮廓光,金属反射质感,高级镜面反射,深邃黑位,暖金色点缀,低饱和、精致、克制、奢华,高端广告摄影质感。",
|
|
"冷峻科技": "现代科技商业摄影,冷灰蓝色调,低饱和,高级冷色温,干净硬朗的光线,精准边缘光,金属与玻璃质感清晰,适度高对比,深灰阴影,简洁现代,锐利清晰但不过度数字化,真实产品摄影质感,理性、专业、克制,避免科幻全息、机器人和过度AI视觉元素。",
|
|
"赛博朋克": "赛博朋克摄影风格,蓝紫与洋红霓虹色调,高饱和霓虹光,强烈冷暖色彩碰撞,高对比,深黑阴影,彩色轮廓光,霓虹反射,局部RGB光效,未来都市视觉语言,强烈视觉冲击,暗部层次丰富,真实摄影质感,科技感与潮流感结合,避免雨天效果。",
|
|
"日系手绘动画": "经典日系手绘动画电影质感,柔和自然配色,清新青绿与天空蓝色调,温暖阳光,细腻手绘线条,水彩与赛璐璐结合质感,柔和阴影,自然光影,丰富植物细节,轻微纸张与颜料肌理,童话般自然环境,宁静治愈,清新、温暖、诗意、生活感,具有传统二维动画电影质感,避免3D塑料感、过度数字化和强烈锐化。",
|
|
"国风水墨": "中国传统水墨画风格,黑白灰墨色体系,淡青与赭石少量点染,水墨晕染,浓淡干湿变化,焦墨、淡墨与泼墨结合,宣纸自然肌理,山水皴法,虚实相生,大面积留白,云雾朦胧,柔和层次,写意而不过度抽象,空灵、含蓄、诗意、东方禅意,强调墨韵与意境,避免高饱和、现代摄影感和西式油画质感。",
|
|
"新中式": "现代新中式东方美学,传统中国元素与现代极简设计融合,黑白灰、原木色、墨绿与低饱和暖色体系,大面积留白,克制高级配色,简洁几何构图,中式格栅、山石、竹、松、水景等东方元素适度点缀,柔和自然光,细腻材质,现代空间感与传统意境结合,宋式审美,安静、雅致、克制、高级,商业视觉质感,避免大红大金、复杂雕花和俗艳传统元素。",
|
|
}
|
|
|
|
# 来源于「图片创作预设.docx」的统一生成收束。用户界面只展示预设标题;
|
|
# 风格文字和负面约束只在真正提交出图时拼进模型 Prompt。
|
|
IMAGE_PRESET_QUALITY_SUFFIX = "photorealistic, professional photography, realistic lighting, natural texture, high detail"
|
|
IMAGE_PRESET_NEGATIVE_CONSTRAINTS = "避免过度HDR、过度锐化、塑料质感、廉价AI感、异常高饱和、过曝、死黑阴影、过强光晕、明显CG感、过度磨皮。"
|
|
|
|
ALL_PRESETS: dict[str, str] = {**VIDEO_PRESETS, **IMAGE_PRESETS}
|
|
|
|
|
|
def preset_guidance(name: str) -> str:
|
|
"""预设名 → 拍法约束。认不出的名字返回 "" —— 前端加了新卡但这里还没写时,
|
|
退回「只有名字」的行为,不要报错。"""
|
|
return ALL_PRESETS.get((name or "").strip(), "")
|
|
|
|
|
|
def apply_image_preset_prompt(name: str, prompt: str) -> str:
|
|
"""将已选图片预设的风格字段确定性并入实际出图指令,不依赖 Agent 自行复述。"""
|
|
base = str(prompt or "").strip()
|
|
preset = (name or "").strip()
|
|
style = IMAGE_PRESETS.get(preset)
|
|
if not base or not style:
|
|
return base
|
|
marker = f"【图片风格预设】{preset}"
|
|
if marker in base:
|
|
return base
|
|
return (
|
|
f"{base}\n\n{marker}\n{style}\n"
|
|
f"画质基线:{IMAGE_PRESET_QUALITY_SUFFIX}\n"
|
|
f"负面约束:{IMAGE_PRESET_NEGATIVE_CONSTRAINTS}"
|
|
)
|