#!/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": 24001, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man in office working on documents, secretary standing at door, luxury office interior, business attire, professional setting, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP22_01_Secretary_Report_"},
    {"id": "02", "name": "青梅竹马", "seed": 24002, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man with serious expression, frowning, office setting, business attire, concerned look, photorealistic, 8k, close-up", "output_prefix": "Drama_EP22_02_Serious_Expression_"},
    {"id": "03", "name": "情敌上门", "seed": 24003, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in elegant dress standing at door, smiling, home entrance, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP22_03_Rival_Arrival_"},
    {"id": "04", "name": "开门见面", "seed": 24004, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man opening door, seeing woman outside, surprised expression, home entrance, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP22_04_Door_Meeting_"},
    {"id": "05", "name": "陆总回应", "seed": 24005, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man with cold expression, serious look, determined eyes, home interior, photorealistic, 8k, close-up portrait", "output_prefix": "Drama_EP22_05_Cold_Response_"},
    {"id": "06", "name": "客厅对话", "seed": 24006, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple sitting on sofa, holding hands, pregnant woman looking at man, living room, warm afternoon light, intimate conversation, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP22_06_Living_Room_Talk_"},
    {"id": "07", "name": "眼眶微红", "seed": 24007, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), pregnant woman with tears in eyes, emotional expression, touched by husband's words, soft lighting, photorealistic, 8k, close-up portrait", "output_prefix": "Drama_EP22_07_Tearful_Touched_"},
    {"id": "08", "name": "卧室夜话", "seed": 24008, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple in bedroom at night, man sitting on bed touching woman's pregnant belly, moonlight through window, intimate conversation, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP22_08_Bedroom_Night_Final_"}
]
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_EP22_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()