跳到正文
阿里雲開發者社區 AI·· 2 小時前AI 評分41

Wan2.2 + ComfyUI 本地製作外星人短片的完整實戰流程

Wan2.2+ComfyUI 本地制作外星人趣味感人短片全流程实战:分镜、角色一致性、批量渲染与后期自动化脚本

AI 導讀

Wan2.2 與 ComfyUI 可用於本地製作外星人短片,流程涵蓋分鏡、角色一致性、批量渲染及後期自動化腳本。範例以 Python 逐鏡提交工作流,等待渲染完成,供製作一段外星人與老人互動的短片。

正文
import requests
import json
import os
import time
COMFYUI_URL = "http://127.0.0.1:8188"
WORKFLOW_PATH = "./alien_shortfilm_workflow.json"
OUTPUT_DIR = "./output_clips"
os.makedirs(OUTPUT_DIR, exist_ok=True)
shot_list = [
    {
        "shot_id": 1,
        "prompt": "cute round alien, big watery black eyes, translucent pale blue skin, tiny tentacles on head, small broken UFO, dusk forest, golden hour rim light, cinematic soft focus, 9:16, slow subtle movement, no fast motion, emotional warm atmosphere, masterpiece, best quality, consistent character, same alien, round body, two big round eyes, translucent pale blue skin, tiny head tentacles",
        "neg_prompt": "deformed limbs, extra eyes, ugly, blurry, distorted face, text, watermark, fast shake, noisy, overexposed",
        "duration": 4
    },
    {
        "shot_id": 2,
        "prompt": "small alien peeking behind bush, looking at wooden cottage window, soft shadow, bokeh background, gentle wind sway leaves, slight body breathing motion, masterpiece, best quality, consistent character, same alien",
        "neg_prompt": "deformed, mutated, disfigured, sharp teeth, horror, harsh flash",
        "duration": 4
    },
    {
        "shot_id": 3,
        "prompt": "elderly grandpa, white hair, worn knit sweater, feeding sparrow on windowsill, warm indoor lamp light, cozy room depth of field, slow hand movement, masterpiece, best quality",
        "neg_prompt": "cartoon exaggeration, ugly face, broken hand, extra fingers",
        "duration": 5
    },
    {
        "shot_id": 4,
        "prompt": "close-up shot, grandpa eyes wide, surprise but calm, eye micro movement, warm lighting, shallow depth of field, masterpiece, best quality",
        "neg_prompt": "cross-eye, distorted iris, weird teeth",
        "duration": 5
    },
    {
        "shot_id": 5,
        "prompt": "grandpa put cookie on windowsill, slow gentle action, soft indoor light, shadow cast on window glass, masterpiece, best quality",
        "neg_prompt": "fast movement, trembling wildly, broken objects",
        "duration": 4
    },
    {
        "shot_id": 6,
        "prompt": "close-up alien big eyes, hesitate, fingertips slightly trembling, faint bioluminescence on skin, cool ambient twilight, subtle glow, masterpiece, best quality, consistent character, same alien",
        "neg_prompt": "over-bright, glare, messy pixel, limb twist",
        "duration": 4
    },
    {
        "shot_id": 7,
        "prompt": "night scene, alien leave glowing seed on windowsill, turn back to UFO, UFO lift off slowly, soft blue trail, starry sky, quiet atmosphere, masterpiece, best quality, consistent character, same alien",
        "neg_prompt": "explosion, bright flash, chaotic, sharp motion blur",
        "duration": 5
    },
    {
        "shot_id": 8,
        "prompt": "morning sun, blue glowing small flower on windowsill, cookie beside flower, soft morning haze, peaceful, warm tone, masterpiece, best quality",
        "neg_prompt": "dark, gloomy, wilted flower, ugly texture",
        "duration": 4
    }
]
def load_workflow():
    with open(WORKFLOW_PATH, "r", encoding="utf-8") as f:
        return json.load(f)
def queue_prompt(prompt):
    payload = {"prompt": prompt}
    r = requests.post(f"{COMFYUI_URL}/prompt", json=payload)
    return r.json()
def wait_for_execution(prompt_id):
    while True:
        res = requests.get(f"{COMFYUI_URL}/history/{prompt_id}")
        history = res.json()
        if prompt_id in history:
            return history[prompt_id]
        time.sleep(3)
if __name__ == "__main__":
    base_workflow = load_workflow()
    for shot in shot_list:
        print(f"开始提交镜号 {shot['shot_id']}")
        workflow = json.loads(json.dumps(base_workflow))
        # 替换工作流里正向、反向提示词节点,根据你自己节点ID修改
        workflow["6"]["inputs"]["text"] = shot["prompt"]
        workflow["7"]["inputs"]["text"] = shot["neg_prompt"]
        res = queue_prompt(workflow)
        prompt_id = res["prompt_id"]
        print(f"任务ID:{prompt_id},等待渲染完成")
        history_data = wait_for_execution(prompt_id)
        print(f"镜号{shot['shot_id']}渲染完成\n")
        time.sleep(2)
    print("✅ 全部镜头提交完成,去ComfyUI输出目录取出视频片段")

來源:阿里雲開發者社區 AI · developer.aliyun.com