#!/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": 19001, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple in bedroom morning, sunlight through window, man looking at woman's pregnant belly, warm intimate atmosphere, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP17_01_Morning_Bedroom_"},
    {"id": "02", "name": "医院等候", "seed": 19002, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), hospital obstetrics waiting room, pregnant women sitting, couple holding hands, modern hospital interior, photorealistic, 8k, wide shot", "output_prefix": "Drama_EP17_02_Hospital_Waiting_"},
    {"id": "03", "name": "B 超检查", "seed": 19003, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), ultrasound examination room, doctor performing ultrasound on pregnant woman, man watching screen emotionally, medical setting, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP17_03_Ultrasound_Exam_"},
    {"id": "04", "name": "B 超屏幕", "seed": 19004, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), ultrasound screen showing 12 week fetus, medical monitor, blurry but recognizable baby shape, close-up shot, photorealistic, 8k", "output_prefix": "Drama_EP17_04_Ultrasound_Screen_"},
    {"id": "05", "name": "花园讨论", "seed": 19005, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple sitting on garden bench at hospital, man holding ultrasound report, woman smiling, hospital garden, daytime, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP17_05_Garden_Discussion_"},
    {"id": "06", "name": "餐厅点菜", "seed": 19006, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple at restaurant, man ordering food from menu, pregnant woman watching, warm restaurant interior, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP17_06_Restaurant_Ordering_"},
    {"id": "07", "name": "贴 B 超单", "seed": 19007, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), man putting ultrasound photo on refrigerator, woman watching with smile, home kitchen, warm lighting, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP17_07_Fridge_Ultrasound_"},
    {"id": "08", "name": "夕阳相拥", "seed": 19008, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple embracing at home, sunset through window, pregnant woman in man's arms, romantic silhouette, warm lighting, photorealistic, 8k, wide shot", "output_prefix": "Drama_EP17_08_Sunset_Embrace_"}
]
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_EP17_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()
