画像からプロンプトへの変換機能をアプリケーションに統合することで、強力な可能性が広がります。自動説明生成、ビジュアル検索ツール、コンテンツ制作パイプライン、ビジュアルスタイルに基づくレコメンドシステムなどが実現できます。この技術ガイドでは、開発者がImageToPrompt APIをプロジェクトに統合するために必要なすべてを解説します。
注意: ImageToPrompt APIはAnthropicのClaude AIによって動作し、画像を一時的に処理します。画像がサーバーに保存されることは一切ありません。
API概要
ImageToPrompt APIは、画像/テキストからAIプロンプトへの変換に関するすべてのユースケースをカバーする4つの主要エンドポイントを提供します。各エンドポイントはJSON本文を含むPOSTリクエストを受け付け、生成されたプロンプトと有用なメタデータを含む構造化レスポンスを返します。
APIはVercelのサーバーレス関数としてホストされており、低レイテンシーと高可用性を保証します。画像の複雑さと選択したターゲットモデルによって、平均レスポンス時間は5〜10秒です。
認証とセキュリティ
APIリクエストにはシークレットキーを含む認証ヘッダーが必要です。このキーは各リクエストのx-app-secretヘッダーで送信します。
POST /api/analyze
Content-Type: application/json
x-app-secret: YOUR_APP_SECRET
{
"image": "data:image/jpeg;base64,/9j/4AAQ...",
"model": "midjourney",
"style": "cinematic"
}すべての通信はHTTPSで暗号化されます。画像はリクエスト本文でbase64として送信され、安全でないサードパーティサービスを経由することはありません。
利用可能なエンドポイント
| エンドポイント | メソッド | 説明 |
|---|---|---|
/api/analyze |
POST | 画像をターゲットモデル向けのAIプロンプトに変換 |
/api/text-to-prompt |
POST | テキスト説明を最適化されたAIプロンプトに変換 |
/api/image-to-video-prompt |
POST | ソース画像からAI動画プロンプトを生成 |
/api/text-to-video-prompt |
POST | テキスト説明からAI動画プロンプトを作成 |
Python統合例
以下はrequestsライブラリを使用したPythonの完全な統合例です。このスクリプトはローカル画像をbase64エンコードし、APIにリクエストを送信して、生成されたプロンプトを表示します。
import requests
import base64
import json
def image_to_prompt(image_path, model="midjourney", style="cinematic"):
"""Convert a local image to an AI prompt."""
# Read and encode the image
with open(image_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
# Determine MIME type
ext = image_path.lower().split(".")[-1]
mime_types = {"jpg": "jpeg", "jpeg": "jpeg", "png": "png", "webp": "webp"}
mime = mime_types.get(ext, "jpeg")
# Build the request
payload = {
"image": f"data:image/{mime};base64,{image_data}",
"model": model,
"style": style
}
headers = {
"Content-Type": "application/json",
"x-app-secret": "YOUR_APP_SECRET"
}
response = requests.post(
"https://www.imagetoprompt.dev/api/analyze",
json=payload,
headers=headers,
timeout=30
)
if response.status_code == 200:
result = response.json()
return result
elif response.status_code == 429:
print("Rate limit reached. Try again tomorrow.")
return None
else:
print(f"Error {response.status_code}: {response.text}")
return None
# Usage
result = image_to_prompt("my-photo.jpg", model="flux", style="technical")
if result:
print("Prompt:", result["prompt"])
print("Negative:", result.get("negative", "N/A"))JavaScript統合例
Webアプリケーションおよびnode.js向けのfetchを使用した例です。このコードはブラウザ側でもNode.js 18+のサーバー側でも動作します。
async function imageToPrompt(imageFile, model = "midjourney", style = "cinematic") {
// Convert File to base64
const reader = new FileReader();
const base64 = await new Promise((resolve) => {
reader.onload = () => resolve(reader.result);
reader.readAsDataURL(imageFile);
});
const response = await fetch("https://www.imagetoprompt.dev/api/analyze", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-app-secret": "YOUR_APP_SECRET"
},
body: JSON.stringify({
image: base64,
model: model,
style: style
})
});
if (response.status === 429) {
throw new Error("Rate limit exceeded");
}
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
return await response.json();
}
// Usage with file input
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener("change", async (e) => {
const file = e.target.files[0];
try {
const result = await imageToPrompt(file, "stable-diffusion", "technical");
console.log("Generated prompt:", result.prompt);
} catch (err) {
console.error("Failed:", err.message);
}
});リクエストパラメータ
各エンドポイントはプロンプト生成に影響する特定のパラメータを受け付けます。以下はメインエンドポイント/api/analyzeのパラメータです。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
image |
string | はい | data URIプレフィックス付きのbase64画像 |
model |
string | はい | ターゲットモデル:midjourney、stable-diffusion、flux、dall-e-3、adobe-firefly、leonardo-ai、ideogram |
style |
string | いいえ | プロンプトスタイル:cinematic、technical、artistic、minimal、epic、photographic |
レスポンス形式
APIはメインプロンプト、ネガティブプロンプト(該当する場合)、クリエイティブバリエーション、ビジュアル分析メタデータを含む構造化JSONオブジェクトを返します。
{
"prompt": "cinematic portrait of a woman in golden hour light, shallow depth of field, film grain, warm tones --ar 3:2 --v 6.1 --style raw",
"negative": "blurry, low quality, deformed, bad anatomy",
"remix": "ethereal portrait bathed in amber sunset glow, dreamlike bokeh...",
"colors": ["#D4A574", "#2C1810", "#F5E6D3", "#8B4513", "#FFD700"],
"tags": ["portrait", "golden hour", "cinematic", "warm tones"],
"aspectRatio": "3:2",
"model": "midjourney",
"style": "cinematic"
}レート制限とクォータ
APIはUpstash Redisを使用したIPアドレスベースのレート制限システムを採用しています。現在の制限は以下の通りです。
- 無料クォータ: IPアドレスごとに1日10リクエスト
- 共有クォータ: 10リクエストはすべてのエンドポイント(analyze、text-to-prompt、image-to-video-prompt、text-to-video-prompt)で共有
- リセット: カウンターは毎日UTC午前0時にリセット
- レスポンスヘッダー:
X-RateLimit-Remainingで残りリクエスト数を確認可能
クォータを超過すると、APIは説明メッセージ付きのHTTP 429コードを返します。クライアントコードにエクスポネンシャルバックオフ付きのリトライメカニズムを実装してください。
エラー処理
APIはエラーを報告するために標準HTTPコードを使用します。以下は最も一般的なコードとその意味です。
| コード | 意味 | 推奨対応 |
|---|---|---|
| 200 | 成功 | レスポンスを通常通り処理 |
| 400 | 無効なリクエスト | 画像フォーマットとパラメータを確認 |
| 401 | 未認証 | x-app-secretキーを確認 |
| 429 | レート制限到達 | クォータリセットを待つか有料プランにアップグレード |
| 500 | サーバーエラー | エクスポネンシャルバックオフで数秒後にリトライ |
高度なユースケース
コンテンツ生成パイプライン
APIをコンテンツ制作パイプラインに統合し、商品写真、ポートフォリオ画像、デザインスクリーンショットから自動的にビジュアル説明を生成できます。これにより、大規模に一貫したスタイルバリエーションを作成することが可能になります。
ビジュアル検索エンジン
生成されたプロンプトをセマンティック記述子として使用し、ビジュアルスタイルで画像をインデックス化・検索できます。APIが返すカラー、スタイル、雰囲気のタグが、ビジュアル類似性検索のための豊富なインデックスを構築します。
クリエイティブ教育ツール
画像をビジュアル要素(照明、構図、パレット、スタイル)に分解する教育ツールを構築し、アーティストや写真家が画像を効果的にする要素を理解する手助けができます。
SNS自動化
ビジュアルから説明的なキャプションやハッシュタグを自動生成できます。生成されたプロンプトには、ビジュアルコンテンツを詳細かつ魅力的に説明するための最も関連性の高い用語が含まれています。
よくある質問
ImageToPrompt APIは無料ですか?
APIはIPアドレスごとに1日10リクエストの無料枠を提供しています。この枠はすべてのエンドポイント(image-to-prompt、text-to-prompt、image-to-video、text-to-video)で共有されます。より多くのリクエストが必要な場合は、料金ページで有料プランをご確認ください。
APIがサポートする画像フォーマットは何ですか?
APIはJPEG、PNG、WebP、GIF(最初のフレームのみ)形式の画像を受け付けます。最大サイズは1画像あたり10MBです。画像はJSONリクエストボディ内でbase64エンコードして送信します。最良の結果を得るには、512x512ピクセル以上の画像をご使用ください。
APIのエラーとレート制限にどう対処しますか?
レート制限に達するとAPIはHTTP 429コードを返し、Retry-Afterヘッダーでリトライのタイミングを示します。コードにエクスポネンシャルバックオフを実装してください。400エラーはリクエストの問題(無効な画像、パラメータ不足)を示し、500エラーは一時的なサーバー問題を示します。
APIに送信した画像は保存されますか?
いいえ。すべての画像はメモリ上で一時的に処理され、サーバーに保存されることはありません。分析はClaude AIによってリアルタイムで実行され、プロンプト生成後すぐにデータは削除されます。画像のログは一切保持されません。