コンテンツ制作 · freestylefly/canghe-skills

canghe-image-gen

OpenAI、Google、DashScope、Cangheの各APIを使用したAI画像生成。Text-to-Image、参照画像、アスペクト比指定に対応。デフォルトではシーケンシャル処理、リクエストに応じて並列生成も可能。ユーザーが画像の生成、作成、描画を求めた際に使用。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author freestyleflyGitHub freestylefly/canghe-skills ↗License MIT(仓库根 LICENSE)Commit dd0bf35595
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

本スキルを実行する実体はBun/TypeScript CLI(scripts/main.ts)であり、agentはSKILL.mdに従ってnpx -y bunで起動します。引数の解析、設定のマージ、プロバイダーの選択、および結果の保存はすべてこのエントリポイントで行われます。

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が優先されます。--refがある場合はGoogle→OpenAI→Cangheの順序で選択され、--refがない場合は環境に存在するキーのうち最初のものが採用されます(複数キー存在時はGoogleが優先)。

skills/canghe-image-gen/scripts/main.ts
const hasGoogle = !!(process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY);
ここでの処理内容:detectProviderは各APIキーの有無からバックエンドを推論し、キーが不足している場合はエラーを出力して.envの作成を促します。

4つのバックエンドは個別のモジュールとしてProviderModuleインターフェース(getDefaultModel / generateImage)を統一していますが、プロトコルはそれぞれ異なります:OpenAIはimages/generationsおよびedits、GoogleはGemini generateContentまたはImagen predict、DashScopeはTongyi Wanxiangエンドポイント、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マルチモーダルはローカルの参照画像をエンコードし、プロンプトと一緒に送信します。

設定の階層優先順位は CLI args > EXTEND.md > 環境変数 > cwd/.canghe-skills/.env > ~/.canghe-skills/.env に固定されており、main.tsはdotenvに依存せずEXTEND.mdのYAML front matterと.envのキー・バリューを独自に解析します。

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を付与)、書き込み前にディレクトリを再帰的に作成します。生成失敗時の自動リトライは1回のみで、「参照画像非対応/キー不足」などのエラーはリトライされません。

skills/canghe-image-gen/scripts/main.ts
await writeFile(outputPath, imageData);
ここでの処理内容:main()はプロバイダーから返されたUint8Arrayを受け取ってディスクに保存し、--json指定時はメタデータを追加出力します。

バッチと並列は2つの異なるモードです:デフォルトでは1枚ずつ順番に生成されます。並列生成はユーザーが明示的に要求した場合のみ有効になり、ホストの複数のバックグラウンドサブエージェント(推奨4、上限8)によって実行されます。スクリプト自体には並列ロジックは含まれていません。

skills/canghe-image-gen/SKILL.md
**Parallel Generation**: Only use when user explicitly requests parallel/concurrent generation.
ここでの処理内容:並列処理はエージェントオーケストレーション層の戦略であり、main.ts内には実装されていません。

2コア機能

01Text-to-Image(文生図):4つのバックエンド(OpenAI / Google / DashScope 通義万象 / Cangheゲートウェイ)からの任意選択または自動選択
02参照画像 / Image-to-Image(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に対応
05多様なプロンプト入力元:インラインテキスト、--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(SKILL.mdに従ってエージェントが実行する唯一のエントリポイントCLI)
  • 网络端点: 外部ネットワークアクセスの宣言: POST https://api.openai.com/v1/images/generations(openai.ts)
  • 本地工作目录: ファイルの読み書きおよび成果物の出力: ユーザーが--imageで指定したパスへの画像ファイル(拡張子がない場合は.pngを補完。main.tsがmkdir -pを実行後にwriteFile)
監査ノート: オレンジ:自己宣言された用途のために4種類のAPIキー(環境変数および.envファイル)を読み取り、ユーザープロンプトと参照画像を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結論

  • 単一スクリプトで4つの画像バックエンドを統括しキーに基づいて自動ルーティング。新しいプロバイダーの追加もファイル1つの追加と共通インターフェースの実装のみで完結するクリーンな設計。
  • 設定の階層管理および.env/EXTEND.mdの独自パースにより、ユーザーはゼロ構成でも実行可能。拡張子なし時の.png自動補完、mkdir -p、リトライ対象の絞り込みなど、細部のエンジニアリングも行き届いている。
  • アスペクト比、品質、参照画像、プロンプトファイル、バッチ処理、JSON出力など実用的なオプションを網羅し、他のスキルやスクリプトからツールとして呼び出すのに適している。
  • 最適な用途: スクリプト化、バッチ処理、または複数バックエンドにまたがる画像生成を必要とするクリエイターや自動化パイプライン。特に画像生成機能を他のエージェントワークフローに組み込むシナリオに最適。
    不向きな用途: 素材の外部送信に極めて慎重であり、完全オフラインまたはデータを社内ネットワークから一切出さないことが求められる環境。また、単一の固定バックエンドのみを使用し、複数のキーを管理したくないユーザー。
    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.