--- a/scripts/generate_image.py +++ b/scripts/generate_image.py @@ -137,23 +137,45 @@ elif isinstance(img, str): image_b64 = img - # Format 2: content array with image_url (Gemini models) + # Format 2: choices array (Gemini, FLUX via OpenRouter) if not image_b64 and "choices" in data: for choice in data["choices"]: message = choice.get("message", {}) - content_list = message.get("content", []) - if isinstance(content_list, list): - for item in content_list: - if isinstance(item, dict) and item.get("type") == "image_url": - url_data = item.get("image_url", {}).get("url", "") - if url_data.startswith("data:"): - # Extract base64 from data URL - _, _, b64_part = url_data.partition(",") - image_b64 = b64_part - elif isinstance(content_list, str): - # Some models return base64 directly in content - if len(content_list) > 1000: # Likely base64 image data - image_b64 = content_list + + # Format 2a: images array inside message (FLUX models) + msg_images = message.get("images", []) + if msg_images and len(msg_images) > 0: + img = msg_images[0] + if isinstance(img, dict) and "b64_json" in img: + image_b64 = img["b64_json"] + elif isinstance(img, dict) and img.get("type") == "image_url": + url_data = img.get("image_url", {}).get("url", "") + if url_data.startswith("data:"): + _, _, b64_part = url_data.partition(",") + image_b64 = b64_part + elif isinstance(img, dict) and "url" in img: + url_data = img["url"] + if url_data.startswith("data:"): + _, _, b64_part = url_data.partition(",") + image_b64 = b64_part + else: + image_b64 = url_data + elif isinstance(img, str): + image_b64 = img + + # Format 2b: content array with image_url (Gemini models) + if not image_b64: + content_list = message.get("content", []) + if isinstance(content_list, list): + for item in content_list: + if isinstance(item, dict) and item.get("type") == "image_url": + url_data = item.get("image_url", {}).get("url", "") + if url_data.startswith("data:"): + _, _, b64_part = url_data.partition(",") + image_b64 = b64_part + elif isinstance(content_list, str): + if len(content_list) > 1000: + image_b64 = content_list if not image_b64: print("Error: No image data found in API response.")