このリポジトリは、OpenAIの最新画像生成モデル GPT-image-1 と、Python製のWeb UIフレームワーク Streamlit を用いて開発された画像生成アプリケーションのサンプル実装です。
ローカル環境での実行はもちろん、Dockerコンテナ化、そしてAzureのPaaS (App Service for Containers / Azure Container Apps) へのデプロイまでを網羅したフルスタックな構成例となっています。
特に、エンタープライズ利用を想定した Microsoft Entra ID (旧Azure AD) による認証や、Azure Key Vault を用いた安全なシークレット管理 (Managed Identity連携) の実装方法を含んでいる点が特徴です。
詳細な解説やAzureへのデプロイ手順、アプリの動作イメージについては、以下のZenn記事をご参照ください。
📄 Zenn記事: GPT-image-1 × Streamlit で作る画像生成AIアプリ - Entra ID認証連携からAzureデプロイまで完全解説
- Text-to-Image (txt2img): テキストプロンプトから画像を生成します。
- Image-to-Image (img2img): アップロードした画像を基に、プロンプトに従って画像を編集・生成します。(※Azure OpenAI Serviceでの実装には注意点あり。詳細はZenn記事参照)
- パラメータ調整UI: 画像サイズ (
size)、品質 (quality)、スタイル (style) などの生成オプションをStreamlitのUIから直感的に設定できます。 - バックエンド切り替え: 環境変数により、バックエンドを OpenAI API または Azure OpenAI Service API に切り替え可能です。
- 認証:
- Azureデプロイ時: Microsoft Entra ID 連携 (Easy Auth)
- ローカル実行時: Streamlit標準のOAuth (
st.login) などで代替可能 (要設定)
- UI/UX: プロンプト例ボタン、初回チュートリアル (
st.dialog)、処理中スピナー (st.spinner) などを実装。
- 言語: Python 3.12
- Webフレームワーク: Streamlit
- AIモデル: GPT-image-1 (OpenAI / Azure OpenAI Service)
- Pythonライブラリ: openai, azure-identity, python-dotenv, Pillow, requests, streamlit
- パッケージ管理: uv (推奨)
- コンテナ: Docker
- クラウド (Azure):
- Azure Container Registry (ACR)
- Azure App Service for Containers
- Azure Container Apps (ACA)
- Azure Key Vault
- Microsoft Entra ID
gpt-image-1-streamlit/
├── .streamlit/
│ └── config.toml # Streamlit設定
├── static/
│ └── theme.css # カスタムCSS
├── app.py # Streamlitアプリケーション本体
├── requirements.txt # Python依存パッケージリスト
├── .env.example # 環境変数テンプレート
├── Dockerfile # Dockerイメージ定義
├── .dockerignore # Docker除外設定
├── .gitignore # Git除外設定
├── LICENSE # MITライセンス
└── README.md # このファイル
# ローカル開発時に作成されるファイル (Git管理外)
├── .venv/ # uv仮想環境
├── .env # ローカル用環境変数
└── .streamlit/secrets.toml # Streamlitシークレット (任意)
- Python 3.10+ (3.12推奨)
- uv (推奨:
brew install uvまたはcurl -LsSf https://astral.sh/uv/install.sh | sh) - Docker Desktop
- Azure CLI (Azureデプロイを行う場合)
- OpenAI APIキー または Azure OpenAI Service のエンドポイント/APIキー/デプロイ名
-
リポジトリをクローン (まだの場合):
git clone https://github.com/naoki1213mj/gpt-image-1-streamlit.git cd gpt-image-1-streamlit -
仮想環境の作成と有効化 (uv推奨):
uv venv .venv --python 3.12 source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows
-
依存パッケージのインストール (uv推奨):
uv pip sync requirements.txt # または: uv pip install -r requirements.txt -
環境変数ファイルの設定:
-
.env.exampleをコピーして.envファイルを作成します。cp .env.example .env
-
.envファイルを開き、使用するAPIキーやエンドポイントなどを設定します。# --- 通常のOpenAI API を使う場合 --- AI_HOST=OpenAI OPENAI_API_KEY=sk-... EASY_AUTH_ENABLED=false LOG_LEVEL=INFO # --- Azure OpenAI Service を使う場合 --- AI_HOST=AzureOpenAI AZURE_OPENAI_API_IMAGE_ENDPOINT=https://your-resource.openai.azure.com AZURE_OPENAI_API_IMAGE_MODEL=gpt-image-1 AZURE_OPENAI_API_IMAGE_KEY=your-api-key AZURE_OPENAI_API_VERSION=2025-04-01-preview EASY_AUTH_ENABLED=false LOG_LEVEL=INFO
-
-
Streamlitシークレットの設定 (任意:
st.loginをローカルで使う場合):-
ローカルで
st.login("microsoft")を試す場合は、.streamlit/secrets.tomlファイルを作成し、Entra IDアプリ登録情報を記述します。[microsoft] clientId = "YOUR_ENTRA_APPLICATION_CLIENT_ID" tenantId = "YOUR_ENTRA_TENANT_ID" # clientSecret = "..." # 必要に応じて redirectUri = "http://localhost:8501"
-
-
ローカルで実行:
streamlit run app.py
ブラウザで
http://localhost:8501にアクセスします。
-
Dockerイメージをビルド:
docker build -t gptimage1-streamlit:latest .-
Apple Silicon (ARM64) 環境の場合: Azure (通常AMD64) へのデプロイを考慮し、ターゲットプラットフォームを指定してビルドします。
docker buildx build --platform linux/amd64 -t gptimage1-streamlit:latest-amd64 --load .
-
-
Dockerコンテナを実行:
# 通常のビルドの場合 docker run --rm -p 8501:8501 -v $(pwd)/.env:/app/.env gptimage1-streamlit:latest # AMD64ビルドの場合 # docker run --rm -p 8501:8501 -v $(pwd)/.env:/app/.env gptimage1-streamlit:latest-amd64
-v $(pwd)/.env:/app/.envでローカルの.envファイルをコンテナ内にマウントし、APIキーなどを渡しています。
ブラウザで
http://localhost:8501にアクセスします。
このアプリケーションは、Azure App Service for Containers または Azure Container Apps へのデプロイに対応しています。詳細な手順(ACRへのプッシュ、PaaSリソース作成、Entra ID Easy Auth設定、Key Vault + Managed Identityによるシークレット管理)については、以下のZenn記事を参照してください。
📄 Zenn記事: GPT-image-1 × Streamlit で作る画像生成AIアプリ - Entra ID認証連携からAzureデプロイまで完全解説
- Azure Container Registry (ACR)
- Azure App Service Plan & App Service (for Containers) または Azure Container Apps Environment & Container App
- Azure Key Vault
- Microsoft Entra ID (アプリ登録)
AI_HOST:"AzureOpenAI"または"OpenAI"。使用するAPIサービスを指定。EASY_AUTH_ENABLED:"true"または"false"。Easy Auth(Azure App Service認証)の有効化。LOG_LEVEL:"DEBUG"/"INFO"/"WARNING"/"ERROR"。ログレベルの設定。
AZURE_OPENAI_API_IMAGE_ENDPOINT: Azure OpenAI Service のエンドポイントURL。AZURE_OPENAI_API_IMAGE_MODEL: Azure OpenAI Service でのGPT-image-1モデルのデプロイ名。AZURE_OPENAI_API_IMAGE_KEY: Azure OpenAI APIキー。AZURE_OPENAI_API_VERSION: 使用するAzure OpenAI APIバージョン。
OPENAI_API_KEY: OpenAI APIキー。
- ローカルで
st.login("microsoft")を使用する場合に、[microsoft]セクションにclientId,tenantId,redirectUriなどを設定します。
- アプリのテーマ (
[theme]) やサーバー設定 ([server]) をカスタマイズできます。詳細はStreamlitドキュメントを参照してください。
- アプリケーションのビジュアルデザインをカスタマイズするCSSファイルです。ボタンスタイル、ギャラリー表示、アニメーションなどの見た目を定義しています。
バグ報告、機能提案、改善提案などはGitHub Issuesへお願いします。プルリクエストも歓迎します!
このプロジェクトは MIT License の下で公開されています。