#!/usr/bin/env python3 """Generate ten concept-sheet shared-identity character image pairs after export.""" from __future__ import annotations import requests BASE = "http://127.0.0.1:7890" TARGETS = [ ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 01 - Der Sturm", "Darrag"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 01 - Der Sturm", "Eolan"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 01 - Der Sturm", "Baronin Ira von Seewiesen"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 01 - Der Sturm", "Gamba"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 02 - Die Entdeckung", "Alrik von Blautann"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 02 - Die Entdeckung", "Andra"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 02 - Die Entdeckung", "Cindira"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 03 - Die Amazone", "Admiral Sanin"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 03 - Die Amazone", "Arthag"), ("Hohlbein & Hennen - DSA - Das Jahr des Greifen 03 - Die Amazone", "Anshelm"), ] def main() -> None: all_chars = requests.get(f"{BASE}/api/characters", timeout=30).json()["characters"] for book, name in TARGETS: item = next(c for c in all_chars if c.get("book") == book and c.get("name") == name) record = requests.get(f"{BASE}/api/characters/{item['id']}", timeout=30).json() sheet = record.get("sheet") or {} print(f"[{name}] generating concept profile + reference sheet", flush=True) response = requests.post( f"{BASE}/api/character-generate-consistent-images", json={ "profile_prompt": sheet.get("image_prompt", ""), "reference_prompt": sheet.get("concept_art_prompt", ""), "visual_style": "concept", "identity_image": record.get("image", ""), }, # The local Qwen graph renders the portrait and 3:2 sheet in # sequence; allow the app's 25-minute server-side deadline. timeout=1800, ) response.raise_for_status() result = response.json() record["image"] = result["profile"] record["sheet"] = {**sheet, "concept_art_image": result["reference"]} saved = requests.put(f"{BASE}/api/characters/{item['id']}", json=record, timeout=60) saved.raise_for_status() print(f"[{name}] saved", flush=True) print("TEN CHARACTER IMAGE SAMPLES COMPLETE", flush=True) if __name__ == "__main__": main()