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

121 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: gen-image
description: 调用大模型中转站的 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 站视频封面图,标题是《从零搭建个人知识库》」。
✅ 正确(原话直传,用户没说的不编):
```bash
"<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**。
第一次生图前,检查是否已配置:
```bash
test -f "$(dirname "$0")/.env" && echo "已配置" || echo "未配置"
```
**推荐方式(TD工具箱用户):** 在工具箱「中转」里,给一个支持 OpenAI 图片接口的中转分组,勾选 **☑ 在 Codex 中用于生图** 并保存——工具箱会自动把该分组的 `base_url` + 密钥写进本技能的 `.env`。用户全程不碰配置文件。若用户还没勾,就引导他去「中转」勾一下。
**手动方式(无工具箱时):** 从模板建 `.env` 并让用户填自己的中转信息(**不要把 key 写进对话或提交 git**):
```bash
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. 执行(文生图):**
```bash
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. 图生图 / 编辑**(用户给了输入图):
```bash
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`。