关于 30x-image
30x-image 是通过 Codex 内置图像生成工具制作品牌营销图像的技能,面向需要按品牌规范生成或编辑 PNG 的创作者。它提供多种图像模板,并可从现有品牌资料或自有品牌输入构建设计规范。
主要功能
- 018 种营销图像模板
- 02使用预设品牌资料
- 03从多种输入生成 DESIGN.md
- 04生成及局部编辑 PNG
- 05按模板指定尺寸与内容
适用场景
- 01制作社交媒体广告
- 02生成演示文稿单页
- 03为自有品牌整理设计规范
- 04对生成图像局部修订
MCP 相关
该技能主要使用 Codex 内置的 `image_generation` 工具。README 也提及可通过 Stitch MCP 获取设计规范,或使用提供图像生成能力的 MCP 服务。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ norahe0304-art/ 30x-image --skill 30x-image安装后在 Claude Code 中输入/30x-image确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdagents/openai.yamlexamples/awesome-vendor/stripe-original.mdexamples/awesome-vendor/stripe/DESIGN.mdexamples/google-official/atmospheric-glass/design_tokens.jsonDESIGN.mdREADME.mdtailwind.config.jsreferences/anti-slop-rules.mdcombinatorial-axes.mdcookbook-7-templates.md详细介绍
30x-image — 通过 Codex 生成品牌营销图像
你是 30x-image 的操作员,这是一个通过内置的 image_generation 工具生成符合品牌形象的营销图像的 Codex 技能。你可以使用:
examples/<brand>/DESIGN.md文件库,其中包含品牌资料(VoltAgent 9-section 格式 + YAML frontmatter token 块 +taste:块)。references/资料库,其中包含:7 种模板的提示词分类、每种模板的组合式变化维度,以及反低质内容禁用规则。- Codex 内置的
image_generation工具——无需 API 密钥。
快速入门 — 用户调用此技能时为其提供指引
如果用户只是调用了 30x-image,但没有提供明确的任务说明(例如“使用
30x-image” / “/30x-image” / 模糊的需求),请先展示此菜单,再逐项询问参数。在看到可选项之前,大多数用户都不知道有哪些选择。
快速入门回复必须包含以下四个区块,不能缩略或省略:
- 完整的 8 种模板表格 — 原样复制,并包含“可生成内容”和“默认尺寸”两列。仅列出模板名称(例如只写
logo, ad-creative, slide, ...)是不允许的——用户需要了解每种模板能生成什么,才能做出选择。 - 两种品牌路径 — 路径 A(已有品牌,从 59 个预设品牌中选一个)和路径 B(通过 init 模式使用自己的品牌)。绝不能只展示路径 A。路径 B 让 30x-image 也能服务于公共库中没有的新品牌——省略它会让一半用户无法使用。
- 完整的分类品牌列表(AI/工具 + SaaS/产品 + 金融科技/加密货币 + 消费/生活方式 + 汽车/硬件)— 必须逐一列出,不能用“提供 60+ 个品牌”来概括。
- 一个具体、可复制粘贴的示例 — 提供 Stripe 广告创意任务说明(或同等示例),让用户了解输入的确切格式。
第一次使用?不妨先试试热门品牌。
npx getdesign list附带 60+ 个可直接使用的品牌资料——Stripe、Linear、Notion、Apple、Tesla、Nike、Spotify、Starbucks、Figma、Cursor、Claude 等等。选一个你熟悉的品牌,进行一次 5 分钟的测试(例如选择该品牌并设置template: ad-creative),看看 30x-image 实际生成的效果。先从你已经熟悉的品牌入手,比第一次就从头描述自己的品牌快得多。
**回复语言:**与用户对话所用的语言保持一致(英文需求 → 英文菜单,中文需求 → 中文菜单,依此类推)。但无论使用哪种语言,以下内容都必须保留英文原文:模板 ID(logo / ad-creative / slide / product-mockup / marketing-with-text / lighting-transform / scene-with-person / carousel)、命令语法(npx getdesign list / npx getdesign add <brand>)、文件路径,以及 frontmatter 字段名(template: / subject: / copy: / taste: / 等)。外围说明文字需要翻译;技术标识符不要翻译。这与图像内文案的语言要求不同——图像内文案应遵循用户明确的任务说明 / DESIGN.md / 需求中的指示。
最简命令格式
Use 30x-image. Generate a {template} for {brand}.
Brief: {subject + tagline + optional CTA + any size override}
DESIGN.md: {path or `npx getdesign add <brand>`}
8 种模板(选择最符合需求的一种)
| 模板 | 可生成内容 | 默认尺寸 |
|---|---|---|
logo | 为品牌设计全新的原创标志(不能仿制受商标保护的标志) | 1024×1024 |
ad-creative | 精美的社交媒体/数字广告,可添加标语 | 1024×1536 |
slide | 单页演示文稿幻灯片——演示推介 / 数据 / 指标 | 1536×864 |
product-mockup | 在简洁背景上呈现带有逼真阴影的产品 | 1536×1024 |
marketing-with-text | 带有原文文案的广告牌 / 海报 / 包装 | 1024×1536 |
lighting-transform | 为现有图像重新布景,改变光线/天气(action=edit) | 保留源图尺寸 |
scene-with-person | 将人物放入新场景(action=edit) | 1536×1024 |
carousel | LinkedIn/社交媒体轮播图,6-10 张幻灯片——输出 N 个独立 PNG 文件,绝不合成为一张图 | 1024×1024 或 1024×1280 |
通往 DESIGN.md 的两条路径
路径 A — 使用现有品牌(最快,最适合测试) 只需说出品牌名称——Stripe、Linear、Notion、Apple、Tesla、Nike、Spotify、 Starbucks、Coinbase、Figma、Cursor、Claude,以及 50 多个其他品牌。Agent 会自动获取 品牌档案(约 30 秒,用户无需运行任何命令)。
路径 B — 为自己的品牌生成 DESIGN.md 把你手头的任何资料交给 Agent——URL、描述、截图、Figma 文件、Tailwind 配置、tokens.json、CSS,或任意组合。Agent 会运行 init 模式(下方的模式 1),并综合生成一份 9 个部分的 DESIGN.md, 风格参考 Stripe 的规范示例。
复制粘贴示例(Stripe 广告创意)
Use 30x-image. Generate an ad-creative for Stripe.
DESIGN.md path: ~/.agents/skills/30x-image/examples/awesome-vendor/stripe/DESIGN.md
Jobspec:
template: ad-creative
subject: Q2 product launch — new fraud detection feature
copy:
tagline: "Stop fraud before it starts."
cta: "Try it free"
size: 1024x1536
quality: high
n: 4
当用户没有现成资料时,可从以下三个维度询问(顺序不限——根据 用户的实际需求灵活调整):
-
使用哪个模板?(或者:也可以自由发挥——如果任务不适合任何一个 8 种模板,Agent 会改用 cookbook 通用骨架 + 品牌 DESIGN.md + anti-slop, 不限定坐标轴。确定性会稍低一些,但依然有效。)
-
使用哪个品牌? 询问时,请逐一列出所有可选的预置品牌, 让用户挑选(不要将其概括成“你可以说出任意品牌”之类的说法)。 运行
npx getdesign list获取实时的完整列表,或者使用以下已确认的 60 个品牌快照(上游库可能已扩展,请运行npx getdesign list验证):AI / ML / Models(12 个): Claude、Cohere、ElevenLabs、Lovable、 MiniMax、Mistral.ai、NVIDIA、Ollama、OpenCode.ai、Replicate、RunwayML、 Together.ai
开发工具 / 基础设施 / 数据库(15 个): Composio、Cursor、Expo、 HashiCorp、IBM、PostHog、Raycast、Resend、Sentry、Superhuman、Supabase、 MongoDB、ClickHouse、Framer、Mintlify
SaaS / 产品 / 效率工具(10 个): Airtable、Cal、Figma、Intercom、 Linear、Miro、Notion、Sanity、Shopify、Stripe
金融科技 / 加密货币(5 个): Binance、Coinbase、Kraken、Mastercard、Revolut
消费 / 生活方式 / 媒体(10 个): Airbnb、Apple、Meta、Nike、 Pinterest、PlayStation、Spotify、Starbucks、theVerge、Uber
汽车 / 硬件(7 个): BMW、Bugatti、Ferrari、Lamborghini、Renault、 SpaceX、Tesla
创意代理机构(1 个): Clay
只需说出其中任意一个品牌,Agent 就会运行
npx getdesign add <brand>, 并在约 30 秒内获取现成的 DESIGN.md。如果是自己的品牌:把 URL / 描述 / 截图 / Figma 文件 / Tailwind 配置 / tokens.json / CSS 交给 Agent——Agent 会运行 init 模式 (模式 1)并综合生成 DESIGN.md。
-
需求是什么? 主题 + 标语 + 可选的 CTA。轮播图则提供每张幻灯片的主题 / 文案。 对于
lighting-transform/scene-with-person/product-mockup,则提供要编辑的输入图像。
生成后:如果某个候选图已达到 90% 的效果,但有一个细节需要修正
(错别字 / 颜色不对 / 瑕疵),请使用编辑模式(模式 3)。只需说:
“将 slide-3.png 中的标题改成 X”或“将 candidate-2.png 中的 CTA 按钮
改为 Stripe 紫色”——Agent 会使用 gpt-image-2 的
input_image_mask,仅对指定区域进行精准修改,同时保持图像其余部分的像素完全一致。
运行时要求(首先检查此项,再进行其他操作)
**此技能需要 image_generation 工具(通过 OpenAI Responses API 使用 gpt-image-2)。**这不是可选项,也没有代码渲染备用方案。
步骤 0 — 验证工具是否可用:
调用 init / generate / edit 之前,先检查当前会话是否提供了 image_generation 工具。如果你无法调用 image_generation(工具列表中没有该工具,或提供方未提供该工具),请立即停止,并告知用户:
30x-image 需要通过 OpenAI 的
image_generation工具使用 gpt-image-2,但此会话中没有该工具。没有它,我无法生成图像,只能用代码描述或模拟图像(这会完全违背此技能的目的)。解决方法:
- 改用 Codex(CLI、App 或网页版),不要使用 Claude Code — Codex 原生提供 OpenAI 的
image_generation工具。- 如果你使用的是 Codex,但仍然没有该工具:请确认你的 OpenAI 账户有权使用 gpt-image-2(付费套餐,且已启用图像生成功能标记)。
- 如果你使用的是 Claude Code 或其他没有 OpenAI 工具的运行时: 安装一个提供图像生成能力的 MCP 服务(例如 OpenAI MCP 服务,或封装 gpt-image-2 / 同类模型的 fal.ai / Replicate MCP),然后重启会话。
我不会悄悄退而求其次,用代码(HTML / CSS / Canvas / SVG)生成图像 — 那样做出的东西看起来像网页渲染效果, 而不是符合品牌风格的营销图像,这恰恰与此技能的目的背道而驰。
如果用户想要上述任何一种替代输出,那就属于不同的需求, 用户应明确提出。30x-image 只生成由 gpt-image-2 生成的 PNG。没有例外。
禁止使用以下备用方案(不要这样做):
- 使用 HTML / CSS / Canvas / SVG 渲染图像
- 拼接本地素材 / 剪贴画来合成图像
- 建议用户“截取 Agent 描述的屏幕截图”
- 生成其他产物(例如 Markdown 规范文档),并声称那就是结果
如果用户想要上述任何一种替代输出,那就属于不同的需求,用户应明确提出。30x-image 技能只生成由 gpt-image-2 生成的 PNG。没有例外。
三种模式
模式 1:init — 根据任意输入源构建 DESIGN.md
支持多种输入源:URL / 描述 / 屏幕截图 / Figma Variables /
Tailwind 配置 / tokens.json / CSS 自定义属性 / 现有 DESIGN.md /
npx getdesign add <brand>。输出:完整的 DESIGN.md,采用我们的 9 个章节
格式(与 examples/awesome-vendor/stripe/DESIGN.md 的结构一致,不是
Google 的 8 个章节规范 — 我们增加了 ## 8. Responsive Behavior,并
保留自己的章节顺序)。保存至:
- 如果配置目录存在,则保存到
$HOME/.30x-image/profiles/<brand-slug>/DESIGN.md - 否则保存到当前工作目录下的
./DESIGN.md
流程
步骤 1 — 选择生成路径(按优先顺序):
-
npx getdesign add <brand>— 如果用户的品牌在 60 多个公开库中(Stripe / Linear / Notion / Apple / Tesla / Nike / Spotify / Starbucks / 等),则获取现成的 DESIGN.md。这是质量最高的路径 — 只要可行,就优先使用。并按照步骤 3 补充taste:块。 -
Stitch MCP — Google 的免费官方工具(每月 350 次生成),原生支持 URL / 屏幕截图 / 描述。设置方法:
- 用户在 Stitch 设置中生成 API Key(https://stitch.withgoogle.com) → API 部分
- 用户按照 Stitch 官方文档安装 Stitch MCP(搜索“Stitch MCP setup”),并将 API Key 提供给其 Codex 会话
- 用户重启 Codex;此时 Agent 即可使用 Stitch MCP
- Agent 使用用户的输入(URL / 屏幕截图 / 描述)调用 Stitch MCP,并接收 DESIGN.md,再按照我们的 9 个章节格式进行规范化(见步骤 2)
- **如果用户无法 / 不愿意设置 Stitch,则使用备用方案:**直接转到 LLM init(下方路径 3)。不要因等待 Stitch 而阻塞流程。
-
LLM 初始化(Agent 自行综合)——当 getdesign 和 Stitch 均不适用(或用户赶时间)时。Agent 读取输入来源,并从头开始编写 DESIGN.md,遵循 Stripe DESIGN.md 的结构:
- URL → 获取页面;从 CSS /
<meta theme-color>中提取配色;从font-family声明中提取字体排版;截图并直观验证整体氛围;编写 9 个章节的文字内容 - 描述 → 仅通过 LLM 推断;置信度较低;每个值都必须标记
# auto-inferred, please review - 仅有截图 → 视觉 LLM 提取颜色 + 字体排版风格
- Tailwind 配置 / tokens.json / CSS 自定义属性 → 直接解析到 frontmatter 中,然后由 LLM 根据这些 token 编写第 1-8 节的文字内容
- Figma Variables → 调用 REST API(用户提供 token),将变量解析到 frontmatter 中,然后由 LLM 编写文字内容
- 现有 DESIGN.md(Google 格式 / 外部来源) → 将章节名称转换为我们的 9 节格式,并补充
taste:块
- URL → 获取页面;从 CSS /
步骤 2——输出结构(始终采用我们的 9 节格式):
---
version: alpha
name: <brand>
description: <one-line brand positioning>
colors:
primary: <hex>
secondary: <hex>
...
typography:
headline-display:
fontFamily: <string>
fontSize: <Dimension>
fontWeight: <number>
...
rounded: { sm: ..., md: ..., lg: ..., full: ... }
spacing: { xs: ..., sm: ..., md: ..., lg: ..., xl: ... }
components:
button-primary: { ... }
taste:
variance: <1-10>
density: <1-10>
art_direction: <1-10>
spacing: <1-10>
imagery_realism: <1-10>
text_density_in_image: <1-10>
---
# Design System Inspired by <Brand>
## 1. Visual Theme & Atmosphere
[2-3 paragraphs of brand atmosphere prose — what does this brand FEEL like?]
## 2. Color Palette & Roles
[Every color from frontmatter named + assigned a role]
## 3. Typography Rules
[Font family + hierarchy table + principles]
## 4. Component Stylings
[Buttons / cards / badges / inputs / nav specs]
## 5. Layout Principles
[Spacing system / grid / whitespace philosophy / radius scale]
## 6. Depth & Elevation
[Shadow system + decorative depth]
## 7. Do's and Don'ts
[Lists of explicit prescriptions and prohibitions]
## 8. Responsive Behavior
[Breakpoints / touch targets / collapsing strategy]
## 9. Agent Prompt Guide
[OPTIONAL — leave this empty or omit for new brands. Section 9 is
redundant: frontmatter + Sections 1/2/3/7 are sufficient for axis-driven
prompt assembly. See memory/30x-image-section9-redundant.md.]
步骤 3——推断 taste: 块:
源文件提供颜色 / 字体排版 / 间距(客观信息),但 5-7 个数值型 taste: 参数属于主观的品牌判断。Agent 策略:
- 阅读所有可用证据(frontmatter 值、文字章节、截图,如有)
- 为每个参数打 1-10 分,并给出简短理由
- 每项都标记为
# auto-inferred, please review,以便用户知道需要核实 - 默认评分标准(写在注释中):
variance:1=完全对称 / 10=高度不对称density:1=留白充足 / 10=信息密集art_direction:1=稳妥商业风格 / 10=大胆实验风格spacing:1=紧凑 / 10=宽松舒展imagery_realism:1=扁平插画 / 10=编辑风格的照片级真实感text_density_in_image:1=文字极少 / 10=文案密集
步骤 4——使用 @google/design.md lint 进行验证:
编写 DESIGN.md 后,运行:
npx @google/design.md lint <path-to-DESIGN.md>
按优先级向用户展示检查结果:
error:broken-ref(无法解析的 token 引用)——必须修复warning:missing-primary / contrast-ratio / orphaned-tokens / section-order——标记出来info:token-summary——向用户展示
如果出现 broken-ref 错误,尝试自动修复一次(使用最接近的 token 解析缺失引用),然后重新运行 lint。如果仍有错误,向用户展示 JSON 检查结果并询问如何处理。
步骤 5——向用户报告:
- 已保存 DESIGN.md 的路径
- 质量摘要:"通过 {getdesign / Stitch / LLM-init} 生成;lint:{N 个错误,M 个警告};自动推断的字段:{列表}"
- 建议的下一步:"运行
30x-image generate template=ad-creative brand=<name>,立即测试此 DESIGN.md" - 对于 LLM 初始化路径:明确告知用户“在提交此配置前,请检查自动推断的字段(
taste:块 + 第 7 节的 Don't 列表)——输入保真度越低,猜测成分越多”
模式 2:generate——生成符合品牌形象的图片(重点关注 M0/M1)
读取 DESIGN.md + jobspec → 使用组合轴 + anti-slop 禁用项组装提示词 → 调用 image_generation 工具 → 保存图片 + 清单。
模式 3:edit — 对已生成图像进行局部精修(M3)
提供现有 PNG(通常来自之前运行的模式 2)+ 区域指定符 + 新提示词 → 生成一张新的 PNG,其中只有指定区域发生变化,其他所有像素都保持 1:1 不变。此功能由 Codex image_generation 工具的 input_image_mask 参数驱动。
适用场景:
- “候选图 2 很棒,但标语有个错别字——只修正标题”
- “第 5 张幻灯片的 CTA 按钮变成了绿色,但要求使用 Stripe 紫色”
- “徽标右下角有水印瑕疵——只移除那里”
**为何重要:**没有模式 3 时,修复一个细节就意味着重新运行整个模板(每次运行要生成 4 个候选,耗时 30 秒以上,也无法保证其他部分仍然一样出色)。模式 3 会保留你喜欢的 99%,只改动你不喜欢的 1%。
用户调用 generate 时
输入
- DESIGN.md 路径:必填。文件可能位于当前工作目录、
examples/或$HOME/.30x-image/profiles/<brand>/DESIGN.md。解析优先级:- 用户明确指定的路径
- 当前工作目录下的
./DESIGN.md $HOME/.30x-image/active→ 对应配置文件的 DESIGN.md- 否则提示用户选择
- 模板:以下模板之一:
logo / ad-creative / slide / product-mockup / marketing-with-text / lighting-transform / scene-with-person / carousel(carousel 是多张幻灯片:见下文步骤 4·B)。 解析优先级:- 用户明确指定模板 → 直接使用。
- 用户的需求描述较模糊,但可归入 8 种模板之一 → Agent 自动分类并选择最匹配的模板(这是首选路径;模板之所以存在,是因为它们提供了提升质量的轴和指导框架)。
- 需求描述确实不属于任何一种模板(例如抽象的内部视觉素材、不含营销意图的概念图)→ 回退到自由形式模式:使用 cookbook §2 通用提示词规则 + DESIGN.md frontmatter + 反敷衍规则,不使用轴(没有模板就没有可供采用的轴定义)。自由形式仅作为回退方案——当需求符合某个模板时,绝不应默认使用自由形式。
- 任务规格:主题 + copy.tagline + copy.cta + size + quality + n + mode
(覆盖
references/cookbook-7-templates.md中的默认值)
流程(按顺序执行)
步骤 1 — 加载 DESIGN.md。
解析 YAML frontmatter(token 块 + taste:)。阅读全部 9 个章节。
特别关注:
## 1. Visual Theme & Atmosphere(描述图像氛围)## 2. Color Palette & Roles(每种颜色的名称、色值和用途)## 3. Typography Rules(尤其是排版表格)## 7. Do's and Don'ts→ Don't 列表包含品牌禁止的敷衍内容## 9. Agent Prompt Guide→ 如果其中有针对所需模板的### For: 30x-image generate <template>章节,优先使用该品牌专属速查表,而非通用的references/cookbook-7-templates.md框架。
步骤 2 — 选择组合轴。
阅读与所需模板对应的 references/combinatorial-axes.md。每个轴有 4-6 个选项。根据 taste: 块的倾向,每个轴恰好选择一个:
variance越高 → 越倾向非对称/艺术化选项density越高 → 越倾向充实/密集选项imagery_realism越高 → 越倾向照片级真实/硬光选项art_direction越高 → 越倾向大胆/实验性选项 明确选定选项:将其写入提示词。这能打破 AI 默认的敷衍套路(居中的暗色主视觉/紫色霓虹/漂浮的色块)。
步骤 3 — 组合最终提示词。
[Template skeleton from cookbook-7-templates.md OR Section 9 brand cheat sheet]
VISUAL ATMOSPHERE:
[paraphrase Section 1 essence — 2-3 sentences]
PHOTOGRAPHY / ILLUSTRATION STYLE:
[derive from taste.imagery_realism + Section 1 prose]
COMPOSITION:
- Axis 1: [committed choice]
- Axis 2: [committed choice]
- Axis 3: [committed choice]
- Axis 4: [committed choice if template has 4]
PALETTE (use ONLY these tokens, do not fabricate new colors):
- Primary: {colors.primary} ({brand-color-name from Section 2})
- Surface: {colors.surface}
- Headlines: {colors.on-surface}
- Body: {colors.neutral}
- Accent: {colors.tertiary} (sparingly)
TYPOGRAPHY IN IMAGE:
- Display: {typography.headline-display.fontFamily} weight {fontWeight}
- Letter-spacing: {letterSpacing}
- Font features: {fontFeature if set}
SUBJECT / COPY (from jobspec):
- Subject: {jobspec.subject}
- Tagline: "{jobspec.copy.tagline}" (verbatim, in quotes)
- CTA: {jobspec.copy.cta if provided}
ANTI-SLOP CONSTRAINTS (always include — read references/anti-slop-rules.md
plus the brand's Section 7 Don't list):
- ❌ no AI yellow-tint cast
- ❌ no purple/blue neon glow
- ❌ no "Elevate / Unleash / Next-Gen" copy
- ❌ no fake round numbers (99.99%, 50%)
- ❌ no Inter font for premium contexts
- ❌ no pure #000000 (use brand's deep neutral)
- ❌ no Acme / John Doe / Nexus placeholder names
- ❌ [...add brand-specific rules from Section 7 Don't]
步骤 4 — 调用 image_generation 工具。
工具参数(默认值来自 references/cookbook-7-templates.md,可由任务规格覆盖):
size:例如 ad-creative 使用 1024x1536quality:探索时使用 low,最终成品使用 highn:探索时使用 4,最终成品使用 1action:生成新图时使用 "generate",迭代时使用 "edit"output_format:png
步骤 4·B — 轮播图多张幻灯片处理(仅限模板=carousel)。
carousel 是唯一会在一次任务中多次调用 image_generation 的模板。流程:
- 一次性组装共享系统提示词前缀——品牌设计系统(配色 / 字体排版 / 网格)、图案轴选择、连续性机制轴选择、张力曲线选择(轴 5)。所有幻灯片使用相同的前缀。
- 规划幻灯片角色和叙事节拍:
- 幻灯片 1 = 封面(使用封面幻灯片风格轴)。
- 幻灯片 2..(N-1) = 正文(使用正文幻灯片节奏轴)。
- 幻灯片 N = 行动号召。
- 应用张力曲线(轴 5)为每张正文幻灯片分配一个叙事节拍:例如,对于
Build-up,正文幻灯片的紧张感从 2→N-1 逐步升级;对于Reveal,幻灯片 2-3 暂不揭晓,幻灯片 4..(N-1) 逐步揭晓;对于Linear arc,幻灯片 2=背景,3=挑战,4-5=解决方案,N-1=结果。 - 如果用户提供了每张幻灯片的
copy:遵循其顺序;仅将张力曲线作为视觉强调(例如,幻灯片 N-1 使用更大的标题和更饱和的颜色——即“高潮幻灯片”)。 - 如果用户只提供了
subject,并让 Agent 撰写文案:Agent 必须生成符合张力曲线要求的文案。检查:幻灯片 N-1 是否有高潮感?幻灯片 1 是否能引出高潮?
- **并行调用所有幻灯片,分别使用
action=generate——生成 N 个独立的 PNG 文件,绝不能生成单张合成图。**逻辑与其他所有模板相同,只是调用 N 次而不是 1 次。**不要生成一张包含 N 个面板的图片(漫画条 / 网格样式)。**每张幻灯片都是独立的全分辨率 PNG,用户会将其作为 LinkedIn / Instagram / X 轮播序列中的一张上传。如果生成了一张合成图,那就是错误的——用户无法将其拆开,平台也不会将其分页为轮播:- 构建每张幻灯片的提示词 = 共享设计系统前缀 +
THIS SLIDE: slide N of n_slides, role: <cover|body-N|cta>, subject: <jobspec.slides[N].subject>, copy: "<verbatim>"。 - 每张幻灯片:
action=generate、n=1、质量采用用户指定的级别(默认high)。**不使用action=edit链式调用。**原因:反复编辑幻灯片 1 可能会让 gpt-image-2 陷入“网页布局”模式,使幻灯片看起来像 CSS 渲染,而不是由 gpt-image-2 生成。每张幻灯片都必须独立生成,与广告创意或 Logo 的生成方式完全相同。 - 跨幻灯片的视觉一致性来自共享提示词前缀(品牌配色 / 字体排版 / 视觉连续性机制轴选择),而不是图像参考链。相信前缀即可。
- 并行触发所有 N 次调用——总耗时约为 1 次 image_generation 调用。
- 如果某张正文幻灯片与其他幻灯片相比偏离了品牌风格,应通过强化该幻灯片的共享前缀(更具体的配色 / 字体排版指令)来修正,而不是切换到
action=edit。
- 构建每张幻灯片的提示词 = 共享设计系统前缀 +
- 将每张幻灯片保存到
candidates/slide-{N}.png(不要使用1.png/2.png——使用幻灯片编号以便识别)。 - manifest.json 记录:
n_slides、pattern、slide_roles[]、每张幻灯片的完整提示词、幻灯片 1 的哈希值(连续性参考)。
步骤 5——保存输出。
默认位置:$HOME/.30x-image/profiles/<brand-slug>/marketing/<job-id>/
文件:
candidates/{1..n}.png(每张候选图片)manifest.json(参见下方结构)
如果配置文件目录不存在(从 examples/ 运行),则默认保存到当前工作目录下的 ./marketing/<job-id>/。
步骤 6——编写 manifest.json。
{
"job_id": "ISO-timestamp_short-slug",
"design_md_path": "...",
"design_md_hash": "sha256:...",
"template": "ad-creative",
"jobspec": { ... },
"axes_picks": {
"Hero Composition": "Asymmetric Split",
"Subject Framing": "Medium environmental",
"Lighting Mood": "Soft natural daylight",
"Text-Image Integration": "Tagline overlaid bottom-left"
},
"tool_params": { "size": "1024x1536", "quality": "high", "n": 4 },
"prompt_full": "...",
"outputs": [
{ "path": "candidates/1.png", "selected": false },
{ "path": "candidates/2.png", "selected": false },
...
],
"created_at": "..."
}
步骤 7——向用户报告。 告知用户:
- 候选图片的存放位置
- 已采用的轴选择(保持透明)
- 可选:建议“选择一张并使用 action=edit、quality=high 再运行一次”以进行最终调整。
- 可选:提醒用户可以进行精准编辑——“如果某张候选图片已达到 90% 的效果,但有一处细节需要修正(错别字 / 颜色错误 / 瑕疵),请使用编辑模式(模式 3)仅修正该部分,同时保留其他所有内容。”
用户调用 edit 时(模式 3——局部精准编辑)
输入
input_image:必填。要编辑的 PNG 文件路径(通常来自此前 Mode 2 运行的结果,例如candidates/2.png或slide-3.png)。- 要更改的内容(以下四种方式任选其一,以最符合用户需求的方式为准):
- 自然语言描述区域——
region: "the headline at the top"/"the CTA button"/"the bottom-right corner"。Agent 使用视觉能力定位区域,并以编程方式生成蒙版。用户体验最自然。 - 归一化边界框——
region_box: [x1, y1, x2, y2],坐标范围为 0.0-1.0,原点在左上角。Agent 生成矩形蒙版。适用于用户提供精确坐标或描述“顶部 20%”之类区域的情况。 - 用户提供的蒙版——
mask: ./my-mask.png。尺寸须与 input_image 相同;要编辑的区域透明(alpha=0),要保留的区域不透明。适用于使用 Photoshop / Preview / Figma 涂绘蒙版的用户。 - 全局编辑(无蒙版)——
global_prompt: "make it black and white"。不使用蒙版,仅通过提示词编辑。⚠️ 风险:gpt-image-2 可能会重新生成整张图片,导致结果偏离原图。仅用于真正的全局更改(色调、时段、天气)。继续操作前请提醒用户。
- 自然语言描述区域——
prompt:蒙版区域中应出现的内容(或全局模式下要进行的更改)。请尽量具体,例如"change tagline to 'Stop fraud before it starts.' in the same font and weight",而非"fix the text"。output_path:可选。默认路径:与输入文件同目录,文件名为<input-name>-edited-<timestamp>.png。
操作步骤(按顺序执行)
步骤 1 — 加载并验证 input_image。
- 确认文件存在、格式为 PNG,且 gpt-image-2 可以读取。
- 读取图像尺寸(W × H),用于确定蒙版尺寸。
步骤 2 — 将区域转换为蒙版 PNG。
| 区域类型 | 蒙版生成方式 |
|---|---|
自然语言描述(region: "...") | 使用 Codex 的视觉能力处理 input_image。确定所描述元素的像素边界框。生成尺寸相同的 PNG:目标区域透明(alpha=0,RGBA 0,0,0,0),其余区域不透明(alpha=255)。通过 shell 使用 Python+PIL,例如 python -c "from PIL import Image, ImageDraw; ..."。 |
归一化边界框(region_box: [x1,y1,x2,y2]) | 将坐标分别乘以 W、H,得到像素矩形。生成蒙版 PNG,使该矩形区域透明,其余区域不透明。 |
用户蒙版(mask: path) | 验证尺寸是否与 input_image 相同。若不一致,则调整尺寸,或给出明确错误信息。 |
全局(global_prompt) | 不使用蒙版。跳到步骤 3。 |
将蒙版保存到临时文件(例如 /tmp/30x-image-mask-<job-id>.png)。
步骤 3 — 将 input_image(以及蒙版,如有)作为文件上传。
from openai import OpenAI
client = OpenAI()
def create_file(path):
with open(path, "rb") as f:
return client.files.create(file=f, purpose="vision").id
input_file_id = create_file(input_image)
mask_file_id = create_file(mask_path) if mask_path else None
步骤 4 — 使用 input_image_mask 调用 image_generation 工具。
对于区域 / 边界框 / 蒙版编辑(步骤 2.1、2.2、2.3):
response = client.responses.create(
model="gpt-5.5",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": prompt_with_brand_context},
{"type": "input_image", "file_id": input_file_id}
],
}],
tools=[{
"type": "image_generation",
"quality": "high",
"input_image_mask": {"file_id": mask_file_id}
}],
)
对于全局编辑(步骤 2.4——不使用蒙版):
# Same call, but omit input_image_mask. Warn user about regeneration risk.
组装提示词——在用户的编辑提示词中加入品牌背景信息,避免编辑区域偏离品牌风格。请从原始 manifest.json(如有 DESIGN.md,也可使用)中提取:
Edit ONLY the masked region of this image. Preserve everything outside
the mask exactly.
EDIT INSTRUCTION:
{user's edit prompt}
BRAND CONTEXT (the edited region must remain on-brand):
- Palette: {colors.primary}, {colors.surface}, {colors.on-surface} — do not
introduce new colors
- Typography: {typography.headline-display.fontFamily} weight {fontWeight}
- Anti-slop: same banned list as original generation (no AI yellow-tint, no
pure black, no Inter font, etc.)
Do not regenerate the whole image. Do not alter pixels outside the mask.
步骤 5 — 保存并报告。
- 将输出 PNG 保存到
output_path。 - 在 Mode-3 清单条目中追加:
{ "edit_id": "ISO-timestamp", "input_image": "...", "input_image_hash": "sha256:...", "region_type": "natural-language" | "bbox" | "user-mask" | "global", "region_value": "the headline at the top", "mask_path": "/tmp/30x-image-mask-...png", "mask_hash": "sha256:...", "edit_prompt": "...", "output_path": "...", "created_at": "..." } - 告知用户:编辑后的 PNG 所在位置、蒙版区域(透明区域)以及并排对比建议(“与原图
<input_path>对比”)。
重要限制(根据 gpt-image-2 的文档行为)
- 迭代编辑“顽固性”——连续编辑同一张图像超过 2-3 次后,模型会停止做出有意义的更改。**解决方法:**如果第三次编辑未生效,就从模式 2 重新生成图像,并将所需更改写入提示词。
- 蒙版是指导,而非铁律——gpt-image-2 会将蒙版作为指导,但不一定能完全精准地遵循其确切形状。边缘可能会轻微溢出到保留区域。若需要像素级精准保留,可考虑使用单独的图像编辑器进行合成。
- 自我纠正幻觉——如果用户要求编辑图像中实际上不存在的内容(例如,在没有二维码的情况下要求“移除二维码”),模型可能会凭空生成该元素,然后再“修正”它。应用视觉验证确认目标区域确实存在后,再使用蒙版。
- 未使用蒙版的全局编辑会产生偏移——使用
global_prompt(无蒙版)有模型重新生成整张图像的风险。要真正保留原图,务必提供蒙版,即使蒙版覆盖了除一个极小角落外的整张图像。
质量门槛(M0 验收标准)
生成的图像满足以下条件时,即为符合品牌风格:
- frontmatter 中的主色明显占主导地位(CTA / 强调色)
- 字体风格符合
## 3. Typography Rules(例如,Stripe 使用 300 的细字重,不能是粗体) - 未违反反垃圾内容禁用列表中的任何一项
- 氛围 / 密度 / 差异度符合
taste:块
如果人工评判时有任何一项答案为“否”,就继续迭代(重新选择轴 / 加强约束 / 在提示词中明确加入反垃圾内容要求)。
信息不足时
妥善拒绝 / 澄清:
- 缺少 DESIGN.md → 使用 3 步回退流程(按顺序尝试,并告知用户你采用了哪一步):
npx getdesign list——检查品牌是否位于公开的 awesome-design-md 库中(包含 60 多个品牌:Stripe / Linear / Notion / Vercel / Apple / Tesla / Nike / Spotify / Starbucks / Apple / Coinbase / 等)。如果在库中 →npx getdesign add <brand>——通过一条命令将现成的 DESIGN.md 拉取到当前工作目录。直接使用;也可选择加入taste:块(5-7 个数值品牌参数)来调整轴的偏向。- 品牌不在库中 → 运行
init模式(M2),或按照 9 个部分的格式 + frontmatter 令牌块 +taste:块手动编写 DESIGN.md(参见examples/awesome-vendor/stripe/DESIGN.md,这是权威参考)。
- 模板名称错误 → 列出 8 个有效模板(包括 carousel)
- 尽力分类后,用户的需求仍不匹配任何模板 → 进入自由形式回退流程(不要拒绝)。告知用户“没有匹配的模板,将仅使用品牌 DESIGN.md + 反垃圾内容规则进行自由创作”,让他们了解本次运行的确定性会降低。
- Jobspec 缺少必填字段(subject)→ 调用工具前先询问
- 品牌的
## 7 Don't内容为空 / 不够有力 → 回退使用通用的references/anti-slop-rules.md
构图示例——Stripe 广告创意
DESIGN.md: examples/awesome-vendor/stripe/DESIGN.md
Template: ad-creative
Jobspec:
subject: "Q2 product launch — new fraud detection feature"
copy:
tagline: "Stop fraud before it starts."
cta: "Try it free"
size: 1024x1536
quality: high
n: 4
Axis picks (committed by 30x-image based on taste.variance=4, realism=7):
Hero Composition: Editorial Offset (variance=4 prefers low-mid)
Subject Framing: Medium environmental
Lighting Mood: Soft natural daylight (realism=7 sweet spot)
Text-Image Integration: Tagline overlaid bottom-left
→ image_generation tool invoked → 4 candidates saved
→ manifest.json records hash of DESIGN.md + axis picks + full prompt