首页 / 全部技能 / 内容创作 / canghe-image-gen
内容创作 · freestylefly/canghe-skills

canghe-image-gen

AI image generation with OpenAI, Google, DashScope and Canghe APIs. Supports text-to-image, reference images, aspect ratios. Sequential by default; parallel generation available on request. Use when user asks to generate, create, or draw images.

L4 高权限 · 分级授权与审计V1 已固定执行命令联网读写文件Dual-pass Audit
Author freestyleflyGitHub freestylefly/canghe-skills ↗License MIT(仓库根 LICENSE)Commit dd0bf35595
管控等级描述 skill 的能力与建议配套的管控措施,不代表质量或安全认证,也不表示可用或不可用。是否使用由用户和管理者决定。不同 agent 宿主对权限的约束各不相同,请勿假定宿主一定会提供安全兜底。第三方 skill 版权归原作者,使用风险由使用者自行承担。

1实现原理 · 为什么它能做到

本 skill 的执行体是一个 Bun/TypeScript CLI(scripts/main.ts),agent 按 SKILL.md 用 npx -y bun 启动它;参数解析、配置合并、provider 选择与结果落盘都在这个入口完成。

skills/canghe-image-gen/SKILL.md
npx -y bun ${SKILL_DIR}/scripts/main.ts --prompt "A cat" --image cat.png
这里在做什么:SKILL.md 只给调用方式,真正入口是脚本;脚本路径由 ${SKILL_DIR} 拼出。

provider 自动选择:显式 --provider 优先;带 --ref 时按 Google→OpenAI→Canghe 顺序;无 --ref 则按环境里存在的 key 取第一个(多 key 时 Google 优先生效)。

skills/canghe-image-gen/scripts/main.ts
const hasGoogle = !!(process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY);
这里在做什么:detectProvider 用各 API key 是否存在来推断后端,缺 key 直接报错并提示建 .env。

四家后端各自成模块、统一 ProviderModule 接口(getDefaultModel / generateImage),协议各不相同:OpenAI 走 images/generations 与 edits,Google 走 Gemini generateContent 或 Imagen predict,DashScope 走通义万象端点,Canghe 走 OpenAI 兼容的 chat/completions。

skills/canghe-image-gen/scripts/providers/canghe.ts
const res = await fetch(`${getBaseUrl()}/chat/completions`, {
这里在做什么:Canghe 网关把图片当聊天回复返回,脚本再用正则从文本里抽 base64。

参考图支持因后端而异:Google 多模态把参考图读成 base64 放进 inlineData,OpenAI 走 /images/edits 表单,Canghe 以 image_url 传(本地文件转 data URI、http URL 直传);DashScope 与 Imagen 明确报错不支持。

skills/canghe-image-gen/scripts/providers/google.ts
const { data, mimeType } = await readImageAsBase64(refPath);
这里在做什么:gemini 多模态把本地参考图编码后随 prompt 一起提交。

配置分层优先级固定为 CLI args > EXTEND.md > 环境变量 > cwd/.canghe-skills/.env > ~/.canghe-skills/.env,main.ts 自行解析 EXTEND.md 的 YAML front matter 与 .env 键值,不依赖 dotenv。

skills/canghe-image-gen/SKILL.md
**Load Priority**: CLI args > EXTEND.md > env vars > `<cwd>/.canghe-skills/.env` > `~/.canghe-skills/.env`
这里在做什么:loadEnv 与 loadExtendConfig 按此顺序把配置灌进 process.env。

生成结果以二进制写到用户指定的 --image 路径(无扩展名自动补 .png),写前递归建目录;生成失败只自动重试一次,且对「引用图不支持/缺 key」等错误不重试。

skills/canghe-image-gen/scripts/main.ts
await writeFile(outputPath, imageData);
这里在做什么:main() 拿到 provider 返回的 Uint8Array 后落盘,--json 时额外打印元数据。

批量/并行是两种模式:默认顺序逐张生成;并行只在用户明确要求时启用,靠宿主的多后台子代理跑(建议 4、上限 8),脚本本身不含并行逻辑。

skills/canghe-image-gen/SKILL.md
**Parallel Generation**: Only use when user explicitly requests parallel/concurrent generation.
这里在做什么:并行属 agent 编排层策略,不在 main.ts 内实现。

2核心能力

01文生图:四后端(OpenAI / Google / DashScope 通义万象 / Canghe 网关)任选或自动
02参考图/图生图(Google 多模态、OpenAI GPT Image edits、Canghe image_url)
03宽高比与尺寸控制(1:1、16:9、9:16、4:3、3:4、2.35:1,及 --size WxH)
04质量/分辨率预设:normal|2k,Google 另有 --imageSize 1K|2K|4K
05prompt 来源多样:内联文本、--promptfiles 多文件拼接、stdin
06偏好持久化:EXTEND.md 可设默认 provider/quality/宽高比/尺寸/模型
07批量数量 --n 与 JSON 输出 --json(便于脚本/流水线消费)
08显式并行生成(宿主多子代理,仅在用户要求时)

3外部依赖

KindDependency / Endpoint
clibun(经 npx -y bun 运行 TS 入口,会联网获取包)
apiOpenAI Images API
apiGoogle Generative Language API(Gemini / Imagen)
apiDashScope(阿里通义万象)
apiCanghe 第三方网关
packageNode 内建模块 node:fs/promises、node:path、node:os(经 Bun 运行)

4管控建议与判定依据

建议配套管控措施
面向 Agent
分级或逐次授权,建议在沙箱运行
面向管理者
审批流程、可回滚、全程审计
判定依据(文件路径与关键语句摘要)
  • scripts/: 执行本地脚本或命令: npx -y bun ${SKILL_DIR}/scripts/main.ts(agent 按 SKILL.md 执行的唯一入口 CLI)
  • 网络端点: 声明外部网络访问: POST https://api.openai.com/v1/images/generations(openai.ts)
  • 本地工作目录: 文件读写与工件输出: 用户 --image 指定路径的图片文件(无扩展名补 .png;main.ts 先 mkdir -p 再 writeFile)
审计说明: 橙色:为自身声明用途读取四家 API key(环境变量与 .env 文件),并把用户 prompt 与参考图外发到 OpenAI/Google/DashScope/Canghe 生成后端,命中橙档「读凭据 + 素材出网」。脚本用 Node/Bun 原生 fetch(默认校验证书),未见关闭 TLS、逆向/冒充/绕过防护或任意代码执行,故不升红;因确有本地脚本执行、外部 CLI(npx/bun 拉取远程包)与本地写盘,故不降蓝。

5第二遍独立确认

  • [ok] 执行入口是否唯一且真实存在 — SKILL.md 的调用示例与 main.ts 的 printUsage 一致(npx -y bun scripts/main.ts --prompt ... --image ...),main.ts 末尾 main().catch 会 process.exit(1),证明它是 CLI;目录仅 8 个档(SKILL.md + preferences-schema.md + main.ts + 4 个 provider + types.ts),无其它可执行文件。
  • [ok] 四家 provider 端点与凭证读取点 — openai.ts→api.openai.com/v1 + OPENAI_API_KEY;google.ts→generativelanguage.googleapis.com + GOOGLE_API_KEY/GEMINI_API_KEY;dashscope.ts→dashscope.aliyuncs.com + DASHSCOPE_API_KEY;canghe.ts→api.canghe.ai/v1 + CANGHE_API_KEY。均可用对应 *_BASE_URL 覆盖。
  • [ok] 是否漏掉网络外发 — 全目录除 providers/*.ts 的 fetch 外无网络能力:main.ts 只做 IO 与编排,types.ts / preferences-schema.md 无网络代码;未见 socket/child_process/exec/urllib。
  • [ok] TLS 是否被降级 — 四家后端都用 Node/Bun 原生 fetch(默认校验证书),未见 ssl.CERT_NONE / rejectUnauthorized=false / --no-verify,因此不触发红档。
  • [discrepancy] 「并行生成」宣称是否有代码支撑 — SKILL.md 的 Parallel Generation 段描述用宿主 Task 子代理 run_in_background=true 并发并给并发建议,但 scripts/main.ts 只有单次 --n 的串行生成,未实现任何并发;该能力完全依赖 agent 编排层,脚本不提供。
  • [ok] 默认 provider 与质量口径 — SKILL.md 写 default provider google、quality 2k;detectProvider 多 key 时返回 available[0](google 排第一),main.ts 对空 quality 置 '2k',与文档一致。
  • [ok] 参考图 provider 限制 — SKILL.md 称 --ref 受 Google 多模态 / OpenAI edits / Canghe 支持;google.ts 对 Imagen、openai.ts 对 dall-e、main.ts 对 dashscope+ref 均抛错,与文档相符。

6结论

  • 一份脚本统管四家图像后端并按 key 自动路由,扩展新 provider 只需加一个文件并实现统一接口,设计干净利落。
  • 配置分层与 .env/EXTEND.md 自解析,用户零配置也能跑;工程细节(无扩展名补 .png、mkdir -p、重试白名单)考虑周到。
  • 选项覆盖实用:宽高比、质量、参考图、prompt 文件、批量与 JSON 输出,适合被其它 skill/脚本当工具调用。
  • 适合: 需要脚本化、批量或跨多家后端出图的创作者与自动化流程;尤其适合把出图能力嵌入其它 agent 工作流的场景。
    不适合: 对素材出网极度敏感、要求全离线或数据不出内网的场景;以及只想用单一固定后端、不愿维护多把 key 的用户。
    Install Agent-Ready
    ① Verified Mirror 2026-10-10
    Option A · Direct DownloadDownload canghe-image-gen.tar.gz
    sha256: 6d47e36b6c02f891…
    Option B · Copy Guide for Agent
    install.json
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit dd0bf35595.