Code

Python: Bilder mit Replicate generieren

Generiere Featured Images programmatisch mit Replicate API. Optimiere und lade Bilder automatisch in S3-Storage hoch.

Python: Bilder mit Replicate generieren

Ü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

Weitere Vorlagen