feat(gtm): add aspect ratio & corporate design; fix(market): harden backend logging & json parsing
This commit is contained in:
23
helpers.py
23
helpers.py
@@ -256,11 +256,13 @@ def call_gemini_flash(prompt, system_instruction=None, temperature=0.3, json_mod
|
||||
raise ImportError("Keine Gemini Bibliothek verfügbar.")
|
||||
|
||||
@retry_on_failure
|
||||
def call_gemini_image(prompt, reference_image_b64=None):
|
||||
def call_gemini_image(prompt, reference_image_b64=None, aspect_ratio=None):
|
||||
"""
|
||||
Generiert ein Bild.
|
||||
- Mit Referenzbild: Gemini 2.5 Flash Image.
|
||||
- Ohne Referenzbild: Imagen 4.0.
|
||||
- NEU: Akzeptiert `aspect_ratio` (z.B. "16:9").
|
||||
- NEU: Wendet einen zentralen Corporate Design Prompt an.
|
||||
"""
|
||||
logger = logging.getLogger(__name__)
|
||||
api_key = _get_gemini_api_key()
|
||||
@@ -277,7 +279,7 @@ def call_gemini_image(prompt, reference_image_b64=None):
|
||||
except ImportError:
|
||||
raise ImportError("Pillow (PIL) fehlt. Bitte 'pip install Pillow' ausführen.")
|
||||
|
||||
logger.info("Start Image-to-Image Generation mit gemini-2.5-flash-image...")
|
||||
logger.info(f"Start Image-to-Image Generation mit gemini-2.5-flash-image. Seitenverhältnis: {aspect_ratio or 'default'}")
|
||||
|
||||
# Base64 zu PIL Image
|
||||
try:
|
||||
@@ -297,8 +299,12 @@ def call_gemini_image(prompt, reference_image_b64=None):
|
||||
"Keep the product 100% identical to the reference. "
|
||||
"Only adjust lighting and perspective to match the scene."
|
||||
)
|
||||
|
||||
# Hier können wir das Seitenverhältnis nicht direkt steuern,
|
||||
# da es vom Referenzbild abhängt. Wir könnten es aber in den Prompt einbauen.
|
||||
if aspect_ratio:
|
||||
full_prompt += f" The final image composition should have an aspect ratio of {aspect_ratio}."
|
||||
|
||||
# KEIN config mit response_mime_type="application/json", das verursacht Fehler!
|
||||
response = client.models.generate_content(
|
||||
model='gemini-2.5-flash-image',
|
||||
contents=[raw_image, full_prompt]
|
||||
@@ -315,8 +321,15 @@ def call_gemini_image(prompt, reference_image_b64=None):
|
||||
else:
|
||||
img_config = {
|
||||
"number_of_images": 1,
|
||||
"output_mime_type": "image/jpeg"
|
||||
"output_mime_type": "image/jpeg",
|
||||
}
|
||||
# Füge Seitenverhältnis hinzu, falls vorhanden
|
||||
if aspect_ratio in ["16:9", "9:16", "1:1", "4:3"]:
|
||||
img_config["aspect_ratio"] = aspect_ratio
|
||||
logger.info(f"Seitenverhältnis auf {aspect_ratio} gesetzt.")
|
||||
|
||||
# Wende zentralen Stil an
|
||||
final_prompt = f"{Config.CORPORATE_DESIGN_PROMPT}\n\nTask: {prompt}"
|
||||
|
||||
method = getattr(client.models, 'generate_images', None)
|
||||
if not method:
|
||||
@@ -335,7 +348,7 @@ def call_gemini_image(prompt, reference_image_b64=None):
|
||||
logger.info(f"Versuche Text-zu-Bild mit Modell: {model_name}")
|
||||
response = method(
|
||||
model=model_name,
|
||||
prompt=prompt,
|
||||
prompt=final_prompt,
|
||||
config=img_config
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user