Update main.py
Browse files
main.py
CHANGED
|
@@ -558,10 +558,12 @@ EXEMPLOS
|
|
| 558 |
# Se for imagem e result_type == meme
|
| 559 |
elif 'image' in content_type and title_text and result_data.get("result_type") == "meme":
|
| 560 |
try:
|
|
|
|
| 561 |
img_for_meme = cropped_file_path if cropped_file_path and os.path.exists(cropped_file_path) else temp_file.name
|
| 562 |
|
|
|
|
| 563 |
image_needs_correction = record.get("image_needs_correction", False)
|
| 564 |
-
if image_needs_correction:
|
| 565 |
print("🍌 Chamando Nano Banana Pro (Gemini) para limpar a imagem...")
|
| 566 |
clean_prompt = "Anexei uma imagem que pode ser um post de rede social, um meme, um screenshot ou qualquer composição visual que mistura texto com imagem. Sua única tarefa é limpar essa imagem, removendo tudo que não faz parte do conteúdo visual original. Remova completamente qualquer texto sobreposto, seja título, legenda, frase, username, arroba, logo ou qualquer marcação de outras páginas ou plataformas. Onde o texto estiver sobreposto diretamente na imagem, remova-o e reconstrua o fundo de forma coerente com o estilo visual ao redor. Preserve absolutamente tudo da imagem original: cores, iluminação, estilo artístico, traços, texturas, proporções, enquadramento, clima e contexto visual. Não altere, não melhore, não filtre e não modifique nada além do que for necessário para a remoção dos textos e marcas. Retorne apenas a imagem limpa, sem nenhum texto, sem nenhuma explicação, sem nenhum comentário. Só a imagem, mantendo a mesma proporção e tamanho."
|
| 567 |
nano_model = get_gemini_model("pro")
|
|
@@ -589,24 +591,31 @@ EXEMPLOS
|
|
| 589 |
else:
|
| 590 |
print("⚠️ Gemini não retornou imagem limpa. Usando a original.")
|
| 591 |
|
| 592 |
-
|
| 593 |
-
|
| 594 |
-
|
| 595 |
-
|
| 596 |
-
|
| 597 |
-
|
| 598 |
-
|
| 599 |
-
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
| 606 |
-
|
| 607 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 608 |
final_content_url = f"https://habulaj-recurve-api-img.hf.space/meme?{meme_params}"
|
| 609 |
-
print(f"✅ Meme API URL gerada: {final_content_url}")
|
| 610 |
except Exception as e:
|
| 611 |
print(f"⚠️ Erro ao gerar URL do meme: {e}")
|
| 612 |
|
|
|
|
| 558 |
# Se for imagem e result_type == meme
|
| 559 |
elif 'image' in content_type and title_text and result_data.get("result_type") == "meme":
|
| 560 |
try:
|
| 561 |
+
contains_image = record.get("contains_image", False)
|
| 562 |
img_for_meme = cropped_file_path if cropped_file_path and os.path.exists(cropped_file_path) else temp_file.name
|
| 563 |
|
| 564 |
+
# Nano Banana Pro: só roda se tiver imagem de apoio E precisar de correção
|
| 565 |
image_needs_correction = record.get("image_needs_correction", False)
|
| 566 |
+
if contains_image and image_needs_correction:
|
| 567 |
print("🍌 Chamando Nano Banana Pro (Gemini) para limpar a imagem...")
|
| 568 |
clean_prompt = "Anexei uma imagem que pode ser um post de rede social, um meme, um screenshot ou qualquer composição visual que mistura texto com imagem. Sua única tarefa é limpar essa imagem, removendo tudo que não faz parte do conteúdo visual original. Remova completamente qualquer texto sobreposto, seja título, legenda, frase, username, arroba, logo ou qualquer marcação de outras páginas ou plataformas. Onde o texto estiver sobreposto diretamente na imagem, remova-o e reconstrua o fundo de forma coerente com o estilo visual ao redor. Preserve absolutamente tudo da imagem original: cores, iluminação, estilo artístico, traços, texturas, proporções, enquadramento, clima e contexto visual. Não altere, não melhore, não filtre e não modifique nada além do que for necessário para a remoção dos textos e marcas. Retorne apenas a imagem limpa, sem nenhum texto, sem nenhuma explicação, sem nenhum comentário. Só a imagem, mantendo a mesma proporção e tamanho."
|
| 569 |
nano_model = get_gemini_model("pro")
|
|
|
|
| 591 |
else:
|
| 592 |
print("⚠️ Gemini não retornou imagem limpa. Usando a original.")
|
| 593 |
|
| 594 |
+
import urllib.parse
|
| 595 |
+
if contains_image:
|
| 596 |
+
# Tem imagem de apoio: faz upload e inclui image_url no meme
|
| 597 |
+
print("📸 Enviando imagem base do meme para recurve-save...")
|
| 598 |
+
with open(img_for_meme, 'rb') as img_f:
|
| 599 |
+
upload_resp = requests.post(
|
| 600 |
+
"https://habulaj-recurve-save.hf.space/upload",
|
| 601 |
+
files={'files': ('meme_base.jpg', img_f, 'image/jpeg')},
|
| 602 |
+
timeout=60
|
| 603 |
+
)
|
| 604 |
+
upload_resp.raise_for_status()
|
| 605 |
+
uploaded_img_url = upload_resp.json().get("url", "")
|
| 606 |
+
|
| 607 |
+
if uploaded_img_url:
|
| 608 |
+
meme_params = urllib.parse.urlencode({
|
| 609 |
+
"text": title_text,
|
| 610 |
+
"image_url": uploaded_img_url
|
| 611 |
+
})
|
| 612 |
+
final_content_url = f"https://habulaj-recurve-api-img.hf.space/meme?{meme_params}"
|
| 613 |
+
print(f"✅ Meme API URL gerada (com imagem): {final_content_url}")
|
| 614 |
+
else:
|
| 615 |
+
# Só texto, sem imagem de apoio: manda apenas o text
|
| 616 |
+
meme_params = urllib.parse.urlencode({"text": title_text})
|
| 617 |
final_content_url = f"https://habulaj-recurve-api-img.hf.space/meme?{meme_params}"
|
| 618 |
+
print(f"✅ Meme API URL gerada (só texto): {final_content_url}")
|
| 619 |
except Exception as e:
|
| 620 |
print(f"⚠️ Erro ao gerar URL do meme: {e}")
|
| 621 |
|