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

# EasyAnimate
[EasyAnimate](https://github.com/aigc-apps/EasyAnimate) من Alibaba PAI.

الوصف من صفحتها على GitHub: *EasyAnimate هو خط أنابيب مبني على بنية transformer، مصمم لتوليد الصور والفيديوهات بالذكاء الاصطناعي، ولتدريب النماذج الأساسية ونماذج Lora الخاصة بـ Diffusion Transformer. ندعم التنبؤ المباشر من النماذج EasyAnimate المُدرَّبة مسبقًا، مما يتيح توليد فيديوهات بدقة مختلفة، بطول يقارب 6 ثوانٍ، بمعدل 8fps (EasyAnimateV5.1، من 1 إلى 49 إطارًا). بالإضافة إلى ذلك، يمكن للمستخدمين تدريب نماذجهم الأساسية ونماذج Lora الخاصة بهم لتحويلات أنماط محددة.*

تمت مساهمة خط المعالجة هذا بواسطة [bubbliiiing](https://github.com/bubbliiiing). يمكن العثور على قاعدة الكود الأصلية [هنا](https://huggingface.co/alibaba-pai). يمكن العثور على الأوزان الأصلية تحت [hf.co/alibaba-pai](https://huggingface.co/alibaba-pai).

توجد نقطتا تفتيش رسميتان لـ EasyAnimate، إحداهما لتحويل النص إلى فيديو والأخرى لتحويل الفيديو إلى فيديو.

| نقاط التفتيش | نوع البيانات الموصى به للاستدلال |
|:---:|:---:|
| [`alibaba-pai/EasyAnimateV5.1-12b-zh`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh) | torch.float16 |
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-InP`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-InP) | torch.float16 |

يتوفر نقطة تفتيش رسمية واحدة لـ EasyAnimate مخصصة لتحويل الصور إلى فيديو وتحويل الفيديو إلى فيديو.

| نقاط التفتيش | نوع البيانات الموصى به للاستدلال |
|:---:|:---:|
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-InP`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-InP) | torch.float16 |

يتوفر نقطتا تفتيش رسميتان لـ EasyAnimate للتحكم في الفيديو.

| نقاط التفتيش | نوع البيانات الموصى به للاستدلال |
|:---:|:---:|
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-Control`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-Control) | torch.float16 |
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-Control-Camera`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-Control-Camera) | torch.float16 |

لسلسلة EasyAnimateV5.1:
- يعمل توليد الفيديو من النص (T2V) وتوليد الفيديو من الصورة (I2V) على دقات متعددة. يمكن أن تتراوح الأبعاد (العرض والارتفاع) بين 256 و1024.
- تدعم كلٌّ من نماذج T2V وI2V التوليد بعدد إطارات يتراوح بين 1 و49، وتعمل بشكل أفضل عند هذا العدد. يُنصح بتصدير الفيديوهات بمعدل 8 إطارات في الثانية.

## التكميم

يساعد التكميم (Quantization) في تقليل متطلبات الذاكرة للنماذج الكبيرة جدًا من خلال تخزين أوزان النموذج في نوع بيانات بدقة أقل. ومع ذلك، قد يكون للتكميم تأثير متباين على جودة الفيديو اعتمادًا على نموذج الفيديو المستخدم.

راجع نظرة عامة حول [التكميم](../../quantization/overview) لمعرفة المزيد حول محركات التكميم المدعومة واختيار محرك تكميم يدعم حالتك الاستخدامية. يوضح المثال أدناه كيفية تحميل [EasyAnimatePipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/easyanimate#diffusers.EasyAnimatePipeline) مُكمَّم للاستدلال باستخدام bitsandbytes.

```py
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, EasyAnimateTransformer3DModel, EasyAnimatePipeline
from diffusers.utils import export_to_video

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = EasyAnimateTransformer3DModel.from_pretrained(
    "alibaba-pai/EasyAnimateV5.1-12b-zh",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = EasyAnimatePipeline.from_pretrained(
    "alibaba-pai/EasyAnimateV5.1-12b-zh",
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

prompt = "A cat walks on the grass, realistic style."
negative_prompt = "bad detailed"
video = pipeline(prompt=prompt, negative_prompt=negative_prompt, num_frames=49, num_inference_steps=30).frames[0]
export_to_video(video, "cat.mp4", fps=8)
```

## EasyAnimatePipeline[[diffusers.EasyAnimatePipeline]]

#### diffusers.EasyAnimatePipeline[[diffusers.EasyAnimatePipeline]]

```python
diffusers.EasyAnimatePipeline(vae: AutoencoderKLMagvit, text_encoder: transformers.models.qwen2_vl.modeling_qwen2_vl.Qwen2VLForConditionalGeneration | transformers.models.bert.modeling_bert.BertModel, tokenizer: transformers.models.qwen2.tokenization_qwen2.Qwen2Tokenizer | transformers.models.bert.tokenization_bert.BertTokenizer, transformer: EasyAnimateTransformer3DModel, scheduler: FlowMatchEulerDiscreteScheduler)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/easyanimate/pipeline_easyanimate.py#L186)

**المعاملات:**

vae ([AutoencoderKLMagvit](/docs/diffusers/v0.43.0/ar/api/models/autoencoderkl_magvit#diffusers.AutoencoderKLMagvit)) : نموذج الترميز التحويلي التبايني (VAE) لتشفير الفيديو وفك تشفيره إلى التمثيلات الكامنة ومنها.

text_encoder (`~transformers.Qwen2VLForConditionalGeneration`، `~transformers.BertModel` | None) : يستخدم EasyAnimate [qwen2 vl](https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct) في الإصدار V5.1.

tokenizer (`~transformers.Qwen2Tokenizer`، `~transformers.BertTokenizer` | None) : `Qwen2Tokenizer` أو `BertTokenizer` لتجزئة النص.

transformer ([EasyAnimateTransformer3DModel](/docs/diffusers/v0.43.0/ar/api/models/easyanimate_transformer3d#diffusers.EasyAnimateTransformer3DModel)) : نموذج EasyAnimate الذي صممه فريق EasyAnimate.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : مُجدول يُستخدم بالاقتران مع EasyAnimate لإزالة الضوضاء من كائنات الصورة المُرمّزة.

خط أنابيب لتوليد الفيديو من النص باستخدام EasyAnimate.

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

يستخدم EasyAnimate مُشفّر نص واحد [qwen2 vl](https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct) في الإصدار V5.1.

#### __call__[[diffusers.EasyAnimatePipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, num_frames: int | None = 49, height: int | None = 512, width: int | None = 512, num_inference_steps: int | None = 50, guidance_scale: float | None = 5.0, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float | None = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, timesteps: list[int] | None = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], guidance_rescale: float = 0.0)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/easyanimate/pipeline_easyanimate.py#L524)

**المعاملات:**

prompt (`str` أو `list[str]`، *اختياري*) : نصوص إرشادية لتوجيه توليد الصورة أو الفيديو. إذا لم تُقدَّم، فاستخدم `prompt_embeds` بدلاً منها.

num_frames (`int`, *اختياري*) : طول الفيديو المولّد (بالإطارات).

height (`int`، *اختياري*) : ارتفاع الصورة المولدة بالبكسل.

width (`int`, *اختياري*) : عرض الصورة المولدة بالبكسل.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء أثناء التوليد. بشكل عام، تؤدي زيادة عدد الخطوات إلى صور بجودة أعلى لكنها تُبطئ الاستدلال.

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 5.0) : يشجّع النموذج على مواءمة المخرجات مع الأوامر النصية. قد يؤدي ارتفاع القيمة إلى انخفاض جودة الصورة.

negative_prompt (`str` أو `list[str]`، *اختياري*) : أوامر تُحدد ما يجب استبعاده في التوليد. إذا لم يُحدد، فاستخدم `negative_prompt_embeds`.

num_images_per_prompt (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الصور التي سيتم توليدها لكل موجه.

eta (`float`، *اختياري*، القيمة الافتراضية 0.0) : يُطبَّق على جدولة DDIM. يتحكم به معامل eta من الأدبيات ذات الصلة.

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : مولّد لضمان قابلية التكرار في توليد الصور.

latents (`torch.Tensor`، *اختياري*) : متجهات كامنة محددة مسبقًا لتوجيه عملية التوليد.

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية (embeddings) للأوامر (prompts). يتجاوز مدخلات نصوص الأوامر لمنح مرونة أكبر.

negative_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات (Embeddings) للتلميحات السلبية. تتجاوز المدخلات النصية إذا تم تعريفها.

prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع الانتباه لتضمينات الموجه الأساسي.

negative_prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع الانتباه لتضمينات الموجهات السلبية.

output_type (`str`، *اختياري*، القيمة الافتراضية "latent") : صيغة المخرجات المولّدة، إما كصورة PIL أو كمصفوفة NumPy.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : إذا كانت `True`، تُرجع مخرجات منظمة. وإلا تُرجع مجموعة بسيطة.

callback_on_step_end (`Callable`، *اختياري*) : دوال تُستدعى في نهاية كل خطوة إزالة ضوضاء.

callback_on_step_end_tensor_inputs (`list[str]`، *اختياري*) : أسماء الموترات التي سيتم تضمينها في استدعاءات دالة الاستدعاء.

guidance_rescale (`float`، *اختياري*، القيمة الافتراضية 0.0) : يعدّل مستويات الضوضاء بناءً على مقياس التوجيه.

timesteps (`list[int]`، *اختياري*) : خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم الجدولة الافتراضية للمجدول لـ`num_inference_steps`.

**يعيد:** [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput)، وإلا يُعاد `tuple` حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم `bool` تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw).

يولّد صورًا أو فيديو باستخدام خط أنابيب EasyAnimate بناءً على الأوامر النصية المقدمة.

أمثلة:
```python
>>> import torch
>>> from diffusers import EasyAnimatePipeline
>>> from diffusers.utils import export_to_video

>>> # Models: "alibaba-pai/EasyAnimateV5.1-12b-zh"
>>> pipe = EasyAnimatePipeline.from_pretrained(
...     "alibaba-pai/EasyAnimateV5.1-7b-zh-diffusers", torch_dtype=torch.float16
... ).to("cuda")
>>> prompt = (
...     "A panda, dressed in a small, red jacket and a tiny hat, sits on a wooden stool in a serene bamboo forest. "
...     "The panda's fluffy paws strum a miniature acoustic guitar, producing soft, melodic tunes. Nearby, a few other "
...     "pandas gather, watching curiously and some clapping in rhythm. Sunlight filters through the tall bamboo, "
...     "casting a gentle glow on the scene. The panda's face is expressive, showing concentration and joy as it plays. "
...     "The background includes a small, flowing stream and vibrant green foliage, enhancing the peaceful and magical "
...     "atmosphere of this unique musical performance."
... )
>>> sample_size = (512, 512)
>>> video = pipe(
...     prompt=prompt,
...     guidance_scale=6,
...     negative_prompt="bad detailed",
...     height=sample_size[0],
...     width=sample_size[1],
...     num_inference_steps=50,
... ).frames[0]
>>> export_to_video(video, "output.mp4", fps=8)
```

#### encode_prompt[[diffusers.EasyAnimatePipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | list[str] | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None, max_sequence_length: int = 256)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/easyanimate/pipeline_easyanimate.py#L241)

**المعاملات:**

prompt (`str` أو `list[str]`، *اختياري*) : النص الذي سيتم ترميزه

device : (`torch.device`): جهاز torch

dtype (`torch.dtype`) : نوع torch

num_images_per_prompt (`int`) : عدد الصور التي يجب توليدها لكل موجه

do_classifier_free_guidance (`bool`) : ما إذا كان سيتم استخدام التوجيه الحر للتصنيف أم لا

negative_prompt (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير `negative_prompt_embeds` بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان `guidance_scale` أقل من `1`).

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.Tensor`, *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال `negative_prompt`.

prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع الانتباه للموجّه. مطلوب عند تمرير `prompt_embeds` مباشرة.

negative_prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع الانتباه (Attention mask) الخاص بالموجّه السلبي. مطلوب عند تمرير `negative_prompt_embeds` مباشرةً.

max_sequence_length (`int`، *اختياري*) : أقصى طول تسلسل يُستخدم للموجّه.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

## EasyAnimatePipelineOutput[[diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput]]

#### diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput[[diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput]]

```python
diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput(frames: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/easyanimate/pipeline_output.py#L9)

**المعاملات:**

frames (`torch.Tensor` أو `np.ndarray` أو list[list[PIL.Image.Image]]) : قائمة من مخرجات الفيديو - يمكن أن تكون قائمة متداخلة بطول `batch_size,` حيث تحتوي كل قائمة فرعية على تسلسلات من صور PIL منزوعة الضوضاء بطول `num_frames.` كما يمكن أن تكون مصفوفة NumPy أو متجه Torch بشكل `(batch_size, num_frames, channels, height, width)`.

فئة الإخراج لخطوط أنابيب EasyAnimate.

