Files
2026-07-22 01:12:03 +08:00

8.0 KiB
Raw Permalink Blame History

name, description
name description
gen-image 调用大模型中转站的 OpenAI 图片接口生图(文生图、图生图/编辑、局部重绘、透明背景)。触发词:生图、生成图片、画一张、AI 画图、文生图、图生图、生成插画/头像/海报/封面/视频封面/标题图/图标、image generation、根据这张图改、做封面。需要外部 API 生成位图图像时使用;纯 HTML/SVG/矢量设计不适用。

gen-image · 生图

通过大模型中转站,直接调用 OpenAI 图片接口生成位图图像。支持文生图、图生图/编辑、局部重绘(mask)、透明背景。

核心是零依赖脚本 scripts/gen_image.py(纯 Python 标准库,无需 pip install)。

核心原则 · 原话直传(最高优先级,覆盖下方一切"打磨/扩写"措辞)。 被触发后,把用户这段话原样作为提示词传给脚本——不改写、不扩写、不翻译、不加风格/构图/画质关键词。你只需要判断一件事:用户是不是要生图;是,就转发原话。用户没说的风格,不要替他编;用户给的标题/文字,一个字都不要动。只有当用户明确说"帮我润色/扩写提示词"时才加工。理由:图像模型本身懂自然语言,外面这层多一次"加工"只会改坏用户要保留的内容(尤其标题)、并让产出不可控。

何时用 / 不用

  • ✅ 用户要「生成一张图 / 画一张 / AI 出图 / 做个头像/海报/插画/图标」
  • ✅ 用户给了一张图要「基于它改 / 换背景 / 局部重绘」→ 图生图
  • ❌ 用户要 HTML 原型、幻灯片、矢量图标、CSS 效果 → 用 huashu-design 或直接写代码
  • ❌ 用户要图表/数据可视化 → 用 dataviz

⚠️ 带文字的封面 / 海报 / 标题图(重点)

用户说「做个 B站/抖音/视频封面」「带标题的海报」「封面 + 标题是 XXX」时,整个任务就是一次生图调用——不要拆成「生个背景图 + 我自己用 SVG/HTML 把文字画上去」两步。正确做法是一条命令把标题写进提示词、整张图让模型一起生成。

正确流程:

  1. 把用户给的标题原文原样写进提示词,连同用户说的其它要求一起原话直传——不要自己补风格/背景词。
  2. 尺寸默认用横图 --size 1536x1024(视频封面标配);用户指定了其它比例则照用户的。
  3. 一次性运行所加载技能目录的 gen.sh,如 "<skill-root>/gen.sh" "原话提示词" --size 1536x1024 --quality high 出成品。不要在用户工作区用 ./gen.sh 猜测路径,也不要后续用代码去叠文字。
  4. 中文标题风险如实告诉用户再交付:图像模型渲染中文常有错字/乱码,建议用户验收后若文字有误,用「图生图 + 局部重绘」把标题区域 mask 掉重画,或改用极短标题。

示例: 用户说「帮我生成一个 B 站视频封面图,标题是《从零搭建个人知识库》」。 ✅ 正确(原话直传,用户没说的不编):

"<skill-root>/gen.sh" "B站视频封面图,标题是《从零搭建个人知识库》" --size 1536x1024 --quality high

❌ 错误(不要自己补词,更不要拆成两步):给用户的提示词擅自加上 "neural network background / high contrast / eye-catching" 等用户没说的风格词;或者先 ./gen.sh "某背景" 生成背景图、再用 SVG/HTML 自己去拼中文标题——这两种都是 agent 自行发挥,必须避免。

反面案例:曾出现「用户要 B 站封面,agent 却只生成一张背景图、标题自己画」「agent 擅自给用户提示词加一堆风格词」两种跑偏,根因都是 agent 多做了"加工"。记住:被触发即原话直传。

首次使用:配置凭证(每个用户用自己的中转站账号)

生图需要用户自己的中转站地址和 API Key(各自的号、各付各费)。这个技能不内置任何 key。

第一次生图前,检查是否已配置:

test -f "$(dirname "$0")/.env" && echo "已配置" || echo "未配置"

推荐方式(TD工具箱用户): 在工具箱「中转」里,给一个支持 OpenAI 图片接口的中转分组,勾选 ☑ 在 Codex 中用于生图 并保存——工具箱会自动把该分组的 base_url + 密钥写进本技能的 .env。用户全程不碰配置文件。若用户还没勾,就引导他去「中转」勾一下。

手动方式(无工具箱时): 从模板建 .env 并让用户填自己的中转信息(不要把 key 写进对话或提交 git):

cp .env.example .env
# 编辑 .env,填 IMAGE_API_BASE_URL 和 IMAGE_API_KEY

.env 三项:

  • IMAGE_API_BASE_URL — 用户自己的中转站基址,如 https://api.xxx.com(脚本自动补 /v1/images/...)
  • IMAGE_API_KEY — 用户中转站的 API Key
  • IMAGE_MODEL — 默认模型,默认 gpt-image-2

读取优先级:环境变量 > skill 目录 .env。CI/临时场景可直接 export IMAGE_API_KEY=...。 注意:工具箱重装本技能会清空目录,但装完会按「中转」里勾选的分组自动重写 .env,无需手动恢复。

标准流程

1. 提示词原样直传。 用户这段描述原封不动作为提示词。不要扩写、不要翻译、不要加风格/光线/构图/画质词——尤其用户给的标题或文字,一个字都不要改。你只做一件翻译判断:用户是否在要生图;要,就转发原话。图像模型自己懂自然语言,不需要你替它"加工"。(唯一例外:用户明确要求"帮我润色/扩写提示词"时才加工。)

2. 选参数:

  • --size:1024x1024(方,头像/图标)、1536x1024(横,海报/封面)、1024x1536(竖,手机壁纸/人像)、auto
  • --quality:low/medium/high/auto(gpt-image 系支持;越高越慢越贵)
  • --background transparent:要透明底的图标/贴纸时加
  • --n:一次出几张(默认 1;多给几张让用户挑时用 --n 2 或 4)

3. 执行(文生图):

cd "<skill 根目录>" && python3 scripts/gen_image.py \
  "a fluffy orange tabby cat on a windowsill, soft morning light, cozy tones, highly detailed" \
  --size 1024x1024 --quality high

图片存到 output/img-<时间戳>-<序号>.png,脚本会打印完整路径。

4. 图生图 / 编辑(用户给了输入图):

python3 scripts/gen_image.py "把背景换成雪山日落" --edit /path/to/input.png --size 1024x1024

多图参考:多次 --edit a.png --edit b.png。局部重绘:加 --mask mask.png(PNG 中透明区域为要重绘的部分,其余保留)。

5. 交付。 打印出保存路径后,简要告诉用户生成了什么、存在哪。图无法在终端直接显示,用户会自己打开;若在支持预览的环境可提示路径。

常见参数速查

需求 命令片段
头像/图标(方图) --size 1024x1024
海报/封面(横) --size 1536x1024
手机壁纸/人像(竖) --size 1024x1536
透明背景贴纸 --background transparent
多出几张挑选 --n 4
高画质 --quality high
换模型 --model dall-e-3
基于图改 --edit input.png
局部重绘 --edit input.png --mask mask.png

排错

  • 缺 IMAGE_API_BASE_URL / IMAGE_API_KEY → 还没配置。让用户去工具箱「中转」勾选一个分组「用于 Codex 生图」并保存;无工具箱则 cp .env.example .env 手动填。
  • HTTP 401/403 → key 无效或额度不足,让用户核对中转站账户。
  • HTTP 404 → base_url 写错,或该中转站不支持 /v1/images/generations;确认接口路径。
  • HTTP 400 model 相关 → 该中转站不认 gpt-image-2,换 --model dall-e-3 或问用户支持的模型名。
  • 响应没有图片数据 → 部分中转站返回结构不同,把打印的原始响应给用户看以便排查。

不要把 API Key 输出到对话里,也不要提交 .env。