Diffusers documentation
SkyReels-V2: 無限長の映画生成モデル
SkyReels-V2: 無限長の映画生成モデル
Skywork AIのSkyReelsチームによるSkyReels-V2。
動画生成の最近の進歩は拡散モデルと自己回帰型フレームワークによって牽引されてきましたが、プロンプトへの忠実性、視覚的品質、モーションダイナミクス、再生時間長を調和させることに関する重要な課題が依然として残っています。具体的には、時間的な視覚的品質を向上させるためにモーションダイナミクスを妥協すること、解像度を優先するために動画の長さが制約されていること(5〜10秒)、そしてショット構成、俳優の表情、カメラワークといったシネマティックな文法を解釈できない汎用MLLMに起因するショット認識型生成の不足です。これらの相互に絡み合った制約は、リアルな長尺動画の合成やプロフェッショナルな映画スタイルの生成を妨げています。これらの制約に対処するため、私たちは、マルチモーダル大規模言語モデル(MLLM)、マルチステージ事前学習、強化学習、Diffusion Forcing Frameworkをシナジーさせる、無限長の映画生成モデルであるSkyReels-V2を提案します。まず、マルチモーダルLLMによる一般的な記述と、サブエキスパートモデルによる詳細なショット言語を組み合わせる、包括的な動画の構造表現を設計しました。人間のアノテーションの助けを借りて、SkyCaptioner-V1と名付けられた統合型Video Captionerを訓練し、動画データを効率的にラベリングします。次に、基本的な動画生成のためのプログレッシブ解像度事前学習を確立し、その後、4段階のポストトレーニングによる強化を行います。初期の概念バランス型Supervised Fine-Tuning(SFT)はベースラインの品質を向上させます。人間によるアノテーションと合成歪みデータを用いたモーション特化型のReinforcement Learning(RL)訓練は、動的アーティファクトに対処します。非減少ノイズスケジュールを備えた私たちのDiffusion Forcingフレームワークは、効率的な探索空間内で長尺動画の合成を可能にします。最終的な高品質SFTは視覚的忠実度を洗練させます。すべてのコードとモデルはthis https URLで利用可能です。
すべてのオリジナルのSkyReels-V2チェックポイントは、Skywork組織の下で確認できます。
Diffusersでは、以下のSkyReels-V2モデルがサポートされています。
- SkyReels-V2 DF 1.3B - 540P
- SkyReels-V2 DF 14B - 540P
- SkyReels-V2 DF 14B - 720P
- SkyReels-V2 T2V 14B - 540P
- SkyReels-V2 T2V 14B - 720P
- SkyReels-V2 I2V 1.3B - 540P
- SkyReels-V2 I2V 14B - 540P
- SkyReels-V2 I2V 14B - 720P
このモデルは、M. Tolga Cangöz によって提供されました。
右側のサイドバーにあるSkyReels-V2モデルをクリックすると、動画生成のより多くの例を確認できます。
ビジュアルデモ
以下の例には、次のパラメータがあります。
base_num_frames=97num_frames=97num_inference_steps=30ar_step=5causal_block_size=5
vae_scale_factor_temporal=4 の場合、以下の計算により、5 フレームずつの 5 ブロックが期待されます:
num_latent_frames: (97-1)//vae_scale_factor_temporal+1 = 25 frames -> 5 blocks of 5 frames each
そして、潜在空間における最大コンテキスト長はbase_num_latent_framesで計算されます。
base_num_latent_frames = (97-1)//vae_scale_factor_temporal+1 = 25 -> 25//5 = 5 blocks
非同期処理のタイムライン:
┌─────────────────────────────────────────────────────────────────┐ │ Steps: 1 6 11 16 21 26 31 36 41 46 50 │ │ Block 1: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 2: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 3: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 4: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 5: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ └─────────────────────────────────────────────────────────────────┘
長時間の動画(num_frames > base_num_framesの場合): base_num_framesは、長時間の動画の処理における「スライディングウィンドウサイズ」として機能します。
例: 257フレームの動画で、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
└──────────────────────────────────────────┘各イテレーションは、独自の5ブロックで非同期処理を独立して実行します。base_num_framesは以下を制御します:
- メモリ使用量(ウィンドウが大きいほどVRAM使用量が増加)
- モデルのコンテキスト長(トレーニング時の制約と一致させる必要があります)
- 1反復あたりのブロック数(
base_num_latent_frames // causal_block_size)
各ブロックは、デノイジングの完了に30ステップを要します。
ブロックNの開始ステップ: 1 + (N-1) x ar_step 総ステップ数: 30 + (5-1) x 5 = 50 ステップ
同期モード(ar_step=0)では、すべてのブロック/フレームを同時に処理します:
┌──────────────────────────────────────────────┐ │ Steps: 1 ... 30 │ │ All blocks: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ └──────────────────────────────────────────────┘
総ステップ数: 30 ステップ
非同期処理におけるステップ行列の構築方法の例:
パラメータが(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]このアルゴリズムは、以下の条件を満たす50x25のstep_matrixを作成します。
- 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]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)主要なパターン: ブロック i は、ブロック i-1 よりちょうど ar_step=5 ステップ遅れており、後続のブロックがよりクリーンな先行ブロックを条件とする、段階的な「diffusion forcing」効果を生み出します。
テキストから動画の生成
以下の例は、テキストから動画を生成する方法を示しています。
メモリ使用量の削減に関する詳細については、メモリ使用量の削減ガイドを参照してください。
元のリポジトリから:
—ar_step 5 を使用して非同期推論を有効にできます。非同期推論を行う場合は、—causal_block_size 5 の設定が推奨されますが、同期生成では設定すべきではありません。非同期推論ではシーケンス全体を拡散させるためにより多くのステップが必要になるため、同期モードよりも低速になります。私たちの実験では、非同期推論により指示追従性能と視覚的一貫性性能が向上する可能性があります。
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)First-Last-Frame-to-Video 生成
以下の例では、テキストの説明、開始フレーム、および終了フレームを使用して、image-to-video パイプラインで動画を生成する方法を示しています。
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)Video-to-Video 生成
SkyReelsV2DiffusionForcingVideoToVideoPipeline は、指定された動画を拡張します。
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注記
- SkyReels-V2は、load_lora_weights()によるLoRAをサポートしています。
SkyReelsV2Pipeline と SkyReelsV2ImageToVideoPipeline は、Diffusion Forcing フレームワークを適用せずに利用することもできます。
SkyReelsV2DiffusionForcingPipeline
class diffusers.SkyReelsV2DiffusionForcingPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
パラメータ
- tokenizer (
AutoTokenizer) — T5 の Tokenizer、具体的には google/umt5-xxl バリアントです。 - text_encoder (
UMT5EncoderModel) — T5、具体的には google/umt5-xxl バリアントです。 - transformer (SkyReelsV2Transformer3DModel) — エンコードされた画像の潜在変数をデノイズするための条件付き Transformer。
- scheduler (UniPCMultistepScheduler) —
transformerと組み合わせて、エンコードされた画像の潜在変数からノイズを除去するために使用するスケジューラ。 - vae (AutoencoderKLWan) — 潜在表現へのエンコードとデコードを行う、動画用の変分オートエンコーダ (VAE) モデル。
SkyReels-V2 と diffusion forcing を用いたテキストから動画への生成(t2v)の Pipeline です。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに実装されている汎用的なメソッド(ダウンロード、保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__call__
< source >( 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 = ['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
パラメータ
- prompt (
strまたはlist[str]、省略可) — 画像生成をガイドするためのプロンプトです。未定義の場合、代わりにprompt_embedsを渡す必要があります。 - negative_prompt (
strまたはlist[str]、省略可) — 画像生成をガイドしないプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。ガイダンスを使用していない場合は無視されます(guidance_scaleが1未満の場合は無視されます)。 - height (
int、デフォルト値は544) — 生成される動画の高さです。 - width (
int、デフォルトは960) — 生成される動画の幅です。 - num_frames (
int、デフォルトは97) — 生成される動画のフレーム数です。 - num_inference_steps (
int、デフォルトは50) — デノイジングのステップ数です。ステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。 - guidance_scale (
float、デフォルト値は6.0) — Classifier-Free Diffusion Guidance で定義されているガイダンススケールです。guidance_scaleは、Imagen Paper の数式 2 のwとして定義されています。guidance_scale > 1を設定することで、ガイダンススケールが有効になります。ガイダンススケールを高くすると、promptのテキストと密接に関連する画像の生成が促されますが、通常は画像の品質が低下する傾向があります。 (T2V では 6.0、I2V では 5.0) - num_videos_per_prompt (
int、省略可能、デフォルト値は 1)— プロンプトごとに生成する画像の数。 - generator (
torch.Generatorまたはlist[torch.Generator]、省略可) — 生成を決定論的にするためのtorch.Generator。 - latents (
torch.Tensor, 任意) — ガウス分布からサンプリングされた事前生成されたノイズ付き latents。画像生成のインプットとして使用します。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを用いてサンプリングを行い、latents テンソルが生成されます。 - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込みです。テキスト入力(プロンプトの重み付けなど)を簡単に調整するために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力(プロンプトの重み付け)を簡単に調整するために使用できます。指定されない場合、negative_prompt入力引数からテキスト埋め込みが生成されます。 - output_type (
str、任意、デフォルトは"np") — 生成された画像の出力形式。PIL.Imageまたはnp.arrayから選択します。 - return_dict (
bool、省略可能、デフォルトはTrue) —SkyReelsV2PipelineOutputを返すか、プレーンなタプルを返すかを指定します。 - attention_kwargs (
dict, 省略可) — 指定された場合、diffusers.models.attention_processor で定義されているself.processor内のAttentionProcessorに渡される kwargs 辞書です。 - callback_on_step_end (
Callable、PipelineCallback、MultiPipelineCallbacks、省略可) — 推論中の各デノイジングステップの終了時に呼び出される関数、または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) — プロンプトの最大シーケンス長です。 - overlap_history (
int、任意、デフォルトはNone) — 長い動画の滑らかな遷移のためにオーバーラップするフレーム数です。Noneの場合、パイプラインは短い動画生成モードを前提とし、オーバーラップは適用されません。17 または 37 を設定することを推奨します。 - addnoise_condition (
float、任意、デフォルト値は0) — クリーンな条件にノイズを加えることで、長い動画の生成を滑らかにするために使用されます。ノイズが大きすぎると、不整合の原因にもなります。推奨値は 20 ですが、より大きな値を試すこともできます。ただし、50 を超えないことをお勧めします。 - base_num_frames (
int、任意、デフォルトは97) — 97 または 121 | 基本フレーム数(540P の場合は 97、720P の場合は 121) - ar_step (
int、任意、デフォルトは0) — 非同期推論を制御します(同期モードの場合は 0)。ar_step=5を設定すると、非同期推論を有効にできます。非同期推論を行う場合、causal_block_size=5の設定が推奨されますが、同期生成では設定すべきではありません。非同期推論ではシーケンス全体を拡散させるのに多くのステップを要するため、同期モードよりも遅くなります。実験では、非同期推論により、指示追従性能や視覚的一貫性性能が向上する可能性があります。 - causal_block_size (
int、任意、デフォルトはNone) — 各ブロック/チャンクに含まれるフレーム数です。非同期推論を使用する場合(ar_step > 0 の場合)に推奨されます。 - fps (
int、任意、デフォルトは24) — 生成される動画のフレームレート
戻り値
~SkyReelsV2PipelineOutput または tuple
return_dict が True の場合、SkyReelsV2PipelineOutput が返され、それ以外の場合は tuple が返されます。このとき、最初の要素は生成された画像のリスト、2番目の要素は対応する生成画像に「not-safe-for-work」(nsfw)コンテンツが含まれているかどうかを示す bool のリストです。
生成用の pipeline への呼び出し関数。
例:
>>> 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
< source >( 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 )
パラメータ
- 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、任意、デフォルトは 1) — プロンプトごとに生成する動画の数を指定します。結果の埋め込みを配置する torch デバイス - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が生成されます。 - device — (
torch.device、任意): torch デバイス - dtype — (
torch.dtype、省略可): torch の dtype
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。
generate_timestep_matrix
< source >( 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
パラメータ
- num_latent_frames (int) — 生成する潜在フレームの総数
- step_template (torch.Tensor) — 基本タイムステップスケジュール(例: [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — モデルが1回のフォワードパスで処理できる最大フレーム数
- ar_step (int, 任意) — 時間ラグ用の自己回帰ステップサイズ。 0 = 同期、>0 = 非同期。デフォルトは 5 です。
- num_pre_ready (int, 任意) — すでにデノイズが完了したフレームの数(例: video2video タスクにおけるプレフィックス由来のフレーム数)。 デフォルト値は 0 です。
- causal_block_size (int, 任意) — 因果ブロックとして処理されるフレーム数。 デフォルト値は 1 です。
- shrink_interval_with_mask (bool, 任意) — 処理区間の最適化を行うかどうかを指定します。 デフォルト値は False です。
戻り値
tuple を含む
- step_matrix (torch.Tensor): 各イテレーションにおける各フレームのタイムステップの行列。Shape: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): タイムステップの参照用のインデックス行列。Shape: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): 更新するフレームを示すブール型マスク。Shape: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): 各イテレーションの (start, end) 区間のリスト
例外
ValueError
ValueError— 指定された設定に対して ar_step が小さすぎる場合
この関数は、時間フレーム全体で協調的なノイズ除去スケジュールを作成するコアの拡散強制アルゴリズムを実装しています。同期生成モードと非同期生成モードの両方をサポートします。
同期モード(ar_step=0、causal_block_size=1):
- 各タイムステップにおいて、すべてのフレームが同時にデノイズされます
- 各フレームは同じノイズ除去軌跡 [1000, 800, 600, …, 0] をたどります。
- よりシンプルですが、長時間の動画では時間的な一貫性が低くなる可能性があります
非同期モード(ar_step>0、causal_block_size>1):
- フレームは因果ブロックにグループ化され、ブロック/チャンク単位で処理されます
- 各ブロックは、段階的にずらされたパターンでノイズ除去され、「デノイジング・ウェーブ」が形成されます。
- 先行ブロックはよりノイズ除去が進んでおり、後続ブロックはar_stepステップ分遅れています
- より強い時間依存性と、より良い一貫性を生み出します
SkyReelsV2DiffusionForcingImageToVideoPipeline
class diffusers.SkyReelsV2DiffusionForcingImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
パラメータ
- tokenizer (
AutoTokenizer) — T5 の Tokenizer、具体的には google/umt5-xxl バリアントです。 - text_encoder (
UMT5EncoderModel) — T5、具体的には google/umt5-xxl バリアントです。 - transformer (SkyReelsV2Transformer3DModel) — エンコードされた画像の潜在変数をデノイズするための条件付き Transformer。
- scheduler (UniPCMultistepScheduler) —
transformerと組み合わせて、エンコードされた画像の潜在変数からノイズを除去するために使用するスケジューラ。 - vae (AutoencoderKLWan) — 潜在表現へのエンコードとデコードを行う、動画用の変分オートエンコーダ (VAE) モデル。
SkyReels-V2のdiffusion forcingを用いたImage-to-Video (i2v) 生成用のPipeline。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに実装されている汎用的なメソッド(ダウンロード、保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__call__
< source >( 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 = ['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
パラメータ
- image (
PipelineImageInput) — 生成を条件づけるための入力画像です。画像、画像のリスト、またはtorch.Tensorである必要があります。 - prompt (
strまたはlist[str]、省略可) — 画像生成をガイドするためのプロンプトです。未定義の場合、代わりにprompt_embedsを渡す必要があります。 - negative_prompt (
strまたはlist[str]、省略可) — 画像生成をガイドしないプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。ガイダンスを使用していない場合は無視されます(guidance_scaleが1未満の場合は無視されます)。 - height (
int、デフォルト値は544) — 生成される動画の高さです。 - width (
int、デフォルトは960) — 生成される動画の幅です。 - num_frames (
int、デフォルトは97) — 生成される動画のフレーム数です。 - num_inference_steps (
int、デフォルトは50) — デノイジングのステップ数です。ステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。 - guidance_scale (
float、デフォルト値は5.0) — Classifier-Free Diffusion Guidance で定義されているガイダンススケールです。guidance_scaleは、Imagen Paper の数式 2 のwとして定義されています。guidance_scale > 1を設定することでガイダンススケールが有効になります。ガイダンススケールを高くすると、promptのテキストと密接に関連する画像の生成が促されますが、通常は画像の品質低下を伴います。(T2V では 6.0、I2V では 5.0) - num_videos_per_prompt (
int、省略可能、デフォルト値は 1)— プロンプトごとに生成する画像の数。 - generator (
torch.Generatorまたはlist[torch.Generator]、省略可) — 生成を決定論的にするためのtorch.Generator。 - latents (
torch.Tensor, 任意) — ガウス分布からサンプリングされた事前生成されたノイズ付き latents。画像生成のインプットとして使用します。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを用いてサンプリングを行い、latents テンソルが生成されます。 - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込みです。テキスト入力(プロンプトの重み付けなど)を簡単に調整するために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力(プロンプトの重み付け)を簡単に調整するために使用できます。指定されない場合、negative_prompt入力引数からテキスト埋め込みが生成されます。 - image_embeds (
torch.Tensor, 任意) — 事前に生成された画像埋め込み。画像入力(重み付け)を簡単に調整するために使用できます。指定されない場合、image入力引数から画像埋め込みが生成されます。 - last_image (
torch.Tensor、省略可) — 事前に生成された画像エンベディング。画像入力(重み付け)を簡単に調整するために使用できます。指定されない場合、image入力引数から画像エンベディングが生成されます。 - output_type (
str、任意、デフォルトは"np") — 生成された画像の出力形式。PIL.Imageまたはnp.arrayから選択します。 - return_dict (
bool、省略可能、デフォルトはTrue) —SkyReelsV2PipelineOutputを返すか、プレーンなタプルを返すかを指定します。 - attention_kwargs (
dict, 省略可) — 指定された場合、diffusers.models.attention_processor で定義されているself.processor内のAttentionProcessorに渡される kwargs 辞書です。 - callback_on_step_end (
Callable、PipelineCallback、MultiPipelineCallbacks、省略可) — 推論中の各デノイジングステップの終了時に呼び出される関数、または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) — プロンプトの最大シーケンス長です。 - overlap_history (
int、任意、デフォルトはNone) — 長い動画の滑らかな遷移のためにオーバーラップするフレーム数です。Noneの場合、パイプラインは短い動画生成モードを前提とし、オーバーラップは適用されません。17 または 37 を設定することを推奨します。 - addnoise_condition (
float、任意、デフォルト値は0) — クリーンな条件にノイズを加えることで、長い動画の生成を滑らかにするために使用されます。ノイズが大きすぎると、不整合の原因にもなります。推奨値は 20 ですが、より大きな値を試すこともできます。ただし、50 を超えないことをお勧めします。 - base_num_frames (
int、任意、デフォルトは97) — 97 または 121 | 基本フレーム数(540P の場合は 97、720P の場合は 121) - ar_step (
int、任意、デフォルトは0) — 非同期推論を制御します(同期モードの場合は 0)。ar_step=5を設定すると、非同期推論を有効にできます。非同期推論を行う場合、causal_block_size=5の設定が推奨されますが、同期生成では設定すべきではありません。非同期推論ではシーケンス全体を拡散させるのに多くのステップを要するため、同期モードよりも遅くなります。実験では、非同期推論により、指示追従性能や視覚的一貫性性能が向上する可能性があります。 - causal_block_size (
int、任意、デフォルトはNone) — 各ブロック/チャンクに含まれるフレーム数です。非同期推論を使用する場合(ar_step > 0 の場合)に推奨されます。 - fps (
int、任意、デフォルトは24) — 生成される動画のフレームレート
戻り値
~SkyReelsV2PipelineOutput または tuple
return_dict が True の場合、SkyReelsV2PipelineOutput が返され、それ以外の場合は tuple が返されます。このとき、最初の要素は生成された画像のリスト、2番目の要素は対応する生成画像に「not-safe-for-work」(nsfw)コンテンツが含まれているかどうかを示す bool のリストです。
生成用の pipeline への呼び出し関数。
例:
>>> 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
< source >( 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 )
パラメータ
- 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、任意、デフォルトは 1) — プロンプトごとに生成する動画の数を指定します。結果の埋め込みを配置する torch デバイス - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が生成されます。 - device — (
torch.device、任意): torch デバイス - dtype — (
torch.dtype、省略可): torch の dtype
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。
generate_timestep_matrix
< source >( 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
パラメータ
- num_latent_frames (int) — 生成する潜在フレームの総数
- step_template (torch.Tensor) — 基本タイムステップスケジュール(例: [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — モデルが1回のフォワードパスで処理できる最大フレーム数
- ar_step (int, 任意) — 時間ラグ用の自己回帰ステップサイズ。 0 = 同期、>0 = 非同期。デフォルトは 5 です。
- num_pre_ready (int, 任意) — すでにデノイズが完了したフレームの数(例: video2video タスクにおけるプレフィックス由来のフレーム数)。 デフォルト値は 0 です。
- causal_block_size (int, 任意) — 因果ブロックとして処理されるフレーム数。 デフォルト値は 1 です。
- shrink_interval_with_mask (bool, 任意) — 処理区間の最適化を行うかどうかを指定します。 デフォルト値は False です。
戻り値
tuple を含む
- step_matrix (torch.Tensor): 各イテレーションにおける各フレームのタイムステップの行列。Shape: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): タイムステップの参照用のインデックス行列。Shape: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): 更新するフレームを示すブール型マスク。Shape: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): 各イテレーションの (start, end) 区間のリスト
例外
ValueError
ValueError— 指定された設定に対して ar_step が小さすぎる場合
この関数は、時間フレーム全体で協調的なノイズ除去スケジュールを作成するコアの拡散強制アルゴリズムを実装しています。同期生成モードと非同期生成モードの両方をサポートします。
同期モード(ar_step=0、causal_block_size=1):
- 各タイムステップにおいて、すべてのフレームが同時にデノイズされます
- 各フレームは同じノイズ除去軌跡 [1000, 800, 600, …, 0] をたどります。
- よりシンプルですが、長時間の動画では時間的な一貫性が低くなる可能性があります
非同期モード(ar_step>0、causal_block_size>1):
- フレームは因果ブロックにグループ化され、ブロック/チャンク単位で処理されます
- 各ブロックは、段階的にずらされたパターンでノイズ除去され、「デノイジング・ウェーブ」が形成されます。
- 先行ブロックはよりノイズ除去が進んでおり、後続ブロックはar_stepステップ分遅れています
- より強い時間依存性と、より良い一貫性を生み出します
SkyReelsV2DiffusionForcingVideoToVideoPipeline
class diffusers.SkyReelsV2DiffusionForcingVideoToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
パラメータ
- tokenizer (
AutoTokenizer) — T5 の Tokenizer、具体的には google/umt5-xxl バリアントです。 - text_encoder (
UMT5EncoderModel) — T5、具体的には google/umt5-xxl バリアントです。 - transformer (SkyReelsV2Transformer3DModel) — エンコードされた画像の潜在変数をデノイズするための条件付き Transformer。
- scheduler (UniPCMultistepScheduler) —
transformerと組み合わせて、エンコードされた画像の潜在変数からノイズを除去するために使用するスケジューラ。 - vae (AutoencoderKLWan) — 潜在表現へのエンコードとデコードを行う、動画用の変分オートエンコーダ (VAE) モデル。
SkyReels-V2のdiffusion forcingを用いたVideo-to-Video (v2v) 生成のためのPipelineです。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに実装されている汎用的なメソッド(ダウンロード、保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__call__
< source >( video: listprompt: 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 = ['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
パラメータ
- video (
list[Image.Image]) — 動画生成をガイドするための動画。 - prompt (
strまたはlist[str]、省略可) — 動画生成をガイドするためのプロンプトです。未定義の場合、代わりにprompt_embedsを渡す必要があります。 - negative_prompt (
strまたはlist[str]、省略可) — 動画生成をガイドしないプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。ガイダンスを使用していない場合は無視されます(guidance_scaleが1未満の場合は無視されます)。 - height (
int、デフォルト値は544) — 生成される動画の高さです。 - width (
int、デフォルトは960) — 生成される動画の幅です。 - num_frames (
int、デフォルトは120) — 生成される動画のフレーム数です。 - num_inference_steps (
int、デフォルトは50) — デノイジングのステップ数です。ステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。 - guidance_scale (
float、デフォルトは6.0) — Classifier-Free Diffusion Guidance で定義されているガイダンススケールです。guidance_scaleは、Imagen Paper の数式 2 のwとして定義されています。guidance_scale > 1を設定することでガイダンススケールが有効になります。ガイダンススケールを高くすると、promptのテキストと密接に関連する画像の生成が促されますが、通常は画像品質の低下を伴います。(T2V では 6.0、I2V では 5.0) - num_videos_per_prompt (
int、省略可能、デフォルト値は 1)— プロンプトごとに生成する画像の数。 - generator (
torch.Generatorまたはlist[torch.Generator]、省略可) — 生成を決定論的にするためのtorch.Generator。 - latents (
torch.Tensor, 任意) — ガウス分布からサンプリングされた事前生成されたノイズ付き latents。画像生成のインプットとして使用します。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを用いてサンプリングを行い、latents テンソルが生成されます。 - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込みです。テキスト入力(プロンプトの重み付けなど)を簡単に調整するために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力(プロンプトの重み付け)を簡単に調整するために使用できます。指定されない場合、negative_prompt入力引数からテキスト埋め込みが生成されます。 - output_type (
str、任意、デフォルトは"np") — 生成された画像の出力形式。PIL.Imageまたはnp.arrayから選択します。 - return_dict (
bool、省略可能、デフォルトはTrue) —SkyReelsV2PipelineOutputを返すか、プレーンなタプルを返すかを指定します。 - attention_kwargs (
dict, 省略可) — 指定された場合、diffusers.models.attention_processor で定義されているself.processor内のAttentionProcessorに渡される kwargs 辞書です。 - callback_on_step_end (
Callable、PipelineCallback、MultiPipelineCallbacks、省略可) — 推論中の各デノイジングステップの終了時に呼び出される関数、または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) — プロンプトの最大シーケンス長です。 - overlap_history (
int、任意、デフォルトはNone) — 長い動画の滑らかな遷移のためにオーバーラップするフレーム数です。Noneの場合、パイプラインは短い動画生成モードを前提とし、オーバーラップは適用されません。17 または 37 を設定することを推奨します。 - addnoise_condition (
float、任意、デフォルト値は0) — クリーンな条件にノイズを加えることで、長い動画の生成を滑らかにするために使用されます。ノイズが大きすぎると、不整合の原因にもなります。推奨値は 20 ですが、より大きな値を試すこともできます。ただし、50 を超えないことをお勧めします。 - base_num_frames (
int、任意、デフォルトは97) — 97 または 121 | 基本フレーム数(540P の場合は 97、720P の場合は 121) - ar_step (
int、任意、デフォルトは0) — 非同期推論を制御します(同期モードの場合は 0)。ar_step=5を設定すると、非同期推論を有効にできます。非同期推論を行う場合、causal_block_size=5の設定が推奨されますが、同期生成では設定すべきではありません。非同期推論ではシーケンス全体を拡散させるのに多くのステップを要するため、同期モードよりも遅くなります。実験では、非同期推論により、指示追従性能や視覚的一貫性性能が向上する可能性があります。 - causal_block_size (
int、任意、デフォルトはNone) — 各ブロック/チャンクに含まれるフレーム数です。非同期推論を使用する場合(ar_step > 0 の場合)に推奨されます。 - fps (
int、任意、デフォルトは24) — 生成される動画のフレームレート
戻り値
~SkyReelsV2PipelineOutput または tuple
return_dict が True の場合、SkyReelsV2PipelineOutput が返され、それ以外の場合は tuple が返されます。このとき、最初の要素は生成された画像のリスト、2番目の要素は対応する生成画像に「not-safe-for-work」(nsfw)コンテンツが含まれているかどうかを示す bool のリストです。
生成用の pipeline への呼び出し関数。
例:
>>> 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
< source >( 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 )
パラメータ
- 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、任意、デフォルトは 1) — プロンプトごとに生成する動画の数を指定します。結果の埋め込みを配置する torch デバイス - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が生成されます。 - device — (
torch.device、任意): torch デバイス - dtype — (
torch.dtype、省略可): torch の dtype
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。
generate_timestep_matrix
< source >( 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
パラメータ
- num_latent_frames (int) — 生成する潜在フレームの総数
- step_template (torch.Tensor) — 基本タイムステップスケジュール(例: [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — モデルが1回のフォワードパスで処理できる最大フレーム数
- ar_step (int, 任意) — 時間ラグ用の自己回帰ステップサイズ。 0 = 同期、>0 = 非同期。デフォルトは 5 です。
- num_pre_ready (int, 任意) — すでにデノイズが完了したフレームの数(例: video2video タスクにおけるプレフィックス由来のフレーム数)。 デフォルト値は 0 です。
- causal_block_size (int, 任意) — 因果ブロックとして処理されるフレーム数。 デフォルト値は 1 です。
- shrink_interval_with_mask (bool, 任意) — 処理区間の最適化を行うかどうかを指定します。 デフォルト値は False です。
戻り値
tuple を含む
- step_matrix (torch.Tensor): 各イテレーションにおける各フレームのタイムステップの行列。Shape: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): タイムステップの参照用のインデックス行列。Shape: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): 更新するフレームを示すブール型マスク。Shape: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): 各イテレーションの (start, end) 区間のリスト
例外
ValueError
ValueError— 指定された設定に対して ar_step が小さすぎる場合
この関数は、時間フレーム全体で協調的なノイズ除去スケジュールを作成するコアの拡散強制アルゴリズムを実装しています。同期生成モードと非同期生成モードの両方をサポートします。
同期モード(ar_step=0、causal_block_size=1):
- 各タイムステップにおいて、すべてのフレームが同時にデノイズされます
- 各フレームは同じノイズ除去軌跡 [1000, 800, 600, …, 0] をたどります。
- よりシンプルですが、長時間の動画では時間的な一貫性が低くなる可能性があります
非同期モード(ar_step>0、causal_block_size>1):
- フレームは因果ブロックにグループ化され、ブロック/チャンク単位で処理されます
- 各ブロックは、段階的にずらされたパターンでノイズ除去され、「デノイジング・ウェーブ」が形成されます。
- 先行ブロックはよりノイズ除去が進んでおり、後続ブロックはar_stepステップ分遅れています
- より強い時間依存性と、より良い一貫性を生み出します
SkyReelsV2Pipeline
class diffusers.SkyReelsV2Pipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
パラメータ
- tokenizer (
T5Tokenizer) — T5 の Tokenizer、具体的には google/umt5-xxl バリアントです。 - text_encoder (
T5EncoderModel) — T5、具体的には google/umt5-xxl バリアントです。 - transformer (SkyReelsV2Transformer3DModel) — 入力潜在変数をノイズ除去するための条件付き Transformer。
- scheduler (UniPCMultistepScheduler) —
transformerと組み合わせて、エンコードされた画像の潜在変数からノイズを除去するために使用するスケジューラ。 - vae (AutoencoderKLWan) — 潜在表現へのエンコードとデコードを行う、動画用の変分オートエンコーダ (VAE) モデル。
SkyReels-V2 を使用したテキストから動画への生成 (t2v) 用の Pipeline。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに実装されている汎用的なメソッド(ダウンロード、保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__call__
< source >( 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 = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple
パラメータ
- prompt (
strまたはlist[str]、省略可) — 画像生成をガイドするためのプロンプトです。未定義の場合、代わりにprompt_embedsを渡す必要があります。 - negative_prompt (
strまたはlist[str]、省略可) — 画像生成をガイドしないプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。guidance を使用していない場合(guidance_scale < 1)は無視されます。 - height (
int、デフォルト値は544) — 生成される画像の高さ(ピクセル単位)。 - width (
int, デフォルトは960) — 生成される画像の幅(ピクセル単位)です。 - num_frames (
int、デフォルトは97) — 生成される動画のフレーム数です。 - num_inference_steps (
int、デフォルトは50) — デノイジングのステップ数です。ステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。 - guidance_scale (
float、デフォルト値は6.0) — Classifier-Free Diffusion Guidance で定義されるガイダンススケールです。guidance_scaleは、Imagen Paper の数式 2 のwとして定義されます。guidance_scale > 1を設定することでガイダンススケールが有効になります。ガイダンススケールを高くすると、promptのテキストと密接に関連する画像の生成が促されますが、通常は画像の品質が低下する傾向があります。 - num_videos_per_prompt (
int、省略可能、デフォルト値は 1)— プロンプトごとに生成する画像の数。 - generator (
torch.Generatorまたはlist[torch.Generator]、省略可) — 生成を決定論的にするためのtorch.Generator。 - latents (
torch.Tensor, 任意) — ガウス分布からサンプリングされた事前生成されたノイズ付き latents。画像生成のインプットとして使用します。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを用いてサンプリングを行い、latents テンソルが生成されます。 - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込みです。テキスト入力(プロンプトの重み付けなど)を簡単に調整するために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込み。テキスト入力(プロンプトの重み付け)を簡単に調整するために使用できます。指定されない場合、negative_prompt_embedsはnegative_prompt入力引数から生成されます。 - output_type (
str、任意、デフォルトは"np") — 生成された画像の出力形式。PIL.Imageまたはnp.arrayから選択します。 - return_dict (
bool、省略可能、デフォルトはTrue) —SkyReelsV2PipelineOutputを返すか、プレーンなタプルを返すかを指定します。 - attention_kwargs (
dict, 省略可) — 指定された場合、diffusers.models.attention_processor で定義されているself.processor内のAttentionProcessorに渡される kwargs 辞書です。 - callback_on_step_end (
Callable、PipelineCallback、MultiPipelineCallbacks、省略可) — 推論中の各デノイジングステップの終了時に呼び出される関数、または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) — テキストエンコーダーの最大シーケンス長です。
戻り値
~SkyReelsV2PipelineOutput または tuple
return_dict が True の場合、SkyReelsV2PipelineOutput が返され、それ以外の場合は tuple が返されます。このとき、最初の要素は生成された画像のリスト、2番目の要素は対応する生成画像に「not-safe-for-work」(nsfw)コンテンツが含まれているかどうかを示す bool のリストです。
生成用の pipeline への呼び出し関数。
例:
>>> 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
< source >( 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 )
パラメータ
- 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、任意、デフォルトは 1) — プロンプトごとに生成する動画の数を指定します。結果の埋め込みを配置する torch デバイス - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が生成されます。 - device — (
torch.device、任意): torch デバイス - dtype — (
torch.dtype、省略可): torch の dtype
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。
SkyReelsV2ImageToVideoPipeline
class diffusers.SkyReelsV2ImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModelimage_encoder: CLIPVisionModelWithProjectionimage_processor: CLIPProcessortransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
パラメータ
- tokenizer (
T5Tokenizer) — T5 の Tokenizer、具体的には google/umt5-xxl バリアントです。 - text_encoder (
T5EncoderModel) — T5、具体的には google/umt5-xxl バリアントです。 - image_encoder (
CLIPVisionModelWithProjection) — CLIP、 具体的には clip-vit-huge-patch14 バリアントです。 - transformer (SkyReelsV2Transformer3DModel) — 入力潜在変数をノイズ除去するための条件付き Transformer。
- scheduler (UniPCMultistepScheduler) —
transformerと組み合わせて、エンコードされた画像の潜在変数からノイズを除去するために使用するスケジューラ。 - vae (AutoencoderKLWan) — 潜在表現へのエンコードとデコードを行う、動画用の変分オートエンコーダ (VAE) モデル。
SkyReels-V2 を使用した Image-to-Video (i2v) 生成用の Pipeline です。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに実装されている汎用的なメソッド(ダウンロード、保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__call__
< source >( 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 = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple
パラメータ
- image (
PipelineImageInput) — 生成を条件づけるための入力画像です。画像、画像のリスト、またはtorch.Tensorである必要があります。 - prompt (
strまたはlist[str]、省略可) — 画像生成をガイドするためのプロンプトです。未定義の場合、代わりにprompt_embedsを渡す必要があります。 - negative_prompt (
strまたはlist[str]、省略可) — 画像生成をガイドしないプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。ガイダンスを使用していない場合は無視されます(guidance_scaleが1未満の場合は無視されます)。 - height (
int、デフォルト値は544) — 生成される動画の高さです。 - width (
int、デフォルトは960) — 生成される動画の幅です。 - num_frames (
int、デフォルトは97) — 生成される動画のフレーム数です。 - num_inference_steps (
int、デフォルトは50) — デノイジングのステップ数です。ステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。 - guidance_scale (
float、デフォルト値は5.0) — Classifier-Free Diffusion Guidance で定義されているガイダンススケールです。guidance_scaleは、Imagen Paper の数式 2 のwとして定義されています。guidance_scale > 1を設定することで、ガイダンススケールが有効になります。ガイダンススケールを高くすると、promptのテキストと密接に関連した画像の生成が促されますが、通常は画像の品質が低下する傾向があります。 - num_videos_per_prompt (
int、省略可能、デフォルト値は 1)— プロンプトごとに生成する画像の数。 - generator (
torch.Generatorまたはlist[torch.Generator]、省略可) — 生成を決定論的にするためのtorch.Generator。 - latents (
torch.Tensor, 任意) — ガウス分布からサンプリングされた事前生成されたノイズ付き latents。画像生成のインプットとして使用します。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを用いてサンプリングを行い、latents テンソルが生成されます。 - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込みです。テキスト入力(プロンプトの重み付けなど)を簡単に調整するために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力(プロンプトの重み付け)を簡単に調整するために使用できます。指定されない場合、negative_prompt入力引数からテキスト埋め込みが生成されます。 - image_embeds (
torch.Tensor, 任意) — 事前に生成された画像埋め込み。画像入力(重み付け)を簡単に調整するために使用できます。指定されない場合、image入力引数から画像埋め込みが生成されます。 - last_image (
torch.Tensor, 任意) — 生成される動画の末尾を固定するための、image-to-video 条件付け用の任意の最後の画像。 - output_type (
str、任意、デフォルトは"np") — 生成された画像の出力形式。PIL.Imageまたはnp.arrayから選択します。 - return_dict (
bool、省略可能、デフォルトはTrue) —WanPipelineOutputを返すか、プレーンなタプルを返すかを指定します。 - attention_kwargs (
dict, 省略可) — 指定された場合、diffusers.models.attention_processor で定義されているself.processor内のAttentionProcessorに渡される kwargs 辞書です。 - callback_on_step_end (
Callable、PipelineCallback、MultiPipelineCallbacks、省略可) — 推論中の各デノイジングステップの終了時に呼び出される関数、または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) — プロンプトの最大シーケンス長です。
戻り値
~SkyReelsV2PipelineOutput または tuple
return_dict が True の場合、SkyReelsV2PipelineOutput が返され、それ以外の場合は tuple が返されます。このとき、最初の要素は生成された画像のリスト、2番目の要素は対応する生成画像に「not-safe-for-work」(nsfw)コンテンツが含まれているかどうかを示す bool のリストです。
生成用の pipeline への呼び出し関数。
例:
>>> 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
< source >( 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 )
パラメータ
- 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、任意、デフォルトは 1) — プロンプトごとに生成する動画の数を指定します。結果の埋め込みを配置する torch デバイス - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が生成されます。 - device — (
torch.device、任意): torch デバイス - dtype — (
torch.dtype、省略可): torch の dtype
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。
SkyReelsV2PipelineOutput
クラス diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput
< source >( frames: Tensor )
SkyReelsV2 パイプライン用の出力クラスです。