Skill: chenyqthu/image-forge (version 1.1.0)

--- name: image-forge description: | 画图技能路由中枢（统一入口）。三维路由体系（用途 × 风格 × 主体），双后端调度。 - Signature 风格：10 种有独立 YAML 的视觉方案（构成主义/克莱因/Risograph/故障艺术等） - Rendering 风格：15 种通用渲染技法 modifier（写真/动漫/3D/水彩/赛博朋克等），prompt 源自实战案例 - Logo 展示背景：12 种专业展示场景（来源 logo-generator，已内化） - 用途库：12 类场景 + 全实战 prompt 案例，含推荐风格 + 后端默认 - 后端调度：GPT Image 2（写实/产品/文字/4K）/ Gemini（动漫/艺术/多参考图） - 支持：文生图、风格库生图、参考图风格反推、参考图编辑、多参考图合成、logo 展示图 Use when: 用户想画图/生图/做海报/插画/风格迁移/图片编辑/logo展示图 — 这是唯一的图像生成入口。 【铁律】绝对禁止使用 image_generate 工具（configured: no，不可用）。所有画图请求必须走本 skill。 【注意】SVG logo 代码生成 → 请用专属 logo-generator skill。 --- # Image Forge — 统一画图路由 ## 目录结构 ``` {baseDir}/ ├── SKILL.md # 本文件（唯一用户入口） ├── backends.yaml # 后端注册表 + 优先级 + 调度策略 ├── styles/ │ ├── index.yaml # 风格库（双层：10 Signature + 15 Rendering） │ └── *.yaml # 10 个 Signature Style 独立文件 ├── use-cases/ │ └── index.yaml # 11 个用途 + 推荐风格 + 默认后端 ├── references/ # 用途提示词 JSON（11 个场景） └── scripts/ ├── reverse_style.py # Gemini Vision 15 维风格反推 └── generate_image.py # Gemini/Nano Banana 2 生图 ``` --- ## 三维框架 ``` 用途（Use Case）× 风格（Style）× 主体（Subject） ↓ ↓ ↓ 结构指令 视觉语言 用户描述 （布局/元素） （色彩/技法/质感） （画什么） ``` 三者**独立路由**、**组合注入** prompt。用途和风格可以各自单独触发，也可以同时命中。 --- ## 风格库：双层结构（读取 `styles/index.yaml`） ### Tier 1: Signature Styles（有独立 YAML，10 种） 高度具体的视觉方案，命中后加载对应 YAML 文件，默认走 `nano-banana-2`。 | 触发词示例 | 风格 id | 擅长用途 | |-----------|---------|---------| | 俄国构成主义、苏联海报、几何宣传 | constructivism | 海报、社媒 | | 故障艺术、错位矩形、glitch | glitch-window-v1 | 头像、社媒 | | 窗口重叠、数字拼贴 | glitch-window-v2 | 头像、社媒 | | 混合媒介、线稿摄影 | mixed-media | 头像、海报 | | 黑蓝红、三色极简剪影 | tri-color | 海报、封面 | | 半调雕刻、铜版画、etching | engraving-halftone | 海报、头像 | | risograph、半调杂志、印刷风 | risograph-magazine | 海报、社媒 | | 波普水墨、pop art、ink splash | pop-ink-splash | 头像、社媒 | | 克莱因蓝、克莱因秩序、极简仰拍 | klein-blue-order | 头像、社媒 | | 高对比度工业、电光蓝故障 | high-contrast-industrial | 海报、产品、封面 | ### Tier 2: Rendering Styles（inline modifier，15 种） 通用渲染技法类别，命中后取 `modifier` 字段直接注入 prompt。按 `preferred_backend` 调度。 | 触发词示例 | 风格 id | 推荐后端 | |-----------|---------|---------| | 摄影、写真、真实照片 | photography | **GPT Image 2** | | 电影感、胶片、cinematic | cinematic-film-still | **GPT Image 2** | | 3D渲染、三维、CGI | 3d-render | **GPT Image 2** | | 等距视角、isometric、2.5D | isometric | **GPT Image 2** | | 复古、retro、vintage | retro-vintage | **GPT Image 2** | | 赛博朋克、霓虹、cyberpunk | cyberpunk-sci-fi | **GPT Image 2** | | 极简、minimalism、简约 | minimalism | **GPT Image 2** | | 动漫、二次元、anime | anime-manga | Gemini | | 插画、手绘插画 | illustration | Gemini | | 素描、线稿、sketch | sketch-line-art | Gemini | | Q版、chibi、可爱 | chibi-q-style | Gemini | | 像素艺术、pixel art、8-bit | pixel-art | Gemini | | 油画、古典油画 | oil-painting | Gemini | | 水彩、aquarelle | watercolor | Gemini | | 水墨、国画、中国画 | ink-chinese-style | Gemini | --- ## 用途库（读取 `use-cases/index.yaml`） 11 类场景，每类携带推荐风格和默认后端： | 触发词 | use-case id | 默认后端 | 推荐 Rendering 风格 | |--------|------------|---------|------------------| | 海报、传单、poster | poster-flyer | **GPT Image 2** | cinematic, retro, cyberpunk | | 头像、肖像、avatar | profile-avatar | Gemini | anime, illustration, photography | | 产品图、营销图 | product-marketing | **GPT Image 2** | photography, 3d-render, minimalism | | 电商、主图、白底 | ecommerce-main-image | **GPT Image 2** | photography, 3d-render | | 视频封面、YouTube | youtube-thumbnail | **GPT Image 2** | cinematic, photography | | 小红书、社交配图 | social-media-post | **GPT Image 2** | illustration, photography, watercolor | | UI、App、网页 | app-web-design | **GPT Image 2** | 3d-render, isometric, minimalism | | 漫画、分镜 | comic-storyboard | Gemini | anime-manga, illustration, sketch | | 游戏素材、角色 | game-asset | Gemini | 3d-render, pixel-art, illustration | | 信息图、教育图 | infographic-edu-visual | **GPT Image 2** | illustration, isometric, minimalism | --- ## 路由决策树（6 条路径） ``` 用户输入 │ ├── 有参考图 + "用这个风格"/"反推" │ → [Path R] 风格反推：reverse_style.py → 提取风格 → 生成 │ ├── 有参考图 + "修改"/"编辑" │ → [Path E] 参考图编辑 │ 1张图 → gpt-image-2 edit endpoint │ 2+张图 → nano-banana-2 多参考图 │ ├── 命中 Signature Style aliases（构成主义/glitch/risograph…） │ → [Path S] 加载 YAML → prompt recipe → nano-banana-2 │ ├── 命中 Rendering Style aliases（动漫/写真/3D/水彩…） │ → [Path R2] 取 modifier → 注入 prompt → 按 preferred_backend 调度 │ ├── 命中用途关键词（海报/头像/电商…） │ → [Path U] 加载 use-cases/index.yaml → 检索 references JSON │ → 若无指定风格，展示推荐风格（可跳过直接生成） │ → 按 use-case.default_backend │ └── 直接描述主体，无信号 → [Path D] 优化/翻译英文 → gpt-image-2（默认最高 priority） ``` --- ## 后端调度决策（读取 `backends.yaml`） ``` 1. 用户显式覆盖（最高优先级） "用 GPT 画"/"4K高清"/"写实" → gpt-image-2 "用 Gemini 画"/"动漫" → nano-banana-2 2. Style preferred_backend Signature 风格命中 → nano-banana-2（全部 10 种） Rendering 风格命中 → 按各风格的 preferred_backend（见上表） 3. Use-case default_backend 无风格指定时，按用途默认后端 4. 全局默认 gpt-image-2（priority 最高） ``` **GPT Image 2 强项**：写实摄影、产品展示、文字渲染、4K 高清、海报、UI **Gemini 强项**：动漫/插画/中国风/水彩/素描、多参考图合成、Signature 风格迁移 --- ## [Generation] — 后端执行 ### GPT Image 2（CRS 路由） **推荐使用 wrapper 脚本**（支持 generate + edit，多图 edit，自动处理 base64）： ```bash # 文生图 uv run {baseDir}/scripts/gpt_image2.py generate \ --prompt "<prompt>" \ --output /path/out.png \ --size 1536x1024 \ --quality high # 改图（单张参考图） uv run {baseDir}/scripts/gpt_image2.py edit \ --prompt "<edit instruction>" \ -i /path/ref.png \ --output /path/out.png \ --size 1024x1536 # 改图（多张参考图，最多 4 张） uv run {baseDir}/scripts/gpt_image2.py edit \ --prompt "<instruction>" \ -i ref1.png -i ref2.png \ --output /path/out.png ``` > **注意**：edit 接口不支持 `input_fidelity` 参数（已验证 2026-04-25）。 **Python API（内联使用）**： ```python import os, requests, base64, time CRS_BASE = os.environ.get('CRS_BASE_URL', 'http://127.0.0.1:8765') CRS_KEY = os.environ['CRS_API_KEY'] def gpt_image2_generate(prompt, size='1536x1024', quality='high', output_format='png', filename=None): resp = requests.post( f'{CRS_BASE}/openai/v1/images/generations', headers={'Authorization': f'Bearer {CRS_KEY}'}, json={'model': 'gpt-image-2', 'prompt': prompt, 'size': size, 'quality': quality, 'output_format': output_format, 'response_format': 'b64_json'}, timeout=180, ) data = resp.json()['data'][0] out = filename or f'/tmp/image-forge-{int(time.time())}.{output_format}' with open(out, 'wb') as f: f.write(base64.b64decode(data['b64_json'])) return out, data.get('revised_prompt', '') def gpt_image2_edit(prompt, image_path, size='1536x1024', quality='high', output_format='png', filename=None): with open(image_path, 'rb') as f: b64_img = base64.b64encode(f.read()).decode() resp = requests.post( f'{CRS_BASE}/openai/v1/images/edits', headers={'Authorization': f'Bearer {CRS_KEY}'}, json={'model': 'gpt-image-2', 'prompt': prompt, 'images': [{'image_url': f'data:image/png;base64,{b64_img}'}], 'size': size, 'quality': quality, 'output_format': output_format, 'response_format': 'b64_json'}, timeout=180, ) data = resp.json()['data'][0] out = filename or f'/tmp/image-forge-edit-{int(time.time())}.{output_format}' with open(out, 'wb') as f: f.write(base64.b64decode(data['b64_json'])) return out, data.get('revised_prompt', '') ``` **GPT Image 2 尺寸**：`1024x1024` / `1536x1024` / `1024x1536` / `2048x2048` / `3840x2160` (4K横) / `2160x3840` (4K竖) ### Gemini / Nano Banana 2 ```bash # 文生图 uv run {baseDir}/scripts/generate_image.py \ --prompt "<optimized_english_prompt>" \ --filename "~/.openclaw/workspace/tmp/image-forge/$(date +%Y-%m-%d-%H-%M-%S)-<slug>.png" \ --aspect-ratio "<1:1|3:4|4:3|9:16|16:9>" # 改图 / 多参考图合成（已实测 2026-04-25） # Gemini 会在参考图基础上按 prompt 修改，多图合成/风格迁移尤其适合 uv run {baseDir}/scripts/generate_image.py \ --prompt "<e.g.: keep character, change background to warm sunset>" \ --filename "~/.openclaw/workspace/tmp/image-forge/$(date +%Y-%m-%d-%H-%M-%S)-<slug>.png" \ -i "/path/to/ref1.jpg" -i "/path/to/ref2.jpg" \ --aspect-ratio "3:4" ``` > **Gemini edit vs GPT Image 2 edit** > - Gemini：多图合成、风格迁移更自由，但对原图布局保留能力较弱 > - GPT Image 2：保留原图布局/文字/边框精确修改时更强，推荐用于卡牌、产品展示图的约束性编辑 --- ## Prompt 组合逻辑 ``` Final Prompt = [Rendering Style modifier（如有）] + [Signature Style prompt（如有，替换主体后）] + [Use-case 结构指令（如有，从 references JSON 取）] + [用户主体描述（中→英翻译优化）] + [技术参数（lighting / composition / quality）] ``` - 中文输入全部翻译为英文后发给两个后端 - Signature Style prompt 已含完整视觉语言，Rendering modifier 作补充层 - 两者同时命中时：Signature 优先（更具体），Rendering 作辅助修饰 --- ## 输出交付 - 保存目录：`~/.openclaw/workspace/tmp/image-forge/` - 文件名：`YYYY-MM-DD-HH-MM-SS-<slug>.png` - 回复：说明所选路径 + 后端 + 关键 prompt 要点，不读取二进制 ### 渠道交付规则 | 渠道 | 交付方式 | |------|--------| | **飞书** | `message` tool + `filePath`（发送原生飞书图片消息） | | Discord / 其他渠道 | `MEDIA: /absolute/path` （自动 inline） | 飞书交付示例： ``` message action=send filePath=/abs/path/to/image.png ``` 【注意】一次生成多张图时，分次发送每张图片。 --- ## 典型示例 ``` # [Path D] 默认 GPT Image 2 "画一只在宇宙中游泳的猫" → gpt-image-2，size=1536x1024 # [Path S] Signature 风格 + Gemini "帮我画一张俄国构成主义风格的 AI 机器人海报" → constructivism.yaml → nano-banana-2，aspect=3:4 # [Path R2] Rendering 风格 → 自动按强项调度 "帮我画一张动漫风格的城市夜景" → anime-manga modifier → nano-banana-2 "帮我画一张赛博朋克风城市" → cyberpunk-sci-fi modifier → gpt-image-2 # [Path U] 用途路由 + 推荐风格 "帮我做一张 YouTube 视频封面，科技感" → youtube-thumbnail.json → 推荐 cinematic/photography → gpt-image-2 # [Path U + R2] 用途 + 风格同时命中 "帮我做一张水彩风格的社交配图，主题是咖啡和阅读" → social-media-post + watercolor → nano-banana-2，aspect=1:1 # [Path E] 参考图编辑 1张图 + "改成极简风格" → gpt-image-2 edit endpoint 2张图 + "合成一张" → nano-banana-2 (-i ref1 -i ref2) # [Path R] 风格反推 1张图 + "用这个风格给我画一只猫" → reverse_style.py → gpt-image-2 # 显式后端覆盖 "用 Gemini 画一张产品图" → nano-banana-2（覆盖用途默认） "4K高清画一张产品海报" → gpt-image-2，size=3840x2160 ```


Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)