# نماذج الاتساق الكامن

  

قُدِّمت نماذج الاتساق الكامن (LCMs) في [Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference](https://huggingface.co/papers/2310.04378) من قِبل Simian Luo وYiqin Tan وLongbo Huang وJian Li وHang Zhao.

المستخلص الخاص بالورقة البحثية هو على النحو التالي:

*حقّقت نماذج الانتشار الكامن (LDMs) نتائج مذهلة في توليد صور عالية الدقة. ومع ذلك، فإن عملية العينة التكرارية كثيفة الحسابات وتؤدي إلى بطء في التوليد. مستوحين من نماذج الاتساق (song et al.)، نقترح نماذج الاتساق الكامنة (LCMs)، مما يتيح استنتاجًا سريعًا بخطوات قليلة على أي نماذج LDMs مُدرَّبة مسبقًا، بما في ذلك Stable Diffusion (rombach et al). بالنظر إلى عملية الانتسار العكسي الموجَّه على أنه حل لمعادلة تفاضلية عادية (PF-ODE) محسّنة لتدفق الاحتمال، صُممت LCMs للتنبؤ المباشر بحل هذه المعادلة التفاضلية العادية في الفضاء الكامن، مما يقلل الحاجة إلى تكرارات عديدة ويسمح بعينة سريعة عالية الدقة. وقد تم تقطيرها بكفاءة من نماذج الانتشار الموجَّه بدون مُصنِّف مُدرَّبة مسبقًا، حيث يستغرق تدريب LCM عالي الجودة بدقة 768 x 768 وبخطوتين إلى أربع خطوات فقط 32 ساعة GPU من نوع A100. علاوة على ذلك، نعرّف ضبط الدقة للاتساق الكامن (LCF)، وهو أسلوب جديد مصمم خصيصًا لضبط دقة LCMs على مجموعات بيانات صور مخصصة. تُظهر التقييمات على مجموعة بيانات LAION-5B-Aesthetics أن LCMs تحقق أداءً متقدمًا في توليد الصور من النص مع استنتاج بخطوات قليلة. صفحة المشروع: [this https URL](https://latent-consistency-models.github.io/).*

يمكن العثور على عرض توضيحي لنقطة التفتيش [SimianLuo/LCM_Dreamshaper_v7](https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7) [هنا](https://huggingface.co/spaces/SimianLuo/Latent_Consistency_Model).

تمت مساهمة خطوط الأنابيب من قِبل [luosiallen](https://luosiallen.github.io/) و[nagolinc](https://github.com/nagolinc) و[dg845](https://github.com/dg845).

> [!TIP]
> تتوفر نماذج LCMs وLCM-LoRAs لنموذج Stable Diffusion v1.5، ونموذج Stable Diffusion XL، ونموذج SSD-1B. يمكنك العثور على نقاط التفتيش الخاصة بها في مجموعات [Latent Consistency](https://hf.co/collections/latent-consistency/latent-consistency-models-weights-654ce61a95edd6dffccef6a8).

## النص إلى صورة

لاستخدام LCMs، عليك تحميل نقطة التفتيش (checkpoint) الخاصة بـ LCM للنموذج المدعوم لديك في [UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel) واستبدال المجدول (scheduler) بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). بعد ذلك، يمكنك استخدام خط الأنابيب (pipeline) كما هو معتاد، وتمرير موجه نصي (text prompt) لتوليد صورة في 4 خطوات فقط.

بعض الملاحظات التي يجب وضعها في الاعتبار عند استخدام LCMs هي:

* عادةً، يتم مضاعفة حجم الدفعة داخل خط الأنابيب للإرشاد الحر من التصنيف. لكن LCM يطبّق الإرشاد عبر تضمينات الإرشاد ولا يحتاج إلى مضاعفة حجم الدفعة، مما يؤدي إلى استنتاج أسرع. الجانب السلبي هو أن التلميحات السلبية لا تعمل مع LCM لأنها لا تُحدث أي تأثير على عملية إزالة الضوضاء.
* النطاق المثالي لـ `guidance_scale` هو [3., 13.] لأن ذلك هو ما تم تدريب UNet به. ومع ذلك، فإن تعطيل `guidance_scale` بقيمة 1.0 يكون فعالاً أيضاً في معظم الحالات.

```python
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image
```

    

لاستخدام LCM-LoRAs، يجب عليك استبدال المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler) وتحميل أوزان LCM-LoRA باستخدام الطريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights). بعد ذلك، يمكنك استخدام خط الأنابيب كما هو معتاد، وتمرير موجه نصي لتوليد صورة في 4 خطوات فقط.

بعض الملاحظات التي يجب وضعها في الاعتبار عند استخدام LCM-LoRAs هي:

* عادةً، يتم مضاعفة حجم الدفعة داخل خط الأنابيب للإرشاد الحر من التصنيف. لكن LCM يطبّق الإرشاد عبر تضمينات الإرشاد ولا يحتاج إلى مضاعفة حجم الدفعة، مما يؤدي إلى استنتاج أسرع. الجانب السلبي هو أن التلميحات السلبية لا تعمل مع LCM لأنها لا تُحدث أي تأثير على عملية إزالة الضوضاء.
* يمكنك استخدام التوجيه مع LCM-LoRAs، لكنه حساس للغاية للقيم العالية لـ `guidance_scale` وقد يؤدي إلى ظهور عيوب في الصورة المولّدة. أفضل القيم التي وجدناها تتراوح بين [1.0, 2.0].
* استبدل [stabilityai/stable-diffusion-xl-base-1.0](https://hf.co/stabilityai/stable-diffusion-xl-base-1.0) بأي نموذج مُعدّل. على سبيل المثال، جرّب استخدام نقطة التفتيش [animagine-xl](https://huggingface.co/Linaqruf/animagine-xl) لتوليد صور أنمي باستخدام SDXL.

```py
import torch
from diffusers import DiffusionPipeline, LCMScheduler

pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    variant="fp16",
    dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")

prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(42)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=1.0
).images[0]
image
```

    

## من صورة إلى صورة

للاستخدام LCMs لتحويل الصورة إلى صورة، تحتاج إلى تحميل نقطة التفتيش LCM الخاصة بالنموذج المدعوم لديك في [UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel) واستبدال المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). بعد ذلك يمكنك استخدام خط الأنابيب كما هو معتاد، وتمرير موجه نصي وصورة أولية لتوليد صورة في 4 خطوات فقط.

> [!TIP]
> جرّب قيمًا مختلفة لـ `num_inference_steps` و`strength` و`guidance_scale` للحصول على أفضل النتائج.

```python
import torch
from diffusers import AutoPipelineForImage2Image, UNet2DConditionModel, LCMScheduler
from diffusers.utils import load_image

unet = UNet2DConditionModel.from_pretrained(
    "SimianLuo/LCM_Dreamshaper_v7",
    subfolder="unet",
    dtype=torch.float16,
)

pipe = AutoPipelineForImage2Image.from_pretrained(
    "Lykon/dreamshaper-7",
    unet=unet,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt,
    image=init_image,
    num_inference_steps=4,
    guidance_scale=7.5,
    strength=0.5,
    generator=generator
).images[0]
image
```

  
    
    الصورة الأولية
  
  
    
    صورة مولّدة
  

لاستخدام LCM-LoRAs لتحويل الصورة إلى صورة، يجب عليك استبدال المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler) وتحميل أوزان LCM-LoRA باستخدام الطريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights). بعد ذلك، يمكنك استخدام خط الأنابيب كما هو معتاد، مع تمرير موجه نصي وصورة أولية لتوليد صورة في 4 خطوات فقط.

> [!TIP]
> جرّب قيمًا مختلفة لـ `num_inference_steps` و`strength` و`guidance_scale` للحصول على أفضل النتائج.

```py
import torch
from diffusers import AutoPipelineForImage2Image, LCMScheduler
from diffusers.utils import make_image_grid, load_image

pipe = AutoPipelineForImage2Image.from_pretrained(
    "Lykon/dreamshaper-7",
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"

generator = torch.manual_seed(0)
image = pipe(
    prompt,
    image=init_image,
    num_inference_steps=4,
    guidance_scale=1,
    strength=0.6,
    generator=generator
).images[0]
image
```

  
    
    الصورة الأولية
  
  
    
    صورة مولّدة
  

## الترميم

لاستخدام LCM-LoRAs لإعادة التلوين (Inpainting)، يجب عليك استبدال المجدول (Scheduler) بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler) وتحميل أوزان LCM-LoRA باستخدام الطريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights). بعد ذلك، يمكنك استخدام خط الأنابيب (Pipeline) كما هو معتاد، مع تمرير موجه نصي، وصورة أولية، وصورة قناع (Mask) لتوليد صورة في 4 خطوات فقط.

```py
import torch
from diffusers import AutoPipelineForInpainting, LCMScheduler
from diffusers.utils import load_image, make_image_grid

pipe = AutoPipelineForInpainting.from_pretrained(
    "stable-diffusion-v1-5/stable-diffusion-inpainting",
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint.png")
mask_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_mask.png")

prompt = "concept art digital painting of an elven castle, inspired by lord of the rings, highly detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    image=init_image,
    mask_image=mask_image,
    generator=generator,
    num_inference_steps=4,
    guidance_scale=4,
).images[0]
image
```

  
    
    الصورة الأولية
  
  
    
    صورة مولّدة
  

## المُكيِّفات

تتوافق LCMs مع المُكيّفات مثل LoRA وControlNet وT2I-Adapter وAnimateDiff. يمكنك نقل سرعة LCMs إلى هذه المُكيّفات لتوليد الصور بأسلوب معين أو لتكييف النموذج على مدخل آخر مثل صورة canny.

### LoRA

يمكن ضبط [LoRA](../../tutorials/using_peft_for_inference) بسرعة لتعلم نمط جديد من عدد قليل من الصور فقط، ثم دمجها في نموذج مُدرَّب مسبقًا لتوليد صور بهذا النمط.

حمّل نقطة التفتيش (checkpoint) الخاصة بـ LCM للنموذج المدعوم لديك في [UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel) واستبدل المجدول (scheduler) بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). بعد ذلك، يمكنك استخدام طريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LoRA في LCM وتوليد صورة بأسلوب معين في خطوات قليلة.

```python
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")

prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image
```

    

استبدل المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). ثم يمكنك استخدام طريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LCM-LoRA وأوزان LoRA الخاصة بالنمط الذي تريد استخدامه. ادمج كلا من محوّلي LoRA باستخدام طريقة `~loaders.UNet2DConditionLoadersMixin.set_adapters` وأنشئ صورة ذات نمط في خطوات قليلة.

```py
import torch
from diffusers import DiffusionPipeline, LCMScheduler

pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    variant="fp16",
    dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl", adapter_name="lcm")
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")

pipe.set_adapters(["lcm", "papercut"], adapter_weights=[1.0, 0.8])

prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(prompt, num_inference_steps=4, guidance_scale=1, generator=generator).images[0]
image
```

    

### ControlNet

[ControlNet](./controlnet) هي محوِّلات يمكن تدريبها على مجموعة متنوعة من المدخلات مثل حواف canny، وتقدير الوضعية، أو العمق. يمكن إدراج ControlNet في خط الأنابيب لتوفير شروط وتحكم إضافيين للنموذج من أجل توليد أكثر دقة.

يمكنك العثور على نماذج ControlNet إضافية مدرّبة على مدخلات أخرى في مستودع [lllyasviel](https://hf.co/lllyasviel).

حمّل نموذج ControlNet مُدرَّب على صور canny وقم بتمريره إلى [ControlNetModel](/docs/diffusers/v0.43.0/ar/api/models/controlnet#diffusers.ControlNetModel). ثم يمكنك تحميل نموذج LCM في [StableDiffusionControlNetPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/controlnet#diffusers.StableDiffusionControlNetPipeline) واستبدال المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). الآن مرّر صورة canny إلى خط الأنابيب وولّد صورة.

> [!TIP]
> جرّب قيمًا مختلفة لـ`num_inference_steps` و`controlnet_conditioning_scale` و`cross_attention_kwargs` و`guidance_scale` للحصول على أفضل النتائج.

```python
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image, make_image_grid

image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)

controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "SimianLuo/LCM_Dreamshaper_v7",
    controlnet=controlnet,
    dtype=torch.float16,
    safety_checker=None,
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

generator = torch.manual_seed(0)
image = pipe(
    "the mona lisa",
    image=canny_image,
    num_inference_steps=4,
    generator=generator,
).images[0]
make_image_grid([canny_image, image], rows=1, cols=2)
```

    

حمّل نموذج ControlNet مُدرَّب على صور canny وقم بتمريره إلى [ControlNetModel](/docs/diffusers/v0.43.0/ar/api/models/controlnet#diffusers.ControlNetModel). ثم يمكنك تحميل نموذج Stable Diffusion v1.5 في [StableDiffusionControlNetPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/controlnet#diffusers.StableDiffusionControlNetPipeline) واستبدال المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). استخدم طريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LCM-LoRA، وتمرير صورة canny إلى خط الأنابيب وتوليد صورة.

> [!TIP]
> جرّب قيمًا مختلفة لـ`num_inference_steps` و`controlnet_conditioning_scale` و`cross_attention_kwargs` و`guidance_scale` للحصول على أفضل النتائج.

```py
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image

image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)

controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "stable-diffusion-v1-5/stable-diffusion-v1-5",
    controlnet=controlnet,
    dtype=torch.float16,
    safety_checker=None,
    variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

generator = torch.manual_seed(0)
image = pipe(
    "the mona lisa",
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=1.5,
    controlnet_conditioning_scale=0.8,
    cross_attention_kwargs={"scale": 1},
    generator=generator,
).images[0]
image
```

    

### T2I-Adapter

[T2I-Adapter](../../using-diffusers/legacy_adapters#t2i-adapter) هو مُكيّف أخفّ من ControlNet، يوفر مدخلًا إضافيًا لتكييف نموذج مُدرَّب مسبقًا. إنه أسرع من ControlNet، لكن النتائج قد تكون أقل جودة بشكل طفيف.

يمكنك العثور على نقاط تفتيش إضافية لنموذج T2I-Adapter تم تدريبها على مدخلات أخرى في مستودع [TencentArc](https://hf.co/TencentARC).

حمّل T2IAdapter مُدرَّبًا على صور canny وقم بتمريره إلى [StableDiffusionXLAdapterPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/adapter#diffusers.StableDiffusionXLAdapterPipeline). ثم حمّل نقطة تحقق LCM إلى [UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel) واستبدل المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler). الآن مرّر صورة canny إلى خط الأنابيب وولّد صورة.

```python
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid

# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1216))

adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda")  # or "mps", "xpu", "cpu"

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    unet=unet,
    adapter=adapter,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"

generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=5,
    adapter_conditioning_scale=0.8,
    adapter_conditioning_factor=1,
    generator=generator,
).images[0]
```

    

حمّل T2IAdapter مُمَدربًا على صور canny وقم بتمريره إلى [StableDiffusionXLAdapterPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/adapter#diffusers.StableDiffusionXLAdapterPipeline). استبدل المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler)، واستخدم طريقة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LCM-LoRA. مرّر صورة canny إلى خط الأنابيب وولّد صورة.

```py
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid

# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1024))

adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda")  # or "mps", "xpu", "cpu"

pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    adapter=adapter,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")

prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"

generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=1.5,
    adapter_conditioning_scale=0.8,
    adapter_conditioning_factor=1,
    generator=generator,
).images[0]
```

    

### AnimateDiff

[AnimateDiff](./animatediff) هو مُكيّف يضيف الحركة إلى صورة. يمكن استخدامه مع معظم نماذج Stable Diffusion، مما يحوّلها فعليًا إلى نماذج "توليد فيديو". عادةً ما يتطلب توليد نتائج جيدة باستخدام نموذج فيديو توليد عدة إطارات (16-24)، وهو ما قد يكون بطيئًا جدًا مع نموذج Stable Diffusion عادي. يمكن لـ LCM-LoRA تسريع هذه العملية من خلال استخدام 4-8 خطوات فقط لكل إطار.

حمّل [AnimateDiffPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/animatediff#diffusers.AnimateDiffPipeline) ومرّر إليه `MotionAdapter`. ثم استبدل المجدول بـ [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler)، وادمج كلا مُكيّفي LoRA باستخدام طريقة `~loaders.UNet2DConditionLoadersMixin.set_adapters`. الآن يمكنك تمرير موجه إلى خط الأنابيب وتوليد صورة متحركة.

```py
import torch
from diffusers import MotionAdapter, AnimateDiffPipeline, DDIMScheduler, LCMScheduler
from diffusers.utils import export_to_gif

adapter = MotionAdapter.from_pretrained("guoyww/animatediff-motion-adapter-v1-5")
pipe = AnimateDiffPipeline.from_pretrained(
    "frankjoshua/toonyou_beta6",
    motion_adapter=adapter,
).to("cuda")  # or "mps", "xpu", "cpu"

# set scheduler
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

# load LCM-LoRA
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5", adapter_name="lcm")
pipe.load_lora_weights("guoyww/animatediff-motion-lora-zoom-in", weight_name="diffusion_pytorch_model.safetensors", adapter_name="motion-lora")

pipe.set_adapters(["lcm", "motion-lora"], adapter_weights=[0.55, 1.2])

prompt = "best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress"
generator = torch.manual_seed(0)
frames = pipe(
    prompt=prompt,
    num_inference_steps=5,
    guidance_scale=1.25,
    cross_attention_kwargs={"scale": 1},
    num_frames=24,
    generator=generator
).frames[0]
export_to_gif(frames, "animation.gif")
```

    

## LatentConsistencyModelPipeline[[diffusers.LatentConsistencyModelPipeline]]

#### diffusers.LatentConsistencyModelPipeline[[diffusers.LatentConsistencyModelPipeline]]

```python
diffusers.LatentConsistencyModelPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: LCMScheduler, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = None, requires_safety_checker: bool = True)
```

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

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

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

text_encoder ([CLIPTextModel](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTextModel)) : مُشفِّر نص ثابت ([clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14)).

tokenizer ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : `CLIPTokenizer` لتجزئة النص.

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : نموذج `UNet2DConditionModel` لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin)) : مُجدول يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من الكامنات المُرمّزة للصورة. يدعم حاليًا [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler) فقط.

safety_checker (`StableDiffusionSafetyChecker`) : وحدة تصنيف تُقدّر ما إذا كان يمكن اعتبار الصور المولّدة مسيئة أو ضارة. يُرجى الرجوع إلى [بطاقة النموذج](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) لمزيد من التفاصيل حول الأضرار المحتملة التي قد يسببها النموذج.

feature_extractor ([CLIPImageProcessor](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPImageProcessor)) : مُعالج صور `CLIPImageProcessor` لاستخراج الميزات من الصور المولّدة؛ يُستخدم كمدخلات لـ `safety_checker`.

requires_safety_checker (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كانت خط الأنابيب تتطلب مكوّن فحص الأمان.

خط أنابيب لتوليد الصور من النص باستخدام نموذج الاتساق الكامن.

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

تورث خط الأنابيب أيضًا طرق التحميل التالية:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/ar/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) لتحميل تضمينات الانعكاس النصي
- [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.save_lora_weights) لحفظ أوزان LoRA
- [from_single_file()](/docs/diffusers/v0.43.0/ar/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) لتحميل ملفات `.ckpt`
- [load_ip_adapter()](/docs/diffusers/v0.43.0/ar/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) لتحميل وحدات IP Adapter

#### __call__[[diffusers.LatentConsistencyModelPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 4, original_inference_steps: int = None, timesteps: list[int] = None, guidance_scale: float = 8.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

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

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

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

height (`int`، *اختياري*، القيمة الافتراضية هي `self.unet.config.sample_size * self.vae_scale_factor`) : ارتفاع الصورة المولّدة بالبكسل.

width (`int`، *اختياري*، القيمة الافتراضية هي `self.unet.config.sample_size * self.vae_scale_factor`) : عرض الصورة المولدة بالبكسل.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

original_inference_steps (`int`, *اختياري*) : العدد الأصلي لخطوات الاستدلال المستخدمة لتوليد جدول أزمنة متباعد خطيًا، سنستخرج منه `num_inference_steps` أزمنة متباعدة بالتساوي كجدول الأزمنة النهائي، اتباعًا لطريقة تخطي الخطوات الواردة في الورقة (انظر القسم 4.3). إذا لم يتم ضبطه، فسيتم افتراضيًا استخدام خاصية `original_inference_steps` للمجدول.

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

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 7.5) : تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنص `prompt` على حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكون `guidance_scale > 1`. لاحظ أن ورقة البحث الأصلية لنماذج الاتساق الكامنة تستخدم صياغة مختلفة لـ CFG حيث تُنقص مقاييس التوجيه بمقدار 1 (لذا في صياغة الورقة يتم تفعيل CFG عندما يكون `guidance_scale > 0`).

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

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل التوليد حتميًا.

latents (`torch.Tensor`، *اختياري*) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كامنات من خلال الاستخراج باستخدام `generator` العشوائي المُقدَّم.

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

ip_adapter_image : (`PipelineImageInput`، *اختياري*): إدخال صورة اختياري للعمل مع IP Adapters.

ip_adapter_image_embeds (`list[torch.Tensor]`, *اختياري*) : تمثيلات صور مُولّدة مسبقًا لـ IP-Adapter. يجب أن يكون قائمة بطول يساوي عدد وحدات IP-adapter. يجب أن يكون كل عنصر منها متجهًا (tensor) بشكل `(batch_size, num_images, emb_dim)`. يجب أن يحتوي على تمثيل الصورة السلبية إذا كان `do_classifier_free_guidance` مضبوطًا على `True`. إذا لم يُقدَّم، تُحسب التمثيلات من معامل الإدخال `ip_adapter_image`.

output_type (`str`، *اختياري*، الافتراضي `"pil"`) : صيغة الصورة المولّدة. اختر بين `PIL.Image` أو `np.array`.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) بدلاً من tuple عادي.

cross_attention_kwargs (`dict`، *اختياري*) : قاموس kwargs يُمرَّر إلى `AttentionProcessor` إذا تم تحديده، كما هو معرّف في [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

callback_on_step_end (`Callable`، *اختياري*) : دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. سيتضمن `callback_kwargs` قائمة بجميع المصفوفات كما حددتها `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`، *اختياري*) : قائمة مدخلات المصفوفات (tensors) لدالة `callback_on_step_end`. سيتم تمرير المصفوفات المحددة في القائمة كحجة `callback_kwargs`. لن تتمكن من تضمين سوى المتغيرات المدرجة في خاصية `._callback_tensor_inputs` لفئة خط الأنابيب (pipeline) الخاص بك.

**يعيد:** [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).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:
```py
>>> from diffusers import DiffusionPipeline
>>> import torch

>>> pipe = DiffusionPipeline.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)

>>> prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"

>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(prompt=prompt, num_inference_steps=num_inference_steps, guidance_scale=8.0).images
>>> images[0].save("image.png")
```

#### enable_freeu[[diffusers.LatentConsistencyModelPipeline.enable_freeu]]

```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```

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

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

s1 (`float`) : عامل التدرّج للمرحلة 1 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من "تأثير الإفراط في التنعيم" في عملية إزالة الضوضاء المعزّزة.

s2 (`float`) : معامل التدرّج للمرحلة 2 لتخفيف مساهمات الميزات المتجاوزة. يتم ذلك للتخفيف من "تأثير الإفراط في التنعيم" في عملية إزالة الضوضاء المعزّزة.

b1 (`float`) : معامل التوسيع للمرحلة 1 لتضخيم مساهمات ميزات الهيكل الأساسي.

b2 (`float`) : معامل التوسيع للمرحلة 2 لتضخيم مساهمات ميزات الهيكل الأساسي.

يُفعّل آلية FreeU كما هو موضح في https://huggingface.co/papers/2309.11497.

تمثل البادئات التي تلي معاملات التوسيع المراحل التي تُطبَّق فيها.

يرجى الرجوع إلى [المستودع الرسمي](https://github.com/ChenyangSi/FreeU) للاطلاع على التوليفات من القيم التي يُعرف أنها تعمل بشكل جيد لأنابيب مختلفة مثل Stable Diffusion v1 وv2 وStable Diffusion XL.

#### disable_freeu[[diffusers.LatentConsistencyModelPipeline.disable_freeu]]

```python
disable_freeu()
```

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

يعطّل آلية FreeU إذا كانت مفعّلة.

#### encode_prompt[[diffusers.LatentConsistencyModelPipeline.encode_prompt]]

```python
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```

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

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

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

device : (`torch.device`): جهاز 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`.

lora_scale (`float`، *اختياري*) : مقياس LoRA سيُطبَّق على جميع طبقات LoRA في مُشفِّر النص إذا كانت طبقات LoRA محمَّلة.

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

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

#### get_guidance_scale_embedding[[diffusers.LatentConsistencyModelPipeline.get_guidance_scale_embedding]]

```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```

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

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

w (`torch.Tensor`) : توليد متجهات تضمين بمقياس توجيه محدد لتُثري متضمينات خطوات الزمن اللاحقة.

embedding_dim (`int`، *اختياري*، القيمة الافتراضية 512) : بُعد التضمينات (embeddings) التي سيتم توليدها.

dtype (`torch.dtype`، *اختياري*، الافتراضي `torch.float32`) : نوع البيانات للتضمينات المولّدة.

**يعيد:** `torch.Tensor`

متجهات تضمين بشكل `(len(w), embedding_dim)`.

انظر إلى https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

## LatentConsistencyModelImg2ImgPipeline[[diffusers.LatentConsistencyModelImg2ImgPipeline]]

#### diffusers.LatentConsistencyModelImg2ImgPipeline[[diffusers.LatentConsistencyModelImg2ImgPipeline]]

```python
diffusers.LatentConsistencyModelImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: LCMScheduler, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = None, requires_safety_checker: bool = True)
```

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

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

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

text_encoder ([CLIPTextModel](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTextModel)) : مُشفِّر نص ثابت ([clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14)).

tokenizer ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : `CLIPTokenizer` لتجزئة النص.

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : نموذج `UNet2DConditionModel` لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin)) : مُجدول يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من الكامنات المُرمّزة للصورة. يدعم حاليًا [LCMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lcm#diffusers.LCMScheduler) فقط.

safety_checker (`StableDiffusionSafetyChecker`) : وحدة تصنيف تُقدّر ما إذا كان يمكن اعتبار الصور المولّدة مسيئة أو ضارة. يُرجى الرجوع إلى [بطاقة النموذج](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) لمزيد من التفاصيل حول الأضرار المحتملة التي قد يسببها النموذج.

feature_extractor ([CLIPImageProcessor](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPImageProcessor)) : مُعالج صور `CLIPImageProcessor` لاستخراج الميزات من الصور المولّدة؛ يُستخدم كمدخلات لـ `safety_checker`.

requires_safety_checker (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كانت خط الأنابيب تتطلب مكوّن فحص الأمان.

خط أنابيب لتوليد صورة من صورة باستخدام نموذج الاتساق الكامن.

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

تورث خط الأنابيب أيضًا طرق التحميل التالية:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/ar/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) لتحميل تضمينات الانعكاس النصي
- [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) لتحميل أوزان LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.save_lora_weights) لحفظ أوزان LoRA
- [from_single_file()](/docs/diffusers/v0.43.0/ar/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) لتحميل ملفات `.ckpt`
- [load_ip_adapter()](/docs/diffusers/v0.43.0/ar/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) لتحميل وحدات IP Adapter

#### __call__[[diffusers.LatentConsistencyModelImg2ImgPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, num_inference_steps: int = 4, strength: float = 0.8, original_inference_steps: int = None, timesteps: list[int] = None, guidance_scale: float = 8.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

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

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

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

image (`torch.Tensor`، `PIL.Image.Image`، `np.ndarray`، `list[torch.Tensor]`، `list[PIL.Image.Image]`، أو `list[np.ndarray]`) : `Image` أو tensor يمثل دفعة من الصور (image batch) ليُستخدم كنقطة انطلاق. يمكن أيضًا قبول كامنات الصور (image latents) كـ `image`، ولكن إذا تم تمرير الكامنات مباشرةً فلن يتم ترميزها مرة أخرى.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

strength (`float`، *اختياري*، القيمة الافتراضية 0.8) : يحدد مدى تحويل الصورة المرجعية `image`. يجب أن يكون بين 0 و 1. تُستخدم `image` كنقطة انطلاق، وكلما ارتفعت قيمة `strength` زاد مقدار الضوضاء المضافة. يعتمد عدد خطوات إزالة الضوضاء على كمية الضوضاء المضافة في البداية. عندما تكون `strength` تساوي 1، تكون الضوضاء المضافة في أقصى حد، وتعمل عملية إزالة الضوضاء لعدد التكرارات الكامل المحدد في `num_inference_steps`. القيمة 1 تتجاهل `image` بشكل أساسي.

original_inference_steps (`int`, *اختياري*) : العدد الأصلي لخطوات الاستدلال المستخدمة لتوليد جدول أزمنة متباعد خطيًا، سنستخرج منه `num_inference_steps` أزمنة متباعدة بالتساوي كجدول الأزمنة النهائي، اتباعًا لطريقة تخطي الخطوات الواردة في الورقة (انظر القسم 4.3). إذا لم يتم ضبطه، فسيتم افتراضيًا استخدام خاصية `original_inference_steps` للمجدول.

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

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 7.5) : تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنص `prompt` على حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكون `guidance_scale > 1`. لاحظ أن ورقة البحث الأصلية لنماذج الاتساق الكامنة تستخدم صياغة مختلفة لـ CFG حيث تُنقص مقاييس التوجيه بمقدار 1 (لذا في صياغة الورقة يتم تفعيل CFG عندما يكون `guidance_scale > 0`).

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

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل التوليد حتميًا.

latents (`torch.Tensor`، *اختياري*) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كامنات من خلال الاستخراج باستخدام `generator` العشوائي المُقدَّم.

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

ip_adapter_image : (`PipelineImageInput`، *اختياري*): إدخال صورة اختياري للعمل مع IP Adapters.

ip_adapter_image_embeds (`list[torch.Tensor]`, *اختياري*) : تمثيلات صور مُولّدة مسبقًا لـ IP-Adapter. يجب أن يكون قائمة بطول يساوي عدد وحدات IP-adapter. يجب أن يكون كل عنصر منها متجهًا (tensor) بشكل `(batch_size, num_images, emb_dim)`. يجب أن يحتوي على تمثيل الصورة السلبية إذا كان `do_classifier_free_guidance` مضبوطًا على `True`. إذا لم يُقدَّم، تُحسب التمثيلات من معامل الإدخال `ip_adapter_image`.

output_type (`str`، *اختياري*، الافتراضي `"pil"`) : صيغة الصورة المولّدة. اختر بين `PIL.Image` أو `np.array`.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) بدلاً من tuple عادي.

cross_attention_kwargs (`dict`، *اختياري*) : قاموس kwargs يُمرَّر إلى `AttentionProcessor` إذا تم تحديده، كما هو معرّف في [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

callback_on_step_end (`Callable`، *اختياري*) : دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. سيتضمن `callback_kwargs` قائمة بجميع المصفوفات كما حددتها `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`، *اختياري*) : قائمة مدخلات المصفوفات (tensors) لدالة `callback_on_step_end`. سيتم تمرير المصفوفات المحددة في القائمة كحجة `callback_kwargs`. لن تتمكن من تضمين سوى المتغيرات المدرجة في خاصية `._callback_tensor_inputs` لفئة خط الأنابيب (pipeline) الخاص بك.

**يعيد:** [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).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:
```py
>>> from diffusers import AutoPipelineForImage2Image
>>> import torch
>>> import PIL

>>> pipe = AutoPipelineForImage2Image.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)

>>> prompt = "High altitude snowy mountains"
>>> image = PIL.Image.open("./snowy_mountains.png")

>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(
...     prompt=prompt, image=image, num_inference_steps=num_inference_steps, guidance_scale=8.0
... ).images

>>> images[0].save("image.png")
```

#### enable_freeu[[diffusers.LatentConsistencyModelImg2ImgPipeline.enable_freeu]]

```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```

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

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

s1 (`float`) : عامل التدرّج للمرحلة 1 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من "تأثير الإفراط في التنعيم" في عملية إزالة الضوضاء المعزّزة.

s2 (`float`) : معامل التدرّج للمرحلة 2 لتخفيف مساهمات الميزات المتجاوزة. يتم ذلك للتخفيف من "تأثير الإفراط في التنعيم" في عملية إزالة الضوضاء المعزّزة.

b1 (`float`) : معامل التوسيع للمرحلة 1 لتضخيم مساهمات ميزات الهيكل الأساسي.

b2 (`float`) : معامل التوسيع للمرحلة 2 لتضخيم مساهمات ميزات الهيكل الأساسي.

يُفعّل آلية FreeU كما هو موضح في https://huggingface.co/papers/2309.11497.

تمثل البادئات التي تلي معاملات التوسيع المراحل التي تُطبَّق فيها.

يرجى الرجوع إلى [المستودع الرسمي](https://github.com/ChenyangSi/FreeU) للاطلاع على التوليفات من القيم التي يُعرف أنها تعمل بشكل جيد لأنابيب مختلفة مثل Stable Diffusion v1 وv2 وStable Diffusion XL.

#### disable_freeu[[diffusers.LatentConsistencyModelImg2ImgPipeline.disable_freeu]]

```python
disable_freeu()
```

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

يعطّل آلية FreeU إذا كانت مفعّلة.

#### encode_prompt[[diffusers.LatentConsistencyModelImg2ImgPipeline.encode_prompt]]

```python
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```

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

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

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

device : (`torch.device`): جهاز 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`.

lora_scale (`float`، *اختياري*) : مقياس LoRA سيُطبَّق على جميع طبقات LoRA في مُشفِّر النص إذا كانت طبقات LoRA محمَّلة.

clip_skip (`int`, *اختياري*) : عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

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

#### get_guidance_scale_embedding[[diffusers.LatentConsistencyModelImg2ImgPipeline.get_guidance_scale_embedding]]

```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```

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

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

w (`torch.Tensor`) : توليد متجهات تضمين بمقياس توجيه محدد لتُثري متضمينات خطوات الزمن اللاحقة.

embedding_dim (`int`، *اختياري*، القيمة الافتراضية 512) : بُعد التضمينات (embeddings) التي سيتم توليدها.

dtype (`torch.dtype`، *اختياري*، الافتراضي `torch.float32`) : نوع البيانات للتضمينات المولّدة.

**يعيد:** `torch.Tensor`

متجهات تضمين بشكل `(len(w), embedding_dim)`.

انظر إلى https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

## StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]

#### diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]

```python
diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, nsfw_content_detected: list[bool] | None)
```

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

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

images (`list[PIL.Image.Image]` أو `np.ndarray`) : قائمة من صور PIL منزوعة الضوضاء بطول `batch_size` أو مصفوفة NumPy بأبعاد `(batch_size, height, width, num_channels)`.

nsfw_content_detected (`list[bool]`) : قائمة تُبيّن ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw) أو `None` إذا تعذّر إجراء فحص الأمان.

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

