Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

儿童绘本生成器

v1.0.0

基于百度ERNIE-Image-Turbo模型,将儿童故事核心画面文本转为指定分辨率的高质量绘本图像并保存为PNG文件。

0· 33· 1 versions· 0 current· 0 all-time· Updated 4h ago· MIT-0

儿童绘本生成器

一、概述

儿童绘本生成器是一个基于百度文心大模型图像生成模型能力的 OpenClaw Skill,封装了 Baidu AI Studio 的 ERNIE-Image-Turbo API,通过提炼儿童故事核心画面,通过文本生成图像(Text-to-Image)核心能力生成儿童绘本。Skill 通过 Python 脚本调用 OpenAI 兼容接口,实现与百度文心图像生成服务的无缝对接。

1.1 设计目标

目标说明
易用性单条命令即可完成图像生成,无需手动处理 API 调用细节
灵活性支持多种分辨率、支持命令行传参和环境变量配置 API Key
分辨率1024x1024/1376x768/1264x848/ 1200x896/896x1200/848x1264/768x1376
跨平台基于 Python 3.7+ 和 openai 库,兼容 Windows/macOS/Linux

1.2 核心能力矩阵

能力支持状态备注
文本生成图像核心功能,支持详细 prompt
多分辨率输出7 种预设分辨率
中文文字渲染可在 prompt 中指定中文文字内容
批量生成当前版本单图生成
风格迁移⚠️依赖 prompt 描述,无独立风格参数

二、架构设计

2.1 组件关系图

输入儿童故事,或者儿童故事主题
    ↓
通过大模型生成故事关键画面prompt
    ↓
调用ERNIE-Image 生成绘本图  

2.2 数据流

用户输入故事内容,或者故事主题
    │
    ▼

生成故事多个关键画面Prompt
    │
    ▼
[generate_image.py]
    │
    ├── 1. 解析命令行参数 (argparse)
    │      ├── --prompt: 图像描述文本
    │      ├── --filename: 输出文件路径
    │      ├── --resolution: 输出分辨率
    │      └── --api-key: API 密钥(可选)
    │
    ├── 2. 解析 API Key(优先级递减)
    │      ├── ① --api-key 参数
    │      ├── ② ERNIE-Image_API_KEY 环境变量
    │      ├── ③ ERNIE_Image_API_KEY 环境变量
    │
    ├── 3. 初始化 OpenAI 客户端
    │      ├── api_key = 解析结果
    │      ├── base_url = "https://aistudio.baidu.com/llm/lmapi/v3"
    │      └── 模型 = "ERNIE-Image-Turbo"
    │
    ├── 4. 调用 API
    │      ├── POST /images/generations
    │      ├── payload: {model, prompt, size, response_format: "b64_json"}
    │      └── 接收 base64 编码图像数据
    │
    └── 5. 保存文件
           ├── 创建输出目录(如果不存在)
           ├── base64 解码 → PNG 字节流
           └── 写入磁盘

三、核心模块详解

3.1 参数解析模块

文件: scripts/generate_image.py

使用 Python 标准库 argparse 实现命令行参数解析,设计为全显式传参,无交互式输入:

参数简写必填类型默认值说明
--prompt-pstring-图像描述文本
--filename-fstring-输出文件路径(支持绝对/相对路径)
--resolution-rchoice1024x1024输出分辨率
--api-key-kstringNoneAPI 密钥(覆盖环境变量)

设计决策:

  • --filename 为必填项而非自动生成:赋予用户完全的文件命名控制权
  • --resolution 使用 choices 限制:避免传入 API 不支持的分辨率导致报错
  • --output-dir 参数:通过 --filename 中的路径信息直接推导

3.2 API Key 解析模块

def get_api_key(provided_key: str | None) -> str | None:
    """Get API key from argument first, then environment."""
    if provided_key:
        return provided_key
    for key in ["ERNIE-Image_API_KEY", "ERNIE_Image_API_KEY", "BAIDU_API_KEY"]:
        value = os.environ.get(key)
        if value:
            return value
    return None

多环境变量兼容设计:

环境变量名优先级设计原因
ERNIE-Image_API_KEY1(最高)官方推荐命名,与 Skill 名称一致
ERNIE_Image_API_KEY2兼容下划线命名(部分系统不支持连字符)

安全考量:

  • 命令行传参 --api-key 会暴露在进程列表中(ps 可见),建议仅在临时场景使用
  • 生产环境推荐设置环境变量,避免密钥泄露

3.3 OpenAI 客户端封装

client = OpenAI(
    api_key=api_key,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3"
)

关键设计:

  • 使用 openai Python SDK(非百度原生 SDK),利用其 OpenAI 兼容接口 能力
  • base_url 指向百度 AI Studio 的 OpenAI 兼容端点
  • 模型名称硬编码为 "ERNIE-Image-Turbo",这是当前百度文心图像生成的默认模型

3.4 API 调用与响应处理

img = client.images.generate(
    model="ERNIE-Image-Turbo",
    prompt=contents,
    size=output_resolution,
    response_format="b64_json",
)

# 解码并保存
image_bytes = base64.b64decode(img.data[0].b64_json)
with open(output_path, "wb") as f:
    f.write(image_bytes)

响应格式:

  • response_format="b64_json":返回 base64 编码的 PNG 图像数据
  • 不返回 URL(避免临时链接失效问题)
  • 直接内存解码写入磁盘,无中间临时文件

四、分辨率系统设计

4.1 支持的分辨率列表

分辨率宽高比适用场景备注
1024x10241:1头像、方形插画默认分辨率
1376x76816:9横屏壁纸、视频封面宽屏
1264x848~3:2照片比例接近单反相机比例
1200x896~4:3传统屏幕比例兼容旧设备
896x1200~3:4竖屏照片类似手机竖拍
848x1264~2:3竖屏壁纸接近手机屏幕
768x1376~9:16手机竖屏壁纸全面屏手机适配

五、Prompt 工程指南

5.1 Prompt 传递策略

Skill 采用透传优先策略:

  • 默认将用户描述原样传递给 API
  • 仅在用户描述明显不足时进行补充优化

5.2 高命中率 Prompt 模板

Create an image of: <主体描述>
Style: <艺术风格>
Composition: <构图/镜头>
Lighting: <光影效果>
Background: <背景描述>
Color palette: <色彩方案>
Avoid: <需要避免的内容>

5.3 中文文字渲染技巧

ERNIE-Image 支持在图像中渲染中文文字,关键要点:

  1. 明确指定文字内容:在 prompt 中直接写出要显示的中文
  2. 指定字体风格:如「行书」「楷书」「宋体」等
  3. 指定位置和样式:如「顶部居中」「白色字体带金色光晕」
  4. 控制大小:避免文字过大遮挡主体或过小无法辨认

示例:

In the upper portion of the image, elegant vertical Chinese calligraphy 
text arranged in two lines: first line '山再高,往上攀,总能登顶;' 
and second line '路再长,走下去,定能到达。' — the text is rendered 
in a refined semi-cursive Chinese calligraphy style (行书), white color 
with subtle golden glow effect, positioned in the upper third area.

六、错误处理与故障排查

6.1 预检清单(Preflight)

在调用脚本前,Agent 应检查:

#  API Key 是否可用
test -n "$ERNIE-Image_API_KEY" || echo "API Key 未设置"


6.2 常见错误与解决方案

错误信息原因解决方案
Error: No API key provided.API Key 未提供设置环境变量或传 --api-key
401/403 权限错误Key 无效或过期更换有效 Key
配额超限错误调用次数达到上限等待配额重置或升级账户
图像生成失败Prompt 包含敏感内容修改 prompt 避免违规描述

6.3 调试模式

当前脚本无独立 --verbose 参数,调试时可:

  1. 检查命令行参数是否正确传递
  2. 验证环境变量是否加载到当前进程
  3. 手动测试 API 连通性:curl https://aistudio.baidu.com/llm/lmapi/v3

七、安全设计

7.1 密钥管理

场景风险等级建议做法
命令行传参 --api-key⚠️ 中临时使用,避免在共享环境使用
用户级环境变量✅ 低推荐方案,仅当前用户可见
系统级环境变量⚠️ 中多用户共享,注意权限控制
硬编码在脚本中❌ 高严禁,会泄露到版本控制

7.2 输入安全

  • Prompt 内容直接传递给百度 API,无本地过滤
  • 依赖百度服务端的内容安全策略
  • 敏感/违规内容会被 API 拒绝并返回错误

7.3 输出安全

  • 生成的图像保存到用户指定路径
  • 脚本自动创建父目录(mkdir(parents=True)
  • 无文件覆盖确认,同名文件直接覆盖

八、扩展性设计

8.1 当前限制

限制项说明未来改进方向
单图生成每次调用仅生成一张支持 --batch 批量生成
无回调机制生成完成后仅打印路径支持 webhook/消息通知
无进度反馈长时间生成无中间状态添加进度条或流式输出
固定模型仅支持 ERNIE-Image-Turbo支持模型选择参数
无元数据输出 PNG 无 EXIF 信息嵌入生成参数到图像元数据

8.2 与其他 Skill 的协作

协作场景方式示例
图像 → 文档插入 docx/pptx使用 docx/pptx Skill 将生成图像插入文档
图像 → 云存储上传备份使用 cloud-upload-backup Skill 上传生成图像
图像 → 展示浏览器查看使用 xbrowser Skill 打开生成图像预览
批量 → 自动化定时任务使用 qclaw-cron-skill 定时生成图像

九、使用示例

9.1 基础生成

python scripts/generate_image.py \
  --prompt "A serene Japanese garden with cherry blossoms" \
  --filename "japanese-garden.png" \
  --resolution 1024x1024

9.2 手机壁纸(竖屏)

python scripts/generate_image.py \
  --prompt "A mystical dark fantasy meadow with a glowing-eyed kitten..." \
  --filename "wallpaper.png" \
  --resolution 768x1376 \
  --api-key "your-api-key-here"

十、版本历史

版本日期变更内容
1.0.12026-04-25初始版本,支持文生图、图生图、7种分辨率

十一、参考资源


Version tags

latestvk97817myqbazt9mdzjz4e2dyr185r5y3