From bbaef76fa7dec8e85cc4ead871c6eec0535b39eb Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Fri, 20 Mar 2026 17:42:01 +0000 Subject: [PATCH] Fix Google image generation: model, response modality, data extraction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NanoBanana Pro: gemini-2.0-flash-exp-image → gemini-3.1-flash-image-preview - Add response_modalities=["IMAGE","TEXT"] so Gemini returns image data - Replace part.as_image() with base64.b64decode(part.inline_data.data) Co-Authored-By: Claude Sonnet 4.6 --- backend/services/image_generation_service.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/backend/services/image_generation_service.py b/backend/services/image_generation_service.py index 7f540aa..705d3a3 100644 --- a/backend/services/image_generation_service.py +++ b/backend/services/image_generation_service.py @@ -169,19 +169,26 @@ class ImageGenerationService: self, prompt: str, output_directory: str, model: str ) -> str: """Base method for Google image generation models.""" + from google.genai import types + client = genai.Client() response = await asyncio.to_thread( client.models.generate_content, model=model, contents=[prompt], + config=types.GenerateContentConfig( + response_modalities=["IMAGE", "TEXT"], + ), ) image_path = None for part in response.candidates[0].content.parts: if part.inline_data is not None: - image = part.as_image() + image_data = base64.b64decode(part.inline_data.data) image_path = os.path.join(output_directory, f"{uuid.uuid4()}.jpg") - image.save(image_path) + with open(image_path, "wb") as f: + f.write(image_data) + break if not image_path: raise HTTPException( @@ -201,9 +208,9 @@ class ImageGenerationService: async def generate_image_nanobanana_pro( self, prompt: str, output_directory: str ) -> str: - """Generate image using NanoBanana Pro (gemini-2.0-flash-exp-image).""" + """Generate image using NanoBanana Pro (gemini-3.1-flash-image-preview).""" return await self._generate_image_google( - prompt, output_directory, "gemini-2.0-flash-exp-image" + prompt, output_directory, "gemini-3.1-flash-image-preview" ) async def get_image_from_pexels(self, prompt: str) -> str: