4737fc9dd8
Generated diverse set of professional pet photos covering: - Large breeds: German Shepherds (3), Golden Retrievers (2), Labradors (1) - Medium breeds: Beagle, Cocker Spaniel, Boxer, Bulldog, Corgi, Dachshund, English Springer Spaniel, Husky - Small breeds: Maltese, Shih Tzu, Pomeranian, Poodle, Pug, Yorkshire Terrier - Mixed breeds: 4 variations Total demo pet images: 55 (11MB) Puggle-specific: 4 images for the 250+ seeded Puggles This maximizes the MiniMax image generation quota to provide a rich, diverse visual library for the grooming demo site. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
153 lines
7.4 KiB
Python
153 lines
7.4 KiB
Python
#!/usr/bin/env python3
|
|
import base64
|
|
import requests
|
|
import os
|
|
import json
|
|
import time
|
|
from datetime import datetime
|
|
|
|
api_key = os.environ.get("MINIMAX_API_KEY")
|
|
if not api_key:
|
|
raise ValueError("MINIMAX_API_KEY environment variable not set")
|
|
|
|
url = "https://api.minimax.io/v1/image_generation"
|
|
headers = {"Authorization": f"Bearer {api_key}"}
|
|
|
|
os.makedirs("minimax-output", exist_ok=True)
|
|
|
|
# Comprehensive list of dog breeds and variations for diverse demo data
|
|
dog_prompts = [
|
|
# Large breeds
|
|
("german-shepherd-alert", "German Shepherd dog with alert expression, standing confidently, professional pet photography, studio lighting, photorealistic"),
|
|
("golden-retriever-happy", "Golden Retriever with joyful expression, sitting, golden coat, natural daylight, professional pet photography, photorealistic"),
|
|
("labrador-running", "Black Labrador Retriever running towards camera, outdoor park setting, dynamic pose, professional pet photography, photorealistic"),
|
|
("german-shepherd-sitting", "German Shepherd sitting in front of studio backdrop, professional portrait, studio lighting, photorealistic"),
|
|
("golden-retriever-lying", "Golden Retriever lying down on grass, peaceful expression, outdoor natural lighting, professional pet photography, photorealistic"),
|
|
|
|
# Medium breeds
|
|
("beagle-curious", "Beagle with curious expression, sitting, outdoor garden setting, professional pet photography, photorealistic"),
|
|
("cocker-spaniel-groomed", "Cocker Spaniel freshly groomed with fluffy coat, happy expression, professional grooming studio, photorealistic"),
|
|
("english-springer-spaniel", "English Springer Spaniel in natural outdoor setting, alert pose, professional pet photography, photorealistic"),
|
|
("boxer-playful", "Boxer dog with playful expression, standing, muscular build, professional studio lighting, photorealistic"),
|
|
("bulldog-gentle", "English Bulldog with gentle expression, sitting, studio backdrop, professional pet photography, photorealistic"),
|
|
|
|
# Small breeds
|
|
("maltese-fluffy", "Maltese dog with white fluffy coat, sitting, groomed appearance, professional pet photography, studio lighting, photorealistic"),
|
|
("shih-tzu-groomed", "Shih Tzu with long groomed coat, sitting pretty, professional grooming studio, photorealistic"),
|
|
("pomeranian-alert", "Pomeranian with alert expression, standing, fluffy coat, professional pet photography, photorealistic"),
|
|
("yorkshire-terrier", "Yorkshire Terrier with silky coat, sitting, professional grooming environment, photorealistic"),
|
|
("pug-curious", "Pug with curious expression, sitting, studio lighting, professional pet photography, photorealistic"),
|
|
|
|
# Specialty breeds
|
|
("poodle-standard-groomed", "Standard Poodle with professionally groomed coat, standing in show stance, professional grooming studio, photorealistic"),
|
|
("dachshund-long", "Long-haired Dachshund, lying down, relaxed pose, professional pet photography, photorealistic"),
|
|
("corgi-happy", "Welsh Corgi with happy expression, standing, professional outdoor setting, photorealistic"),
|
|
("husky-alert", "Siberian Husky with alert expression, sitting, professional pet photography, studio lighting, photorealistic"),
|
|
("german-shepherd-lying", "German Shepherd lying down in relaxed pose, indoor setting, professional pet photography, photorealistic"),
|
|
|
|
# Mixed/rescue variations
|
|
("mixed-breed-brown", "Brown and white mixed breed dog, friendly expression, sitting, professional pet photography, photorealistic"),
|
|
("mixed-breed-black", "Black mixed breed dog with gentle eyes, standing, outdoor natural lighting, photorealistic"),
|
|
("mixed-breed-spotted", "Spotted mixed breed dog, playful pose, outdoor park setting, professional pet photography, photorealistic"),
|
|
("terrier-mix-sitting", "Terrier mix dog, alert expression, sitting, professional studio backdrop, photorealistic"),
|
|
("spaniel-mix-outdoor", "Spaniel mix dog in outdoor garden, relaxed pose, natural daylight, professional pet photography, photorealistic"),
|
|
|
|
# Additional variations
|
|
("labrador-golden", "Golden Labrador Retriever, calm expression, standing in professional pose, studio lighting, photorealistic"),
|
|
("labrador-black-sitting", "Black Labrador Retriever sitting, gentle expression, professional pet photography, photorealistic"),
|
|
("rottweiler-calm", "Rottweiler with calm expression, sitting, professional studio, photorealistic"),
|
|
("doberman-alert", "Doberman Pinscher with alert expression, standing, professional pet photography, photorealistic"),
|
|
("german-shepherd-side", "German Shepherd in side profile, standing, professional outdoor setting, photorealistic"),
|
|
]
|
|
|
|
print(f"Generating {len(dog_prompts)} unique dog images...")
|
|
print(f"Start time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
print("")
|
|
|
|
generated = 0
|
|
failed = 0
|
|
|
|
for i, (filename_base, prompt) in enumerate(dog_prompts, 1):
|
|
filename = f"dog-{filename_base}.png"
|
|
filepath = f"minimax-output/{filename}"
|
|
|
|
# Check if already exists
|
|
if os.path.exists(filepath):
|
|
size = os.path.getsize(filepath)
|
|
print(f"[{i:2d}/{len(dog_prompts)}] ✓ {filename} (already exists, {size} bytes)")
|
|
generated += 1
|
|
continue
|
|
|
|
print(f"[{i:2d}/{len(dog_prompts)}] Generating {filename}...", end=" ", flush=True)
|
|
|
|
payload = {
|
|
"model": "image-01",
|
|
"prompt": prompt,
|
|
"aspect_ratio": "1:1",
|
|
"response_format": "base64",
|
|
}
|
|
|
|
try:
|
|
response = requests.post(url, headers=headers, json=payload, timeout=120)
|
|
|
|
# Check for quota errors
|
|
if response.status_code == 429:
|
|
print(f"✗ QUOTA EXCEEDED")
|
|
print(f"\nQuota limit reached after {generated} successful generations")
|
|
break
|
|
|
|
response.raise_for_status()
|
|
|
|
data = response.json()
|
|
if "data" in data and "image_base64" in data["data"]:
|
|
images = data["data"]["image_base64"]
|
|
|
|
with open(filepath, "wb") as f:
|
|
f.write(base64.b64decode(images[0]))
|
|
|
|
file_size = os.path.getsize(filepath)
|
|
print(f"✓ ({file_size} bytes)")
|
|
generated += 1
|
|
else:
|
|
print(f"✗ Unexpected response format")
|
|
failed += 1
|
|
|
|
except requests.exceptions.Timeout:
|
|
print(f"✗ Timeout")
|
|
failed += 1
|
|
except requests.exceptions.RequestException as e:
|
|
if "429" in str(e) or "quota" in str(e).lower():
|
|
print(f"✗ QUOTA EXCEEDED")
|
|
print(f"\nQuota limit reached after {generated} successful generations")
|
|
break
|
|
else:
|
|
print(f"✗ {type(e).__name__}")
|
|
failed += 1
|
|
except Exception as e:
|
|
print(f"✗ {type(e).__name__}")
|
|
failed += 1
|
|
|
|
time.sleep(0.5) # Small delay between requests
|
|
|
|
print("")
|
|
print(f"End time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
print(f"✓ Successfully generated: {generated}")
|
|
print(f"✗ Failed: {failed}")
|
|
print(f"\nCopying images to demo-pets directory...")
|
|
|
|
# Copy all generated images to demo-pets
|
|
import subprocess
|
|
result = subprocess.run(
|
|
["cp", "-v", "minimax-output/dog-*.png", "apps/web/public/demo-pets/"],
|
|
capture_output=True,
|
|
text=True
|
|
)
|
|
|
|
if result.returncode == 0:
|
|
# Count files in demo-pets
|
|
import glob
|
|
demo_pets = glob.glob("apps/web/public/demo-pets/dog-*.png")
|
|
print(f"✓ Copied to demo-pets. Total dog images: {len(demo_pets)}")
|
|
else:
|
|
print(f"Note: Copy result - {result.stderr}")
|