Diffusers documentation

SkyReels-V2: Mô hình tạo phim có độ dài vô hạn

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LoRA

SkyReels-V2: Mô hình tạo phim có độ dài vô hạn

SkyReels-V2 của nhóm SkyReels từ Skywork AI.

Những tiến bộ gần đây trong tạo video được thúc đẩy bởi mô hình khuếch tán và các khung tự hồi quy, tuy nhiên vẫn tồn tại những thách thức quan trọng trong việc hài hòa giữa việc tuân thủ prompt, chất lượng hình ảnh, động lực chuyển động và thời lượng: các thỏa hiệp về động lực chuyển động để nâng cao chất lượng hình ảnh theo thời gian, thời lượng video bị hạn chế (5-10 giây) để ưu tiên độ phân giải, và việc tạo nhận thức cảnh không đầy đủ do các MLLM đa năng không có khả năng diễn giải ngữ pháp điện ảnh, chẳng hạn như bố cục cảnh, biểu cảm diễn viên và chuyển động máy quay. Những hạn chế liên kết này cản trở việc tổng hợp dài thực tế và tạo theo phong cách phim chuyên nghiệp. Để giải quyết những hạn chế này, chúng tôi đề xuất SkyReels-V2, một Mô hình Sinh tạo Phim Độ dài Vô hạn, kết hợp hài hòa Mô hình Ngôn ngữ Lớn Đa phương tiện (MLLM), Tiền huấn luyện Đa giai đoạn, Học tăng cường và Khung Khuếch tán Ép buộc. Trước tiên, chúng tôi thiết kế một biểu diễn cấu trúc toàn diện của video, kết hợp mô tả chung từ MLLM đa phương tiện và ngôn ngữ cảnh chi tiết từ các mô hình chuyên gia phụ. Với sự hỗ trợ của chú thích con người, chúng tôi sau đó huấn luyện một Video Captioner thống nhất, có tên SkyCaptioner-V1, để dán nhãn dữ liệu video một cách hiệu quả. Thứ hai, chúng tôi thiết lập tiền huấn luyện độ phân giải tiến bộ cho việc tạo video cơ bản, tiếp theo là tăng cường hậu huấn luyện bốn giai đoạn: SFT cân bằng khái niệm ban đầu cải thiện chất lượng cơ sở; Huấn luyện RL cụ thể cho chuyển động với dữ liệu méo do con người chú thích và tổng hợp giải quyết các lỗi động; Khung khuếch tán ép buộc của chúng tôi với lịch trình nhiễu không giảm cho phép tổng hợp video dài trong không gian tìm kiếm hiệu quả; SFT chất lượng cao cuối cùng tinh chỉnh độ trung thực hình ảnh. Tất cả mã và mô hình có sẵn tại this https URL.

Bạn có thể tìm thấy tất cả các checkpoint gốc của SkyReels-V2 dưới tổ chức Skywork.

Các mô hình SkyReels-V2 sau đây được hỗ trợ trong Diffusers:

Mô hình này được đóng góp bởi M. Tolga Cangöz.

Nhấp vào các mô hình SkyReels-V2 ở thanh bên phải để xem thêm các ví dụ về tạo video.

Một minh họa trực quan

Ví dụ bên dưới có các tham số sau:

  • base_num_frames=97
  • num_frames=97
  • num_inference_steps=30
  • ar_step=5
  • causal_block_size=5

Với vae_scale_factor_temporal=4, hãy kỳ vọng có 5 khối, mỗi khối gồm 5 khung hình, được tính như sau:

num_latent_frames: (97-1)//vae_scale_factor_temporal+1 = 25 frames -> 5 blocks of 5 frames each

Và độ dài ngữ cảnh tối đa trong không gian tiềm ẩn được tính bằng base_num_latent_frames:

base_num_latent_frames = (97-1)//vae_scale_factor_temporal+1 = 25 -> 25//5 = 5 blocks

Dòng thời gian xử lý bất đồng bộ:

┌─────────────────────────────────────────────────────────────────┐
│ Steps:    1    6   11   16   21   26   31   36   41   46   50   │
│ Block 1: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]                       │
│ Block 2:      [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]                  │
│ Block 3:           [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]             │
│ Block 4:                [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]        │
│ Block 5:                     [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]   │
└─────────────────────────────────────────────────────────────────┘

Đối với video dài (num_frames > base_num_frames): base_num_frames đóng vai trò là “kích thước cửa sổ trượt” để xử lý video dài.

Ví dụ: video 257 khung với base_num_frames=97, overlap_history=17

┌──── Iteration 1 (frames 1-97) ────┐
│ Processing window: 97 frames      │ → 5 blocks,
│ Generates: frames 1-97            │   async processing
└───────────────────────────────────┘
            ┌────── Iteration 2 (frames 81-177) ──────┐
            │ Processing window: 97 frames            │
            │ Overlap: 17 frames (81-97) from prev    │ → 5 blocks,
            │ Generates: frames 98-177                │   async processing
            └─────────────────────────────────────────┘
                        ┌────── Iteration 3 (frames 161-257) ──────┐
                        │ Processing window: 97 frames             │
                        │ Overlap: 17 frames (161-177) from prev   │ → 5 blocks,
                        │ Generates: frames 178-257                │   async processing
                        └──────────────────────────────────────────┘

Mỗi lần lặp lại chạy xử lý bất đồng bộ độc lập với 5 khối riêng của nó. base_num_frames kiểm soát:

  1. Lượng bộ nhớ sử dụng (cửa sổ lớn hơn = nhiều VRAM hơn)
  2. Độ dài ngữ cảnh của mô hình (phải khớp với các ràng buộc huấn luyện)
  3. Số lượng khối mỗi lần lặp (base_num_latent_frames // causal_block_size)

Mỗi khối mất 30 bước để hoàn tất khử nhiễu. Khối N bắt đầu ở bước: 1 + (N-1) x ar_step Tổng số bước: 30 + (5-1) x 5 = 50 bước

Chế độ đồng bộ (ar_step=0) sẽ xử lý tất cả các khối/khung cùng lúc:

┌──────────────────────────────────────────────┐
│ Steps:       1            ...            30  │
│ All blocks: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │
└──────────────────────────────────────────────┘

Tổng số bước: 30 bước

Một ví dụ về cách ma trận bước được xây dựng cho xử lý bất đồng bộ: Với các tham số: (num_inference_steps=30, flow_shift=8, num_frames=97, ar_step=5, causal_block_size=5)

- num_latent_frames = (97 frames - 1) // (4 temporal downsampling) + 1 = 25
- step_template = [999, 995, 991, 986, 980, 975, 969, 963, 956, 948,
                   941, 932, 922, 912, 901, 888, 874, 859, 841, 822,
                   799, 773, 743, 708, 666, 615, 551, 470, 363, 216]

Thuật toán tạo ra một step_matrix 50x25 trong đó:

- Row 1:  [999×5, 999×5, 999×5, 999×5, 999×5]
- Row 2:  [995×5, 999×5, 999×5, 999×5, 999×5]
- Row 3:  [991×5, 999×5, 999×5, 999×5, 999×5]
- ...
- Row 7:  [969×5, 995×5, 999×5, 999×5, 999×5]
- ...
- Row 21: [799×5, 888×5, 941×5, 975×5, 999×5]
- ...
- Row 35: [  0×5, 216×5, 666×5, 822×5, 901×5]
- ...
- Row 42: [  0×5,   0×5,   0×5, 551×5, 773×5]
- ...
- Row 50: [  0×5,   0×5,   0×5,   0×5, 216×5]

Phân tích chi tiết hàng 6:

- step_matrix[5]:      [ 975×5,  999×5,   999×5,   999×5,   999×5]
- step_index[5]:       [   6×5,    1×5,     0×5,     0×5,     0×5]
- step_update_mask[5]: [True×5, True×5, False×5, False×5, False×5]
- valid_interval[5]:   (0, 25)

Mô hình chính: Khối i trễ hơn Khối i-1 đúng ar_step=5 bước thời gian, tạo ra hiệu ứng “diffusion forcing” so le, trong đó các khối sau điều kiện hóa dựa trên các khối trước sạch hơn.

Tạo video từ văn bản

Ví dụ dưới đây minh họa cách tạo video từ văn bản.

Bộ nhớ T2V

Tham khảo hướng dẫn Giảm mức sử dụng bộ nhớ để biết thêm chi tiết về các kỹ thuật tiết kiệm bộ nhớ khác nhau.

Từ kho gốc:

Bạn có thể sử dụng —ar_step 5 để bật suy luận bất đồng bộ. Khi sử dụng suy luận bất đồng bộ, —causal_block_size 5 được khuyến nghị, trong khi tham số này không nên được đặt cho chế độ sinh đồng bộ… Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện hiệu suất tuân theo chỉ thị và tính nhất quán về mặt thị giác.

import torch
from diffusers import AutoModel, SkyReelsV2DiffusionForcingPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video


model_id = "Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers"
vae = AutoModel.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)

pipeline = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
    model_id,
    vae=vae,
    dtype=torch.bfloat16,
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"
flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)

prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."

output = pipeline(
    prompt=prompt,
    num_inference_steps=30,
    height=544,  # 720 for 720P
    width=960,   # 1280 for 720P
    num_frames=97,
    base_num_frames=97,  # 121 for 720P
    ar_step=5,  # Controls asynchronous inference (0 for synchronous mode)
    causal_block_size=5,  # Number of frames in each block for asynchronous processing
    overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos; 17 for long video generations
    addnoise_condition=20,  # Improves consistency in long video generation
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)

Tạo video từ khung hình đầu-cuối

Ví dụ dưới đây minh họa cách sử dụng pipeline image-to-video để tạo video bằng mô tả văn bản, khung hình bắt đầu và khung hình kết thúc.

cách sử dụng
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingImageToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_image


model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
    model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"
flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)

first_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_first_frame.png")
last_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_last_frame.png")

def aspect_ratio_resize(image, pipeline, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipeline.vae_scale_factor_spatial * pipeline.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))
    return image, height, width

def center_crop_resize(image, height, width):
    # Calculate resize ratio to match first frame dimensions
    resize_ratio = max(width / image.width, height / image.height)

    # Resize the image
    width = round(image.width * resize_ratio)
    height = round(image.height * resize_ratio)
    size = [width, height]
    image = TF.center_crop(image, size)

    return image, height, width

first_frame, height, width = aspect_ratio_resize(first_frame, pipeline)
if last_frame.size != first_frame.size:
    last_frame, _, _ = center_crop_resize(last_frame, height, width)

prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."

output = pipeline(
    image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.0
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)

Tạo Video từ Video

cách sử dụng

SkyReelsV2DiffusionForcingVideoToVideoPipeline mở rộng một video đã cho.

import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingVideoToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_video


model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
    model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"
flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)

video = load_video("input_video.mp4")

prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."

output = pipeline(
    video=video, prompt=prompt, height=720, width=1280, guidance_scale=5.0, overlap_history=17,
    num_inference_steps=30, num_frames=257, base_num_frames=121#, ar_step=5, causal_block_size=5,
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)
# Total frames will be the number of frames of the given video + 257

Ghi chú

SkyReelsV2Pipeline và SkyReelsV2ImageToVideoPipeline cũng có sẵn mà không áp dụng framework Diffusion Forcing.

SkyReelsV2DiffusionForcingPipeline

lớp diffusers.SkyReelsV2DiffusionForcingPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Tham số

  • tokenizer (AutoTokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl.
  • text_encoder (UMT5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
  • scheduler (UniPCMultistepScheduler) — Một scheduler được sử dụng kết hợp với transformer để khử nhiễu các latents ảnh đã được mã hóa.
  • vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).

Pipeline để tạo Video từ Văn bản (t2v) sử dụng SkyReels-V2 với diffusion forcing.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

__call__

< >

( prompt: str | list[str]negative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • height (int, mặc định là 544) — Chiều cao của video được tạo ra.
  • width (int, mặc định là 960) — Chiều rộng của video được tạo.
  • num_frames (int, mặc định là 97) — Số lượng khung hình trong video được tạo ra.
  • num_inference_steps (int, mặc định là 50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
  • guidance_scale (float, mặc định là 6.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. (6.0 cho T2V, 5.0 cho I2V)
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào negative_prompt.
  • output_type (str, tùy chọn, mặc định là "np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một SkyReelsV2PipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Danh sách các tensor đầu vào cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
  • max_sequence_length (int, tùy chọn, mặc định là 512) — Chiều dài tối đa của chuỗi prompt.
  • overlap_history (int, tùy chọn, mặc định là None) — Số khung hình cần chồng lên nhau để tạo chuyển tiếp mượt mà trong các video dài. Nếu None, pipeline sẽ giả định chế độ tạo video ngắn và không áp dụng chồng khung. Khuyến nghị đặt giá trị là 17 hoặc 37.
  • addnoise_condition (float, tùy chọn, mặc định là 0) — Tham số này được dùng để giúp làm mượt quá trình tạo video dài bằng cách thêm một lượng nhiễu vào điều kiện sạch. Nhiễu quá lớn cũng có thể gây ra sự không nhất quán. Giá trị 20 được khuyến nghị, bạn có thể thử các giá trị lớn hơn, nhưng không nên vượt quá 50.
  • base_num_frames (int, tùy chọn, mặc định là 97) — 97 hoặc 121 | Số khung hình cơ sở (97 cho 540P, 121 cho 720P)
  • ar_step (int, tùy chọn, mặc định là 0) — Kiểm soát suy luận bất đồng bộ (0 cho chế độ đồng bộ). Bạn có thể đặt ar_step=5 để bật suy luận bất đồng bộ. Khi suy luận bất đồng bộ, khuyến nghị đặt causal_block_size=5, trong khi không nên đặt giá trị này cho sinh đồng bộ. Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện khả năng tuân theo chỉ thị và hiệu suất nhất quán về mặt thị giác.
  • causal_block_size (int, tuỳ chọn, mặc định là None) — Số lượng khung trong mỗi khối/mảnh. Được khuyến nghị khi sử dụng suy luận bất đồng bộ (khi ar_step > 0)
  • fps (int, tùy chọn, mặc định là 24) — Tốc độ khung hình của video được tạo

Trả về

~SkyReelsV2PipelineOutput hoặc tuple

Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2DiffusionForcingPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."

>>> output = pipe(
...     prompt=prompt,
...     num_inference_steps=30,
...     height=544,
...     width=960,
...     guidance_scale=6.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
...     ar_step=5,  # Controls asynchronous inference (0 for synchronous mode)
...     causal_block_size=5,  # Number of frames processed together in a causal block
...     overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos
...     addnoise_condition=20,  # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • do_classifier_free_guidance (bool, tùy chọn, mặc định là True) — Có sử dụng classifier free guidance hay không.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • device — (torch.device, tùy chọn): thiết bị torch
  • dtype — (torch.dtype, tùy chọn): torch dtype

Mã hóa prompt thành các trạng thái ẩn của text encoder.

generate_timestep_matrix

< >

( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing

Tham số

  • num_latent_frames (int) — Tổng số khung latent cần tạo
  • step_template (torch.Tensor) — Lịch trình bước thời gian cơ sở (ví dụ: [1000, 800, 600, …, 0])
  • base_num_latent_frames (int) — Số khung hình tối đa mà mô hình có thể xử lý trong một lần truyền trực tiếp
  • ar_step (int, tùy chọn) — Kích thước bước tự hồi quy cho độ trễ thời gian. 0 = đồng bộ, >0 = bất đồng bộ. Mặc định là 5.
  • num_pre_ready (int, optional) — Số khung hình đã được khử nhiễu (ví dụ: từ phần đầu vào trong tác vụ video2video). Mặc định là 0.
  • causal_block_size (int, tùy chọn) — Số khung được xử lý như một khối nhân quả. Mặc định là 1.
  • shrink_interval_with_mask (bool, tùy chọn) — Có tối ưu hóa các khoảng xử lý hay không. Mặc định là False.

Trả về

bộ tuple chứa

  • step_matrix (torch.Tensor): Ma trận các bước thời gian cho mỗi khung hình ở mỗi lần lặp. Hình dạng: [num_iterations, num_latent_frames]
  • step_index (torch.Tensor): Ma trận chỉ số để tra cứu bước thời gian. Hình dạng: [num_iterations, num_latent_frames]
  • step_update_mask (torch.Tensor): Mặt nạ boolean chỉ định các khung hình cần cập nhật. Hình dạng: [num_iterations, num_latent_frames]
  • valid_interval (list[tuple]): danh sách các khoảng (start, end) cho mỗi lần lặp

Gây ra

ValueError

  • ValueError — Nếu ar_step quá nhỏ so với cấu hình được cung cấp

Hàm này triển khai thuật toán diffusion forcing cốt lõi, tạo ra lịch trình khử nhiễu phối hợp giữa các khung thời gian. Nó hỗ trợ cả chế độ sinh đồng bộ và bất đồng bộ:

Chế độ đồng bộ (ar_step=0, causal_block_size=1):

  • Tất cả các khung hình được khử nhiễu đồng thời ở mỗi bước thời gian
  • Mỗi khung hình tuân theo cùng một quỹ đạo khử nhiễu: [1000, 800, 600, …, 0]
  • Đơn giản hơn nhưng có thể kém nhất quán theo thời gian hơn đối với các video dài

Chế độ bất đồng bộ (ar_step>0, causal_block_size>1):

  • Các khung được nhóm thành các khối nhân quả và được xử lý theo từng khối/mảnh
  • Mỗi khối được khử nhiễu theo một mẫu so le, tạo ra một “sóng khử nhiễu”
  • Các khối trước được khử nhiễu nhiều hơn, các khối sau chậm hơn ar_step bước thời gian
  • Tạo ra các phụ thuộc thời gian mạnh mẽ hơn và tính nhất quán tốt hơn

SkyReelsV2DiffusionForcingImageToVideoPipeline

lớp diffusers.SkyReelsV2DiffusionForcingImageToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Tham số

  • tokenizer (AutoTokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl.
  • text_encoder (UMT5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
  • scheduler (UniPCMultistepScheduler) — Một scheduler được sử dụng kết hợp với transformer để khử nhiễu các latents ảnh đã được mã hóa.
  • vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).

Pipeline để tạo Video từ Ảnh (i2v) sử dụng SkyReels-V2 với diffusion forcing.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

__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] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 5.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple

Tham số

  • image (PipelineImageInput) — Hình ảnh đầu vào để điều kiện cho quá trình tạo. Phải là một hình ảnh, một danh sách các hình ảnh hoặc một torch.Tensor.
  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • height (int, mặc định là 544) — Chiều cao của video được tạo ra.
  • width (int, mặc định là 960) — Chiều rộng của video được tạo.
  • num_frames (int, mặc định là 97) — Số lượng khung hình trong video được tạo ra.
  • num_inference_steps (int, mặc định là 50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
  • guidance_scale (float, mặc định là 5.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. (6.0 cho T2V, 5.0 cho I2V)
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào negative_prompt.
  • image_embeds (torch.Tensor, tùy chọn) — Các embedding hình ảnh đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh đầu vào hình ảnh (trọng số). Nếu không được cung cấp, các embedding hình ảnh sẽ được tạo từ đối số đầu vào image.
  • last_image (torch.Tensor, tùy chọn) — Các embedding ảnh đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh đầu vào ảnh (trọng số). Nếu không được cung cấp, các embedding ảnh sẽ được tạo từ đối số đầu vào image.
  • output_type (str, tùy chọn, mặc định là "np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một SkyReelsV2PipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Danh sách các tensor đầu vào cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
  • max_sequence_length (int, tùy chọn, mặc định là 512) — Chiều dài tối đa của chuỗi prompt.
  • overlap_history (int, tùy chọn, mặc định là None) — Số khung hình cần chồng lên nhau để tạo chuyển tiếp mượt mà trong các video dài. Nếu None, pipeline sẽ giả định chế độ tạo video ngắn và không áp dụng chồng khung. Khuyến nghị đặt giá trị là 17 hoặc 37.
  • addnoise_condition (float, tùy chọn, mặc định là 0) — Tham số này được dùng để giúp làm mượt quá trình tạo video dài bằng cách thêm một lượng nhiễu vào điều kiện sạch. Nhiễu quá lớn cũng có thể gây ra sự không nhất quán. Giá trị 20 được khuyến nghị, bạn có thể thử các giá trị lớn hơn, nhưng không nên vượt quá 50.
  • base_num_frames (int, tùy chọn, mặc định là 97) — 97 hoặc 121 | Số khung hình cơ sở (97 cho 540P, 121 cho 720P)
  • ar_step (int, tùy chọn, mặc định là 0) — Kiểm soát suy luận bất đồng bộ (0 cho chế độ đồng bộ). Bạn có thể đặt ar_step=5 để bật suy luận bất đồng bộ. Khi suy luận bất đồng bộ, khuyến nghị đặt causal_block_size=5, trong khi không nên đặt giá trị này cho sinh đồng bộ. Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện khả năng tuân theo chỉ thị và hiệu suất nhất quán về mặt thị giác.
  • causal_block_size (int, tuỳ chọn, mặc định là None) — Số lượng khung trong mỗi khối/mảnh. Được khuyến nghị khi sử dụng suy luận bất đồng bộ (khi ar_step > 0)
  • fps (int, tùy chọn, mặc định là 24) — Tốc độ khung hình của video được tạo

Trả về

~SkyReelsV2PipelineOutput hoặc tuple

Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2DiffusionForcingImageToVideoPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> image = Image.open("path/to/image.png")

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=5.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
...     ar_step=0,  # Controls asynchronous inference (0 for synchronous mode)
...     overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos
...     addnoise_condition=20,  # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • do_classifier_free_guidance (bool, tùy chọn, mặc định là True) — Có sử dụng classifier free guidance hay không.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • device — (torch.device, tùy chọn): thiết bị torch
  • dtype — (torch.dtype, tùy chọn): torch dtype

Mã hóa prompt thành các trạng thái ẩn của text encoder.

generate_timestep_matrix

< >

( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing

Tham số

  • num_latent_frames (int) — Tổng số khung latent cần tạo
  • step_template (torch.Tensor) — Lịch trình bước thời gian cơ sở (ví dụ: [1000, 800, 600, …, 0])
  • base_num_latent_frames (int) — Số khung hình tối đa mà mô hình có thể xử lý trong một lần truyền trực tiếp
  • ar_step (int, tùy chọn) — Kích thước bước tự hồi quy cho độ trễ thời gian. 0 = đồng bộ, >0 = bất đồng bộ. Mặc định là 5.
  • num_pre_ready (int, optional) — Số khung hình đã được khử nhiễu (ví dụ: từ phần đầu vào trong tác vụ video2video). Mặc định là 0.
  • causal_block_size (int, tùy chọn) — Số khung được xử lý như một khối nhân quả. Mặc định là 1.
  • shrink_interval_with_mask (bool, tùy chọn) — Có tối ưu hóa các khoảng xử lý hay không. Mặc định là False.

Trả về

bộ tuple chứa

  • step_matrix (torch.Tensor): Ma trận các bước thời gian cho mỗi khung hình ở mỗi lần lặp. Hình dạng: [num_iterations, num_latent_frames]
  • step_index (torch.Tensor): Ma trận chỉ số để tra cứu bước thời gian. Hình dạng: [num_iterations, num_latent_frames]
  • step_update_mask (torch.Tensor): Mặt nạ boolean chỉ định các khung hình cần cập nhật. Hình dạng: [num_iterations, num_latent_frames]
  • valid_interval (list[tuple]): danh sách các khoảng (start, end) cho mỗi lần lặp

Gây ra

ValueError

  • ValueError — Nếu ar_step quá nhỏ so với cấu hình được cung cấp

Hàm này triển khai thuật toán diffusion forcing cốt lõi, tạo ra lịch trình khử nhiễu phối hợp giữa các khung thời gian. Nó hỗ trợ cả chế độ sinh đồng bộ và bất đồng bộ:

Chế độ đồng bộ (ar_step=0, causal_block_size=1):

  • Tất cả các khung hình được khử nhiễu đồng thời ở mỗi bước thời gian
  • Mỗi khung hình tuân theo cùng một quỹ đạo khử nhiễu: [1000, 800, 600, …, 0]
  • Đơn giản hơn nhưng có thể kém nhất quán theo thời gian hơn đối với các video dài

Chế độ bất đồng bộ (ar_step>0, causal_block_size>1):

  • Các khung được nhóm thành các khối nhân quả và được xử lý theo từng khối/mảnh
  • Mỗi khối được khử nhiễu theo một mẫu so le, tạo ra một “sóng khử nhiễu”
  • Các khối trước được khử nhiễu nhiều hơn, các khối sau chậm hơn ar_step bước thời gian
  • Tạo ra các phụ thuộc thời gian mạnh mẽ hơn và tính nhất quán tốt hơn

SkyReelsV2DiffusionForcingVideoToVideoPipeline

lớp diffusers.SkyReelsV2DiffusionForcingVideoToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Tham số

  • tokenizer (AutoTokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl.
  • text_encoder (UMT5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
  • scheduler (UniPCMultistepScheduler) — Một scheduler được sử dụng kết hợp với transformer để khử nhiễu các latents ảnh đã được mã hóa.
  • vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).

Pipeline cho tạo Video-to-Video (v2v) sử dụng SkyReels-V2 với diffusion forcing.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

__call__

< >

( video: list[PIL.Image.Image]prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 120num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple

Tham số

  • video (list[Image.Image]) — Video để hướng dẫn cho việc tạo video.
  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo video. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo video. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • height (int, mặc định là 544) — Chiều cao của video được tạo ra.
  • width (int, mặc định là 960) — Chiều rộng của video được tạo.
  • num_frames (int, mặc định là 120) — Số lượng khung hình trong video được tạo ra.
  • num_inference_steps (int, mặc định là 50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
  • guidance_scale (float, mặc định là 6.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Bài báo Imagen. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường là với cái giá phải trả là chất lượng hình ảnh thấp hơn. (6.0 cho T2V, 5.0 cho I2V)
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào negative_prompt.
  • output_type (str, tùy chọn, mặc định là "np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một SkyReelsV2PipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Danh sách các tensor đầu vào cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
  • max_sequence_length (int, tùy chọn, mặc định là 512) — Chiều dài tối đa của chuỗi prompt.
  • overlap_history (int, tùy chọn, mặc định là None) — Số khung hình cần chồng lên nhau để tạo chuyển tiếp mượt mà trong các video dài. Nếu None, pipeline sẽ giả định chế độ tạo video ngắn và không áp dụng chồng khung. Khuyến nghị đặt giá trị là 17 hoặc 37.
  • addnoise_condition (float, tùy chọn, mặc định là 0) — Tham số này được dùng để giúp làm mượt quá trình tạo video dài bằng cách thêm một lượng nhiễu vào điều kiện sạch. Nhiễu quá lớn cũng có thể gây ra sự không nhất quán. Giá trị 20 được khuyến nghị, bạn có thể thử các giá trị lớn hơn, nhưng không nên vượt quá 50.
  • base_num_frames (int, tùy chọn, mặc định là 97) — 97 hoặc 121 | Số khung hình cơ sở (97 cho 540P, 121 cho 720P)
  • ar_step (int, tùy chọn, mặc định là 0) — Kiểm soát suy luận bất đồng bộ (0 cho chế độ đồng bộ). Bạn có thể đặt ar_step=5 để bật suy luận bất đồng bộ. Khi suy luận bất đồng bộ, khuyến nghị đặt causal_block_size=5, trong khi không nên đặt giá trị này cho sinh đồng bộ. Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện khả năng tuân theo chỉ thị và hiệu suất nhất quán về mặt thị giác.
  • causal_block_size (int, tuỳ chọn, mặc định là None) — Số lượng khung trong mỗi khối/mảnh. Được khuyến nghị khi sử dụng suy luận bất đồng bộ (khi ar_step > 0)
  • fps (int, tùy chọn, mặc định là 24) — Tốc độ khung hình của video được tạo

Trả về

~SkyReelsV2PipelineOutput hoặc tuple

Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2DiffusionForcingVideoToVideoPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."

>>> output = pipe(
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=6.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
...     ar_step=0,  # Controls asynchronous inference (0 for synchronous mode)
...     overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos
...     addnoise_condition=20,  # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • do_classifier_free_guidance (bool, tùy chọn, mặc định là True) — Có sử dụng classifier free guidance hay không.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • device — (torch.device, tùy chọn): thiết bị torch
  • dtype — (torch.dtype, tùy chọn): torch dtype

Mã hóa prompt thành các trạng thái ẩn của text encoder.

generate_timestep_matrix

< >

( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing

Tham số

  • num_latent_frames (int) — Tổng số khung latent cần tạo
  • step_template (torch.Tensor) — Lịch trình bước thời gian cơ sở (ví dụ: [1000, 800, 600, …, 0])
  • base_num_latent_frames (int) — Số khung hình tối đa mà mô hình có thể xử lý trong một lần truyền trực tiếp
  • ar_step (int, tùy chọn) — Kích thước bước tự hồi quy cho độ trễ thời gian. 0 = đồng bộ, >0 = bất đồng bộ. Mặc định là 5.
  • num_pre_ready (int, optional) — Số khung hình đã được khử nhiễu (ví dụ: từ phần đầu vào trong tác vụ video2video). Mặc định là 0.
  • causal_block_size (int, tùy chọn) — Số khung được xử lý như một khối nhân quả. Mặc định là 1.
  • shrink_interval_with_mask (bool, tùy chọn) — Có tối ưu hóa các khoảng xử lý hay không. Mặc định là False.

Trả về

bộ tuple chứa

  • step_matrix (torch.Tensor): Ma trận các bước thời gian cho mỗi khung hình ở mỗi lần lặp. Hình dạng: [num_iterations, num_latent_frames]
  • step_index (torch.Tensor): Ma trận chỉ số để tra cứu bước thời gian. Hình dạng: [num_iterations, num_latent_frames]
  • step_update_mask (torch.Tensor): Mặt nạ boolean chỉ định các khung hình cần cập nhật. Hình dạng: [num_iterations, num_latent_frames]
  • valid_interval (list[tuple]): danh sách các khoảng (start, end) cho mỗi lần lặp

Gây ra

ValueError

  • ValueError — Nếu ar_step quá nhỏ so với cấu hình được cung cấp

Hàm này triển khai thuật toán diffusion forcing cốt lõi, tạo ra lịch trình khử nhiễu phối hợp giữa các khung thời gian. Nó hỗ trợ cả chế độ sinh đồng bộ và bất đồng bộ:

Chế độ đồng bộ (ar_step=0, causal_block_size=1):

  • Tất cả các khung hình được khử nhiễu đồng thời ở mỗi bước thời gian
  • Mỗi khung hình tuân theo cùng một quỹ đạo khử nhiễu: [1000, 800, 600, …, 0]
  • Đơn giản hơn nhưng có thể kém nhất quán theo thời gian hơn đối với các video dài

Chế độ bất đồng bộ (ar_step>0, causal_block_size>1):

  • Các khung được nhóm thành các khối nhân quả và được xử lý theo từng khối/mảnh
  • Mỗi khối được khử nhiễu theo một mẫu so le, tạo ra một “sóng khử nhiễu”
  • Các khối trước được khử nhiễu nhiều hơn, các khối sau chậm hơn ar_step bước thời gian
  • Tạo ra các phụ thuộc thời gian mạnh mẽ hơn và tính nhất quán tốt hơn

SkyReelsV2Pipeline

lớp diffusers.SkyReelsV2Pipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Tham số

  • tokenizer (T5Tokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents đầu vào.
  • scheduler (UniPCMultistepScheduler) — Một scheduler được sử dụng kết hợp với transformer để khử nhiễu các latents ảnh đã được mã hóa.
  • vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).

Pipeline để tạo Video từ Văn bản (t2v) sử dụng SkyReels-V2.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

__call__

< >

( prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (guidance_scale < 1).
  • height (int, mặc định là 544) — Chiều cao của hình ảnh được tạo ra, tính bằng pixel.
  • width (int, mặc định là 960) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel.
  • num_frames (int, mặc định là 97) — Số lượng khung hình trong video được tạo ra.
  • num_inference_steps (int, mặc định là 50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
  • guidance_scale (float, mặc định là 6.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • output_type (str, tùy chọn, mặc định là "np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một SkyReelsV2PipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Danh sách các tensor đầu vào cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
  • max_sequence_length (int, tùy chọn, mặc định là 512) — Chiều dài tối đa của chuỗi cho trình mã hóa văn bản.

Trả về

~SkyReelsV2PipelineOutput hoặc tuple

Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2Pipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-T2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-T2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2Pipeline.from_pretrained(
...     "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."

>>> output = pipe(
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=6.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • do_classifier_free_guidance (bool, tùy chọn, mặc định là True) — Có sử dụng classifier free guidance hay không.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • device — (torch.device, tùy chọn): thiết bị torch
  • dtype — (torch.dtype, tùy chọn): torch dtype

Mã hóa prompt thành các trạng thái ẩn của text encoder.

SkyReelsV2ImageToVideoPipeline

lớp diffusers.SkyReelsV2ImageToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModelimage_encoder: CLIPVisionModelWithProjectionimage_processor: CLIPProcessortransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Tham số

  • tokenizer (T5Tokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl.
  • image_encoder (CLIPVisionModelWithProjection) — CLIP, cụ thể là biến thể clip-vit-huge-patch14.
  • transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents đầu vào.
  • scheduler (UniPCMultistepScheduler) — Một scheduler được sử dụng kết hợp với transformer để khử nhiễu các latents ảnh đã được mã hóa.
  • vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).

Pipeline để tạo Video từ Ảnh (i2v) sử dụng SkyReels-V2.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

__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] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 5.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple

Tham số

  • image (PipelineImageInput) — Hình ảnh đầu vào để điều kiện cho quá trình tạo. Phải là một hình ảnh, một danh sách các hình ảnh hoặc một torch.Tensor.
  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • height (int, mặc định là 544) — Chiều cao của video được tạo ra.
  • width (int, mặc định là 960) — Chiều rộng của video được tạo.
  • num_frames (int, mặc định là 97) — Số lượng khung hình trong video được tạo ra.
  • num_inference_steps (int, mặc định là 50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
  • guidance_scale (float, mặc định là 5.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặt guidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào negative_prompt.
  • image_embeds (torch.Tensor, tùy chọn) — Các embedding hình ảnh đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh đầu vào hình ảnh (trọng số). Nếu không được cung cấp, các embedding hình ảnh sẽ được tạo từ đối số đầu vào image.
  • last_image (torch.Tensor, tùy chọn) — Hình ảnh cuối cùng tùy chọn để điều kiện hóa từ ảnh sang video, đóng vai trò neo giữ phần kết của video được tạo ra.
  • output_type (str, tùy chọn, mặc định là "np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL.Image hoặc np.array.
  • return_dict (bool, tùy chọn, mặc định là True) — Có nên trả về một WanPipelineOutput thay vì một tuple thông thường hay không.
  • attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, optional) — Danh sách các tensor đầu vào cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
  • max_sequence_length (int, tùy chọn, mặc định là 512) — Chiều dài tối đa của chuỗi prompt.

Trả về

~SkyReelsV2PipelineOutput hoặc tuple

Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2ImageToVideoPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-I2V-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2ImageToVideoPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> image = Image.open("path/to/image.png")

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=5.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Tham số

  • prompt (str hoặc list[str], tùy chọn) — prompt cần được mã hóa
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
  • do_classifier_free_guidance (bool, tùy chọn, mặc định là True) — Có sử dụng classifier free guidance hay không.
  • num_videos_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả
  • prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • device — (torch.device, tùy chọn): thiết bị torch
  • dtype — (torch.dtype, tùy chọn): torch dtype

Mã hóa prompt thành các trạng thái ẩn của text encoder.

SkyReelsV2PipelineOutput

lớp diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput

< >

( frames: Tensor )

Tham số

  • frames (torch.Tensor, np.ndarray, hoặc list[list[PIL.Image.Image]]) — danh sách các đầu ra video - Có thể là một danh sách lồng nhau có độ dài batch_size, trong đó mỗi danh sách con chứa các chuỗi hình ảnh PIL đã khử nhiễu có độ dài num_frames. Nó cũng có thể là một mảng NumPy hoặc tensor Torch có hình dạng (batch_size, num_frames, channels, height, width).

Lớp đầu ra cho các pipeline của SkyReelsV2.

Update on GitHub