#!/usr/bin/env python3
"""
短剧《雨夜撞上陆总后》第六集 - 关键场景图片生成
"""

import json
import urllib.request
import 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"

# 第六集关键场景 (8 个)
SCENES = [
    {
        "id": "01",
        "name": "机场归来",
        "seed": 8001,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in beige trench coat walking out of airport, pulling luggage, wearing sunglasses, confident expression, three years later, success story, airport terminal background, cinematic lighting, photorealistic, 8k, full body shot, low angle",
        "output_prefix": "Drama_EP6_01_Airport_Return_"
    },
    {
        "id": "02",
        "name": "颁奖典礼",
        "seed": 8002,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in black evening gown on award stage, holding trophy, elegant posture, golden banquet hall background, audience applauding, dramatic stage lighting, inspirational moment, photorealistic, 8k, wide shot, low angle",
        "output_prefix": "Drama_EP6_02_Award_Ceremony_"
    },
    {
        "id": "03",
        "name": "获奖感言",
        "seed": 8003,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman giving acceptance speech at microphone, confident expression, holding trophy, black evening gown, stage spotlight, determined eyes, inspirational moment, photorealistic, 8k, medium shot, shallow depth of field",
        "output_prefix": "Drama_EP6_03_Acceptance_Speech_"
    },
    {
        "id": "04",
        "name": "台下注视",
        "seed": 8004,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man in tuxedo standing in audience, holding wine glass, looking up at stage with deep eyes, complex expression, banquet hall background, dramatic lighting, emotional moment, photorealistic, 8k, medium shot, side profile",
        "output_prefix": "Drama_EP6_04_Watching_From_Below_"
    },
    {
        "id": "05",
        "name": "庆功重逢",
        "seed": 8005,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man and beautiful chinese woman facing each other at banquet, both holding wine glasses, tension in air, elegant evening wear, dramatic lighting, romantic tension, photorealistic, 8k, medium shot, two characters",
        "output_prefix": "Drama_EP6_05_Reunion_Banquet_"
    },
    {
        "id": "06",
        "name": "强势宣言",
        "seed": 8006,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman with confident smile, challenging expression, black evening gown, banquet background, dramatic lighting, empowerment moment, photorealistic, 8k, close-up portrait, shallow depth of field",
        "output_prefix": "Drama_EP6_06_Bold_Declaration_"
    },
    {
        "id": "07",
        "name": "酒店工作",
        "seed": 8007,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman working on laptop in hotel room at night, focused expression, casual clothes, phone on desk showing text message, warm lamp lighting, professional atmosphere, photorealistic, 8k, medium shot",
        "output_prefix": "Drama_EP6_07_Hotel_Work_"
    },
    {
        "id": "08",
        "name": "男主计划",
        "seed": 8008,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man standing by office window at night, looking at distant hotel building, determined expression, black suit, city night view background, dramatic chiaroscuro lighting, obsessive look, photorealistic, 8k, medium shot, side profile",
        "output_prefix": "Drama_EP6_08_His_Plan_"
    }
]

def submit_prompt(scene):
    """提交单个场景到 ComfyUI"""
    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)
    
    # 检查 ComfyUI 连接
    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/")
        print(f"   文件名前缀:Drama_EP6_XX_场景名_")
        print(f"\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()