--- name: gen-image description: 调用大模型中转站的 OpenAI 图片接口生图(文生图、图生图/编辑、局部重绘、透明背景)。支持 1K/2K/4K 常用尺寸规格、横竖方比例、质量、背景和可选 style 风格参数。触发词:生图、生成图片、画一张、AI 画图、文生图、图生图、生成插画/头像/海报/封面/壁纸/图标、image generation、根据这张图改。需要外部 API 生成位图图像时使用;纯 HTML/SVG/矢量设计不适用。 --- # gen-image · 生图 通过大模型中转站,直接调用 OpenAI 图片接口生成位图图像。支持**文生图**、**图生图/编辑**、**局部重绘(mask)**、**透明背景**、**1K/2K/4K 常用尺寸**和**可选 style 风格参数**。 核心是零依赖脚本 `scripts/gen_image.py`(纯 Python 标准库,无需 pip install)。 ## 何时用 / 不用 - ✅ 用户要「生成一张图 / 画一张 / AI 出图 / 做个头像/海报/插画/图标」 - ✅ 用户给了一张图要「基于它改 / 换背景 / 局部重绘」→ 图生图 - ❌ 用户要 HTML 原型、幻灯片、矢量图标、CSS 效果 → 用 `huashu-design` 或直接写代码 - ❌ 用户要图表/数据可视化 → 用 `dataviz` ## 首次使用:配置凭证 生图需要中转站的 API Key。检查 skill 根目录是否有 `.env`: ```bash ls "$(dirname SKILL.md)/.env" 2>/dev/null || echo "未配置" ``` 若无,从模板创建并让用户填写(**不要把 key 写进对话或提交到 git**): ```bash cp .env.example .env # 然后引导用户编辑 .env,填入 IMAGE_API_BASE_URL 和 IMAGE_API_KEY ``` `.env` 需要三项: - `IMAGE_API_BASE_URL` — 中转站基址,如 `https://your-relay.com`(脚本自动补 `/v1/images/...`) - `IMAGE_API_KEY` — API Key - `IMAGE_MODEL` — 默认模型,默认 `gpt-image-2` ## 标准流程 **1. 打磨提示词。** 用户给的描述往往简短,先在心里扩写成一句信息充分的英文或中文提示词——主体、风格、光线、构图、色调、画质关键词。除非用户明确要求逐字使用,否则主动增强。生图模型对细节敏感,「一只猫」远不如「a fluffy orange tabby cat sitting on a windowsill, soft morning light, shallow depth of field, cozy warm tones」。 **2. 选参数:** - `--size`:支持直接传像素值或别名。默认 `1024x1024`;常用别名见「尺寸规格速查」。 - `--quality`:`low`/`medium`/`high`/`auto`(gpt-image 系支持;越高越慢越贵) - `--background transparent`:要透明底的图标/贴纸时加 - `--style`:部分模型/中转支持的独立风格参数,如 `vivid`、`natural`、`anime`、`photorealistic`。若上游不支持,把风格写进 prompt。 - `--n`:一次出几张(默认 1;多给几张让用户挑时用 `--n 2` 或 `4`) **3. 执行(文生图):** ```bash cd "" && 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 ``` 图片存到 `output/img-<时间戳>-<序号>.png`,脚本会打印完整路径。 **4. 图生图 / 编辑**(用户给了输入图): ```bash python3 scripts/gen_image.py "把背景换成雪山日落" --edit /path/to/input.png --size 1k-square ``` 多图参考:多次 `--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` | | 透明背景贴纸 | `--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` 没配好,回到「配置凭证」。 - **HTTP 401/403** → key 无效或额度不足,让用户核对中转站账户。 - **HTTP 404** → base_url 写错,或该中转站不支持 `/v1/images/generations`;确认接口路径。 - **HTTP 400 model 相关** → 该中转站不认 `gpt-image-2`,换 `--model dall-e-3` 或问用户支持的模型名。 - **响应没有图片数据** → 部分中转站返回结构不同,把打印的原始响应给用户看以便排查。 不要把 API Key 输出到对话里,也不要提交 `.env`。