#!/usr/bin/env python3
"""短剧《雨夜撞上陆总后》第十一集 - 场景图生成"""
import json, urllib.request, time
COMFYUI_URL = "http://127.0.0.1:8188"
BEST_MODEL = "SDXL 1.0\\9527DetailRealistic_v30.safetensors"
NEGATIVE_PROMPT = "(worst quality, low quality:1.4), deformed, distorted, disfigured, bad anatomy, bad proportions, ugly, noisy, blurry, low contrast, watermark, text, signature, cartoon, anime, 3d, painting, drawing, illustration, western features, blue eyes, blonde hair, extra fingers, malformed hands, missing limbs, floating limbs, disconnected limbs, nsfw, nude, naked"
SCENES = [
    {"id": "01", "name": "闺蜜陪伴", "seed": 13001, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), two beautiful chinese women in bridal shop, best friends talking, wedding dress background, warm lighting, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP11_01_Best_Friends_"},
    {"id": "02", "name": "试穿婚纱", "seed": 13002, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in elegant wedding dress, friend watching emotionally, bridal shop, soft lighting, photorealistic, 8k, full body shot", "output_prefix": "Drama_EP11_02_Dress_Trial_"},
    {"id": "03", "name": "定制婚纱", "seed": 13003, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), stunning custom wedding dress with lace details, elegant design, bridal shop display, soft lighting, photorealistic, 8k, full body shot", "output_prefix": "Drama_EP11_03_Custom_Dress_"},
    {"id": "04", "name": "惊喜现身", "seed": 13004, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man appearing in bridal shop doorway, woman surprised, romantic moment, shop interior, photorealistic, 8k, wide shot", "output_prefix": "Drama_EP11_04_Surprise_Appearance_"},
    {"id": "05", "name": "甜蜜互动", "seed": 13005, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple in bridal shop, man holding woman's hand, friend watching with smile, romantic atmosphere, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP11_05_Sweet_Interaction_"},
    {"id": "06", "name": "闺蜜祝福", "seed": 13006, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), two women hugging emotionally, bridal shop background, tears of joy, friendship moment, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP11_06_Friend_Blessing_"},
    {"id": "07", "name": "幸福笑容", "seed": 13007, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman smiling happily in wedding dress, engagement ring visible, close-up portrait, soft lighting, photorealistic, 8k", "output_prefix": "Drama_EP11_07_Happy_Smile_"},
    {"id": "08", "name": "回家路上", "seed": 13008, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple walking hand in hand on street at dusk, romantic atmosphere, city background, warm lighting, photorealistic, 8k, wide shot", "output_prefix": "Drama_EP11_08_Walk_Home_"}
]
def submit_prompt(scene):
    prompt_data = {"prompt": {"3": {"class_type": "KSampler", "inputs": {"cfg": 7.0, "denoise": 1, "latent_image": ["5", 0], "model": ["4", 0], "negative": ["7", 0], "positive": ["6", 0], "sampler_name": "dpmpp_2m", "scheduler": "karras", "seed": scene["seed"], "steps": 30}}, "4": {"class_type": "CheckpointLoaderSimple", "inputs": {"ckpt_name": BEST_MODEL}}, "5": {"class_type": "EmptyLatentImage", "inputs": {"batch_size": 1, "height": scene["height"], "width": scene["width"]}}, "6": {"class_type": "CLIPTextEncode", "inputs": {"clip": ["4", 1], "text": scene["prompt"]}}, "7": {"class_type": "CLIPTextEncode", "inputs": {"clip": ["4", 1], "text": NEGATIVE_PROMPT}}, "8": {"class_type": "VAEDecode", "inputs": {"samples": ["3", 0], "vae": ["4", 2]}}, "9": {"class_type": "SaveImage", "inputs": {"filename_prefix": scene["output_prefix"], "images": ["8", 0]}}}}
    try:
        req = urllib.request.Request(f'{COMFYUI_URL}/prompt', data=json.dumps(prompt_data).encode('utf-8'), headers={'Content-Type': 'application/json'}, method='POST')
        with urllib.request.urlopen(req, timeout=10) as response:
            result = json.loads(response.read().decode('utf-8'))
            return True, result.get('prompt_id', 'unknown')
    except Exception as e:
        return False, str(e)
def main():
    print("=" * 70); print("🎬 短剧《雨夜撞上陆总后》第十一集 - 场景图生成"); print("=" * 70)
    print(f"\n📦 使用模型:{BEST_MODEL}"); print(f"📊 场景数量:{len(SCENES)} 个"); print("=" * 70)
    print("\n📡 检查 ComfyUI 连接...")
    try:
        req = urllib.request.Request(f'{COMFYUI_URL}/queue', method='GET')
        with urllib.request.urlopen(req, timeout=5) as response:
            queue = json.loads(response.read().decode('utf-8'))
            print(f"✅ ComfyUI 连接成功"); print(f"   当前队列:{len(queue.get('queue_running', []))} 运行中,{len(queue.get('queue_pending', []))} 等待中")
    except Exception as e:
        print(f"❌ 无法连接 ComfyUI: {e}"); return
    print("\n" + "=" * 70); print("🚀 开始提交生成任务..."); print("=" * 70)
    success_count = 0
    for i, scene in enumerate(SCENES, 1):
        print(f"\n[{i}/{len(SCENES)}] {scene['name']}"); success, result = submit_prompt(scene)
        if success: print(f"   ✅ 提交成功 (Prompt ID: {result})"); success_count += 1
        else: print(f"   ❌ 提交失败:{result}"); time.sleep(0.5)
    print("\n" + "=" * 70); print("📊 生成结果"); print("=" * 70); print(f"✅ 成功:{success_count}/{len(SCENES)}")
    if success_count > 0: print(f"\n💾 图片将保存到:ComfyUI/output/\n   文件名前缀:Drama_EP11_XX_场景名_\n\n🌐 查看进度:http://127.0.0.1:8188")
    print("\n" + "=" * 70); print("\n📋 场景清单:"); print("-" * 70)
    for scene in SCENES: print(f"  {scene['id']}. {scene['name']} - {scene['output_prefix']}")
    print("-" * 70)
if __name__ == "__main__":
    main()