Abs6187 commited on
Commit
cf991a3
Β·
verified Β·
1 Parent(s): 3cde868

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -23
app.py CHANGED
@@ -63,10 +63,13 @@ try:
63
  if ELEVENLABS_API_KEY:
64
  set_api_key(ELEVENLABS_API_KEY)
65
  logger.info("ElevenLabs configured")
 
66
  else:
67
  logger.info("ElevenLabs not configured - optional feature")
 
68
  except ImportError:
69
  logger.info("ElevenLabs not available - optional feature")
 
70
 
71
  try:
72
  from ultralytics import YOLO
@@ -155,30 +158,53 @@ class NanoBananaApp:
155
 
156
  if response.status_code == 200:
157
  result = response.json()
158
- logger.info(f"Freepik response data: {result}")
159
 
160
  # Handle different possible response formats
161
  if 'data' in result and len(result['data']) > 0:
162
- if 'url' in result['data'][0]:
163
- image_url = result['data'][0]['url']
164
- elif 'image_url' in result['data'][0]:
165
- image_url = result['data'][0]['image_url']
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  else:
167
- return None, "Freepik API: No image URL in response"
 
 
 
 
 
 
 
 
 
 
168
  elif 'image_url' in result:
169
  image_url = result['image_url']
 
 
 
 
170
  elif 'url' in result:
171
  image_url = result['url']
 
 
 
 
172
  else:
173
- return None, f"Freepik API: Unexpected response format - {result}"
174
-
175
- # Download the generated image
176
- img_response = requests.get(image_url, timeout=30)
177
- if img_response.status_code == 200:
178
- generated_image = Image.open(io.BytesIO(img_response.content))
179
- return generated_image, "🍌 Generated with Freepik API"
180
- else:
181
- return None, f"Failed to download image: {img_response.status_code}"
182
 
183
  elif response.status_code == 401:
184
  return None, "Invalid or expired Freepik API key"
@@ -381,9 +407,9 @@ class NanoBananaApp:
381
 
382
  for attempt in range(API_RETRY_COUNT):
383
  try:
384
- buffered = io.BytesIO()
385
  image.save(buffered, format='PNG', quality=85)
386
- image_bytes = buffered.getvalue()
387
 
388
  if len(image_bytes) > 10 * 1024 * 1024:
389
  return image, "Image too large. Please use a smaller image."
@@ -391,11 +417,11 @@ class NanoBananaApp:
391
  try:
392
  response = self.gemini_model.generate_content([
393
  analysis_prompt,
394
- {
395
- 'mime_type': 'image/png',
396
- 'data': base64.b64encode(image_bytes).decode('utf-8')
397
- }
398
- ])
399
  except Exception as img_error:
400
  if "API_KEY_INVALID" in str(img_error) or "API key not valid" in str(img_error):
401
  logger.warning("API key doesn't support image processing, using demo mode")
@@ -473,7 +499,7 @@ class NanoBananaApp:
473
  return prompts.get(style, prompts["realistic"])
474
 
475
  def generate_voice_optional(self, text):
476
- if not ELEVENLABS_API_KEY:
477
  return None
478
  try:
479
  audio = generate(text=text, voice="Rachel", model="eleven_monolingual_v1")
 
63
  if ELEVENLABS_API_KEY:
64
  set_api_key(ELEVENLABS_API_KEY)
65
  logger.info("ElevenLabs configured")
66
+ elevenlabs_available = True
67
  else:
68
  logger.info("ElevenLabs not configured - optional feature")
69
+ elevenlabs_available = False
70
  except ImportError:
71
  logger.info("ElevenLabs not available - optional feature")
72
+ elevenlabs_available = False
73
 
74
  try:
75
  from ultralytics import YOLO
 
158
 
159
  if response.status_code == 200:
160
  result = response.json()
161
+ logger.info(f"Freepik response data keys: {list(result.keys())}")
162
 
163
  # Handle different possible response formats
164
  if 'data' in result and len(result['data']) > 0:
165
+ data_item = result['data'][0]
166
+
167
+ # Check if we have base64 data directly
168
+ if 'base64' in data_item:
169
+ try:
170
+ image_data = base64.b64decode(data_item['base64'])
171
+ generated_image = Image.open(io.BytesIO(image_data))
172
+ return generated_image, "🍌 Generated with Freepik Gemini 2.5 Flash"
173
+ except Exception as e:
174
+ logger.error(f"Error decoding base64 image: {e}")
175
+ return None, f"Error processing generated image: {str(e)}"
176
+
177
+ # Check for image URL
178
+ elif 'url' in data_item:
179
+ image_url = data_item['url']
180
+ elif 'image_url' in data_item:
181
+ image_url = data_item['image_url']
182
  else:
183
+ return None, "Freepik API: No image data or URL found in response"
184
+
185
+ # If we have a URL, download it
186
+ if 'image_url' in locals():
187
+ img_response = requests.get(image_url, timeout=30)
188
+ if img_response.status_code == 200:
189
+ generated_image = Image.open(io.BytesIO(img_response.content))
190
+ return generated_image, "🍌 Generated with Freepik API"
191
+ else:
192
+ return None, f"Failed to download image: {img_response.status_code}"
193
+
194
  elif 'image_url' in result:
195
  image_url = result['image_url']
196
+ img_response = requests.get(image_url, timeout=30)
197
+ if img_response.status_code == 200:
198
+ generated_image = Image.open(io.BytesIO(img_response.content))
199
+ return generated_image, "🍌 Generated with Freepik API"
200
  elif 'url' in result:
201
  image_url = result['url']
202
+ img_response = requests.get(image_url, timeout=30)
203
+ if img_response.status_code == 200:
204
+ generated_image = Image.open(io.BytesIO(img_response.content))
205
+ return generated_image, "🍌 Generated with Freepik API"
206
  else:
207
+ return None, f"Freepik API: Unexpected response format - available keys: {list(result.keys())}"
 
 
 
 
 
 
 
 
208
 
209
  elif response.status_code == 401:
210
  return None, "Invalid or expired Freepik API key"
 
407
 
408
  for attempt in range(API_RETRY_COUNT):
409
  try:
410
+ buffered = io.BytesIO()
411
  image.save(buffered, format='PNG', quality=85)
412
+ image_bytes = buffered.getvalue()
413
 
414
  if len(image_bytes) > 10 * 1024 * 1024:
415
  return image, "Image too large. Please use a smaller image."
 
417
  try:
418
  response = self.gemini_model.generate_content([
419
  analysis_prompt,
420
+ {
421
+ 'mime_type': 'image/png',
422
+ 'data': base64.b64encode(image_bytes).decode('utf-8')
423
+ }
424
+ ])
425
  except Exception as img_error:
426
  if "API_KEY_INVALID" in str(img_error) or "API key not valid" in str(img_error):
427
  logger.warning("API key doesn't support image processing, using demo mode")
 
499
  return prompts.get(style, prompts["realistic"])
500
 
501
  def generate_voice_optional(self, text):
502
+ if not elevenlabs_available or not ELEVENLABS_API_KEY:
503
  return None
504
  try:
505
  audio = generate(text=text, voice="Rachel", model="eleven_monolingual_v1")