Update gen-image skill catalog entry
This commit is contained in:
+47
-43
@@ -1,14 +1,17 @@
|
||||
---
|
||||
name: gen-image
|
||||
description: 调用大模型中转站的 OpenAI 图片接口生图(文生图、图生图/编辑、局部重绘、透明背景)。支持 1K/2K/4K 常用尺寸规格、横竖方比例、质量、背景和可选 style 风格参数。触发词:生图、生成图片、画一张、AI 画图、文生图、图生图、生成插画/头像/海报/封面/壁纸/图标、image generation、根据这张图改。需要外部 API 生成位图图像时使用;纯 HTML/SVG/矢量设计不适用。
|
||||
description: 调用大模型中转站的 OpenAI 图片接口生图(文生图、图生图/编辑、局部重绘、透明背景)。触发词:生图、生成图片、画一张、AI 画图、文生图、图生图、生成插画/头像/海报/封面/视频封面/标题图/图标、image generation、根据这张图改、做封面。需要外部 API 生成位图图像时使用;纯 HTML/SVG/矢量设计不适用。
|
||||
---
|
||||
|
||||
# gen-image · 生图
|
||||
|
||||
通过大模型中转站,直接调用 OpenAI 图片接口生成位图图像。支持**文生图**、**图生图/编辑**、**局部重绘(mask)**、**透明背景**、**1K/2K/4K 常用尺寸**和**可选 style 风格参数**。
|
||||
通过大模型中转站,直接调用 OpenAI 图片接口生成位图图像。支持**文生图**、**图生图/编辑**、**局部重绘(mask)**、**透明背景**。
|
||||
|
||||
核心是零依赖脚本 `scripts/gen_image.py`(纯 Python 标准库,无需 pip install)。
|
||||
|
||||
> **核心原则 · 原话直传(最高优先级,覆盖下方一切"打磨/扩写"措辞)。** 被触发后,把用户这段话**原样**作为提示词传给脚本——不改写、不扩写、不翻译、不加风格/构图/画质关键词。你只需要判断一件事:用户**是不是要生图**;是,就转发原话。用户没说的风格,不要替他编;用户给的标题/文字,一个字都不要动。只有当用户**明确**说"帮我润色/扩写提示词"时才加工。理由:图像模型本身懂自然语言,外面这层多一次"加工"只会改坏用户要保留的内容(尤其标题)、并让产出不可控。
|
||||
|
||||
|
||||
## 何时用 / 不用
|
||||
|
||||
- ✅ 用户要「生成一张图 / 画一张 / AI 出图 / 做个头像/海报/插画/图标」
|
||||
@@ -16,35 +19,60 @@ description: 调用大模型中转站的 OpenAI 图片接口生图(文生图
|
||||
- ❌ 用户要 HTML 原型、幻灯片、矢量图标、CSS 效果 → 用 `huashu-design` 或直接写代码
|
||||
- ❌ 用户要图表/数据可视化 → 用 `dataviz`
|
||||
|
||||
## 首次使用:配置凭证
|
||||
## ⚠️ 带文字的封面 / 海报 / 标题图(重点)
|
||||
|
||||
生图需要中转站的 API Key。检查 skill 根目录是否有 `.env`:
|
||||
用户说「做个 **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
|
||||
ls "$(dirname SKILL.md)/.env" 2>/dev/null || echo "未配置"
|
||||
test -f "$(dirname "$0")/.env" && echo "已配置" || echo "未配置"
|
||||
```
|
||||
|
||||
若无,从模板创建并让用户填写(**不要把 key 写进对话或提交到 git**):
|
||||
**推荐方式(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 和 IMAGE_API_KEY
|
||||
```
|
||||
|
||||
`.env` 需要三项:
|
||||
- `IMAGE_API_BASE_URL` — 中转站基址,如 `https://your-relay.com`(脚本自动补 `/v1/images/...`)
|
||||
- `IMAGE_API_KEY` — 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. 打磨提示词。** 用户给的描述往往简短,先在心里扩写成一句信息充分的英文或中文提示词——主体、风格、光线、构图、色调、画质关键词。除非用户明确要求逐字使用,否则主动增强。生图模型对细节敏感,「一只猫」远不如「a fluffy orange tabby cat sitting on a windowsill, soft morning light, shallow depth of field, cozy warm tones」。
|
||||
**1. 提示词原样直传。** 用户这段描述**原封不动**作为提示词。不要扩写、不要翻译、不要加风格/光线/构图/画质词——尤其用户给的标题或文字,一个字都不要改。你只做一件翻译判断:用户**是否在要生图**;要,就转发原话。图像模型自己懂自然语言,不需要你替它"加工"。(唯一例外:用户**明确**要求"帮我润色/扩写提示词"时才加工。)
|
||||
|
||||
**2. 选参数:**
|
||||
- `--size`:支持直接传像素值或别名。默认 `1024x1024`;常用别名见「尺寸规格速查」。
|
||||
- `--size`:`1024x1024`(方,头像/图标)、`1536x1024`(横,海报/封面)、`1024x1536`(竖,手机壁纸/人像)、`auto`
|
||||
- `--quality`:`low`/`medium`/`high`/`auto`(gpt-image 系支持;越高越慢越贵)
|
||||
- `--background transparent`:要透明底的图标/贴纸时加
|
||||
- `--style`:部分模型/中转支持的独立风格参数,如 `vivid`、`natural`、`anime`、`photorealistic`。若上游不支持,把风格写进 prompt。
|
||||
- `--n`:一次出几张(默认 1;多给几张让用户挑时用 `--n 2` 或 `4`)
|
||||
|
||||
**3. 执行(文生图):**
|
||||
@@ -52,7 +80,7 @@ cp .env.example .env
|
||||
```bash
|
||||
cd "<skill 根目录>" && python3 scripts/gen_image.py \
|
||||
"a fluffy orange tabby cat on a windowsill, soft morning light, cozy tones, highly detailed" \
|
||||
--size 1k-square --quality high
|
||||
--size 1024x1024 --quality high
|
||||
```
|
||||
|
||||
图片存到 `output/img-<时间戳>-<序号>.png`,脚本会打印完整路径。
|
||||
@@ -60,54 +88,30 @@ cd "<skill 根目录>" && python3 scripts/gen_image.py \
|
||||
**4. 图生图 / 编辑**(用户给了输入图):
|
||||
|
||||
```bash
|
||||
python3 scripts/gen_image.py "把背景换成雪山日落" --edit /path/to/input.png --size 1k-square
|
||||
python3 scripts/gen_image.py "把背景换成雪山日落" --edit /path/to/input.png --size 1024x1024
|
||||
```
|
||||
|
||||
多图参考:多次 `--edit a.png --edit b.png`。局部重绘:加 `--mask mask.png`(PNG 中**透明区域**为要重绘的部分,其余保留)。
|
||||
|
||||
**5. 交付。** 打印出保存路径后,简要告诉用户生成了什么、存在哪。图无法在终端直接显示,用户会自己打开;若在支持预览的环境可提示路径。
|
||||
|
||||
## 尺寸规格速查
|
||||
|
||||
脚本会把下列别名转换为实际像素;也可以直接传 `WIDTHxHEIGHT` 或 `auto`。部分中转/模型可能只开放其中一部分规格,遇到 400 时降低到 1K 或改用上游明确支持的尺寸。
|
||||
|
||||
| 规格 | 方图 | 横图 | 竖图 | 宽屏/超宽 | 典型用途 |
|
||||
|------|------|------|------|-----------|----------|
|
||||
| 1K | `1k-square` → `1024x1024` | `1k-landscape` → `1536x1024` | `1k-portrait` → `1024x1536` | - | 头像、图标、草图、普通配图 |
|
||||
| 2K | `2k-square` → `2048x2048` | `2k-landscape` → `2048x1536` | `2k-portrait` → `1536x2048` | `2k-wide` → `2048x1152` / `2k-tall` → `1152x2048` | 海报、封面、高清社媒图 |
|
||||
| 4K | `4k-square` → `4096x4096` | `4k-landscape` → `4096x3072` | `4k-portrait` → `3072x4096` | `4k-wide` → `4096x2304` / `4k-uhd` → `3840x2160` / `4k-tall` → `2304x4096` / `4k-uhd-portrait` → `2160x3840` | 大屏封面、展板、高清壁纸 |
|
||||
|
||||
## 风格参数速查
|
||||
|
||||
优先把风格写进 prompt,因为所有模型都能理解自然语言风格。仅当目标中转或模型明确支持独立风格字段时,再额外传 `--style`。
|
||||
|
||||
| 需求 | 推荐写法 |
|
||||
|------|---------|
|
||||
| 写实摄影 | prompt 写 `photorealistic, cinematic lighting, natural skin texture`,可加 `--style photorealistic` |
|
||||
| 插画 | prompt 写 `editorial illustration, clean shapes, rich color palette`,可加 `--style illustration` |
|
||||
| 动漫 | prompt 写 `anime style, expressive linework, cel shading`,可加 `--style anime` |
|
||||
| 自然风格 | prompt 写清现实光线和材质,可加 `--style natural` |
|
||||
| 鲜艳风格 | prompt 写高饱和、强对比,可加 `--style vivid` |
|
||||
|
||||
## 常见参数速查
|
||||
|
||||
| 需求 | 命令片段 |
|
||||
|------|---------|
|
||||
| 头像/图标(方图) | `--size 1k-square` 或 `--size 1024x1024` |
|
||||
| 海报/封面(横) | `--size 1k-landscape` / `2k-landscape` / `4k-wide` |
|
||||
| 手机壁纸/人像(竖) | `--size 1k-portrait` / `2k-portrait` / `4k-tall` |
|
||||
| 4K 壁纸 | `--size 4k-uhd` |
|
||||
| 头像/图标(方图) | `--size 1024x1024` |
|
||||
| 海报/封面(横) | `--size 1536x1024` |
|
||||
| 手机壁纸/人像(竖) | `--size 1024x1536` |
|
||||
| 透明背景贴纸 | `--background transparent` |
|
||||
| 多出几张挑选 | `--n 4` |
|
||||
| 高画质 | `--quality high` |
|
||||
| 独立风格字段 | `--style natural` 或 `--style vivid`(看上游支持情况) |
|
||||
| 换模型 | `--model dall-e-3` |
|
||||
| 基于图改 | `--edit input.png` |
|
||||
| 局部重绘 | `--edit input.png --mask mask.png` |
|
||||
|
||||
## 排错
|
||||
|
||||
- **缺 IMAGE_API_BASE_URL / IMAGE_API_KEY** → `.env` 没配好,回到「配置凭证」。
|
||||
- **缺 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` 或问用户支持的模型名。
|
||||
|
||||
Reference in New Issue
Block a user