Buckets:
| # Kandinsky 6 | |
| Kandinsky 6 هي عائلة من نماذج توليد الفيديو من [Kandinsky Lab](https://huggingface.co/kandinskylab). يقوم النموذج الرئيسي بتوليد فيديو وصوت متزامن من نص أو صورة مرجعية باستخدام محوّل انتشار متعدد الوسائط واحد: يتم إزالة الضوضاء عن كامنات الفيديو والصوت معًا عبر كتل مدمجة تتقاطع في الانتباه بين الوسائطتين، حيث يُشترط كل منهما على فرع نصي خاص به من Qwen2.5-VL وعلى تضمين مجمّع من CLIP. يوجد نموذج منفصل لرفع الدقة يقوم بزيادة حجم الفيديو المولّد قطعةً قطعة في فضاء الكامن الخاص بـ K-VAE السببي ثلاثي الأبعاد. | |
| > [!TIP] | |
| > اطّلع على منظمة [Kandinsky Lab](https://huggingface.co/kandinskylab) على Hub للحصول على مجموعة كاملة من نقاط التفتيش الرسمية، بما في ذلك متغيرات مطابقة التدفق والمُقطّرة لكلٍّ من النموذج الأساسي ونموذج رفع الدقة. | |
| > | |
| > تأتي نقاط التفتيش المُصغَّرة مع [PiflowScheduler](/docs/diffusers/main/ar/api/schedulers/piflow#diffusers.PiflowScheduler) ذي الخطوات القليلة، ويجب تشغيلها مع `guidance_scale=1.0`. | |
| ## النماذج المتاحة | |
| | النموذج | خط أنابيب | ملاحظات | | |
| |---|---|---| | |
| | [`kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-Pro-5s-Diffusers) | [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) | مطابقة التدفق، `guidance_scale=5.0`، 50 خطوة | | |
| | [`kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers) | [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) | مُقطَّر، `guidance_scale=1.0`، 10 خطوات | | |
| | [`kandinskylab/Kandinsky-6.0-Lite-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-Lite-5s-Diffusers) | [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) | مطابقة التدفق، `guidance_scale=5.0`، 50 خطوة | | |
| | [`kandinskylab/Kandinsky-6.0-Lite-distill-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-Lite-distill-5s-Diffusers) | [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) | مُقطَّر، `guidance_scale=1.0`، 10 خطوات | | |
| | [`kandinskylab/Kandinsky-6.0-Pro-pretrain-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-Pro-pretrain-5s-Diffusers) | [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) | مطابقة التدفق، `guidance_scale=5.0`، 50 خطوة | | |
| | [`kandinskylab/Kandinsky-6.0-Lite-pretrain-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-Lite-pretrain-5s-Diffusers) | [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) | مطابقة التدفق، `guidance_scale=5.0`، 50 خطوة | | |
| | [`kandinskylab/Kandinsky-6.0-VSR-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-VSR-5s-Diffusers) | [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) | الرفع الدقيق باستخدام مطابقة التدفق | | |
| | [`kandinskylab/Kandinsky-6.0-VSR-distilled2steps-5s-Diffusers`](https://huggingface.co/kandinskylab/Kandinsky-6.0-VSR-distilled2steps-5s-Diffusers) | [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) | دقة فائقة مُقطّرة، خطوتان | | |
| ## من نص/صورة إلى فيديو وصوت | |
| ```python | |
| import torch | |
| from diffusers import Kandinsky6TI2VAPipeline | |
| from diffusers.utils import encode_video | |
| pipe = Kandinsky6TI2VAPipeline.from_pretrained( | |
| "kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers", torch_dtype=torch.bfloat16 | |
| ) | |
| pipe.enable_model_cpu_offload() | |
| output = pipe( | |
| prompt="A cat and a dog baking a cake together in a kitchen.", | |
| height=480, | |
| width=864, | |
| num_frames=121, | |
| num_inference_steps=10, | |
| guidance_scale=1.0, | |
| ) | |
| encode_video( | |
| output.frames[0], | |
| fps=24, | |
| output_path="output.mp4", | |
| audio=output.audio[0][None], | |
| audio_sample_rate=pipe.audio_sample_rate, | |
| ) | |
| ``` | |
| مرّر `image=` لتكييف الإطار الأول على صورة مرجعية، و`sample_audio=False` لتوليد الفيديو فقط، و`expand_prompts=True` للسماح لمشفّر النصوص Qwen2.5-VL بإعادة كتابة الأوامر النصية القصيرة إلى أوامر مفصّلة أولاً. | |
| ## تحسين دقة الفيديو | |
| يقوم [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) بأخذ الإطارات التي ينتجها [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) ورفع دقتها بمقدار `2` أو `4` أو `2.25` (رفع مسبق ثنائي الخطية بمقدار 1.125x يليه مسار الرفع بمقدار 2x). يتم تقسيم الفيديو إلى بلاطات متداخلة، ويُحسَّن كل بلاطة عند إحدى أحجام البلاطات التي تم تدريب محول رفع الدقة عليها، ثم تُدمج البلاطات معاً باستخدام نوافذ هان. | |
| ```python | |
| # required: lets inductor pick flex-attention tiles that fit the SR block mask | |
| torch._inductor.config.max_autotune = True | |
| sr_pipe = Kandinsky6SRPipeline.from_pretrained( | |
| "kandinskylab/Kandinsky-6.0-VSR-distilled2steps-5s-Diffusers", torch_dtype=torch.bfloat16 | |
| ) | |
| # The SR transformer always runs NABLA sparse attention on the `flex` backend. Compile it, otherwise flex falls | |
| # back to an eager implementation that needs far more memory at video resolutions. | |
| sr_pipe.enable_model_cpu_offload() | |
| sr_pipe.transformer.set_attention_backend("flex") | |
| sr_pipe.transformer.compile_repeated_blocks(fullgraph=True) | |
| upscaled = sr_pipe(video=output.frames[0], resolution_scale=2.25, num_inference_steps=2).frames[0] | |
| ``` | |
| ## تحسين الذاكرة | |
| راجع دليل [تقليل استهلاك الذاكرة](../../optimization/memory) للاطلاع على مجموعة التقنيات العامة. يدعم كل من [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) و [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) ميزة [نقل النموذج](../../optimization/memory#model-offloading) (المستخدمة أعلاه) و، للحصول على بصمة أصغر على حساب السرعة، [نقل المعالج المركزي التسلسلي](../../optimization/memory#cpu-offloading): | |
| ```python | |
| pipe.enable_sequential_cpu_offload() | |
| ``` | |
| يدعم VAE الخاص بالفيديو في [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) أيضًا [فك الترميز المُجزّأ](../../optimization/memory#vae-tiling) للدقات العالية أو الفيديوهات الطويلة: | |
| ```python | |
| pipe.vae.enable_tiling() | |
| ``` | |
| ## ملاحظات | |
| - يجب أن تكون قيمتا `height` و`width` قابلة للقسمة على نسبة الضغط المكاني الخاصة بـ VAE للفيديو مضروبة في حجم الباتش الخاص بالترانسفورمر — أي `16` مع إعداد [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) الافتراضي (`AutoencoderKLHunyuanVideo` بنسبة ضغط `8`، و`patch_size=(1, 2, 2)`). القيمة `480x864`، المستخدمة في المثال أعلاه، تحقق من هذا الشرط. | |
| - يجب أن يحتوي مدخل `video` الخاص بـ [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) على `1 + k * vae_scale_factor_temporal` إطارًا لبعض الأعداد الصحيحة `k` (نسبة ضغط زمني قدرها `4` مع إعداد K-VAE الافتراضي، لذا يعمل `121` إطارًا بينما لا يعمل `120`) — قم بقص أو ملء الفيديو الذي لا يحقق هذا الشرط مسبقًا قبل تكبيره. | |
| - `expand_prompts=True` يعيد استخدام مُشفِّر النص Qwen2.5-VL المُحمَّل مسبقًا لمرحلة توليد إضافية قبل إزالة الضوضاء، مما يضيف زمن استجابة دون إضافة أوزان نموذج إضافية. | |
| - قم بتجميع كتل الترانسفورمر المتكررة للحصول على استدلال متكرر أسرع: | |
| ```python | |
| pipe.transformer.compile_repeated_blocks(fullgraph=True) | |
| ``` | |
| ## Kandinsky6TI2VAPipeline[[diffusers.Kandinsky6TI2VAPipeline]] | |
| #### diffusers.Kandinsky6TI2VAPipeline[[diffusers.Kandinsky6TI2VAPipeline]] | |
| ```python | |
| diffusers.Kandinsky6TI2VAPipeline(transformer: Kandinsky6Transformer3DModel, vae: AutoencoderKLHunyuanVideo, text_encoder: Qwen2_5_VLForConditionalGeneration, tokenizer: Qwen2_5_VLProcessor, text_encoder_2: CLIPTextModel, tokenizer_2: CLIPTokenizer, scheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | diffusers.schedulers.scheduling_piflow.PiflowScheduler, audio_vae: diffusers.models.autoencoders.autoencoder_mmaudio.MMAudioVAE | None = None, vocoder: diffusers.models.autoencoders.mmaudio_vocoder.MMAudioVocoder | None = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L178) | |
| **المعاملات:** | |
| transformer ([Kandinsky6Transformer3DModel](/docs/diffusers/main/ar/api/models/kandinsky6_transformer#diffusers.Kandinsky6Transformer3DModel)) : محوّل متعدد الوسائط يقوم بإزالة الضوضاء من الكمونيات (latents) الخاصة بالفيديو والصوت. | |
| vae ([AutoencoderKLHunyuanVideo](/docs/diffusers/main/ar/api/models/autoencoder_kl_hunyuan_video#diffusers.AutoencoderKLHunyuanVideo)) : نموذج VAE للفيديو يُستخدم لتشفير الصورة المرجعية وفك تشفير الفيديو المُولَّد. | |
| text_encoder ([Qwen2_5_VLForConditionalGeneration](https://huggingface.co/docs/transformers/main/en/model_doc/qwen2_5_vl#transformers.Qwen2_5_VLForConditionalGeneration)) : نموذج Qwen2.5-VL الذي يوفر تضمينات النص على مستوى الرموز، وخيارياً، توسيع الأوامر. | |
| tokenizer ([Qwen2_5_VLProcessor](https://huggingface.co/docs/transformers/main/en/model_doc/qwen2_5_vl#transformers.Qwen2_5_VLProcessor)) : المعالج الخاص بـ `text_encoder`. | |
| text_encoder_2 ([CLIPTextModel](https://huggingface.co/docs/transformers/main/en/model_doc/clip#transformers.CLIPTextModel)) : مُشفِّر نص CLIP الذي يوفر تضمين النص المُجمَّع. | |
| tokenizer_2 ([CLIPTokenizer](https://huggingface.co/docs/transformers/main/en/model_doc/clip#transformers.CLIPTokenizer)) : مُجزِّئ `text_encoder_2`. | |
| scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) أو [PiflowScheduler](/docs/diffusers/main/ar/api/schedulers/piflow#diffusers.PiflowScheduler)) : الجدولة المستخدمة مع `transformer` لإزالة الضوضاء من الكمونيات. نقاط التفتيش المُقطّرة تأتي مع [PiflowScheduler](/docs/diffusers/main/ar/api/schedulers/piflow#diffusers.PiflowScheduler) ويجب تشغيلها مع `guidance_scale=1.0`. | |
| audio_vae ([MMAudioVAE](/docs/diffusers/main/ar/api/models/kandinsky6_vae#diffusers.MMAudioVAE)، *اختياري*) : نموذج VAE الصوتي المستخدم لفك ترميز الكميات الصوتية المولّدة إلى طيف ميل. لا يُطلب إلا عند تعيين `sample_audio=True`. | |
| vocoder ([MMAudioVocoder](/docs/diffusers/main/ar/api/models/kandinsky6_vae#diffusers.MMAudioVocoder)، *اختياري*) : مُصوِّت (Vocoder) يُستخدم لتحويل مطياف الميل (mel spectrogram) الذي يفكّكه `audio_vae` إلى موجة صوتية. لا يُحتاج إليه إلا عند تعيين `sample_audio=True`. | |
| خط أنابيب لتوليد الفيديو والصوت من النص/الصورة باستخدام Kandinsky 6. | |
| تتم إزالة الضوضاء من البيانات الكامنة للفيديو والصوت معًا بواسطة محوّل متعدد الوسائط واحد، مشروطًا على رموز النص من Qwen2.5-VL وتضمين مجمّع من CLIP. كما يمكن لصورة مرجعية اختيارية أن تشترط الإطار الأول. | |
| يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ). | |
| #### __call__[[diffusers.Kandinsky6TI2VAPipeline.__call__]] | |
| ```python | |
| __call__(prompt: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_prompt: str | list[str] | None = None, height: int = 512, width: int = 768, num_frames: int = 121, frame_rate: float = 24.0, num_inference_steps: int = 50, timesteps: list[int] | None = None, sigmas: list[float] | None = None, guidance_scale: float = 5.0, num_videos_per_prompt: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, audio_latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, sample_audio: bool = True, expand_prompts: bool = False, max_sequence_length: int = 1024, output_type: str = 'pil', return_dict: bool = True, callback_on_step_end: collections.abc.Callable[[int, int, dict], None] | None = None, callback_on_step_end_tensor_inputs: list[str] = ['latents']) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L644) | |
| **المعاملات:** | |
| prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي تُوجّه عملية التوليد. مطلوب ما لم يُقدَّم `prompt_embeds`. | |
| image (`PipelineImageInput`، *اختياري*) : صورة مرجعية أو صور مرجعية تُشكّل شرطًا للإطار الأول (من صورة إلى فيديو وصوت). | |
| negative_prompt (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه التوليد بها. الافتراضي هو الموجه السلبي الخاص بـ Kandinsky 6. | |
| height (`int`، القيمة الافتراضية `512`) : ارتفاع الفيديو المولّد بالبكسل. | |
| width (`int`، القيمة الافتراضية `768`) : عرض الفيديو المولّد بالبكسل. | |
| num_frames (`int`، القيمة الافتراضية `121`) : عدد الإطارات المولّدة. | |
| frame_rate (`float`، القيمة الافتراضية `24.0`) : معدل الإطارات الذي يتم توليد الفيديو به؛ يحدد طول الصوت المتزامن. | |
| num_inference_steps (`int`، القيمة الافتراضية `50`) : عدد خطوات إزالة الضوضاء. استخدم `16` مع نقاط التفتيش المُقطّرة. | |
| timesteps (`list[int]`، *اختياري*) : خطوات زمنية مخصصة للمجدولين الذين يدعمونها. | |
| sigmas (`list[float]`، *اختياري*) : قيم سيجما مخصصة للمجدولين الذين يدعمونها. | |
| guidance_scale (`float`، القيمة الافتراضية `5.0`) : مقياس التوجيه الحر من التصنيف. يجب أن يكون `1.0` مع [PiflowScheduler](/docs/diffusers/main/ar/api/schedulers/piflow#diffusers.PiflowScheduler). | |
| num_videos_per_prompt (`int`، القيمة الافتراضية `1`) : عدد مقاطع الفيديو التي سيتم توليدها لكل موجه. | |
| generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : المولّدات المستخدمة للضوضاء الأولية وتشفير الصورة المرجعية. | |
| latents (`torch.Tensor`، *اختياري*) : كامنات فيديو مُولّدة مسبقًا على شكل `(batch_size, channels, num_latent_frames, latent_height, latent_width)`. | |
| audio_latents (`torch.Tensor`، *اختياري*) : كامنات صوتية مُولّدة مسبقًا على شكل `(batch_size, channels, audio_length)`. | |
| prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا لنموذج Qwen2.5-VL. | |
| pooled_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مجمّعة مُولّدة مسبقًا لـ CLIP. | |
| negative_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا لنموذج Qwen2.5-VL. | |
| negative_pooled_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مجمّعة سلبية مُولّدة مسبقًا لـ CLIP. | |
| sample_audio (`bool`، القيمة الافتراضية `True`) : ما إذا كان سيتم توليد صوت متزامن. يتطلب أن يحتوي خط المعالجة على `audio_vae` و`vocoder`. | |
| expand_prompts (`bool`، القيمة الافتراضية `False`) : ما إذا كان يجب إعادة كتابة الأوامر باستخدام [expand_prompts()](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline.expand_prompts) قبل الترميز. | |
| max_sequence_length (`int`، القيمة الافتراضية `1024`) : الحد الأقصى لعدد رموز الاستعلام بعد قالب المحادثة. | |
| output_type (`str`، الافتراضي `"pil"`) : صيغة مخرجات الفيديو المولّد: `"pil"` أو `"np"` أو `"pt"` أو `"latent"`. | |
| return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [Kandinsky6TI2VAPipelineOutput](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipelineOutput) بدلاً من tuple عادي. | |
| callback_on_step_end (`Callable`، *اختياري*) : دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء باستخدام `callback_on_step_end(self, step, timestep, callback_kwargs)`. قد تُرجع قاموسًا (dict) يتجاوز المصفوفات (tensors) المذكورة. | |
| callback_on_step_end_tensor_inputs (`list[str]`، القيمة الافتراضية هي `["latents"]`) : مدخلات المصفوفات التي تُمرَّر إلى `callback_on_step_end`؛ وهي مجموعة فرعية من `_callback_tensor_inputs`. | |
| **يعيد:** [Kandinsky6TI2VAPipelineOutput](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipelineOutput) أو `tuple` | |
| الفيديو والصوت المولّدان؛ مجموعة `(frames, audio)` عندما يكون `return_dict=False`. | |
| دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد. | |
| أمثلة: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import Kandinsky6TI2VAPipeline | |
| >>> from diffusers.utils import encode_video | |
| >>> pipe = Kandinsky6TI2VAPipeline.from_pretrained( | |
| ... "kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers", torch_dtype=torch.bfloat16 | |
| ... ) | |
| >>> pipe.enable_model_cpu_offload() | |
| >>> output = pipe( | |
| ... prompt="A cat and a dog baking a cake together in a kitchen.", | |
| ... height=480, | |
| ... width=864, | |
| ... num_frames=121, | |
| ... num_inference_steps=16, | |
| ... guidance_scale=1.0, | |
| ... ) | |
| >>> encode_video( | |
| ... output.frames[0], | |
| ... fps=24, | |
| ... output_path="output.mp4", | |
| ... audio=output.audio[0][None], | |
| ... audio_sample_rate=pipe.audio_sample_rate, | |
| ... ) | |
| ``` | |
| #### encode_image[[diffusers.Kandinsky6TI2VAPipeline.encode_image]] | |
| ```python | |
| encode_image(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], height: int, width: int, device: device, dtype: dtype, num_videos_per_prompt: int = 1, generator: typing.Optional[torch.Generator] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L551) | |
| ترمز الصور المرجعية إلى كامنات الإطار الأول ذات الشكل `(batch_size, latent_height, latent_width, latent_channels)`، مضروبة بمعامل `scaling_factor` الخاص بـ VAE. يتم تغيير حجم صور PIL وقصّها من المنتصف إلى `height x width`؛ بينما يجب أن تكون الموترات والمصفوفات بهذا الحجم مسبقاً. يتم تكرار الكامنات `num_videos_per_prompt` مرات على طول بُعد الدفعة. | |
| #### encode_prompt[[diffusers.Kandinsky6TI2VAPipeline.encode_prompt]] | |
| ```python | |
| encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 1024, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L309) | |
| **المعاملات:** | |
| prompt (`str` أو `list[str]`) : الأمر الذي سيتم ترميزه. | |
| negative_prompt (`str` أو `list[str]`، *اختياري*) : الأمر الذي لا يوجّه التوليد. يُتجاهل عندما يكون `do_classifier_free_guidance` هو `False`. | |
| do_classifier_free_guidance (`bool`، القيمة الافتراضية `True`) : ما إذا كان سيتم ترميز الموجه السلبي أيضًا. | |
| num_videos_per_prompt (`int`، القيمة الافتراضية `1`) : عدد مقاطع الفيديو المولّدة لكل موجه؛ حيث يتم تكرار التضمينات (embeddings) وفقًا لذلك. | |
| prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا لنموذج Qwen2.5-VL. يتخطى ترميز `prompt`. | |
| pooled_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مجمّعة مُولّدة مسبقًا لـ CLIP. يجب تقديمها معًا مع `prompt_embeds`. | |
| prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع تعبئة منطقي لـ`prompt_embeds`. | |
| negative_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا لنموذج Qwen2.5-VL. | |
| negative_pooled_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مجمّعة سلبية مُولّدة مسبقًا لـ CLIP. | |
| negative_prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع تعبئة منطقي لـ`negative_prompt_embeds`. | |
| max_sequence_length (`int`، القيمة الافتراضية `1024`) : الحد الأقصى لعدد رموز الاستعلام بعد قالب المحادثة. | |
| device (`torch.device`، *اختياري*) : الجهاز الذي تُشغَّل عليه مُشفِّرات النص. | |
| dtype (`torch.dtype`، *اختياري*) : نوع البيانات (Dtype) للتضمينات المُعادَة. | |
| يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص. | |
| #### expand_prompts[[diffusers.Kandinsky6TI2VAPipeline.expand_prompts]] | |
| ```python | |
| expand_prompts(prompt: str | list[str], tokenizer, text_encoder, device: device, image: PIL.Image.Image | list[PIL.Image.Image] | None = None, max_sequence_length: int = 1024, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L412) | |
| **المعاملات:** | |
| prompt (`str` أو `list[str]`) : الأمر أو الأوامر التي سيتم توسيعها. | |
| tokenizer : معالج Qwen2.5-VL، على سبيل المثال `pipe.tokenizer`. | |
| text_encoder : نموذج Qwen2.5-VL، على سبيل المثال `pipe.text_encoder`. | |
| device (`torch.device`) : الجهاز الذي سيتم تشغيل مُشفِّر النص عليه. | |
| image (`PIL.Image.Image` أو `list[PIL.Image.Image]`، *اختياري*) : صورة مرجعية أو صور مرجعية لاستدعاء تحويل الصورة إلى فيديو. | |
| max_sequence_length (`int`، القيمة الافتراضية `1024`) : الحد الأقصى لعدد الرموز المولّدة لكل موجه. | |
| generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : يحدد البذرة للتوسعة المُستخرجة؛ يجب أن يطابق طول القائمة طول `prompt`، مع مولّد واحد لكل عنصر. تستخرج `generate` من مولّد الأرقام العشوائية العام، لذا تُزرع بذرة المولّد العام من بذرة هذا المولّد؛ وتبقى استدعاءات `randn_tensor` اللاحقة تستخدم `generator` مباشرة. | |
| **يعيد:** `str` أو `list[str]` | |
| الموجّهات الموسّعة. | |
| يعيد كتابة الموجزات القصيرة إلى موجزات فيديو وصوت مفصلة باستخدام مُشفّر النص Qwen2.5-VL، مع الارتكاز على الصورة المرجعية عند توفرها. وهو `staticmethod` حتى يمكن استخدامه بشكل مستقل، قبل تشغيل خط الأنابيب. | |
| #### prepare_audio_latents[[diffusers.Kandinsky6TI2VAPipeline.prepare_audio_latents]] | |
| ```python | |
| prepare_audio_latents(batch_size: int, num_channels_latents: int, audio_length: int, dtype: dtype, device: device, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType], audio_latents: typing.Optional[torch.Tensor] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L607) | |
| يعيد الكامنات الصوتية في تخطيط `(batch_size, audio_length, channels)` الخاص بالمحوّل. يُتوقع أن يكون متجه `audio_latents` الذي يوفّره المستخدم في تخطيط `(batch_size, channels, audio_length)`. | |
| #### prepare_latents[[diffusers.Kandinsky6TI2VAPipeline.prepare_latents]] | |
| ```python | |
| prepare_latents(batch_size: int, num_channels_latents: int, height: int, width: int, num_frames: int, dtype: dtype, device: device, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType], latents: typing.Optional[torch.Tensor] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_ti2va.py#L578) | |
| يعيد كامنات الفيديو في تخطيط `(batch_size, num_frames, height, width, channels)` الخاص بالمحوّل. يُتوقع أن يكون متجه `latents` الذي يوفّره المستخدم في تخطيط `(batch_size, channels, num_frames, height, width)`. | |
| ## Kandinsky6SRPipeline[[diffusers.Kandinsky6SRPipeline]] | |
| #### diffusers.Kandinsky6SRPipeline[[diffusers.Kandinsky6SRPipeline]] | |
| ```python | |
| diffusers.Kandinsky6SRPipeline(transformer: Kandinsky6SRTransformer3DModel, vae: Kandinsky6SRVAE, scheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | diffusers.schedulers.scheduling_piflow.PiflowScheduler, latent_upscaler: diffusers.models.latent_upscaler.latent_upscaler_kandinsky6_sr.Kandinsky6SRLatentUpscalerBank | None = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_sr.py#L143) | |
| **المعاملات:** | |
| transformer ([Kandinsky6SRTransformer3DModel](/docs/diffusers/main/ar/api/models/kandinsky6_transformer#diffusers.Kandinsky6SRTransformer3DModel)) : نموذج Transformer يعمل على تحسين البلاطات الكامنة. | |
| vae ([Kandinsky6SRVAE](/docs/diffusers/main/ar/api/models/kandinsky6_vae#diffusers.Kandinsky6SRVAE)) : نموذج K-VAE سببي للفيديو يُستخدم لتشفير الفيديو المدخل وفك تشفير البلاطات المُحسَّنة. | |
| scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) أو [PiflowScheduler](/docs/diffusers/main/ar/api/schedulers/piflow#diffusers.PiflowScheduler)) : الجدولة المستخدمة مع `transformer` لإزالة الضوضاء من البلاطات. تأتي نقاط التفتيش المُقطّرة مع [PiflowScheduler](/docs/diffusers/main/ar/api/schedulers/piflow#diffusers.PiflowScheduler). | |
| latent_upscaler ([Kandinsky6SRLatentUpscalerBank](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRLatentUpscalerBank)، *اختياري*) : مُعظِّمات الكامنة (Latent upscalers) للمقاييس المدعومة. | |
| خط أنابيب لرفع دقة الفيديو باستخدام Kandinsky 6. | |
| يُقسَّم الفيديو إلى بلاطات مكانية متداخلة، حيث تُحسَّن كل بلاطة بواسطة محوّل SR عند إحدى أحجام البلاطات التي تم تدريب النموذج عليها (`transformer.config.tile_sizes`)، ثم تُدمج البلاطات المحسَّنة مرة أخرى باستخدام نوافذ هان. عندما يحتوي خط المعالجة على `latent_upscaler`، تُقطع البلاطات من كامنات K-VAE للفيديو بأكمله وتُكبَّر في فضاء الكامنة؛ وإلا تُكبَّر بلاطات البكسلات بطريقة الاستيفاء ثنائي الخطية ثم تُرمَّز. | |
| يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ). | |
| #### __call__[[diffusers.Kandinsky6SRPipeline.__call__]] | |
| ```python | |
| __call__(video: typing.Union[list[PIL.Image.Image], list[list[PIL.Image.Image]], numpy.ndarray, torch.Tensor], resolution_scale: float = 2.25, num_inference_steps: int = 4, timesteps: list[int] | None = None, sigmas: list[float] | None = None, lq_noise_scale: float = 0.7, min_overlap: float = 0.2, tiles_batch_size: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str = 'pil', return_dict: bool = True) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_sr.py#L228) | |
| **المعاملات:** | |
| video (`list[PIL.Image.Image]` أو `np.ndarray` أو `torch.Tensor`) : مقاطع الفيديو منخفضة الدقة، بأي صيغة يقبلها [preprocess_video()](/docs/diffusers/main/ar/api/video_processor#diffusers.VideoProcessor.preprocess_video)، مع `1 + k * 4` إطارًا. يتم تقريب الأبعاد إلى أقرب مضاعف كامل لعامل VAE المكاني. | |
| resolution_scale (`float`، القيمة الافتراضية `2.25`) : إجمالي التكبير المكاني: `2` أو `4` أو `2.25` (تكبير مسبق ثنائي الخطية بمعامل 1.125x يليه مسار التكبير بمعامل 2x). | |
| num_inference_steps (`int`، القيمة الافتراضية `4`) : عدد خطوات إزالة الضوضاء لكل بلاطة. استخدم `2` مع نقاط التفتيش المُقطّرة. | |
| timesteps (`list[int]`، *اختياري*) : خطوات زمنية مخصصة للمجدولين الذين يدعمونها. | |
| sigmas (`list[float]`، *اختياري*) : قيم سيجما مخصصة للمجدولين الذين يدعمونها. | |
| lq_noise_scale (`float`، القيمة الافتراضية `0.7`) : كمية الضوضاء الغاوسية الممزوجة مع الكمون منخفض الدقة (مع الحفاظ على التباين) قبل إزالة الضوضاء. | |
| min_overlap (`float`، القيمة الافتراضية `0.2`) : الحد الأدنى من التداخل بين البلاطات المتجاورة كنسبة من حجم البلاطة. | |
| tiles_batch_size (`int`، القيمة الافتراضية `1`) : عدد البلاطات التي تتم إزالة الضوضاء منها في كل استدعاء لمحوّل. | |
| generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : المولّدات المستخدمة للضوضاء الممزوجة في البلاطات. | |
| output_type (`str`، الافتراضي `"pil"`) : صيغة مخرجات الفيديو المولّد: `"pil"` أو `"np"` أو `"pt"`. | |
| return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [Kandinsky6SRPipelineOutput](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipelineOutput) بدلاً من tuple عادي. | |
| **يعيد:** [Kandinsky6SRPipelineOutput](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipelineOutput) أو `tuple` | |
| الفيديو المُعالج بدقة فائقة؛ مجموعة (tuple) بعنصر واحد عند `return_dict=False`. | |
| دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالدقة الفائقة. | |
| أمثلة: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import Kandinsky6SRPipeline, Kandinsky6TI2VAPipeline | |
| >>> from diffusers.utils import export_to_video | |
| >>> pipe = Kandinsky6TI2VAPipeline.from_pretrained( | |
| ... "kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers", torch_dtype=torch.bfloat16 | |
| ... ) | |
| >>> pipe.enable_model_cpu_offload() | |
| >>> video = pipe( | |
| ... prompt="A cat and a dog baking a cake together in a kitchen.", | |
| ... height=480, | |
| ... width=864, | |
| ... num_inference_steps=16, | |
| ... guidance_scale=1.0, | |
| ... sample_audio=False, | |
| ... ).frames[0] | |
| >>> sr_pipe = Kandinsky6SRPipeline.from_pretrained( | |
| ... "kandinskylab/Kandinsky-6.0-VSR-distilled2steps-5s-Diffusers", torch_dtype=torch.bfloat16 | |
| ... ) | |
| >>> # The transformer always runs attention through the `flex` backend; compiling avoids the eager | |
| >>> # fallback's much higher memory use at video resolutions. | |
| >>> sr_pipe.transformer.compile_repeated_blocks(fullgraph=True) | |
| >>> sr_pipe.enable_model_cpu_offload() | |
| >>> output = sr_pipe(video=video, resolution_scale=2.25, num_inference_steps=2) | |
| >>> export_to_video(output.frames[0], "output_sr.mp4", fps=24) | |
| ``` | |
| #### decode_latents[[diffusers.Kandinsky6SRPipeline.decode_latents]] | |
| ```python | |
| decode_latents(latents: Tensor) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_sr.py#L223) | |
| يفكّك كود K-VAE المُقيَّم إلى فيديو بأبعاد `(batch_size, channels, num_frames, height, width)` ضمن المدى `[-1, 1]`. | |
| #### encode_video[[diffusers.Kandinsky6SRPipeline.encode_video]] | |
| ```python | |
| encode_video(video: Tensor) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_kandinsky6_sr.py#L213) | |
| يقوم بتشفير فيديو بأبعاد `(batch_size, channels, num_frames, height, width)` بقيم ضمن المدى `[-1, 1]` إلى متغيرات K-VAE مُقيّمة بمعامل `scaling_factor` الخاص بـ VAE. | |
| ## Kandinsky6SRLatentUpscalerBank[[diffusers.Kandinsky6SRLatentUpscalerBank]] | |
| #### diffusers.Kandinsky6SRLatentUpscalerBank[[diffusers.Kandinsky6SRLatentUpscalerBank]] | |
| ```python | |
| diffusers.Kandinsky6SRLatentUpscalerBank(in_channels: int = 64, stage_channels: tuple[int, int, int] = (2048, 1024, 512), num_pre_blocks: int = 5, num_mid_blocks: int = 3, num_post_blocks: int = 3, num_x2_adapter_blocks: int = 2, scales: tuple[int, ...] = (2, 4), scaling_factor: float = 0.910344004631042) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/latent_upscaler/latent_upscaler_kandinsky6_sr.py#L251) | |
| **المعاملات:** | |
| in_channels (`int`، القيمة الافتراضية `64`) : عدد قنوات الكمون. | |
| stage_channels (`tuple[int, int, int]`، القيمة الافتراضية هي `(2048, 1024, 512)`) : عرض الميزات للمراحل الثلاث في التسلسل. | |
| num_pre_blocks (`int`، القيمة الافتراضية `5`) : كتل المتبقي قبل أول عملية رفع عينة في نموذج x4. | |
| num_mid_blocks (`int`، القيمة الافتراضية هي `3`) : كتل المتبقي بين عمليتي رفع العينتين. | |
| num_post_blocks (`int`، القيمة الافتراضية `3`) : كتل المتبقي بعد آخر عملية رفع عينة. | |
| num_x2_adapter_blocks (`int`، القيمة الافتراضية `2`) : كتل المتبقي (Residual blocks) لمحوّل (adapter) نموذج x2. | |
| scales (`tuple[int, ...]`، القيمة الافتراضية `(2, 4)`) : المقاييس المكانية التي يوفر البنك مُكبِّراً لها. | |
| scaling_factor (`float`، القيمة الافتراضية `0.910344`) : يُقيَّم أن المدخلات الكامنة تحمل هذا المعامل (عامل `scaling_factor` الخاص بـ K-VAE). | |
| بنك مُعظِّمات كامنة (latent upscalers) تستخدمه [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline): مُعظِّم كامن واحد `Kandinsky6SRLatentUpscaler` لكل مقياس مكاني مدعوم، يعمل على الكمونات (latents) الخاصة بـ K-VAE. | |
| #### forward[[diffusers.Kandinsky6SRLatentUpscalerBank.forward]] | |
| ```python | |
| forward(latents: Tensor, scale: int, return_dict: bool = True) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/latent_upscaler/latent_upscaler_kandinsky6_sr.py#L305) | |
| **المعاملات:** | |
| latents (`torch.Tensor` من الشكل `(batch_size, in_channels, num_frames, height, width)`) : كامنات K-VAE مُقيّمة بواسطة `scaling_factor`. | |
| scale (`int`) : عامل التكبير المكاني؛ أحد قيم `scales`. | |
| return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع `~models.autoencoder_kl.DecoderOutput` بدلاً من tuple عادي. | |
| **يعيد:** | |
| المتغيرات المُصعَّدة (upscaled latents) ذات الشكل `(batch_size, in_channels, num_frames, height * scale, width * scale)`. | |
| ## Kandinsky6TI2VAPipelineOutput[[diffusers.Kandinsky6TI2VAPipelineOutput]] | |
| #### diffusers.Kandinsky6TI2VAPipelineOutput[[diffusers.Kandinsky6TI2VAPipelineOutput]] | |
| ```python | |
| diffusers.Kandinsky6TI2VAPipelineOutput(frames: typing.Union[torch.Tensor, numpy.ndarray, list[list[PIL.Image.Image]]], audio: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_output.py#L25) | |
| **المعاملات:** | |
| frames (`torch.Tensor` أو `np.ndarray` أو `list[list[PIL.Image.Image]]`) : الفيديو المولّد. قائمة متداخلة بطول `batch_size` تحتوي على `num_frames` صورة PIL لكل منها، أو مصفوفة NumPy أو متجه torch بأبعاد `(batch_size, num_frames, height, width, channels)` / `(batch_size, num_frames, channels, height, width)`. عند استخدام `output_type="latent"`، تكون أبعاد كامنات الفيديو `(batch_size, channels, num_latent_frames, latent_height, latent_width)`. | |
| audio (`torch.Tensor` أو `np.ndarray`، *اختياري*) : الموجات الصوتية المولّدة ذات الشكل `(batch_size, num_samples)` ضمن `[-1, 1]` بمعدل أخذ العينات الخاص بـ VAE الصوتي، أو `None` إذا لم يتم أخذ عينات من الصوت. مع `output_type="latent"`، تكون الكامنات الصوتية ذات الشكل `(batch_size, channels, audio_length)`. | |
| فئة الإخراج الخاصة بـ [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline). | |
| ## Kandinsky6SRPipelineOutput[[diffusers.Kandinsky6SRPipelineOutput]] | |
| #### diffusers.Kandinsky6SRPipelineOutput[[diffusers.Kandinsky6SRPipelineOutput]] | |
| ```python | |
| diffusers.Kandinsky6SRPipelineOutput(frames: typing.Union[torch.Tensor, numpy.ndarray, list[list[PIL.Image.Image]]]) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/kandinsky6/pipeline_output.py#L46) | |
| **المعاملات:** | |
| frames (`torch.Tensor` أو `np.ndarray` أو `list[list[PIL.Image.Image]]`) : الفيديو المُعالَج بتقنية رفع الدقة. قائمة متداخلة بطول `batch_size` تحتوي على `num_frames` صورة بصيغة PIL لكل عنصر، أو مصفوفة NumPy أو متجه torch بأبعاد `(batch_size, num_frames, height, width, channels)` / `(batch_size, num_frames, channels, height, width)`. | |
| فئة الإخراج الخاصة بـ [Kandinsky6SRPipeline](/docs/diffusers/main/ar/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline). | |
Xet Storage Details
- Size:
- 42.9 kB
- Xet hash:
- ceac584ec1e292688d99db1cc28e973b9d654d2315436018be2cdc2109376e0d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.