#
# مرخّص بموجب ترخيص Apache الإصدار 2.0 (المسمى "الترخيص")
# لا يجوز لك استخدام هذا الملف إلا وفقاً لشروط الترخيص.
# يمكنك الحصول على نسخة من الترخيص في
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# ما لم يقتضِ ذلك القانون المعمول به أو ما اتُّفق عليه كتابياً، البرمجيات
# تُوزَّع بموجب الرخصة على أساس "كما هي"،
# بلا أي ضمانات أو شروط من أي نوع، سواء صريحة أو ضمنية.
# راجع الترخيص لمعرفة اللغة المحددة التي تحكم الصلاحيات و
# قيود بموجب الترخيص. -->

# صدى

[Echo](https://github.com/jd-opensource/JoyAI-Echo) هو نموذج لتوليد مقاطع فيديو طويلة. يدعم إطارًا أوليًا نظيفًا اختياريًا، وفتحات ذاكرة مرتبة للصور/الصوت، ومُعيّن عشوائي بعدد خطوات قليلة لتقطير مطابقة التوزيع (DMD). يولّد خط الأنابيب فيديو وصوتًا متزامنين.

يُنفَّذ Echo على شكل [ModularPipeline](/docs/diffusers/main/ar/api/modular_diffusers/pipeline#diffusers.ModularPipeline) بحيث يمكن تشغيل كتل ترميز النص، وتكييف الذاكرة، وإزالة الضوضاء العشوائية عبر DMD، وفك الترميز كعملية متكاملة أو تركيبها بشكل مستقل.

## الاستدلال

قم بتحميل نقطة التفتيش الرسمية [jdopensource/JoyAI-Echo](https://huggingface.co/jdopensource/JoyAI-Echo) مباشرةً. يستخدم هذا النموذج مُشفِّر النص ومُقسِّم الرموز من [google/gemma-3-12b-it](https://huggingface.co/google/gemma-3-12b-it). مستودع Gemma محمي، لذا قبل تحميل خط الأنابيب، يجب عليك قبول ترخيصه والتحقق من هويتك لدى Hugging Face.

يستخدم النموذج المُطلَق 241 إطارًا في مثال الفيديو الطويل الخاص به. وتبقى إحداثيات RoPE للفيديو عند معدل التدريب البالغ 24 إطارًا في الثانية، بغض النظر عن معدل الحاوية الإخراجية.

```py
import torch
import torchaudio
from PIL import Image

from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import encode_video

manager = ComponentsManager()
pipe = ModularPipeline.from_pretrained("jdopensource/JoyAI-Echo", components_manager=manager)
pipe.load_components(dtype={"default": torch.bfloat16, "audio_vae": torch.float32})
manager.enable_auto_cpu_offload(device="cuda")
pipe.vae.enable_tiling()

first_frame = Image.open("first_frame.png").convert("RGB")
memory_images = [Image.open(path).convert("RGB") for path in ["memory_0.png", "memory_1.png"]]
memory_audio_with_rates = [torchaudio.load(path) for path in ["memory_0.wav", "memory_1.wav"]]
memory_audio = [waveform for waveform, _ in memory_audio_with_rates]
memory_audio_rates = [sample_rate for _, sample_rate in memory_audio_with_rates]

output = pipe(
    prompt="A cinematic dialogue scene in a quiet cafe.",
    image=first_frame,
    memory_images=memory_images,
    memory_audio_waveforms=memory_audio,
    memory_audio_sample_rates=memory_audio_rates,
    width=1280,
    height=736,
    num_frames=241,
    frame_rate=25.0,
    model_frame_rate=24.0,
    generator=torch.Generator(device="cuda").manual_seed(42),
    output_type="np",
    output=["videos", "audio"],
)

encode_video(
    output["videos"][0],
    fps=25,
    audio=output["audio"][0].float().cpu(),
    audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
    output_path="echo.mp4",
)
```

جدول دلتا (sigma) الافتراضي لخوارزمية DMD هو الجدول المكوّن من ثمانية خطوات الذي تم إصداره. يتنبأ هذا الجدول بـ`x0` في كل خطوة، ويعيد إضافة الضوضاء باستخدام ضوضاء غاوسية جديدة عند قيمة دلتا التالية، بحيث يتحكم مولّد `torch.Generator` المُهيّأ (seeded) في الضوضاء الأولية وفي جميع عمليات إعادة إضافة الضوضاء الوسيطة.

يتطلب الترميز الخام للصوت والذاكرة `torchaudio`. من أجل التكافؤ المرجعي، أبقِ `audio_vae` في FP32 كما هو موضح أعلاه. يمكن لمسارات العمل المعيارية تخزين الموترات المُعايرة والمفكوكة لمرسّم VAE مؤقتًا. تكون أبعاد الكامنات المرئية `(batch, channels, frames, height, width)` وأبعاد الكامنات الصوتية `(batch, channels, time, mel_bins)`. يقوم الكتلة الأساسية `denoise` بتجميع تلك الموترات، وتوسيع الشروط لـ `num_videos_per_prompt`، ثم فك تجميع المخرجات المُزالة الضوضاء وإعادتها إلى نفس شكل VAE. مرّر أيضًا الكامنات الأولية `latents` و `audio_latents` في ذلك الشكل المفكوك. تستقبل المُفككات موترات VAE المُعايرة وتُزيل المعايرة فورًا قبل فك الترميز. يعيد `output=["latents", "audio_latents"]` موترات VAE المُعايرة. مع `output_type="latent"` و `output=["videos", "audio"]`، تحصل على موترات VAE غير المُعايرة دون فك الترميز.

## EchoModularPipeline[[diffusers.EchoModularPipeline]]

#### diffusers.EchoModularPipeline[[diffusers.EchoModularPipeline]]

```python
diffusers.EchoModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/echo/modular_pipeline.py#L27)

ModularPipeline لنقطة التفتيش DMD الخاصة بمقطع الفيديو الطويل Echo.

## EchoBlocks[[diffusers.EchoBlocks]]

#### diffusers.EchoBlocks[[diffusers.EchoBlocks]]

```python
diffusers.EchoBlocks()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/echo/modular_blocks_echo.py#L220)

توليد فيديو من مرجع صوتي مع شرطية نظيفة للإطار الأول، وفتحات ذاكرة مرتبة للصور والصوت، وإزالة ضوضاء عشوائية باستخدام DMD.

المكوّنات: text_encoder (`PreTrainedModel`) tokenizer (`PreTrainedTokenizerBase`) connectors (`LTX2TextConnectors`) vae (`AutoencoderKLLTX2Video`) audio_vae (`AutoencoderKLLTX2Audio`) transformer (`LTX2VideoTransformer3DModel`) video_processor (`VideoProcessor`) vocoder (`LTX2Vocoder`)

المدخلات: prompt (`str`): الأمر أو الأوامر التي تُوجّه توليد الصورة. max_sequence_length (`int`, *اختياري*, الافتراضي 1024): الحد الأقصى لطول التسلسل لتشفير الأمر. image (`Image | Tensor`, *اختياري*): إطار أولي واحد اختياري يُستخدم كشرط مرجعي نظيف. memory_images (`list`, *اختياري*): صور مرجعية مرتبة، صورة واحدة لكل خانة ذاكرة Echo. memory_audio_waveforms (`list`, *اختياري*): موجات ذاكرة مرتبة على شكل متجهات `(channels, samples)`. تُقتطع المدخلات الأطول من 9.62 ثانية إلى نافذة الاستجابة الأعلى. استخدم `None` لخانة صامتة. memory_audio_sample_rates (`int | list`, *اختياري*): معدل أخذ العينات المشترك لجميع موجات الذاكرة، أو معدل واحد لكل خانة. height (`int`, *اختياري*, الافتراضي 512): ارتفاع الصورة المولدة بالبكسل. width (`int`, *اختياري*, الافتراضي 704): عرض الصورة المولدة بالبكسل. model_frame_rate (`float`, *اختياري*, الافتراضي 24.0): معدل الإطارات في وقت التدريب المستخدم لإحداثيات RoPE لفيديو Echo. memory_position_offset (`float`, *اختياري*, الافتراضي 500.0): المركز الزمني المُسند إلى خانة الذاكرة الأولى. memory_position_slot_stride (`float`, *اختياري*, الافتراضي 50.0): المسافة الزمنية بين مراكز خانات الذاكرة المتتالية. num_videos_per_prompt (`int`, *اختياري*, الافتراضي 1): عدد الفيديوهات لكل أمر. num_frames (`int`, *اختياري*, الافتراضي 241): عدد إطارات البكسل المولدة؛ يجب أن يكون `1 + k * vae_temporal_compression_ratio`. frame_rate (`float`, *اختياري*, الافتراضي 25.0): معدل إطارات الفيديو المولّد. latents (`Tensor`, *اختياري*): ضجيج فيديو أولي اختياري بصيغة VAE (B, C, F, H, W). audio_latents (`Tensor`, *اختياري*): ضجيج صوت أولي اختياري بصيغة VAE (B, C, L, M). generator (`Generator`, *اختياري*): مولّد Torch للتوليد الحتمي. sigmas (`list | tuple`): جدول sigma الخاص بـ DMD، بما في ذلك الصفر النهائي. attention_kwargs (`dict`, *اختياري*): معاملات إضافية لمعالجات الانتباه. output_type (`str`, *اختياري*, الافتراضي pil): صيغة الإخراج: 'pil'، 'np'، 'pt'. decode_timestep (`None`, *اختياري*, الافتراضي 0.0): خطوة الزمن المستخدمة لفك تشفير المتجهات النهائية. decode_noise_scale (`None`, *اختياري*): معامل استيفاء الضجيج المطبّق عند خطوة فك التشفير.

المخرجات: مقاطع فيديو (`list`): مقاطع الفيديو المولّدة. الصوت (`Tensor`): موجة الصوت المولّدة.

