Python: Bilder mit Replicate generieren
Generiere Featured Images programmatisch mit Replicate API. Optimiere und lade Bilder automatisch in S3-Storage hoch.
Überblick
Automatisiere Bildgenerierung für deine programmatischen SEO-Seiten mit Replicate API. Dieses Beispiel zeigt wie du Bilder generierst, optimierst und in S3-Storage hochlädst.
Der Code
import os
import replicate
from io import BytesIO
from pathlib import Path
from PIL import Image
from dotenv import load_dotenv
# Environment-Variablen laden
load_dotenv()
# Replicate erwartet REPLICATE_API_TOKEN
if os.environ.get("REPLICATE_API_KEY"):
os.environ["REPLICATE_API_TOKEN"] = os.environ["REPLICATE_API_KEY"]
def generate_image_from_replicate(prompt: str) -> BytesIO:
"""
Generiere ein Bild mit Replicate API.
Args:
prompt: Der vollständige Bildgenerierungs-Prompt
Returns:
BytesIO-Objekt mit dem generierten Bild
"""
print(f"Rufe Replicate API auf...")
output = replicate.run(
"google/nano-banana-pro",
input={
"prompt": prompt,
"resolution": "1K",
"image_input": [],
"aspect_ratio": "16:9",
"output_format": "png",
"safety_filter_level": "block_only_high"
}
)
# Lese Bild in BytesIO-Buffer
image_data = BytesIO(output.read())
image_data.seek(0)
return image_data
def optimize_image(image_data: BytesIO, max_width: int = 1200, quality: int = 85) -> BytesIO:
"""
Optimiere Bild: Größe anpassen falls nötig, zu WebP konvertieren, komprimieren.
"""
img = Image.open(image_data)
# Konvertiere RGBA zu RGB falls nötig
if img.mode in ('RGBA', 'LA', 'P'):
background = Image.new('RGB', img.size, (255, 255, 255))
if img.mode == 'P':
img = img.convert('RGBA')
background.paste(img, mask=img.split()[-1] if img.mode == 'RGBA' else None)
img = background
elif img.mode != 'RGB':
img = img.convert('RGB')
# Größe anpassen falls größer als max_width
if img.width > max_width:
ratio = max_width / img.width
new_height = int(img.height * ratio)
img = img.resize((max_width, new_height), Image.Resampling.LANCZOS)
# Als WebP in Buffer speichern
output = BytesIO()
img.save(output, format='WEBP', quality=quality, method=6)
output.seek(0)
return output
def generate_and_optimize_image(prompt: str, slug: str) -> dict:
"""
Vollständiger Workflow: generieren, optimieren und Bilddaten zurückgeben.
"""
# Bild generieren
raw_image = generate_image_from_replicate(prompt)
# Optimieren
optimized_image = optimize_image(raw_image)
# Dateigröße ermitteln
optimized_image.seek(0, 2) # Zum Ende
file_size = optimized_image.tell()
optimized_image.seek(0) # Zurücksetzen
print(f"Generiert und optimiert: {file_size / 1024:.1f} KB")
return {
'data': optimized_image,
'size': file_size,
'format': 'webp'
}
# Beispiel-Nutzung
prompt = (
"Clean minimalist vector illustration, isometric perspective. "
"Magnifying glass hovering over a grid of interconnected keyword bubbles. "
"Dark charcoal background (#0a0a0b), bright green accent (#22c55e). "
"Modern SaaS aesthetic, 16:9, no text, high contrast"
)
result = generate_and_optimize_image(prompt, "keyword-research")
# Lokal speichern oder zu S3 hochladen
with open(f"{result['format']}_image.webp", "wb") as f:
f.write(result['data'].read())
Wichtige Features
- Replicate-Integration: Nutzt Replicate API für Bildgenerierung
- Bildoptimierung: Größenanpassung und Konvertierung zu WebP
- Speichereffizient: Nutzt BytesIO für In-Memory-Verarbeitung
- Brand-Guidelines: Enthält Brand-Farben und Stil in Prompts
- Batch-Verarbeitung: Kann mehrere Bilder in einer Schleife generieren
Nutzungs-Tipps
- Erstelle Prompt-Templates für konsistenten Stil
- Cache generierte Bilder um Neugenerierung zu vermeiden
- Lade zu S3/CDN für Produktionsnutzung hoch
- Überwache Replicate API-Kosten
- Teste verschiedene Modelle für beste Ergebnisse