Buckets:
| # | |
| # Лицензия Apache License, Version 2.0 («Лицензия»); | |
| # вы можете использовать этот файл только в соответствии с Лицензией. | |
| # Вы можете получить копию Лицензии по адресу | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Если это не требуется применимым законодательством или не оговорено письменно, программное | |
| # распространяется по Лицензии на условиях «КАК ЕСТЬ», | |
| # БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, прямо указанных или подразумеваемых. | |
| # См. Лицензию для получения конкретных условий, регулирующих разрешения и | |
| # ограничениями Лицензии. --> | |
| # ChronoEdit | |
| [ChronoEdit: Towards Temporal Reasoning for Image Editing and World Simulation](https://huggingface.co/papers/2510.04290) от NVIDIA и Университета Торонто, авторы: Jay Zhangjie Wu, Xuanchi Ren, Tianchang Shen, Tianshi Cao, Kai He, Yifan Lu, Ruiyuan Gao, Enze Xie, Shiyi Lan, Jose M. Alvarez, Jun Gao, Sanja Fidler, Zian Wang, Huan Ling. | |
| > **Кратко:** ChronoEdit переосмысляет редактирование изображений как задачу генерации видео, используя исходное и отредактированное изображения в качестве начального и конечного кадров, чтобы задействовать предобученные видеомодели с временной согласованностью. Этап временного рассуждения вводит токены рассуждения для обеспечения физически правдоподобных правок и визуализации траектории редактирования. | |
| *Недавние достижения в области больших генеративных моделей значительно улучшили как редактирование изображений, так и генерацию изображений в контексте, однако сохраняется критический разрыв в обеспечении физической согласованности, при которой отредактированные объекты должны оставаться непротиворечивыми. Эта способность особенно важна для задач, связанных с симуляцией мира. В данной статье мы представляем ChronoEdit — фреймворк, который переосмысляет редактирование изображений как задачу генерации видео. Во-первых, ChronoEdit рассматривает входное и отредактированное изображения как первый и последний кадры видео, что позволяет использовать большие предобученные генеративные модели видео, которые захватывают не только внешний вид объектов, но и неявную физику движения и взаимодействия посредством изученной временной согласованности. Во-вторых, ChronoEdit вводит этап временного рассуждения, который явно выполняет редактирование во время вывода. В рамках этой настройки целевой кадр совместно денезируется с токенами рассуждения, чтобы представить правдоподобную траекторию редактирования, ограничивающую пространство решений физически жизнеспособными преобразованиями. Затем токены рассуждения отбрасываются после нескольких шагов, чтобы избежать высоких вычислительных затрат на рендеринг полного видео. Для валидации ChronoEdit мы представляем PBench-Edit — новый бенчмарк пар «изображение-промпт» для контекстов, требующих физической согласованности, и демонстрируем, что ChronoEdit превосходит передовые базовые методы как по визуальной точности, так и по физической правдоподобности. Страница проекта с кодом и моделями: [this https URL](https://research.nvidia.com/labs/toronto-ai/chronoedit).* | |
| Пайплайн ChronoEdit разработан командой ChronoEdit Team. Исходный код доступен на [GitHub](https://github.com/nv-tlabs/ChronoEdit), а предобученные модели можно найти в коллекции [nvidia/ChronoEdit](https://huggingface.co/collections/nvidia/chronoedit) на Hugging Face. | |
| Доступные модели/LoRA: | |
| - [nvidia/ChronoEdit-14B-Diffusers](https://huggingface.co/nvidia/ChronoEdit-14B-Diffusers) | |
| - [nvidia/ChronoEdit-14B-Diffusers-Upscaler-Lora](https://huggingface.co/nvidia/ChronoEdit-14B-Diffusers-Upscaler-Lora) | |
| - [nvidia/ChronoEdit-14B-Diffusers-Paint-Brush-Lora](https://huggingface.co/nvidia/ChronoEdit-14B-Diffusers-Paint-Brush-Lora) | |
| ### Редактирование изображений | |
| ```py | |
| import torch | |
| import numpy as np | |
| from diffusers import AutoencoderKLWan, ChronoEditTransformer3DModel, ChronoEditPipeline | |
| from diffusers.utils import export_to_video, load_image | |
| from transformers import CLIPVisionModel | |
| from PIL import Image | |
| model_id = "nvidia/ChronoEdit-14B-Diffusers" | |
| image_encoder = CLIPVisionModel.from_pretrained(model_id, subfolder="image_encoder", dtype=torch.float32) | |
| vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32) | |
| transformer = ChronoEditTransformer3DModel.from_pretrained(model_id, subfolder="transformer", dtype=torch.bfloat16) | |
| pipe = ChronoEditPipeline.from_pretrained(model_id, image_encoder=image_encoder, transformer=transformer, vae=vae, dtype=torch.bfloat16) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| image = load_image( | |
| "https://huggingface.co/spaces/nvidia/ChronoEdit/resolve/main/examples/3.png" | |
| ) | |
| max_area = 720 * 1280 | |
| aspect_ratio = image.height / image.width | |
| mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1] | |
| height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value | |
| width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value | |
| print("width", width, "height", height) | |
| image = image.resize((width, height)) | |
| prompt = ( | |
| "The user wants to transform the image by adding a small, cute mouse sitting inside the floral teacup, enjoying a spa bath. The mouse should appear relaxed and cheerful, with a tiny white bath towel draped over its head like a turban. It should be positioned comfortably in the cup’s liquid, with gentle steam rising around it to blend with the cozy atmosphere. " | |
| "The mouse’s pose should be natural—perhaps sitting upright with paws resting lightly on the rim or submerged in the tea. The teacup’s floral design, gold trim, and warm lighting must remain unchanged to preserve the original aesthetic. The steam should softly swirl around the mouse, enhancing the spa-like, whimsical mood." | |
| ) | |
| output = pipe( | |
| image=image, | |
| prompt=prompt, | |
| height=height, | |
| width=width, | |
| num_frames=5, | |
| num_inference_steps=50, | |
| guidance_scale=5.0, | |
| enable_temporal_reasoning=False, | |
| num_temporal_reasoning_steps=0, | |
| ).frames[0] | |
| Image.fromarray((output[-1] * 255).clip(0, 255).astype("uint8")).save("output.png") | |
| ``` | |
| При необходимости включите **temporal reasoning** для улучшения физической согласованности: | |
| ```py | |
| output = pipe( | |
| image=image, | |
| prompt=prompt, | |
| height=height, | |
| width=width, | |
| num_frames=29, | |
| num_inference_steps=50, | |
| guidance_scale=5.0, | |
| enable_temporal_reasoning=True, | |
| num_temporal_reasoning_steps=50, | |
| ).frames[0] | |
| export_to_video(output, "output.mp4", fps=16) | |
| Image.fromarray((output[-1] * 255).clip(0, 255).astype("uint8")).save("output.png") | |
| ``` | |
| ### Вывод с использованием 8-шаговой дистилляционной LoRA | |
| ```py | |
| import torch | |
| import numpy as np | |
| from diffusers import AutoencoderKLWan, ChronoEditTransformer3DModel, ChronoEditPipeline | |
| from diffusers.schedulers import UniPCMultistepScheduler | |
| from diffusers.utils import export_to_video, load_image | |
| from transformers import CLIPVisionModel | |
| from PIL import Image | |
| model_id = "nvidia/ChronoEdit-14B-Diffusers" | |
| image_encoder = CLIPVisionModel.from_pretrained(model_id, subfolder="image_encoder", dtype=torch.float32) | |
| vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32) | |
| transformer = ChronoEditTransformer3DModel.from_pretrained(model_id, subfolder="transformer", dtype=torch.bfloat16) | |
| pipe = ChronoEditPipeline.from_pretrained(model_id, image_encoder=image_encoder, transformer=transformer, vae=vae, dtype=torch.bfloat16) | |
| pipe.load_lora_weights("nvidia/ChronoEdit-14B-Diffusers", weight_name="lora/chronoedit_distill_lora.safetensors", adapter_name="distill") | |
| pipe.fuse_lora(adapter_names=["distill"], lora_scale=1.0) | |
| pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=2.0) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| image = load_image( | |
| "https://huggingface.co/spaces/nvidia/ChronoEdit/resolve/main/examples/3.png" | |
| ) | |
| max_area = 720 * 1280 | |
| aspect_ratio = image.height / image.width | |
| mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1] | |
| height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value | |
| width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value | |
| print("width", width, "height", height) | |
| image = image.resize((width, height)) | |
| prompt = ( | |
| "The user wants to transform the image by adding a small, cute mouse sitting inside the floral teacup, enjoying a spa bath. The mouse should appear relaxed and cheerful, with a tiny white bath towel draped over its head like a turban. It should be positioned comfortably in the cup’s liquid, with gentle steam rising around it to blend with the cozy atmosphere. " | |
| "The mouse’s pose should be natural—perhaps sitting upright with paws resting lightly on the rim or submerged in the tea. The teacup’s floral design, gold trim, and warm lighting must remain unchanged to preserve the original aesthetic. The steam should softly swirl around the mouse, enhancing the spa-like, whimsical mood." | |
| ) | |
| output = pipe( | |
| image=image, | |
| prompt=prompt, | |
| height=height, | |
| width=width, | |
| num_frames=5, | |
| num_inference_steps=8, | |
| guidance_scale=1.0, | |
| enable_temporal_reasoning=False, | |
| num_temporal_reasoning_steps=0, | |
| ).frames[0] | |
| export_to_video(output, "output.mp4", fps=16) | |
| Image.fromarray((output[-1] * 255).clip(0, 255).astype("uint8")).save("output.png") | |
| ``` | |
| ### Вывод с несколькими LoRA | |
| ```py | |
| import torch | |
| import numpy as np | |
| from diffusers import AutoencoderKLWan, ChronoEditTransformer3DModel, ChronoEditPipeline | |
| from diffusers.schedulers import UniPCMultistepScheduler | |
| from diffusers.utils import export_to_video, load_image | |
| from transformers import CLIPVisionModel | |
| from PIL import Image | |
| model_id = "nvidia/ChronoEdit-14B-Diffusers" | |
| image_encoder = CLIPVisionModel.from_pretrained(model_id, subfolder="image_encoder", dtype=torch.float32) | |
| vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32) | |
| transformer = ChronoEditTransformer3DModel.from_pretrained(model_id, subfolder="transformer", dtype=torch.bfloat16) | |
| pipe = ChronoEditPipeline.from_pretrained(model_id, image_encoder=image_encoder, transformer=transformer, vae=vae, dtype=torch.bfloat16) | |
| pipe.load_lora_weights("nvidia/ChronoEdit-14B-Diffusers-Paint-Brush-Lora", weight_name="paintbrush_lora_diffusers.safetensors", adapter_name="paintbrush") | |
| pipe.load_lora_weights("nvidia/ChronoEdit-14B-Diffusers", weight_name="lora/chronoedit_distill_lora.safetensors", adapter_name="distill") | |
| pipe.fuse_lora(adapter_names=["paintbrush", "distill"], lora_scale=1.0) | |
| pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=2.0) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| image = load_image( | |
| "https://raw.githubusercontent.com/nv-tlabs/ChronoEdit/refs/heads/main/assets/images/input_paintbrush.png" | |
| ) | |
| max_area = 720 * 1280 | |
| aspect_ratio = image.height / image.width | |
| mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1] | |
| height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value | |
| width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value | |
| print("width", width, "height", height) | |
| image = image.resize((width, height)) | |
| prompt = ( | |
| "Turn the pencil sketch in the image into an actual object that is consistent with the image’s content. The user wants to change the sketch to a crown and a hat." | |
| ) | |
| output = pipe( | |
| image=image, | |
| prompt=prompt, | |
| height=height, | |
| width=width, | |
| num_frames=5, | |
| num_inference_steps=8, | |
| guidance_scale=1.0, | |
| enable_temporal_reasoning=False, | |
| num_temporal_reasoning_steps=0, | |
| ).frames[0] | |
| export_to_video(output, "output.mp4", fps=16) | |
| Image.fromarray((output[-1] * 255).clip(0, 255).astype("uint8")).save("output_1.png") | |
| ``` | |
| ## ChronoEditPipeline[[diffusers.ChronoEditPipeline]] | |
| #### diffusers.ChronoEditPipeline[[diffusers.ChronoEditPipeline]] | |
| ```python | |
| diffusers.ChronoEditPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, image_encoder: CLIPVisionModel, image_processor: CLIPImageProcessorPil, transformer: ChronoEditTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMatchEulerDiscreteScheduler) | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/chronoedit/pipeline_chronoedit.py#L128) | |
| **Параметры:** | |
| tokenizer (`T5Tokenizer`) : Токенизатор из [T5](https://huggingface.co/docs/transformers/en/model_doc/t5#transformers.T5Tokenizer), а именно вариант [google/umt5-xxl](https://huggingface.co/google/umt5-xxl). | |
| text_encoder (`T5EncoderModel`) : [T5](https://huggingface.co/docs/transformers/en/model_doc/t5#transformers.T5EncoderModel), а именно вариант [google/umt5-xxl](https://huggingface.co/google/umt5-xxl). | |
| image_encoder (`CLIPVisionModel`) : [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPVisionModel), а именно вариант [clip-vit-huge-patch14](https://github.com/mlfoundations/open_clip/blob/main/docs/PRETRAINED.md#vit-h14-xlm-roberta-large). | |
| transformer ([WanTransformer3DModel](/docs/diffusers/main/ru/api/models/wan_transformer_3d#diffusers.WanTransformer3DModel)) : Условный Transformer для удаления шума из входных латентов. | |
| scheduler ([UniPCMultistepScheduler](/docs/diffusers/main/ru/api/schedulers/unipc#diffusers.UniPCMultistepScheduler)) : планировщик, используемый в сочетании с `transformer` для удаления шума из закодированных латентов изображения. | |
| vae ([AutoencoderKLWan](/docs/diffusers/main/ru/api/models/autoencoder_kl_wan#diffusers.AutoencoderKLWan)) : Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно. | |
| Пайплайн для генерации видео из изображений с использованием Wan. | |
| Эта модель наследуется от [DiffusionPipeline](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline). Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса. | |
| #### __call__[[diffusers.ChronoEditPipeline.__call__]] | |
| ```python | |
| __call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], prompt: str | list[str] = None, negative_prompt: str | list[str] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, guidance_scale: float = 5.0, num_videos_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, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, image_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'np', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int, NoneType], diffusers.callbacks.PipelineCallback | diffusers.callbacks.MultiPipelineCallbacks]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512, enable_temporal_reasoning: bool = False, num_temporal_reasoning_steps: int = 0) | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/chronoedit/pipeline_chronoedit.py#L470) | |
| **Параметры:** | |
| image (`PipelineImageInput`) : Входное изображение для обусловливания генерации. Должно быть изображением, списком изображений или `torch.Tensor`. | |
| prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать `prompt_embeds` вместо него. | |
| negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`). | |
| height (`int`, по умолчанию `480`) : Высота генерируемого видео. | |
| width (`int`, по умолчанию `832`) : Ширина генерируемого видео. | |
| num_frames (`int`, по умолчанию `81`) : Количество кадров в сгенерированном видео. | |
| num_inference_steps (`int`, по умолчанию `50`) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. | |
| guidance_scale (`float`, по умолчанию `5.0`) : Масштаб руководства, определенный в [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598). `guidance_scale` определяется как `w` из уравнения 2 в [Imagen Paper](https://arxiv.org/pdf/2205.11487.pdf). Масштаб руководства активируется при установке `guidance_scale > 1`. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым `prompt`, обычно за счет снижения качества изображения. | |
| num_videos_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`. | |
| negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не предоставлены, текстовые эмбеддинги генерируются из входного аргумента `negative_prompt`. | |
| image_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные эмбеддинги изображений. Можно использовать для простой корректировки входных изображений (взвешивание). Если не предоставлено, эмбеддинги изображений генерируются из аргумента `image`. | |
| output_type (`str`, *необязательный*, по умолчанию `"np"`) : Формат вывода сгенерированного изображения. Выберите между `PIL.Image` и `np.array`. | |
| return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `ChronoEditPipelineOutput` вместо обычного кортежа. | |
| attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). | |
| callback_on_step_end (`Callable`, `PipelineCallback`, `MultiPipelineCallbacks`, *optional*) : функция или подкласс `PipelineCallback` или `MultiPipelineCallbacks`, вызываемая в конце каждого шага денойзинга во время инференса со следующими аргументами: `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`, *необязательный*) : Список тензорных входных данных для функции `callback_on_step_end`. Тензоры, указанные в списке, будут переданы в качестве аргумента `callback_kwargs`. Вы сможете включать только переменные, перечисленные в атрибуте `._callback_tensor_inputs` вашего класса конвейера. | |
| max_sequence_length (`int`, по умолчанию `512`) : Максимальная длина последовательности для текстового энкодера. Если промпт длиннее этого значения, он будет усечён. Если промпт короче, он будет дополнен до этой длины. | |
| enable_temporal_reasoning (`bool`, *необязательный*, по умолчанию `False`) : Включает ли временное рассуждение. | |
| num_temporal_reasoning_steps (`int`, *необязательный*, по умолчанию `0`) : Количество шагов для включения временного рассуждения. | |
| **Возвращает:** `~ChronoEditPipelineOutput` или `tuple` | |
| Если `return_dict` равно `True`, возвращается `ChronoEditPipelineOutput`, иначе возвращается `tuple`, где первый элемент — это список сгенерированных изображений, а второй — список значений `bool`, указывающих, содержит ли соответствующее сгенерированное изображение контент, непригодный для рабочего места (nsfw). | |
| Функция вызова конвейера для генерации. | |
| Примеры: | |
| ```python | |
| >>> import torch | |
| >>> import numpy as np | |
| >>> from diffusers import AutoencoderKLWan, ChronoEditTransformer3DModel, ChronoEditPipeline | |
| >>> from diffusers.utils import export_to_video, load_image | |
| >>> from transformers import CLIPVisionModel | |
| >>> # Available models: nvidia/ChronoEdit-14B-Diffusers | |
| >>> model_id = "nvidia/ChronoEdit-14B-Diffusers" | |
| >>> image_encoder = CLIPVisionModel.from_pretrained( | |
| ... model_id, subfolder="image_encoder", torch_dtype=torch.float32 | |
| ... ) | |
| >>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32) | |
| >>> transformer = ChronoEditTransformer3DModel.from_pretrained( | |
| ... model_id, subfolder="transformer", torch_dtype=torch.bfloat16 | |
| ... ) | |
| >>> pipe = ChronoEditPipeline.from_pretrained( | |
| ... model_id, vae=vae, image_encoder=image_encoder, transformer=transformer, torch_dtype=torch.bfloat16 | |
| ... ) | |
| >>> pipe.to("cuda") | |
| >>> image = load_image("https://huggingface.co/spaces/nvidia/ChronoEdit/resolve/main/examples/3.png") | |
| >>> max_area = 720 * 1280 | |
| >>> aspect_ratio = image.height / image.width | |
| >>> mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1] | |
| >>> height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value | |
| >>> width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value | |
| >>> image = image.resize((width, height)) | |
| >>> prompt = ( | |
| ... "The user wants to transform the image by adding a small, cute mouse sitting inside the floral teacup, enjoying a spa bath. The mouse should appear relaxed and cheerful, with a tiny white bath towel draped over its head like a turban. It should be positioned comfortably in the cup’s liquid, with gentle steam rising around it to blend with the cozy atmosphere. " | |
| ... "The mouse’s pose should be natural—perhaps sitting upright with paws resting lightly on the rim or submerged in the tea. The teacup’s floral design, gold trim, and warm lighting must remain unchanged to preserve the original aesthetic. The steam should softly swirl around the mouse, enhancing the spa-like, whimsical mood." | |
| ... ) | |
| >>> output = pipe( | |
| ... image=image, | |
| ... prompt=prompt, | |
| ... height=height, | |
| ... width=width, | |
| ... num_frames=5, | |
| ... guidance_scale=5.0, | |
| ... enable_temporal_reasoning=False, | |
| ... num_temporal_reasoning_steps=0, | |
| ... ).frames[0] | |
| >>> export_to_video(output, "output.mp4", fps=16) | |
| ``` | |
| #### encode_prompt[[diffusers.ChronoEditPipeline.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, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None) | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/chronoedit/pipeline_chronoedit.py#L242) | |
| **Параметры:** | |
| prompt (`str` или `list[str]`, *необязательный*) : промпт для кодирования | |
| negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`). | |
| do_classifier_free_guidance (`bool`, *необязательный*, по умолчанию `True`) : Использовать ли classifier free guidance. | |
| num_videos_per_prompt (`int`, *optional*, по умолчанию 1) : Количество видео, которые должны быть сгенерированы для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги | |
| prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`. | |
| negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`. | |
| device : (`torch.device`, *необязательный*): устройство torch | |
| dtype : (`torch.dtype`, *необязательный*): torch dtype | |
| Кодирует промпт в скрытые состояния текстового энкодера. | |
| ## ChronoEditPipelineOutput[[diffusers.pipelines.chronoedit.pipeline_output.ChronoEditPipelineOutput]] | |
| #### diffusers.pipelines.chronoedit.pipeline_output.ChronoEditPipelineOutput[[diffusers.pipelines.chronoedit.pipeline_output.ChronoEditPipelineOutput]] | |
| ```python | |
| diffusers.pipelines.chronoedit.pipeline_output.ChronoEditPipelineOutput(frames: Tensor) | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/chronoedit/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)`. | |
| Класс вывода для пайплайнов ChronoEdit. | |
Xet Storage Details
- Size:
- 33.1 kB
- Xet hash:
- deb6276faa63afce7d255f737ab0fcdf17fa6b53b6f9984a33f373570e070536
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.