触发器
触发条件:处理通用的静态海报需求:"为<品牌>制作一张海报"、"发布海报"、"海报即着陆页"、"宣传单页"、"关键视觉"、"营销图片"、"专辑封面风格"、"商品发布预告图像"。任何主题和任何美学风格均可——该技能与主题和风格无关。
不要触发,当:
- 用户指向一个特定的海报要求复现(
@template:<slug>、"重新混合这个"、指定了一个slug)→ 这属于 remix 路径。请参阅docs/skills-vs-templates.md。 - 用户想要一个动态视频(字标动画、英雄说话)→ 匹配视频格式/模板,加载对应的视频工艺覆盖技能(
ugc-*),并使用编辑者手册,而非此技能。 - 用户粘贴了
@guideline:<slug>为该海报所处的注册表(逼真人类、反AI生成)→ 首先运行ralphy guideline show <slug>并将其规则融入到英雄照片插槽中。
此技能的定位
这是一个通用化的布局覆盖层,而非完成的海报。它不指定品牌、英雄或调色板——它告诉艺术指导这类海报的构建方式,以便为用户正在推广的任何内容生成一张出色的海报。它通过 ralphy generate image 来运行;它不会绕过参考门控或质量门控。
硬性不变项
- 所有生成都通过
ralphy generate image路由(无原始API)。在命名任何模型ID之前,请阅读MODELS.md——下面的栈是默认值,而非硬编码。 - 参考门控仍然会在英雄或产品插槽中指定真实世界的命名实体时触发(真人、可识别的品牌产品、知识产权)。一个虚构品牌 + 原创图形符号 + 通用产品可以无需参考而进行。确保在提示词中明确说明品牌图形符号是"原创的"("不是任何现有品牌"),以便模型不会偏向于商标化的标记。
- 质量门控会拒绝,而非警告——连续两次
scoreImage失败 → 停止并报告选项。 - 真实品牌预检:在构建任何提示词之前进行网站基础研究。 如果海报针对真实品牌(用户自己的初创公司、客户网站、提供的任何URL),在起草品牌DNA或提示词之前,分派一个Playwright子智能体抓取首页 +
/docs+/pricing+/features+/examples。阅读artifacts/refs/research.md(子智能体的摘要),而不仅仅是主页的WebFetch。每个{{palette}}十六进制颜色必须溯源至artifacts/refs/tokens.json;正文或代码创意插槽中的每个命名API符号必须溯源至research.md中的"记录在案的API功能"。完整的纪律和子智能体提示模板:.agents/skills/researcher/references/site-grounding.md。跳过此步骤导致sotaocr-fb-001花费 $1.20 + 5/32 个幻觉SDK创意。
细分领域,一句话概括
一张海报即着陆页成败取决于一个巨大的可读字标加上一个单个人物进行眼睛或接近眼睛接触,通过DIY贴纸拼贴的能量粘合在一起。视线应先落在文字上,然后是脸上,接着在2-3个贴纸亮点间跳动,最后阅读文案。清晰的排版是全部关键——模糊的字标会立即毁掉一切,这就是为什么模型选择以排版优先,而非一致性优先。
固定架构(请勿重新构建结构——仅填充插槽)
从上到下,此细分领域的每张海报都保留此层叠结构:
| 层 | 固定角色 | 需要填充的插槽 |
|---|---|---|
| 1. 顶部横幅 | 小号小写跟踪介绍行 | {{tagline}},强调色 |
| 2. 字标 | 巨大的粗体衬线字体,3D斜面阴影,每个字母的铬色高光,轻微的俏皮倾斜 + 不完美的终端 | {{exclamation}}(简短有力的词:BOOM / DANG / YIKES / WOW / OOPS) |
| 3. 英雄照片(约60%高度) | 电影感的胸部以上肖像,目光向上,休闲酷感,胸前有原创图形符号,手持产品在嘴部高度,柔和的边缘光,胶片颗粒感 | {{hero}},{{product}},{{blob_glyph}} |
| 4. 贴纸拼贴 | 3个乙烯基贴纸(薄白色边框 + 柔和投影 + 胶带边角),以俏皮角度散落 | 带有产品微距的星形 · 带有图形符号脸的星形 · 带有"NEW DROP"类标签的小星形 |
| 5. 文案块 | 紧凑的大写标题 + 4行斜体衬线正文 + 填充的行动号召按钮 | {{headline}},{{body_copy}},{{cta}} |
| 6. 页脚条 | 非常细的全宽小写跟踪行 | {{brand}} · 创立于YYYY年 · <流程口号> · WWW.<域名> |
完成层(始终开启):细微的胶片颗粒感 + 轻微晕影 + 微弱的CRT温暖色调 + 复古丝网印刷质感。
插槽(海报之间唯一变化的部分)
{{brand}}+{{tagline}}+{{domain}}——虚构(或用户拥有)的标签。{{exclamation}}——字标词。一个短促有力的可喊叫词。{{hero}}——人物 + 服装 + 表情。自由改变年龄/性别/风格。{{product}}——在嘴部高度持有的道具(棒棒糖、冰棒、易拉罐、麦克风…)。保持通用/无品牌,除非用户拥有该品牌。{{palette}}——全出血背景渐变(2个十六进制色) + 强调色(字标/标题) + 斜面阴影色 + 奶油色主体色 + 线条木炭色 + 产品色。始终明确指定十六进制值。{{blob_glyph}}——一个原创的手绘友好生物(笑脸图形、独眼云、不对称星星)。内部写入小写品牌词。说明"不是任何现有品牌。"{{aesthetic}}——风格(已验证的默认值为Y2K滑板冲浪街头风格;蒸汽波、垃圾杂志、简洁DTC、90年代街机风格均适用于相同框架)。
模型栈(每次运行时对照MODELS.md验证)
- 默认值 —
openai/gpt-5.4-image-2。卓越的排版/标签准确性:斜面字标、小页脚条和4行正文都清晰可读。这是它在海报方面胜过一致性优先默认模型的全部原因。并发上限为1——串行化批次(--concurrency 1),切勿在此模型上并行生成海报。 - 备选 —
google/gemini-3-pro-image-preview。大约一半的延迟且成本更低,支持≥4并发,但模糊了嵌入的小型排版(事后分析;在loud-kids-poster-001中再次确认——4行正文变模糊)。仅用于快速调色板/构图探索,然后在gpt-image上最终确定选定的变体。
宽高比 — 已解决,使用 --size
gpt-5.4-image-2 历史上一律返回 1024²,无论 --size 如何。截至 loud-kids-poster-001 会话,ralphy generate image 将 image_config.aspect_ratio(源自 --size)转发给 OpenRouter,且 gpt-image 遵循它:--size 1080x1920 → 真正的 9:16 纵向(720×1280 本地桶)。传递 --size 1080x1920 用于纵向着陆海报,--size 1080x1080 用于方形社交媒体帖子。输出落在模型的最近本地桶上,而非精确像素——如果需要精确帧,请下游进行填充/缩放。
失败模式
- 并行 gpt-image 生成 → 403 "超出密钥限制"。 串行化(1并发上限)。每次生成大约需要2.5-4分钟。
- Gemini 模糊了正文和页脚条。 不要在 Gemini 上最终确定排版密集的海报。
- 图形符号偏向真实商标(笑脸品牌等),如果你没有说"原创,不是任何现有品牌"——始终包含该条款。
- 贴纸太多 → 视线无处可放。限制在3个,并将它们保持在英雄形象的边缘。
- 字标和标题与繁忙背景颜色相同 → 可读性丧失。字标强调色必须与渐变形成强烈对比。
工作示例(2026-05-27 验证)
.ralphy/workspaces/<ws>/projects/loud-kids-poster-001/ 包含三个在此精确框架上构建的调色板/英雄/产品变体(BOOM/皇家蓝+棒棒糖,DANG/珊瑚色梅子+冰棍,YIKES/酸橙森林+苏打水)以及一个 9:16 的 A/B 测试(gpt-image vs gemini)。三个提示文件(prompt-v1-boom.txt…)是规范的已填充插槽参考——在起草新海报提示之前阅读一个。
CLI 快速参考
# 默认海报,纵向 9:16,清晰排版
ralphy generate image --project <id> --slot poster-01 \
--model openai/gpt-5.4-image-2 --size 1080x1920 --prompt "<已填充框架>"
# 快速调色板/构图探索(之后在 gpt-image 上最终确定胜出者)
ralphy generate image --project <id> --slot poster-explore --variants 3 \
--model google/gemini-3-pro-image-preview --size 1080x1920 --prompt "<...>"
# 同一海报的方形社交媒体帖子裁剪
ralphy generate image --project <id> --slot poster-01-sq \
--model openai/gpt-5.4-image-2 --size 1080x1080 --prompt "<已填充框架>"
长提示:将已填充的框架写入项目目录中的 .txt 文件,并传递 --prompt "$(cat file.txt)"——正文中的撇号会破坏内联单引号 shell 字符串。