Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -19,6 +19,9 @@ import httpx # ★★★ 変更点: httpx を追加
|
|
| 19 |
API_KEY = os.environ.get("NANO_BANANA_API", "") # Secret名 "NANO_BANANA_API" を使用
|
| 20 |
API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent?key="
|
| 21 |
|
|
|
|
|
|
|
|
|
|
| 22 |
# --- ヘルパー関数 (Helper Functions) ---
|
| 23 |
|
| 24 |
def pil_to_base64(img: Image.Image) -> str:
|
|
@@ -38,8 +41,22 @@ async def nano_banana_completion_api(base_image: Image.Image, prompt: str) -> Im
|
|
| 38 |
if not API_KEY:
|
| 39 |
raise gr.Error("エラー: APIキーが設定されていません。Hugging Face Secretsで 'NANO_BANANA_API' を設定してください。")
|
| 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
# Base64エンコード
|
| 42 |
-
base64_image = pil_to_base64(
|
| 43 |
|
| 44 |
# プロンプトと画像を含むペイロードの構築(Image-to-Image用)
|
| 45 |
payload = {
|
|
|
|
| 19 |
API_KEY = os.environ.get("NANO_BANANA_API", "") # Secret名 "NANO_BANANA_API" を使用
|
| 20 |
API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent?key="
|
| 21 |
|
| 22 |
+
# API送信用の最大画像サイズを定義 (ほとんどのAIモデルで推奨される最大値に近い)
|
| 23 |
+
MAX_API_SIZE = 1024
|
| 24 |
+
|
| 25 |
# --- ヘルパー関数 (Helper Functions) ---
|
| 26 |
|
| 27 |
def pil_to_base64(img: Image.Image) -> str:
|
|
|
|
| 41 |
if not API_KEY:
|
| 42 |
raise gr.Error("エラー: APIキーが設定されていません。Hugging Face Secretsで 'NANO_BANANA_API' を設定してください。")
|
| 43 |
|
| 44 |
+
# --- ★★★ 修正点3: API送信前に画像サイズを調整 ★★★ ---
|
| 45 |
+
resized_image = base_image.copy()
|
| 46 |
+
w, h = resized_image.size
|
| 47 |
+
|
| 48 |
+
if max(w, h) > MAX_API_SIZE:
|
| 49 |
+
if w > h:
|
| 50 |
+
new_w = MAX_API_SIZE
|
| 51 |
+
new_h = int(h * (MAX_API_SIZE / w))
|
| 52 |
+
else:
|
| 53 |
+
new_h = MAX_API_SIZE
|
| 54 |
+
new_w = int(w * (MAX_API_SIZE / h))
|
| 55 |
+
resized_image = resized_image.resize((new_w, new_h), Image.Resampling.LANCZOS)
|
| 56 |
+
print(f"--- 画像をAPI送信のためリサイズしました: {w}x{h} -> {new_w}x{new_h} ---")
|
| 57 |
+
|
| 58 |
# Base64エンコード
|
| 59 |
+
base64_image = pil_to_base64(resized_image)
|
| 60 |
|
| 61 |
# プロンプトと画像を含むペイロードの構築(Image-to-Image用)
|
| 62 |
payload = {
|