diff --git a/article_server.py b/article_server.py index 3e84dfd..91b0fc9 100644 --- a/article_server.py +++ b/article_server.py @@ -87,6 +87,21 @@ def _get_gemini_key() -> str: return "" +def _detect_image_mime(image_bytes: bytes) -> str: + """MIME-Type anhand Magic-Bytes erkennen.""" + if len(image_bytes) < 8: + return "image/jpeg" # Fallback + if image_bytes[:4] == b"\x89PNG": + return "image/png" + if image_bytes[:2] == b"\xff\xd8": + return "image/jpeg" + if image_bytes[:4] == b"RIFF" and image_bytes[8:12] == b"WEBP": + return "image/webp" + if image_bytes[:4] in (b"ftyp", b"heic", b"heix", b"hevc", b"hevx"): + return "image/heic" + return "image/jpeg" # Fallback + + def _gemini_generate_image( prompt: str, image_base64: str | None, @@ -104,15 +119,20 @@ def _gemini_generate_image( Returns: dict mit "image_base64" (PNG) oder "error". """ + import base64 as b64 + key = _get_gemini_key() if not key: return {"error": "Kein Gemini API-Key"} parts = [{"text": f"{prompt}\n\nAspect ratio: {aspect_ratio}."}] if image_base64: + # MIME-Type aus den tatsächlichen Bilddaten erkennen + raw_bytes = b64.b64decode(image_base64) + mime_type = _detect_image_mime(raw_bytes) parts.append({ "inlineData": { - "mimeType": "image/jpeg", + "mimeType": mime_type, "data": image_base64 } })