#!/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": 21001, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple in bedroom at night, man reading storybook to pregnant woman's belly, warm bedside lamp, intimate atmosphere, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP19_01_Storytime_Bedroom_"},
    {"id": "02", "name": "胎教音乐 CD", "seed": 21002, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man holding Mozart CD case, office setting, business attire, focused expression, photorealistic, 8k, close-up", "output_prefix": "Drama_EP19_02_Mozart_CD_"},
    {"id": "03", "name": "播放胎教音乐", "seed": 21003, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple sitting on sofa, woman resting on man's shoulder, CD player playing music, living room, warm afternoon light, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP19_03_Playing_Music_"},
    {"id": "04", "name": "听宝宝说话", "seed": 21004, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man kneeling in front of pregnant woman on sofa, ear against her belly, listening intently, woman blushing, living room, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP19_04_Listening_Belly_"},
    {"id": "05", "name": "客厅聊天", "seed": 21005, "width": 1216, "height": 832, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple sitting close on sofa, holding hands, pregnant woman smiling, living room, soft lighting, intimate conversation, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP19_05_Living_Room_Chat_"},
    {"id": "06", "name": "认真记笔记", "seed": 21006, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man writing in notebook, concentrated expression, bedroom setting, soft lighting, photorealistic, 8k, close-up", "output_prefix": "Drama_EP19_06_Taking_Notes_"},
    {"id": "07", "name": "擦眼泪", "seed": 21007, "width": 832, "height": 1216, "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man gently wiping woman's tears, intimate moment, soft lighting, emotional expression, photorealistic, 8k, close-up portrait", "output_prefix": "Drama_EP19_07_Wiping_Tears_"},
    {"id": "08", "name": "卧室夜话", "seed": 21008, "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 atmosphere, photorealistic, 8k, medium shot", "output_prefix": "Drama_EP19_08_Bedroom_Night_Talk_"}
]
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_EP19_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()