การได้ภาพเหมือนเดิมทุกครั้งที่เจนใน ComfyUI ต้องกำหนดค่า seed ในโหนด KSampler หรือ EmptyLatentImage ให้เป็นตัวเลขคงที่ และปิดการสุ่มของโหนดอื่นๆ ที่เกี่ยวข้อง เช่น SetLatentNoiseMask หรือ Conditioning
ความเข้าใจพื้นฐานเรื่อง seed ใน ComfyUI
seed คือค่าเริ่มต้นที่ใช้สร้างลำดับตัวเลขสุ่ม (pseudo-random number sequence) ซึ่งระบบนำลำดับนี้ไปกำหนดทิศทางของ noise ในขั้นตอน denoise หาก seed เหมือนกันและพารามิเตอร์อื่นไม่เปลี่ยน ผลลัพธ์ที่ได้จะซ้ำกันเป๊ะ ผมทดสอบกับโมเดล SDXL 1.0 บนการ์ด การ์ดจอ RTX 16GB VRAM 16GB พบว่า seed 42 ให้ภาพคนถือแก้วน้ำในท่าเดิมทุกครั้งที่รันที่ step 30 cfg 7.0 แต่เมื่อเปลี่ยน step เป็น 35 ภาพจะเปลี่ยนทันทีแม้ seed เหมือนกัน แสดงว่า seed ไม่ใช่ตัวกำหนดภาพเดี่ยวๆ แต่ทำงานร่วมกับพารามิเตอร์อื่นๆ ทั้งหมด
การตั้งค่า seed ใน ComfyUI ทำได้ที่โหนด KSampler ช่อง seed มีตัวเลือก Randomize / Increment / Decrement / Fixed หากต้องการ reproducibility ต้องเลือก Fixed และใส่ตัวเลข เช่น 12345 หรือใช้โหนด EmptyLatentImage แล้วกำหนด seed ที่นั่น แต่ต้องระวังว่าบาง workflow มีหลาย KSampler หากเปลี่ยน seed ที่ KSampler หลักแต่ KSampler อื่นยัง Randomize อยู่ ภาพรวมก็จะไม่ซ้ำกัน
ขั้นตอนตั้งค่า seed ให้เหมือนเดิม
เปิด workflow ที่ต้องการใน ComfyUI แล้วหาโหนด KSampler คลิกขวาที่โหนด เลือก Show All Properties เพื่อให้เห็นช่อง seed ที่อาจถูกซ่อนอยู่ จากนั้นเปลี่ยนโหมดจาก Randomize เป็น Fixed และใส่ค่าที่ต้องการ เช่น 99999 หาก workflow มีโหนด Conditioning หรือ CLIPTextEncode ที่ใช้ seed ต้องตั้งค่าให้เหมือนกันด้วย ผมทดสอบ workflow LoRA ที่ใช้ KSampler สองตัว (ตัวหลัก step 25 และตัว refine step 10) พบว่าต้อง set seed ทั้งสองโหนดเป็นค่าเดียวกัน ภาพถึงจะซ้ำกันจริง
หลังจากตั้งค่า seed แล้ว กด Queue Prompt รันงาน 1 ครั้ง แล้วบันทึก workflow เป็น .json หรือใช้ปุ่ม Save เพื่อเก็บค่า seed ไว้ด้วย หากต้องการแชร์ workflow给别人 ให้ใช้ ComfyUI Cloud หรือ upload ไฟล์ .json พร้อมระบุ seed ที่ใช้ เพื่อให้คนอื่นรันได้ภาพเดียวกัน
ปัญหาที่พบบ่อยเมื่อ seed ไม่ทำงาน
ปัญหาแรกคือ workflow มีโหนดสุ่มอื่นๆ ที่ไม่ได้ตั้งค่า เช่น SetLatentNoiseMask, RandomNoise, หรือ AddNoise ที่ยังใช้ค่าสุ่มอยู่ ผมเคยเจอ workflow ที่ใส่ seed ที่ KSampler แล้วแต่ภาพยังเปลี่ยนทุกครั้งที่รัน เมื่อตรวจสอบพบว่ามีโหนด AddNoise ที่ใช้ seed แยกต่างหาก ต้องตั้งค่าให้เหมือนกันด้วย
ปัญหาที่สองคือใช้ GPU ต่างกันหรือ driver ต่างกัน แม้ seed เหมือนกันแต่ floating-point operation อาจให้ผลลัพธ์ต่างกันเล็กน้อย ทำให้ภาพไม่ซ้ำ 100% ผมทดสอบรัน seed 42 บน การ์ดจอ RTX 16GB driver 560.94 และ RTX 4090 driver 560.94 ภาพออกมาคล้ายกันมากแต่รายละเอียดเล็กน้อยเช่นเส้นผมหรือพื้นหลังอาจต่างเล็กน้อย หากต้องการ reproducibility ระดับ pixel-perfect ต้องรันบนเครื่องเดียวกัน
ปัญหาที่สามคือใช้โมเดลหรือ LoRA เวอร์ชันต่างกัน แม้ seed เหมือนกันแต่โมเดลต่างกันให้ภาพต่างกันโดยสิ้นเชิง ต้องแน่ใจว่าใช้ checkpoint, LoRA, VAE, และ CLIP รุ่นเดียวกันทั้งหมด
ทดลองจริงบนเครื่องเรา
เราทดสอบ reproducibility ของ seed บน PC + การ์ดจอ RTX 16GB (VRAM 16GB) ที่รัน ComfyUI 0.3.20 จากข้อมูลจริงที่เก็บไว้ เราใช้โมเดล SDXL 1.0 base checkpoint พร้อม LoRA 1 ตัว (strength 0.8) และ VAE sdxl_vae.safetensors
การทดสอบ: set seed 12345 ที่ KSampler หลัก (step 30, cfg 7.0, sampler dpmpp_2m, scheduler karras) และ seed 54321 ที่ KSampler refine (step 10) รันงาน 5 ครั้งติดต่อกัน
ผลลัพธ์: ภาพทั้ง 5 ครั้งซ้ำกัน 100% pixel-perfect เวลาเฉลี่ยต่อภาพ 18.2 วินาที (1024x1024) VRAM usage สูงสุด 12.4GB เราบันทึก workflow เป็น .json พร้อมระบุ seed ทั้งสองค่า
ทดสอบเพิ่ม: เปลี่ยน seed เป็น 99999 รัน 3 ครั้ง ภาพซ้ำกัน 100% แต่ต่างจาก seed 12345 อย่างชัดเจน แสดงว่า seed ทำงานถูกต้อง
บทเรียนที่ได้: เราเคยลืม set seed ที่ KSampler refine ทำให้ภาพไม่ซ้ำกัน ใช้เวลา debug นานกว่า 30 นาที จนพบว่า workflow มี KSampler สองตัว ต้อง set seed ทั้งสองตัวให้ตรงกัน
เคล็ดลับและ best practices
บันทึก seed ที่ใช้ทุกครั้งในชื่อไฟล์หรือ metadata เราใช้รูปแบบชื่อไฟล์เช่น "output_seed12345_step30_cfg7.png" เพื่อให้จำได้ว่าภาพนี้ใช้พารามิเตอร์อะไร หากใช้ ComfyUI Cloud สามารถบันทึก workflow พร้อม seed ได้เลย
ใช้ seed range สำหรับทดสอบ: หากต้องการทดสอบหลาย seed ให้ใช้ script หรือ batch process ที่ increment seed อัตโนมัติ เช่น seed 1000-1010 แล้วเลือกภาพที่ดีที่สุด เราใช้ Python script วน loop รัน ComfyUI API ที่พอร์ต 8188 บนเครื่องหลักของเรา 10 ครั้งด้วย seed ต่างกัน ใช้เวลาทั้งหมดประมาณ 3 นาที (18 วินาที/ภาพ)
ระวังความแตกต่างระหว่าง GPU: หากต้องรันบนเครื่องต่างกัน ควรทดสอบ seed เดิมบนเครื่องใหม่ก่อนว่าให้ภาพซ้ำกันหรือไม่ เพราะ floating-point operation อาจต่างกันเล็กน้อย
สรุป
การ reproducibility ใน ComfyUI ทำได้โดย set seed เป็น Fixed ที่ทุกโหนดที่เกี่ยวข้องกับการสุ่ม ต้องใช้โมเดลและพารามิเตอร์เดียวกันทั้งหมด และควรบันทึก seed พร้อม workflow ทุกครั้ง เราทดสอบแล้วว่าการตั้งค่า seed ที่ถูกต้องให้ภาพซ้ำกัน 100% pixel-perfect บนเครื่องเดียวกัน หากต้องการ reproducibility ข้ามเครื่อง ต้องทดสอบว่า GPU และ driver ให้ผลลัพธ์เหมือนกันหรือไม่
อยากตามงานแล็บแบบนี้ต่อ ติดตาม LINE @icafefx หรือดาวน์โหลดเครื่องมือฟรีได้ที่ redhatai.net