COMFYUI 基礎 · 第 10 課
讓一張圖動起來:用 Wan2.2 做第一段固定鏡頭短片
把起始圖片接進 Wan2.2 TI2V-5B,避開 Load Image 被略過的陷阱,分清尺寸、影格數與 fps,再用同一張圖比較兩個小動作。附官方素材、A/B 工作流與驗收紀錄。
開始前,準備這些
- 已有可啟動且支援 Wan2.2 原生節點的 ComfyUI
- 能匯入 JSON、下載模型並上傳 JPG/PNG;執行前先確認設備容量
這一課,你會學會
- 確認圖片真的送入 start_image,而非誤跑文字生影片
- 設定接近起始圖片比例的尺寸,分清 length 與 fps
- 保存兩段單一變因短片、原圖、JSON 與自己的觀察紀錄
本課目錄
圖片已放進工作流,為什麼影片卻不像它?
接續第九課的角色主視覺,這次把「一張圖」接到「一段時間」。先練一個小動作與固定鏡頭,學會確認圖片有參與、保存設定,以及檢查角色在後面幾個影格是否變形。完成物是 A/B 兩段約1.71秒的無聲短片、原始圖片、各自的JSON與觀察單;設備還沒準備好時,可以先完成接線與設定核對,生成欄位保留未執行。
先開啟ComfyUI 官方 Wan2.2 教學、ComfyUI 下載及官方重包模型入口。本課選 Wan2.2 TI2V-5B:同一個5B模型可做文字或圖片生影片,使用內建節點,不需要付費API節點。自行執行仍有設備、電力及儲存成本;使用租用主機或 Comfy Cloud,費用依該服務方案另計,本文沒有代為開通或付費。
下載本課 A 組 JSON、官方貓咪起始 JPG及觀察單。JSON 不包含圖片與模型權重;圖片仍要在自己的 Load Image 上傳並選取。為讓每位讀者有相同起點,先用附圖完成一次,再換自己的角色。使用第九課圖片前,仍須遵守其來源模型的使用條件;Wan 的授權不會自動改變上游素材的權利。
第 1 步:先辨認模型版本與設備條件
本課需要三個模型檔。依官方模板指定的來源下載,放到 ComfyUI 的 models 下對應目錄:
- diffusion_models/wan2.2_ti2v_5B_fp16.safetensors:擴散模型下載
- text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors:文字編碼器下載
- vae/wan2.2_vae.safetensors:VAE下載
文字編碼器的下載路徑含 Wan_2.1,這是官方5B模板指定的來源。VAE則是 wan2.2_vae;別拿14B工作流常見的 wan_2.1_vae 替換。5B也不使用14B的 high_noise/low_noise 兩個專家模型。下載前先核對整個檔名與所屬節點,避免為同一課抓下不相干的大檔案。
三個官方檔案頁分別標示約10GB、6.74GB及1.41GB,合計約18.2GB(十進位、依頁面四捨五入值估算)。這是模型下載儲存量,不是所需顯示記憶體;還要為程式、系統記憶體、暫存與影片留空間。官方JSON備註列出的9.31/6.27/1.31較接近二進位容量顯示,勿與檔案頁的十進位GB直接混加。
Comfy 文件表示,5B配合其原生 offloading 機制「應可」適用8GB VRAM;Wan 原始程式的參考命令則標示至少24GB。兩者使用的執行配置不同,不能把數字當作同一套保證。本課沒有硬體實跑,亦不提供生成時間承諾。先確認你能執行該版本與模型;若容量不確定,先停在工作流檢查,不必勉強排程。
Wan2.2-TI2V-5B模型卡標示 Apache-2.0,須遵守授權條件;輸入圖片、人物肖像、商標等權利仍需另外確認。本課保存 Comfy 範例庫的 MIT 授權及 Wan 範例庫的 Apache-2.0 授權文字。
應該看到: 三個模型檔各在正確目錄,Load Diffusion Model、Load CLIP、Load VAE 選單能找到它們;Load CLIP 的 type 是 wan。
第 2 步:匯入 A 組,先解決 Load Image 被略過的陷阱
在 Workflow → Open 匯入 A 組JSON。也可以到模板庫搜尋「Wan2.2 5B」對照,但要注意:本課保存的官方原始模板裡,Load Image 的 mode=4,處於 Bypass(略過)狀態。即使看得到接線或圖片檔名,圖片也未必送進生成流程。
本課A/B已把它改成正常執行的 mode=0。請確認節點沒有被略過,再按圖片上傳按鈕,選取下載的 wan-official-i2v-input.JPG。看到貓咪預覽後,沿著 IMAGE → Wan22ImageToVideoLatent 的 start_image 檢查連線。MASK不接。
如果你開的是官方原始JSON,先選中 Load Image,再依官方教學用 Ctrl+B 切換Bypass狀態,或從節點選單取消略過;不同平台以介面顯示的快捷鍵為準。本課JSON已啟用,別再盲按一次把它關回去。重要的是最後狀態,不是按過某個鍵。
看見缺失節點時,先比對官方更新說明及啟動日誌。本課用的 Wan22ImageToVideoLatent、CreateVideo、SaveVideo 都是核心節點;不要因為找不到就隨意裝同名外掛。JSON內的舊版本註記是範例保存資訊,不代表已驗證你目前的版本相容。
應該看到: 貓咪預覽、正常啟用的 Load Image,以及連到 start_image 的 IMAGE線。三項都確認後,才往下設定。
第 3 步:先配合直式圖片,分清尺寸和影格數
本課A/B的 Wan22ImageToVideoLatent 設為:width 704、height 928、length 41、batch_size 1。這是為練習挑選的配置;官方原始模板則是1280×704、121影格。兩份都提供下載,別把它們混成同一套預設。
附圖是832×1104的直式圖,704×928的比例與它接近,而且寬高都是32的整倍數。已核對的核心節點會依目標尺寸做等比例縮放與置中裁切;比例不同時,邊緣可能被切掉。把直式貓咪直接交給1280×704的橫式設定,裁切會明顯得多,提示詞也不會把被切掉的內容自動「接回原圖」。
若換自己的角色圖,先檢查臉、頭頂、背包與手腳離邊界是否太近。想控制裁切位置,可先回到第七課的尺寸與裁切準備接近目標比例的新圖,保留原檔;不要為塞滿畫面把角色拉長。
length是要生成的影格數。本節點的長度欄位以4為步進,配合時間壓縮方式,先用 4n+1 的值,例如41、81、121。Create Video 保持 24 fps;41影格編成24fps,名義播放時長約41÷24=1.71秒。從第一個影格到最後一個影格的時間點跨度是40÷24秒,兩個數字的計算定義不同。
不要靠把fps改小來取得更多動作。 同一組41影格若改成12fps,播放時間變長、動作變慢,但沒有多生成中間影格。想生成約5秒的內容,另存新組後,把length改為121並保留24fps;負載也會改變,要重新觀察環境能否執行。
第 4 步:讓提示詞只負責一個小動作
A組的正向 CLIP Text Encode 已換成原創練習句,也可從提示詞文字檔複製:
A white cat wearing amber sunglasses at the seaside. The cat turns its head slightly to its left. The camera remains fixed. One continuous shot, gentle natural movement, consistent lighting.
意思是:海邊戴琥珀色太陽眼鏡的白貓,略向自己的左邊轉頭;鏡頭固定、單一連續畫面、動作輕微、光線一致。這裡的「左」以角色自身為準,通常與觀看者的畫面左右相反。模型仍可能理解錯方向,這正是要記錄的項目,不先把生成結果當成正確答案。
第一段先避免同時要求跑步、轉身、鏡頭繞行和場景切換。短短41影格,先驗收一個看得懂的小動作。負向提示詞沿用官方模板,A/B保持完全相同;本課不把調負向文字也混進比較。
核對 KSampler:seed 20261011、執行後seed行為 fixed、steps 20、cfg 5、sampler uni_pc、scheduler simple、denoise 1。ModelSamplingSD3 的 shift 保留 8。這些取樣條件來自官方模板,seed與固定模式由本課設定;即使名稱有SD3,也不要隨意換成另一類模型節點。
和第九課不同,這裡CFG為5,不要直接套用上一課CFG=1的負向分支結論。固定seed是為減少實驗變因,仍不保證跨版本、不同硬體或所有操作產生相同像素。
第 5 步:先保存設定,再只執行 A 一次
沿主線看一次:起始圖 → Wan22ImageToVideoLatent → KSampler → VAE Decode → Create Video → Save Video。模型、VAE及兩組文字條件也要維持原有接線,不只檢查圖片這一條。
Save Video 的filename_prefix為 video/greenbean-lesson10-A,format與codec沿用 auto。Create Video沒有接入audio,本課輸出不包含聲音;不要把文字描述的海浪或音樂當成音軌已生成。
先另存自己的A組JSON,確認模型與圖片後按Run一次。第一次載入模型及影片生成所需時間依環境而異,沒有固定倒數可保證。若顯示記憶體不足,停止連續送出相同排程,保留錯誤與環境資料;不要把本課「少一點影格」當作所有顯卡都能跑的保證。
輸出出現後,保存實際影片檔,並記下容器/副檔名。auto的實際輸出應以你的檔案為準,不預填成某一種格式。用播放器查看頭、中、尾:
- 起始構圖: 還看得到原圖中的白貓、眼鏡與海邊嗎?有無意外裁掉頭部?
- 動作: 貓是否真的略向自己的左邊轉頭?還是只晃動背景?
- 穩定性: 眼鏡是否融化、耳朵是否多出一隻、臉部紋理是否閃爍?
- 鏡頭: 明明要求固定鏡頭,是否仍發生推近、平移或切鏡?
觀察單先填實際影片檔名、尺寸、影格數與fps;播放器沒有顯示的項目填unknown,別把設定值冒充檔案實測。尚未成功生成就保留not_run。第一個影格也不保證和原JPG逐像素一致,因為已經過裁切、VAE及生成處理。
第 6 步:B 只改方向,才知道提示詞改了什麼
保留A,另開B組JSON,重新確認同一張起始圖。B只把提示詞中的 to its left 改成 to its right;輸出前綴改成B方便保存,其餘生成條件完全相同。
先另存B的JSON,再執行一次。把兩段從頭播放到尾,分開記「要求的方向是否出現」與「角色/背景是否穩定」。B不是在A影片上修改,而是從同一張JPG重新生成,因此同seed也不保證只改頭部方向、其他像素都不動。
如果兩段都不太動,先確認Load Image有啟用,實際輸入與正向文字正確,再看整段影片而非只看縮圖。仍沒有方向變化就如實記錄,下一輪只調整一個條件。不要同時改seed、影格數、CFG和鏡頭,否則無法說清楚是哪一項帶來差異。
完成A/B後,才選做自己的角色版本:用你有權使用的角色原圖、改成符合該圖的主體描述、選近似比例尺寸,另存為新實驗。它同時更換輸入圖片及描述,不能當作A/B的第三組單一變因比較。本課不承諾一張角色圖能在所有鏡頭中維持身份一致。
卡住時,先依現象排查
- 成功生成,卻像重新畫了一個場景: 檢查Load Image是否Bypass、預覽是否正確,以及IMAGE有沒有進start_image
- 模型選單找不到檔案: 核對三個資料夾、完整檔名及下載是否完成;不是把所有模型都放checkpoints
- 畫面被裁掉: 檢查輸入比例與width/height,不要只看檔案大小;這個節點會置中裁切
- Missing Nodes: 先查核心版本與啟動匯入錯誤,本課不需要WanVideoWrapper等第三方節點
- 輸出只有約1.7秒: 本課是41影格/24fps;這是預定短測,不是輸出少了五秒
- 影片變慢,卻沒有新動作: 檢查是否只改Create Video的fps;它不會幫你補出新影格
- 每次比較差異很大: 檢查KSampler是否仍是fixed、起始圖是否同一檔,以及版本與取樣設定是否被改動
- 沒有聲音: 本課audio未連線,須日後另外製作或加入音軌
完成檢查與小練習
保存一個資料夾,包含原JPG、A影片+A JSON、B影片+B JSON,以及你填好的觀察單。紀錄實際ComfyUI版本、模型檔名、圖片檔名和未解決問題,才方便下次延長影片或更換鏡頭。
- Load Image有圖片檔名,是否代表一定用了它?不一定,還要確認沒有Bypass、預覽正確且接到start_image
- 為什麼本課不用官方1280×704的預設?為了配合附圖的直式比例,減少裁切;這是教學配置,未做GPU實跑
- 把41影格從24fps改成12fps,會多出41張新影格嗎?不會,只會改播放速度與名義時長
- A/B應保持哪些條件相同?起始圖、seed及其fixed模式、尺寸、影格數、fps、模型、取樣與負向條件;只改正向動作方向
- 兩次都沒按照方向轉頭,能填「比較完成,效果成功」嗎?應記錄已執行但未達動作目標,將操作完成與生成品質分開
下載、版本與來源
- 官方原始5B工作流:原始位元組保留,Load Image仍為Bypass、1280×704、121影格及randomize seed
- A:略向左轉頭、B:略向右轉頭:已啟用Load Image,改用704×928、41影格、固定seed
- 提示詞、空白觀察單、使用與授權說明、來源及SHA256
- Comfy範例MIT授權、Wan範例Apache-2.0授權
- 固定版本官方模板、Wan22ImageToVideoLatent核心實作、影片編碼核心節點
查核日期:2026年10月11日(台灣)。本站原創提示詞、觀察單與兩張示意圖採CC0;衍生JSON保留原工作流授權。已檢查JSON可解析、節點及連線、圖片解碼、資源雜湊及A/B單一變因,沒有執行模型推論、沒有本課生成結果或GPU計時,也未完成ComfyUI介面匯入與手機瀏覽實測。請把本頁當成有來源與可下載練習檔的操作指引,生成是否成功仍要以自己的實際執行紀錄判斷。