メインコンテンツへ移動
AIチュートリアル

ChatGPT2API 使用ガイド:OpenAI互換の画像生成・編集APIを構築

この記事では、ChatGPT2APIの主な機能、Dockerおよびローカル開発環境への導入方法を紹介します。さらに、curlの例を使って画像生成、画像編集、アンカーコメント、注釈付き手書き編集を解説し、ストレージバックエンド、プロキシ、アカウントプールの設定についても説明します。

ChatGPT2API 使用ガイド:OpenAI互換の画像生成・編集APIを構築

プロジェクト概要と利用上の注意

ChatGPT2API は、ChatGPT 公式サイトの関連機能をリバースエンジニアリングして整理・ラップしたプロジェクトです。画像生成、画像編集、複数画像の組み合わせ編集に対応した OpenAI 互換 API とプロキシを提供します。オンライン画像ワークベンチ、アカウントプール管理、複数のアカウントインポート方式、Docker によるセルフホストデプロイにも対応しています。

重要なお知らせ:プロジェクトの README には、個人学習、技術研究、非商用の技術交流のみを目的とすると明記されています。商用利用、大量操作、自動化による乱用、大規模な呼び出し、または OpenAI の利用規約や現地の法令に違反する行為には使用しないでください。テスト時も、重要なアカウント、普段使用しているアカウント、高価値のアカウントは使用しないでください。

本プロジェクトでは公式サイトの API に関するリバースエンジニアリングを行うため、利用中にアカウントの制限、一時停止、永久停止を受けるリスクがあります。利用前に、関連するリスクを理解し、受け入れられることを確認してください。

ChatGPT2API 画像ワークベンチの画面

主な機能

OpenAI 互換インターフェース

  • POST /v1/images/generations 画像生成 API に対応。
  • POST /v1/images/edits 画像編集 API に対応。
  • 画像向けの POST /v1/chat/completions および POST /v1/responses 互換 API を提供。
  • GET /v1/models で画像関連モデルの一覧を公開。
  • n パラメーターで複数の生成結果を返すことができ、現在のバックエンド制限は 1~4 枚。
  • 編集可能な PPT および PSD ファイルの生成に対応。

オンライン画像生成と編集

内蔵ワークベンチでは、テキストからの画像生成、参照画像の編集、複数画像の組み合わせ編集に対応しています。gpt-image-2、codex-gpt-image-2、auto、および README に記載された GPT モデルの別名を選択できます。フロントエンドには、画像セッション履歴、ローカル保存、削除と全消去、サーバー側画像 URL キャッシュ、生成進捗の追跡、遅延読み込み、スクロール位置の記憶機能も備わっています。

アカウントプール管理

アカウントプールでは、アカウントのメールアドレス、種類、クレジット、回復時刻を非同期で更新し、利用可能なアカウントを順番に使って画像の生成と編集を実行できます。Token の無効化エラーが発生した場合、システムは無効な Token を自動的に除外できます。レート制限されたアカウントについては、定期チェック、パスワードによる再ログイン、自動復旧にも対応しています。

HTTP、HTTPS、SOCKS5、SOCKS5H プロキシに加え、WARP、Privoxy、FlareSolverr で構成された安定プロキシランタイムにも対応しています。アカウントのインポート方式には、ローカル CPA JSON、リモート CPA サーバー、sub2api サーバー、access_token があります。

ChatGPT2API アカウントプール管理画面

Docker で簡単にデプロイ

1. プロジェクトの取得とサービスの起動

まずは Docker Compose でサービス一式を起動することを推奨します。以下のコマンドを実行してプロジェクトをクローンし、バックグラウンドで実行します:

git clone https://github.com/iamdurant/chatgpt2api-personal.git chatgpt2api
cd chatgpt2api
docker compose pull
docker compose up -d

起動前に、config.json で auth-key を設定する必要があります。docker-compose.yml で環境変数 CHATGPT2API_AUTH_KEY を使用して、この設定を上書きすることもできます。

デフォルトでは、Web パネルのアドレスは http://localhost:3000、API のベースアドレスは http://localhost:3000/v1 で、データはプロジェクトディレクトリ内の ./data に保存されます。README の一部の curl 例では localhost:8000 が使用されています。実際に呼び出す際は、Compose のポートマッピングに合わせてポートを変更してください。

2. Web パネルへのアクセス

サービスの起動後、ブラウザーで http://localhost:3000 を開きます。初回利用時は、まず認証キー、アカウント、プロキシなどの必要な設定を完了してから、ワークベンチで画像生成または編集機能をテストしてください。

3. サービスの更新

以降、イメージを更新する場合は、次のコマンドを実行します:

docker compose pull
docker compose up -d

WARP と FlareSolverr による安定プロキシの有効化

画像リクエストが Cloudflare によって頻繁にブロックされる場合は、プロジェクトに付属する WARP、Privoxy、FlareSolverr のデプロイ構成を利用できます:

cp .env.example .env
docker compose -f docker-compose.warp.yml pull
docker compose -f docker-compose.warp.yml up -d

この Compose 構成では、次のサービスが起動します:

  • warp-proxy:WARP SOCKS5 の出口を提供。
  • privoxy:WARP SOCKS5 を HTTP プロキシに変換。
  • flaresolverr:Cloudflare clearance を更新。
  • init-config:proxy_runtime のデフォルト設定を冪等に書き込み。
  • app:ChatGPT2API のメインサービスを実行。

デフォルトでは、安定プロキシを使用するのは上流の OpenAI または ChatGPT リクエストのみで、アカウントのメールや CPA などの補助的な通信経路は強制的に引き継がれません。プロキシの優先順位は、アカウント自身に設定されたプロキシ、安定プロキシランタイム、明示的なプロキシ、旧版のグローバルプロキシの順です。.env でポートとランタイムパラメーターを調整でき、管理画面の設定ページでプロキシと clearance をテストすることもできます。

ローカル開発環境

バックエンドの起動

プロジェクトの README では、Python の依存関係管理に uv を使用しています。以下のコマンドを実行してバックエンドを起動します:

git clone https://github.com/iamdurant/chatgpt2api-personal.git chatgpt2api
cd chatgpt2api
uv sync
uv run main.py

フロントエンドの起動

Web ディレクトリに移動し、Bun で依存関係をインストールして開発サーバーを起動します:

cd chatgpt2api/web
bun install
bun run dev

ストレージバックエンドの設定

プロジェクトでは、環境変数 STORAGE_BACKEND によってストレージ方式を選択します:

  • json:ローカル JSON ファイル。デフォルト方式。
  • sqlite:ローカル SQLite データベース。
  • postgres:外部 PostgreSQL。DATABASE_URL の設定が必要。
  • git:Git プライベートリポジトリ。GIT_REPO_URL と GIT_TOKEN の設定が必要。

たとえば PostgreSQL を使用する場合は、Compose の環境変数に次を追加できます:

environment:
  - STORAGE_BACKEND=postgres
  - DATABASE_URL=postgresql://user:password@host:5432/dbname

画像生成 API の呼び出し

すべての AI API には、次の認証リクエストヘッダーを付ける必要があります:

Authorization: Bearer <auth-key>

まずモデル一覧 API を呼び出すと、現在公開されているモデルを確認できます:

curl http://localhost:8000/v1/models \
  -H "Authorization: Bearer <auth-key>"

テキストからの画像生成には POST /v1/images/generations を使用します。以下の例では、宇宙に浮かぶ猫を 1 匹生成します:

curl http://localhost:8000/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <auth-key>" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "宇宙に浮かぶ猫",
    "n": 1,
    "response_format": "b64_json"
  }'

model には /v1/models が返す利用可能な値を使用してください。README では画像生成に gpt-image-2 を推奨しています。n で生成数を設定できますが、現在のバックエンド制限は 1~4 枚です。response_format の例では b64_json を使用しています。

画像編集 API の呼び出し

multipart でローカル画像をアップロード

画像編集 API では、ローカルファイルをアップロードし、プロンプトで変更内容を指定できます:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -F "model=gpt-image-2" \
  -F "prompt=この画像をサイバーパンク風の夜景に変更" \
  -F "n=1" \
  -F "image=@./input.png"

画像 URL による編集

JSON 形式で画像 URL を渡すこともできます:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "この画像をサイバーパンク風の夜景に変更",
    "images": [
      {"image_url": "https://example.com/input.png"}
    ]
  }'

コメントアンカーで指定領域を編集

comments 配列を使用すると、Web 版の画像コメント形式の編集を再現できます。x と y には、0~1 の正規化された数値、パーセント文字列、または 0~100 の数値を指定できます:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "その他の部分は変更しないでください",
    "images": [
      {"image_url": "https://example.com/input.png"}
    ],
    "comments": [
      {"x": "27.5%", "y": "70%", "text": "青磁の急須を金縁の白磁の急須に変更"},
      {"x": 0.36, "y": 0.315, "text": "髷にもう一本、金色の歩揺を挿す"}
    ]
  }'

リクエストに comments が含まれる場合、prompt は省略できます。各コメントでは image_index を使用して対応する入力画像を指定することもでき、デフォルト値は 0 です。

注釈ストロークを使用した編集

プロジェクトは Web 版の注釈ブラシにも対応しています。markup_strokes を使用する場合、points は正規化座標による折れ線で、color のデフォルト値は #FF3B30、width は画像の短辺に対する線幅の比率です。

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "円の中にあるネオンサインを緑色に変更",
    "images": [
      {"image_url": "https://example.com/input.png"}
    ],
    "markup_strokes": [
      {
        "points": [[0.62, 0.18], [0.78, 0.22], [0.75, 0.42], [0.6, 0.38], [0.62, 0.18]],
        "color": "#FF3B30",
        "width": 0.01
      }
    ]
  }'

元画像と同じアスペクト比の透明なストローク PNG がすでにある場合は、multipart 方式で markup ファイルをアップロードすることもできます。プロジェクトはストロークを入力画像に位置合わせして合成した後、編集を実行します。

Chat Completions と Responses 互換インターフェースの使用

Chat Completions

POST /v1/chat/completions は、テキスト、Web 検索、画像の各シナリオに互換機能を提供しますが、README では完全な汎用チャットエージェントではないと明記されています。画像生成の例:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <auth-key>" \
  -d '{
    "model": "gpt-image-2",
    "messages": [
      {
        "role": "user",
        "content": "雨の夜の東京の街角にいるサイバーパンク風の猫を生成"
      }
    ],
    "n": 1
  }'

このインターフェースの messages は、テキスト、検索、画像リクエストの内容を保持できます。tools は README に記載された Web 検索ツールに対応し、stream はテキスト、検索、画像の各シナリオで引き続きテスト段階です。

Responses API

POST /v1/responses は画像生成ツールの呼び出しと Web 検索の互換ロジックに対応していますが、同様に完全な汎用 Responses API プロキシではありません。

curl http://localhost:8000/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <auth-key>" \
  -d '{
    "model": "gpt-5",
    "input": "未来的な都市のスカイライン画像を生成",
    "tools": [
      {
        "type": "image_generation"
      }
    ]
  }'

ここで tools は image_generation、web_search、web_search_preview、web_search_preview_2025_03_11 に対応しています。ストリーミングレスポンスは実装済みですが、まだテスト中です。

高度な利用に関する提案

  1. まず認証とモデル一覧を確認する:デプロイ後、まず /v1/models を呼び出し、auth-key とポート設定が正しいことを確認してから画像リクエストを実行します。
  2. ストレージバックエンドを適切に選択する:個人でのテストにはデフォルトの JSON または SQLite を使用できます。外部データベースが必要になった場合に PostgreSQL を設定し、接続文字列を適切に保護してください。
  3. Cloudflare によるブロックに対処する:上流リクエストの安定性が低い場合は、まずプロジェクトが提供する WARP Compose 方式に従って安定したプロキシを設定し、バックエンドでプロキシと clearance をテストしてください。
  4. アカウントプールのリスクを管理する:定期的に無効な Token を削除し、検索、絞り込み、一括更新機能を使用してアカウントの状態を管理します。README で禁止されている一括操作や悪用行為をアカウントに対して実行しないでください。
  5. モデルの別名を区別する:codex-gpt-image-2 は Codex の画像生成シナリオで使用され、Plus、Team、Pro サブスクリプションでのみ利用できます。実際に利用可能なモデルは /v1/models の返却結果を基準にしてください。
  6. インターフェースの範囲に注意する:Chat Completions と Responses は主に README に記載されたテキスト、検索、画像のシナリオを対象としており、完全な汎用プロキシとして使用しないでください。

まとめ

ChatGPT2API は ChatGPT Web 版関連の画像機能を OpenAI 形式のインターフェースにまとめ、オンラインワークベンチ、画像編集の強化、アカウントプール、プロキシランタイム、複数のデプロイ方式を提供します。まず Docker で基本環境を構築し、必要に応じてストレージバックエンド、安定したプロキシ、アカウントのインポートを設定したうえで、/v1/images/generations と /v1/images/edits を通じて画像生成・編集フローに接続できます。利用時は、プロジェクトの免責事項、上流サービスの利用規約、現地の法令を必ず遵守してください。