import requests
import concurrent.futures
from pathlib import Path
API_KEY = "sk_live_xxxxxxxxxxxxx"
BASE_URL = "https://stagingspaces-production-6fb7.up.railway.app"
def stage_image(image_path, style="modern"):
"""Stage a single image. Returns result dict."""
with open(image_path, "rb") as f:
response = requests.post(
f"{BASE_URL}/api/v1/stage",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"image": f},
data={"style": style}
)
result = response.json()
result["source_file"] = str(image_path)
return result
def batch_stage(image_dir, style="modern", max_workers=5):
"""Stage all images in a directory concurrently."""
images = list(Path(image_dir).glob("*.jpg")) + list(Path(image_dir).glob("*.png"))
results = []
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {
executor.submit(stage_image, img, style): img
for img in images
}
for future in concurrent.futures.as_completed(futures):
result = future.result()
if result.get("success"):
print(f"✓ {result['source_file']} → {result['claim_code']}")
else:
print(f"✗ {result['source_file']}: {result.get('error')}")
results.append(result)
return results
# Stage all images in a folder
results = batch_stage("./property_photos/", style="scandinavian", max_workers=5)
# Collect claim codes
claim_codes = [r["claim_code"] for r in results if r.get("success")]
print(f"\nStaged {len(claim_codes)} images")
print(f"Claim codes: {', '.join(claim_codes)}")