Ideogram API Sandboxチュートリアル：画像生成スクリプトの詳細解説

## はじめに

Ideogram API Sandboxは、Ideogram APIを使用してAI画像生成を簡単に試すことができるプロジェクトです。このチュートリアルでは、`ideogram_api_example.py`と`ideogram_v2turbo_sample.py`の2つの主要なスクリプトについて、その機能と使い方を詳しく解説します。

## ideogram_api_example.py の解説

### スクリプトの概要

`ideogram_api_example.py`は、Ideogram APIの基本的な使用方法を示すサンプルスクリプトです。このスクリプトを使用することで、簡単にAI生成画像を作成できます。

### 主要な機能

#### 環境設定とログ記録

```python
import os
import requests
import json
from dotenv import load_dotenv
from loguru import logger
from art import text2art

current_dir = os.path.dirname(os.path.abspath(__file__))
dotenv_path = os.path.join(current_dir, '.env')
load_dotenv(dotenv_path)

logger.add("ideogram_api.log", rotation="500 MB", encoding="utf-8")
```

このセクションでは：
- 必要なライブラリをインポートします。
- `.env`ファイルから環境変数を読み込みます。
- ログ記録の設定を行います。

#### 画像生成関数

```python
def generate_image(api_key, prompt, model="V_2", magic_prompt_option="AUTO"):
    url = "https://api.ideogram.ai/generate"
    
    payload = {
        "image_request": {
            "model": model,
            "prompt": prompt,
            "magic_prompt_option": magic_prompt_option
        }
    }
    
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "Api-Key": api_key
    }
    
    logger.info(f"Ideogram APIにリクエストを送信します。プロンプト: {prompt}")
    response = requests.post(url, json=payload, headers=headers)
    
    if response.status_code == 200:
        logger.success("Ideogram APIからの応答を正常に受信しました")
        return json.loads(response.text)
    else:
        logger.error(f"エラー: {response.status_code}")
        logger.error(response.text)
        return None
```

`generate_image`関数は：
- APIリクエストのペイロードを構築します。
- APIキーをヘッダーに設定します。
- リクエストを送信し、結果を処理します。

#### メイン処理

```python
def main():
    title = text2art("Ideogram API", font="block")
    print(title)

    api_key = os.getenv("IDEOGRAM_API_KEY")
    if not api_key:
        logger.error(f"APIキーが見つかりません。{dotenv_path} の.envファイルにIDEOGRAM_API_KEYを設定してください。")
        return

    prompt = "A captivating Pixar-Disney 3D animation scene, ᎩᗩᏆᔑ(◠‿◠), Beautiful sunset over the beach. cool text 'Ideogram API' "

    logger.info("Ideogram APIリクエストプロセスを開始します")
    result = generate_image(api_key, prompt)

    if result:
        logger.info("生成された画像を処理します")
        for i, image in enumerate(result['data'], 1):
            print(f"\n--- 画像 {i} ---")
            logger.info(f"画像URL: {image['url']}")
            logger.info(f"プロンプト: {image['prompt']}")
            logger.info(f"解像度: {image['resolution']}")
            logger.info(f"画像は安全: {image['is_image_safe']}")
    else:
        logger.warning("画像が生成されませんでした")

    logger.info("Ideogram APIリクエストプロセスが完了しました")

if __name__ == "__main__":
    main()
```

メイン処理では：
- APIキーを環境変数から取得します。
- プロンプトを設定し、画像生成を実行します。
- 生成された画像の情報をログに記録します。

## ideogram_v2turbo_sample.py の解説

### スクリプトの概要

`ideogram_v2turbo_sample.py`は、Ideogram APIのV2 Turboモデルを使用した高度な画像生成を行うサンプルスクリプトです。

### 主要な機能

#### 環境設定とログ記録

基本的な設定は`ideogram_api_example.py`と同じです。

#### 画像生成関数

```python
def generate_image(api_key, prompt, model="V_2_TURBO", magic_prompt_option="ON", aspect_ratio="ASPECT_16_9", style_type="RENDER_3D"):
    url = "https://api.ideogram.ai/generate"
    
    payload = {
        "image_request": {
            "model": model,
            "prompt": prompt,
            "magic_prompt_option": magic_prompt_option,
            "aspect_ratio": aspect_ratio,
            "style_type": style_type
        }
    }
    
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "Api-Key": api_key
    }
    
    logger.info(f"Ideogram APIにリクエストを送信します。プロンプト: {prompt}")
    logger.info(f"パラメータ: モデル={model}, マジックプロンプト={magic_prompt_option}, アスペクト比={aspect_ratio}, スタイル={style_type}")
    
    response = requests.post(url, json=payload, headers=headers)
    
    if response.status_code == 200:
        logger.success("Ideogram APIからの応答を正常に受信しました")
        return json.loads(response.text)
    else:
        logger.error(f"エラー: {response.status_code}")
        logger.error(response.text)
        return None
```

この関数では：
- V2 Turboモデルを使用します。
- アスペクト比やスタイルタイプなど、より多くのパラメータを設定できます。

#### メイン処理

```python
def main():
    title = text2art("Ideogram API", font="block")
    print(title)

    api_key = os.getenv("IDEOGRAM_API_KEY")
    if not api_key:
        logger.error(f"APIキーが見つかりません。{dotenv_path} の.envファイルにIDEOGRAM_API_KEYを設定してください。")
        return

    prompt = """
A captivating Pixar-Disney 3D animation scene, ᎩᗩᏆᔑ(◠‿◠), A stunning, hyper-realistic 3D render of a miniature tropical paradise encapsulated within a wine glass.

The interior of the wine glass is transformed into a serene beach scene, complete with pristine white sand, tiny sparkling shells, and an exquisitely detailed palm tree swaying gently under the warm sunlight filtering through the glass.

A quaint, miniature thatched-roof hut stands at one side, and the shimmering blue of the glass itself reflects the azure sky and tranquil ocean waves that seem to lap against the invisible boundaries of this small, enclosed world.

The large name "Ideogram API Sandbox" is delicately inscribed in the sand, evoking a sense of joy and tranquility within this tiny, self-contained paradise.

The cinematic and illustrative style of the rendering transports the viewer to this breathtaking escape, all within the confines of the wine glass, highlighting the juxtaposition of the grand and the small.

bringing a conceptual and imaginative world to life within a simple wine glass.
    """

    logger.info("Ideogram APIリクエストプロセスを開始します")
    result = generate_image(api_key, prompt)

    if result:
        logger.info("生成された画像の情報:")
        logger.info(json.dumps(result, indent=2, ensure_ascii=False))
    else:
        logger.warning("画像が生成されませんでした")

    logger.info("Ideogram APIリクエストプロセスが完了しました")

if __name__ == "__main__":
    main()
```

このメイン処理では：
- より詳細なプロンプトを使用しています。
- 生成された画像の全情報をJSON形式でログに記録します。

## まとめ

Ideogram API Sandboxの2つの主要スクリプト、`ideogram_api_example.py`と`ideogram_v2turbo_sample.py`を詳しく解説しました。これらのスクリプトを使用することで、Ideogram APIを簡単に試すことができ、AI画像生成の可能性を探ることができます。基本的な使用法から高度な設定まで、様々な実験が可能です。ぜひ、このサンドボックス環境でAI画像生成の世界を探索してみてください！

## リポジトリ

https://github.com/Sunwood-ai-labs/Ideogram-API-Sandbox

## 参考サイト

https://api-docs.ideogram.ai/reference/

https://ideogram.ai/