YouTube 缩略图
以人们在 feed 中实际看到的大小(约 160 像素宽)来评判缩略图和封面。输入一个标题,输出三个不同概念,用户选择,一个最终版,窄幅修订,文件以精确交付尺寸输出。工艺(概念框架、提示蓝图、文本规则、小尺寸门控)在此;机制在 references/cli-contract.md 和 references/platform.md 中。
第 0 步 — 预检
每次会话一次:
command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" tools
blockers不为空,CLI 缺失或版本低于 0.7.0 →/genmedia-skills:setup。密钥缺失 → 用户自行运行genmedia setup或导出FAL_KEY;等待。切勿读取、打印、请求或输入密钥。- 保持
config.announce_above_usd和config.confirm_above_usd(默认值 0.50 和 2):它们是成本门槛。 thumbcheck.py tools说明哪些工具(preview、sheet、fit、frame)可以在此处运行(需要本地 ffmpeg 或 macOSsips),以及lockup是否可以运行(需要基于 Chromium 的浏览器)。两者都缺失 → 则在工作流第 6 步进入降级门控。切勿依赖drawtext、Pillow 或 ImageMagick:文本由模型渲染。- 首先恢复:如果存在匹配此请求的
.genmedia/projects/<slug>/thumbnail.md→ 读取它,从其第一个打开的步骤继续。切勿重启已有账目的项目。
UX 规则
- 以用户的语言回复(土耳其语输入 → 土耳其语输出)。模型提示用英文编写;图像上的文本保持发布时的语言和确切拼写。端点 ID、字段名和路径保持原样。
- 不要在聊天中输出 JSON、请求 ID、提示或工具叙述。静默等待;每批最多一行状态。
- 问题预算:2 个,一次问一个,以标注选项的形式,仅在答案缺失时提问:
- Q1 钩子词:无标题且无主题 → 询问标题。标题已知 → 不问;自行写出 2 到 4 个钩子词(不同概念下使用三个不同的词)。
- Q2 人脸或无脸:仅在无任何决定因素时询问。有照片、
@handle或“我 / 我的脸” → 带脸。“无脸”、产品、屏幕录制、风景 → 无脸。 用户只要求一个缩略图或命名了概念 → 只生成一个草案而非三个;选择变为是或否。其他所有内容都在交付行中声明为默认值:格式 16:9;文本语言 = 标题的语言;调色板 = 给定的品牌色,否则按概念选择;真实感海报风格;3 个概念;最终主文件 2560x1440 交付为 1920x1080 和 1280x720。不计数:同意确认、选择、成本确认。
- 选择是硬性停止点。 显示比较表并等待。沉默、成功的任务或你自己的偏好绝不是选择。推荐一个是可以的;代替用户选择是不行的。
- 真实性。 缩略图可以戏剧化,但绝不能歪曲。显示或编写的所有内容必须存在于视频中或诚实来源于视频:不得有虚构的数字、结果、反应、产品或嘉宾;不得有真实平台的假 UI;不得有用户不拥有的徽标或角色。无法判断视频提供什么 → 在承诺之前询问(这会替换 Q1 或 Q2,不会增加问题数量)。
- 人脸。 真实人物的照片(包括用户本人)→ 一次确认他们已获得此人的同意,以及一行说明上传内容位于公共 URL 上。不得使用用户不是的名人或公众人物;“看起来像 <名人>” 会被拒绝,提供虚构人脸或无脸概念。虚构人脸是占位符:切勿将其呈现为真实姓名的人、客户、专家或嘉宾,并在交付中说明人脸是 AI 生成的。
- 成本: 在首次付费调用(工作流第 4 步)之前估算整个请求,并使用预检中的阈值应用成本门控:低于
announce_above_usd→ 运行;不超过confirm_above_usd→ 一行包含估算,然后运行;达到或超过它 → 显示估算并等待明确的“是”(references/platform.md第 8 节)。批准涵盖所显示的计划;更大的计划需要新的批准。切勿凭记忆报价;切勿为省钱而更换用户命名的模型。 - 限制: 最多 3 轮草案和 3 轮修订;每次尝试都会更改某些内容;违反内容策略的拒绝绝不原样重新发送;有请求 ID 的任务将恢复,绝不清零重试。
发现护栏
以下路由是过时的缓存(references/routing-image.md,验证日期 2026-09-19)。在会话中首次对端点进行付费调用之前:
genmedia models --endpoint_id <endpoint_id> --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <endpoint_id>
status必须为active。非活跃或 404 →references/routing-image.md中同一任务的下一层级,否则genmedia models "<name>" --no-classify --limit 10 --json,选择最新的活跃匹配项,并说明运行了哪个模型。- 字段名、枚举和限制来自 schema,绝不凭记忆。用户命名了一个模型 → 先搜索再怀疑;新版本位于供应商命名空间下(
openai/、bytedance/、google/、alibaba/),不在fal-ai/下。 - 切勿在没有端点 ID 的情况下运行
genmedia run(智能路由会解析过时的默认值)。
路由
| 步骤 | 端点 | 原因 |
|---|---|---|
| 草案,无参考项 | openai/gpt-image-2.5/flare/text-to-image,quality: "medium" | 排版领导者;只有目标系列可以预览文本,廉价草案模型不能 |
涉及人脸照片、@handle 引用、产品照片或视频帧的草案 | openai/gpt-image-2.5/flare/edit,quality: "medium" | 引用放入 image_urls(最多 16 个);与最终版同系列 |
| 最终版 | openai/gpt-image-2.5/sunburst/edit,quality: "high" | 精度层级;选定的草案作为图像 1,因此最终版是那个构图,而非全新的生成 |
| 修订(文本、表情、背景、颜色) | openai/gpt-image-2.5/sunburst/edit,quality: "high" | 当前最终版作为图像 1;每轮一个范围 |
| 无文本底板,真实感(备选路径) | bytedance/seedream/v5/pro/text-to-image | arena #1 真实感;文本之后通过 GPT Image 2.5 编辑添加 |
| 当人脸漂移时的身份底板 | fal-ai/nano-banana-2/edit | 身份一致性图像的路由默认值;文本之后添加 |
| 放大真实帧或照片 | fal-ai/seedvr/upscale/image;人脸或文本首先:topaz/upscale/image/precision | 忠实;Topaz 有 Faces 和 Text Refine 模型 |
| 用户视频的帧 | thumbcheck.py frame(本地 ffmpeg) | 精确时间戳;无 ffmpeg → 请求用户截图 |
| 用户自己的徽标在无文本底板上 | thumbcheck.py lockup(本地浏览器) | 标记从用户文件放置;模型会重新绘制它 |
决胜规则:
- 图像上有文本 → GPT Image 2.5,即使是真实感概念。完全无文本(用户声明)→ 草案可在
bytedance/seedream/v5/pro/text-to-image或其/edit上运行;其余流程不变。Seedream 拒绝 1280x720(其最小面积为 1024x1024)且没有quality字段:发送image_size1920x1080(9:16 → 1080x1920,1:1 → 1536x1536)并根据其路由行按图像定价(2026-09-19 每个约 USD 0.07:三个草案约 USD 0.20,重新计算总额)。 - 默认文本策略是一次性嵌入。在以下情况下使用 底板路径(无文本底板,然后一次“仅添加此文本”编辑):同一底板需要多种语言或 A/B 措辞;变音符号连续失败两次;底板是真实帧或照片。详情:
references/text-and-readability.md。 @handle→ 读取.genmedia/characters/<handle>/character.json(锚点description;refs[]中role: "face"且active: true),重用已有cdn_url的引用,否则上传其文件;原样使用锚点。real_person: true→ 适用 UX 规则 6;记录的consent_confirmed_at即为确认。未知 handle → 告知,提供/genmedia-skills:character;切勿替代。- 用户命名了模型 → 在实时检查后使用它;一行提供默认值。
- 设计是底板加上用户自己的徽标(品牌频道、应用商店预览视频)→ 底板路径,然后
thumbcheck.py lockup将徽标文件以宽度的一定比例居中放置(references/text-and-readability.md第 2b 节)。底板已存在(launch-graphics底板、用户照片)→ 无需付费调用:lockup、门控、第 10 步。无徽标文件 → 请求;切勿让模型绘制标记。
陷阱:
- 自动尺寸陷阱。 编辑端点默认
image_size为auto,这会跟随输入图像:纵向人脸照片会产生纵向缩略图。始终发送{width,height}。 - 默认质量陷阱。
quality默认为high,该系列按 token 计费。每次调用都设置它:草案medium,最终版high;仅在用户同意价格后使用xhigh或max。 - 16 的倍数陷阱。 1920x1080 不是合法的 GPT Image 尺寸。渲染 1280x720、2560x1440 或 3840x2160,然后让
thumbcheck.py fit生成 1920x1080。 - 附加图像陷阱。 文本到图像端点没有图像字段;它会忽略照片但仍计费。任何引用 → 使用
/edit端点。 - 全新生成陷阱。 以高质量重新运行提示会产生不同的图片(此系列中无
seed)。最终版是选中项的编辑。 - 大小写陷阱。 切勿让模型将土耳其语转为大写:你自己编写最终字符串(
thumbcheck.py text),用引号括起来,并逐字检查。
工作流
- 接收。 标题或主题、格式(默认 16:9)、是否有人脸、品牌色、引用。HEIC、AVIF、TIFF 或非常大的照片首先:
thumbcheck.py fit <file> --max-side 2048 --out .genmedia/tmp/<name>.jpg;读取并上传该副本。在计划之前使用读取工具打开每个本地图像(其中的人或物决定了概念)。用户视频的帧:python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" frame <video> --at <seconds or m:ss>,然后读取它。仅按 UX 规则 3 的允许花费问题预算。 - 状态卡片。 选取一个简短的 ASCII
<slug>(eksi-maya):它是批次label、账目过滤器、输出文件夹和项目文件夹。自然语言标签也可用;助手将"Ekşi maya"折叠为Eksi-maya,该折叠形式即为文件夹名。使用写入工具编写.genmedia/projects/<slug>/thumbnail.md,并在每一步后更新:# <title> — 缩略图 promise: <一行:视频实际提供的内容> format: 16:9 | text language: <code> | face: <none | photo path | @handle> (consent: <yes, date | n/a>) | palette: <colours> [ ] concepts [ ] drafts-1 [ ] gate [ ] pick: - [ ] final [ ] revisions 0/3 [ ] delivered log: - <date> drafts-1: 1 <framework> "<TEXT>", 2 <framework> "<TEXT>", 3 <framework> "<TEXT>" - 三个不同概念。 读取
references/frameworks.md。私下头脑风暴至少五个,保留使用不同框架的三个最强概念(不是同一想法的三种配色),每个都有自己的 2 到 4 个钩子词。对每个钩子运行文本检查,并使用其upper字符串原样:钩子词和图片只能使用用户声明的内容(标题、简介、他们的文件)中的数字、结果、引用、产品和嘉宾;标题本身不提供这些 → 使用问题、无约束钩子或无文本概念,或询问(UX 规则 5)。拒绝任何违反真实性规则的概念。选择了人脸 → 三个概念中至少两个展示人脸。标题已包含钩子 → 一个概念可以无文本。python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" text "şimdi izle" --lang tr - 验证并定价。 每个端点的发现护栏,然后:
GPT Image 2.5 回答python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" price openai/gpt-image-2.5/flare/edit,openai/gpt-image-2.5/sunburst/edit1 units,这不是一个价格。此技能的美元计价:作业数量 x 行(依据大小、质量)来自references/routing-image.md中的 GPT Image 2.5 表格(t2i-typography注释;编辑行已包含一个输入图像)+references/platform.md§7 中每额外参考图像的参考津贴。过时提示(2026-09-19):草案 1280x720medium约 USD 0.01;最终版或修订 2560x1440high约 USD 0.055;3840x2160high约 USD 0.10。典型完整作业(3 个草案 + 最终版 + 3 个修订):无参考时约 USD 0.25,带一个人脸参考时约 USD 0.45 → 低于默认发布阈值,运行并在交付行中说明估算。第二轮草案、更多参考、xhigh、max、4K 或一个请求中的多个视频(每个视频一个 slug 和状态卡片;估算是总和)→ 首先重新计算并应用成本门控。 - 一次性批量生成草案。 上传参考一次并保留
urls(参数顺序);上传是公共 URL,对于私人材料说明一次:根据python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" upload ./me.jpgreferences/prompt-blueprint.md构建每个提示。使用写入工具将计划写入.genmedia/projects/<slug>/drafts-1.json:使用写入工具编写计划,然后运行:{"label": "<slug>", "max_parallel": 3, "jobs": [ {"id": "draft-a", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concept A>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}, {"id": "draft-b", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concept B>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}, {"id": "draft-c", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concept C>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}} ]}读取结果(每个作业文件夹中的python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" run .genmedia/projects/<slug>/drafts-1.jsonoutput.png),创建比较表(thumbcheck.py sheet或本地图像的 HTML),在状态卡片中勾选[x] drafts-1,并硬停止 — 等待用户选择。切勿在用户选择前进行最终版。 - 降级门控(如果第 5 步无预览工具)。 第 4 步后无法生成缩略图表 → 在交付草案时这样说:“三个概念作为独立文件准备好:[链接];选择后我进行最终版。”并将成本估算添加到交付行。勾选状态卡片中的
[x] gate。 - 最终版。 用户选择了一个草案(
draft-a、b或c)。从drafts-1.json记录中读取其提示,并在编辑端点中将所选图像作为参考:编写python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" upload .genmedia/projects/<slug>/draft-a/output.png.genmedia/projects/<slug>/final.json:运行它,读取输出,使用{"label": "<slug>", "max_parallel": 1, "jobs": [ {"id": "final", "endpoint_id": "openai/gpt-image-2.5/sunburst/edit", "est_cost_usd": 0.055, "input": {"prompt": "<same concept prompt, maybe refined>", "image_urls": ["<selected draft url>", "<original references>"], "image_size": {"width": 2560, "height": 1440}, "quality": "high", "num_images": 1, "output_format": "png"}} ]}thumbcheck.py fit调整大小为 1920x1080 和 1280x720 进行交付,更新状态卡片[x] final。 - 修订。 用户请求更改(文本、表情、背景、颜色)。每轮一个范围。如果可能使用与最终版相同的端点(
sunburst/edit),并将当前最终版作为图像 1。编写.genmedia/projects/<slug>/revision-1.json,运行,更新状态卡片[x] revisions 1/3,交付。最多 3 轮。 - 交付。 最终文件和调整大小版本。交付行声明格式、文本语言、调色板、成本(
~USD 0.25结构,USD 0.45 总计)、以及人脸是 AI 生成的(如适用)。 - 完成。 勾选
[x] delivered。无需额外操作。