سير عمل InfiniteTalk في ComfyUI وواجهة API: أفاتار بمزامنة الشفاه مجانًا
InfiniteTalk نموذج مفتوح المصدر يحوّل صورة واحدة وملف صوتي إلى فيديو متحدث بشفاه وحركة رأس وجسم متزامنة. يعرض هذا المقال سير عمل ComfyUI والإعدادات المهمة، واستدعاءات API المستضافة وذاتية الاستضافة، وبديلًا يعمل في المتصفح لتحقيق نتائج سريعة.
لديك صورة، وتسجيل صوتي، ولا يوجد فريق تصوير. يحوّل InfiniteTalk هذين الملفين إلى فيديو يتحدث فيه الشخص الموجود في الصورة فعليًا، مع تحرك الشفاه والرأس والكتفين بتزامن مع الصوت. أوزان النموذج مفتوحة بموجب ترخيص Apache 2.0، ويمكن تشغيلها عبر ComfyUI على وحدة GPU الخاصة بك، ويمكن لواجهة API مستضافة تشغيلها عندما لا تملك وحدة GPU. يستعرض هذا المقال المسارين معًا: سير عمل ComfyUI خطوة بخطوة، والإعدادات التي تغيّر النتيجة، واستدعاءات API، وبديلًا بلا تثبيت على PicassoIA لأيام لا يستحق فيها الإعداد المحلي هذا الجهد.
ماذا يفعل InfiniteTalk فعليًا
InfiniteTalk من فريق MeiGen-AI. نُشرت الشيفرة والأوزان والتقرير التقني للعامة في 19 أغسطس 2025. بُني النموذج على checkpoint بحجم 14B بدقة 480P من نموذج Wan 2.1 لتحويل الصورة إلى فيديو، ويقرأ الصوت عبر مشفّر wav2vec2. يدعم الإخراج بدقة 480p و720p معًا.
للنموذج جذور سابقة. نموذج MultiTalk السابق للفريق نفسه كان يعالج فيديوهات المحادثة المدفوعة بالصوت، ولا يزال غلاف ComfyUI يدرجه بجانب InfiniteTalk. ما يضيفه InfiniteTalk هو توليد بلا حدود للطول، وحركة الجسم كاملًا فوق حركة الشفاه. يشير قسم الأخبار في المستودع الآن أيضًا إلى عائلة خلفاء تُسمى LongCat Video Avatar، فتحقق منها عندما تريد أحدث الأوزان من الفريق نفسه.
الدبلجة بالإطارات المتفرقة بكلمات بسيطة
تعيد معظم أدوات مزامنة الشفاه القديمة رسم رقعة حول الفم وتترك بقية الوجه ثابتًا. فتبدو النتيجة كقناع يتحدث. يستخدم InfiniteTalk ما يسميه مؤلفوه دبلجة الفيديو بالإطارات المتفرقة: يحتفظ بعدد قليل من إطارات المرجع للحفاظ على ثبات الهوية، ثم يولّد ما بينها بحيث تتبع الشفاه، وحركات الرأس، والوضعية، وتعابير الوجه الصوت. تُبنى المقاطع الطويلة من نوافذ سياق متسلسلة، بنافذة افتراضية من 81 إطارًا، وهذا ما يسمح لفيديو متحدث بأن يتجاوز بكثير المدة المعتادة البالغة خمس ثوانٍ.
وضع الصورة مقابل وضع الفيديو
الوضع
ما تقدمه
الأفضل لـ
المدة
تحويل الصورة إلى فيديو
صورة واحدة وملف صوتي
المعلّقون، والأفاتار، والمغنون، والمتحدثون باسم جهات
حتى دقيقة تقريبًا قبل أن تتراجع الجودة
تحويل الفيديو إلى فيديو
مقطع موجود وصوت جديد
الدبلجة، واستبدال الصوت، والحفاظ على حركة الكاميرا
بلا حدود من حيث المبدأ
💡 ابدأ بوضع الصورة. يحتاج إلى أقل عدد من المدخلات، ويفشل بأكثر الطرق وضوحًا، فترى ما تفعله إعدادات الصوت قبل إدخال فيديو مصدر في المعادلة.
هل هو مجاني حقًا؟
الترخيص مجاني. الحوسبة ليست كذلك. هذا الفرق هو ما يحدد المسار الذي ينبغي أن تختاره.
المسار
ما يكلّف
ما تتنازل عنه
ComfyUI محليًا
وحدة GPU الخاصة بك والكهرباء
وقت الإعداد، وحدود VRAM، وعمليات تصيير بطيئة على البطاقات الصغيرة
API مستضافة
تُحتسب بالثانية من الإخراج. وقت كتابة هذا المقال، تدرج WaveSpeed نحو 0.03 دولار للثانية بدقة 480p و0.06 دولار للثانية بدقة 720p، حتى 10 دقائق لكل مهمة
إنفاق مستمر، وتحكم أقل في المخطط
نموذج متصفح على PicassoIA
تجربة مجانية على عدة نماذج لمزامنة الشفاه
نموذج مختلف، ومقاطع أقصر
المجاني له ثمن زمني أيضًا. يستهلك التثبيت الأول محليًا جزءًا من فترة العصر في تثبيت العقد والتنزيلات، وملفات النموذج وحدها تبلغ عشرات الجيجابايت. قيّم المسار بحسب عدد المقاطع التي تخطط لإنتاجها، لا بحسب سعره المعلن.
نظرة واقعية على العتاد
يعتمد InfiniteTalk على نموذج فيديو بحجم 14 مليار معامل، لذلك تكون الذاكرة أول حاجز تصطدم به. يتضمن المستودع الرسمي وضع VRAM منخفضًا (--num_persistent_param_in_dit 0) يُبقي الأوزان خارج وحدة GPU بين الخطوات، إضافة إلى checkpoint مكمّم بصيغة FP8. وفي ComfyUI تؤدي ملفات FP8 المحجّمة من Kijai الغرض نفسه. لن أذكر رقمًا لاستهلاك VRAM، لأنه يتغير مع الدقة وعدد الإطارات والتكميم. اختبر بمقطع 480p مدته 10 ثوانٍ قبل أن تخصص مساءً كاملًا لتصيير 720p.
بناء سير عمل ComfyUI
يأتي دعم ComfyUI من خلال حزمة ComfyUI-WanVideoWrapper من Kijai. يعرض قالب InfiniteTalk الموسيقي على comfy.org ثلاث حزم من العقد: WanVideoWrapper وaudio-separation-nodes-comfyui وcomfyui-kjnodes. ومعًا تتيح هذه الحزم تحميل النموذج، وفصل الصوت عن الموسيقى، وتتولّى إدارة مدخلات الصور ومقاطع الفيديو ومخرجاتها.
تثبيت العقد المخصصة
افتح طرفية في ComfyUI/custom_nodes واستنسخ الغلاف.
ثبّت متطلباته باستخدام pip install -r requirements.txt (النسخ المحمولة تستخدم مفسّر python_embeded المرفق بدلًا من ذلك).
أضف حزمتي فصل الصوت وkjnodes عبر ComfyUI Manager.
أعد تشغيل ComfyUI ليتم تسجيل العقد الجديدة.
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper
pip install -r ComfyUI-WanVideoWrapper/requirements.txt
تنزيل ملفات النموذج
يرتب ملف README الخاص بالغلاف النماذج في أربعة مجلدات: text_encoders، وclip_vision، وdiffusion_models، وvae. يضيف InfiniteTalk أوزانه الخاصة فوق النموذج الأساسي Wan 2.1.
الملف
المجلد
ملاحظات
Wan 2.1 لتحويل الصورة إلى فيديو 14B
diffusion_models
النموذج الأساسي، وتوجد نسخ FP8 محجّمة
مشفّر النص UMT5
text_encoders
المشفّر نفسه الذي تستخدمه سير عمل Wan 2.1
VAE الخاص بـ Wan 2.1
vae
مشترك مع سير عمل Wan الأخرى
نموذج CLIP vision
clip_vision
يقرأ صورة المرجع
InfiniteTalk Single (fp16، نحو 5.1 جيجابايت)
diffusion_models
متحدث واحد
InfiniteTalk Multi (fp16، نحو 5.1 جيجابايت)
diffusion_models
متحدثان
يوجد ملفا InfiniteTalk في مجلد InfiniteTalk من مستودع WanVideo_comfy التابع لـ Kijai على Hugging Face. إذا بقيت قائمة المحمّل فارغة بعد نسخ الملف، فأعد تحميل ComfyUI وتحقق من المجلد مرة أخرى.
توصيل المخطط
تتغير أسماء العقد بين إصدارات الغلاف، لذا افتح سير العمل النموذجي من مجلد example_workflows الخاص بالغلاف بدلًا من البناء من الصفر. المنطق واحد دائمًا:
فرع الصورة: حمّل صورة الشخص، وغيّر حجمها إلى الدقة المستهدفة، وشفّرها باستخدام نموذج CLIP vision.
فرع الصوت: حمّل الصوت، وافصل الصوت البشري عن أي موسيقى، ومرره عبر مشفّر wav2vec2 للحصول على تضمينات الصوت.
فرع النموذج: حمّل النموذج الأساسي Wan 2.1، وأضف أوزان InfiniteTalk كنموذج إضافي، وأضف LoRA للسرعة إن أردت.
أداة أخذ العينات: مرّر تضمينات الصورة وتضمينات النص وتضمينات الصوت إلى أداة أخذ العينات، ثم فك الترميز عبر VAE.
الإخراج: ادمج الإطارات مع الصوت الأصلي في ملف MP4.
💡 غيّر الحجم قبل أخذ العينات. الصورة الشخصية التي لا تطابق نسبة العرض إلى الارتفاع المستهدفة تُمط أو تُقص بطرق تبدو كمزامنة شفاه سيئة، لكنها في الحقيقة مدخل سيئ.
تجهيز الصوت والصورة الشخصية
المخطط نصف النتيجة فقط. الملفان المدخلان يحددان الباقي.
صوت يتزامن بنظافة
الصوت البشري وحده هو المدخل الأكثر أمانًا. فالموسيقى الخلفية تحت الصوت تُربك أشكال الفم، ولهذا يتضمن قالب ComfyUI عُقد فصل الصوت التي تستخرج الغناء من المزيج. اقطع الصمت الزائد من البداية، ووازن مستوى الصوت، وصدّره بصيغة WAV كلما أمكن.
لا يوجد تسجيل؟ ولّد الصوت بدلًا منه. يحوّل Speech 2.8 HD وElevenLabs v3 النص إلى تعليق صوتي نظيف يمكنك إدخاله مباشرة في فرع الصوت.
تفقد الصورة جودتها بعد نحو دقيقة، لذا اكتب للمشاهد لا للمونولوجات. قسّم النص الطويل إلى أجزاء بطول 20 إلى 40 ثانية، وصيّر كل جزء من الصورة الشخصية نفسها وبقيمة البذرة نفسها، ثم ادمجها في أي محرر فيديو. القطع عند توقف يُخفي الوصلة، والصورة الشخصية المكررة تحافظ على ثبات الهوية من مشهد إلى آخر.
صورة مصدر تنجح
الصورة الشخصية هي الإطار الأول لأفاتارك، لذا ينتقل كل عيب عبر الفيديو كله.
واجه الكاميرا، مع فم مرتاح أو مغلق برفق.
أظهر الكتفين، لأن InfiniteTalk يحرّك الوضعية أيضًا.
استخدم إضاءة متساوية بلا ظل حاد يقطع الشفاه.
أبعد اليدين والميكروفونات والشعر عن الفم.
لا توجد صورة مناسبة؟ أنشئ واحدة باستخدام Seedream 4.5 واطلب تعبيرًا محايدًا، ومواجهة للكاميرا، وضوءًا ناعمًا من نافذة.
الإعدادات التي تغيّر النتيجة
يقوم مقياسان بمعظم العمل: عدد خطوات أخذ العينات ومقياس CFG للصوت. كل شيء آخر ثانوي حتى يعملا بشكل صحيح.
الخطوات وCFG الصوت
تستخدم الإعدادات الافتراضية الرسمية 40 خطوة لأخذ العينات. أما CFG للصوت، فيوصي المستودع بقيمة بين 3 و5 لمزامنة شفاه جيدة. عمليًا، القيمة الأعلى تدفع الفم إلى اتباع الصوت بصرامة أكبر، والدفع بها بعيدًا جدًا يجعل الوجه متصلبًا.
الإعداد
القيمة الابتدائية
وظيفته
خطوات أخذ العينات
40
التفاصيل والاستقرار، وتصيير أبطأ
CFG الصوت
من 3 إلى 5
قوة الرابط بين الصوت والفم
الدقة
480p أولًا، و720p للنسخ النهائية
الحدة مقابل زمن التصيير والذاكرة
البذرة
ثابتة أثناء الاختبار
تتيح لك تغيير إعداد واحد في كل مرة
الوضع السريع مع LoRA
أربعون خطوة على نموذج 14B بطيئة. يصف المستودع طريقتين مختصرتين: 8 خطوات مع LoRA من FusionX، أو 4 خطوات مع LoRA من lightx2v. عند استخدام LoRA للسرعة، خفّض CFG للصوت إلى نحو 2. ستفقد بعض التفاصيل الدقيقة في الجلد والشعر، لذا استخدم الوضع السريع للمسودات وللمقاطع التي ستُعرض بحجم صغير، ثم أعد تصيير أفضل نسخة بخطوات كاملة.
عندما يسير التصيير بشكل خاطئ، تشير الأعراض عادةً إلى سبب واحد:
العرَض
السبب المحتمل
الحل
الشفاه تنحرف عن الصوت
CFG الصوت منخفض جدًا، أو موسيقى تحت الصوت
ارفع CFG الصوت نحو 4 وافصل الصوت البشري
وجه متصلب يشبه القناع
CFG الصوت مرتفع جدًا
خفّضه بنقطة واحدة وأعد التصيير بالبذرة نفسها
الوجه يتغير ببطء في مقطع طويل
الوضع بالصورة يتجاوز حده البالغ نحو دقيقة
قسّم النص إلى مشاهد وادمجها في محرر
خطأ نفاد الذاكرة
الدقة أو نافذة الإطارات كبيرة جدًا
انزل إلى 480p، أو استخدم ملفات FP8، أو فعّل إعداد VRAM المنخفض
الفم ينفتح أثناء الصمت
أنفاس أو ضجيج الغرفة يُقرآن ككلام
نظّف الصوت ببوابة ضوضاء قبل تحميله
💡 ثبّت البذرة وغيّر شيئًا واحدًا. صيّر الخمس ثوانٍ نفسها بدقة 480p أثناء ضبط CFG الصوت. وعندما يبدو الفم صحيحًا، ارفع الدقة.
استدعاء InfiniteTalk عبر API
تحوّل API عملية يدوية تستغرق عشر دقائق إلى استدعاء دالة. لديك خياران، بحسب من يملك وحدة GPU.
مسار API المستضافة
تستضيف WaveSpeed نموذج InfiniteTalk على POST https://api.wavespeed.ai/api/v3/wavespeed-ai/infinitetalk. يأخذ الطلب image، وaudio، وresolution (480p أو 720p)، وseed، وprompt اختياريًا، وmask_image اختياريًا. تحصل على معرّف التنبؤ، ثم تستعلم عن عنوان النتيجة كل ثانيتين تقريبًا حتى تصل الحالة إلى حالة نهائية. يُقبل صوت يصل إلى 10 دقائق لكل مهمة.
import os, time, requests
TOKEN = os.environ["WAVESPEED_TOKEN"]
HEADERS = {"Authorization": f"Bearer {TOKEN}"}
BASE = "https://api.wavespeed.ai/api/v3"
job = requests.post(
f"{BASE}/wavespeed-ai/infinitetalk",
headers=HEADERS,
json={
"image": "https://example.com/portrait.jpg",
"audio": "https://example.com/voice.wav",
"resolution": "480p",
},
).json()["data"]
while True:
result = requests.get(f"{BASE}/predictions/{job['id']}/result", headers=HEADERS).json()["data"]
if result["status"] not in ("created", "processing"):
break
time.sleep(2)
print(result["status"], result.get("outputs"))
اعتبر المقتطف نقطة بداية، وتحقق من صفحة النموذج لمعرفة المخطط الحالي قبل النشر. توقّع انتظارًا يتراوح تقريبًا بين 10 و30 ثانية لكل ثانية من الفيديو، بحسب الدقة وازدحام الطابور.
نقطة ComfyUI الخاصة بك
يعمل ComfyUI بالفعل كخادم HTTP، لذا يصبح سير عملك واجهة API لحظة تصديره. استخدم Save (API Format)، وغيّر أسماء ملفات الصورة والصوت داخل JSON، ثم أرسله إلى /prompt.
import json, time, requests
COMFY = "http://127.0.0.1:8188"
workflow = json.load(open("infinitetalk_api.json"))
prompt_id = requests.post(f"{COMFY}/prompt", json={"prompt": workflow}).json()["prompt_id"]
while True:
history = requests.get(f"{COMFY}/history/{prompt_id}").json()
if prompt_id in history:
break
time.sleep(3)
print(history[prompt_id]["outputs"])
يجب أن تكون الملفات المذكورة في سير العمل موجودة مسبقًا في مجلد input الخاص بـ ComfyUI، أو أن تُرفع إلى نقطة /upload/image أولًا. احصل على الفيديو الناتج من /view باستخدام اسم الملف المدرج في المخرجات.
💡 لا تعرّض المنفذ 8188 للإنترنت المفتوح أبدًا. لا يحتوي ComfyUI على تسجيل دخول. ضعه خلف VPN أو وكيل عكسي مع مصادقة قبل أن يتمكن أي شخص من خارج شبكتك من الوصول إليه.
أين تفيد الأفاتارات فعلًا
يكسب الأفاتار المتحدث مكانه عندما يكون تسجيل شخص أمام الكاميرا بطيئًا أو مكلفًا أو مستحيل التكرار.
الدروس والتدريب: صورة واحدة للمدرّب ونص واحد تمنحانك وحدات فيديو متسقة، وتعديل جملة يعني إعادة التصيير لا إعادة التصوير.
جولات المنتجات: يمكن لأفاتار متحدث باسم جهة أن يشرح الصفحة نفسها بعدة لغات عبر تبديل الصوت.
مقاطع البودكاست: يتعامل نموذج Multi مع متحدثين اثنين، وهذا مناسب لمقتطفات المقابلات على وسائل التواصل الاجتماعي.
الموسيقى وأعمال الشخصيات: المغنون والشخصيات الرمزية والشخصيات المرسومة تعمل طالما أن الوجه ظاهر بوضوح.
💡 احصل على الإذن. حرّك وجهك أنت، أو شخصية مرخّصة، أو شخص وافق على ذلك، ووسم النتيجة بأنها مولّدة بالذكاء الاصطناعي عندما يمكن أن تُخلط بتسجيل حقيقي.
تجاوز الإعداد على PicassoIA
لا تستضيف PicassoIA نموذج InfiniteTalk بنفسها. لكنها تقدم عدة نماذج تجمع بين صورة وصوت وتحقق النوع نفسه من النتيجة في تبويب متصفح، دون عُقد أو تنزيلات أو حسابات VRAM.
الصف الأخير مهم إذا جئت من أجل الدبلجة من فيديو إلى فيديو: يعمل Lipsync 2 Pro على لقطات صوّرتها أنت بالفعل. والمسار المناسب يعتمد على المهمة:
اختر ComfyUI المحلي للمقاطع التي تتجاوز دقيقة، ونموذج Multi مع متحدثين اثنين، والدبلجة التي تحافظ على حركات الكاميرا الأصلية، أو التحكم الكامل في كل إعداد من إعدادات أداة أخذ العينات.
اختر API المستضافة عندما يحتاج تطبيقك إلى إنشاء أفاتارات عند الطلب، وتفضّل الدفع بالثانية على إبقاء وحدة GPU مشغّلة.
اختر نموذجًا من PicassoIA عندما تريد نتيجة خلال العشر دقائق القادمة، وعندما يكون صوتك أقل من 35 ثانية، وعندما تكون السرعة أهم من مطابقة المظهر الدقيق لنموذج InfiniteTalk.
ارفع صورة شخصية أمامية. الوجوه ولقطات الجسم كاملًا والشخصيات المرسومة تعمل جميعها.
ارفع ملف MP3 أو WAV أقل من 35 ثانية. الصوت بالإنجليزية والإسبانية واليابانية والكورية والصينية والإندونيسية مدعوم.
أضف أمرًا نصيًا اختياريًا لتوجيه حركة الكاميرا أو الإيماءات، مثل "تبتسم وتهز رأسها قليلًا".
فعّل الوضع السريع للمسودات السريعة، أو اتركه معطّلًا لأفضل تفاصيل.
اضبط بذرة إذا أردت إعادة إنتاج نتيجة، ثم وَلّد الفيديو وحمّله.
💡 اكتب النص أولًا، وسجّله بـ Speech 2.8 HD، واحرص على أن يبقى كل مقطع تحت حد 35 ثانية. المقاطع القصيرة المدموجة معًا تبدو أكثر طبيعية من لقطة طويلة واحدة.
أنشئ أول أفاتار لك
اختر صورة شخصية واحدة، وسجّل 20 ثانية من الصوت، وشغّل المقطع نفسه على نموذجين أو ثلاثة. مقارنة النتائج جنبًا إلى جنب تستغرق دقائق، وتخبرك بأكثر مما تخبرك به أي مواصفات. افتح Omni Human 1.5 أو Fabric 1.0 على PicassoIA، وارفع ملفيك، وشاهد صورة ثابتة تبدأ بالكلام. وإذا أردت لاحقًا خط عمل محليًا، فستعرف مسبقًا كيف يبدو المدخل الجيد.