Buckets:
AnyFlow
AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation dari NVIDIA, National University of Singapore, dan Massachusetts Institute of Technology, oleh Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou.
TL;DR: AnyFlow adalah kerangka kerja difusi video any-step pertama yang dibangun di atas flow maps, yang memungkinkan satu model (bidireksional atau kausal) untuk beradaptasi dengan anggaran inferensi yang arbitrer.
Generasi video dengan langkah sedikit telah maju secara signifikan berkat model konsistensi. Namun, kinerjanya sering kali menurun pada model difusi video any-step karena formulasi titik tetap. Untuk mengatasi keterbatasan ini, kami memperkenalkan AnyFlow, kerangka distilasi difusi video any-step pertama yang dibangun di atas peta alur. Alih-alih hanya mempelajari pemetaan z_t → z_0, AnyFlow mempelajari transisi z_t → z_r pada interval waktu yang sewenang-wenang, sehingga memungkinkan satu model untuk beradaptasi dengan anggaran inferensi yang berbeda. Kami merancang resep pelatihan peta alur maju yang ditingkatkan untuk menyetel ulang model difusi video yang telah dilatih sebelumnya menjadi model peta alur, serta memperkenalkan Simulasi Mundur Peta Alur untuk memungkinkan distilasi on-policy untuk model peta alur. Eksperimen ekstensif pada arsitektur bidireksional dan kausal, dengan skala dari 1,3 miliar hingga 14 miliar parameter, pada tugas teks-ke-video dan gambar-ke-video menunjukkan bahwa AnyFlow melampaui baseline berbasis konsistensi sambil mempertahankan fidelitas tinggi dan pengambilan sampel yang fleksibel di bawah anggaran langkah yang bervariasi.
Pipeline AnyFlow disumbangkan oleh Tim AnyFlow. Kode aslinya tersedia di GitHub, halaman proyeknya ada di nvlabs.github.io/AnyFlow, dan model pretrained dapat ditemukan di koleksi nvidia/anyflow di Hugging Face.
Model yang Tersedia:
| Checkpoint | Backbone | Deskripsi |
|---|---|---|
nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers |
Wan2.1 1.3B | T2V Bidireksional |
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers |
Wan2.1 14B | T2V Bidireksional |
nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers |
FAR + Wan2.1 1.3B | Causal T2V / I2V / V2V |
nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers |
FAR + Wan2.1 14B | Causal T2V / I2V / V2V |
AnyFlowPipelinedirancang untuk model difusi bidireksional dalam generasi teks-ke-video (T2V).AnyFlowFARPipelineadalah model difusi kausal berbasis chunk yang mendukung generasi teks-ke-video (T2V), generasi gambar-ke-video (I2V), dan kelanjutan video (V2V).
Generasi dengan AnyFlow (T2V Bidireksional)
import torch
from diffusers import AnyFlowPipeline
from diffusers.utils import export_to_video
pipe = AnyFlowPipeline.from_pretrained(
"nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
prompt = (
"An astronaut runs smoothly and appears almost weightless on the lunar surface, "
"as seen from a low-angle shot that highlights the vast, desolate background of the moon. "
"The moon's craters and rocky terrain are clearly visible, creating a stark contrast against "
"the running astronaut who moves with graceful, fluid motions."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_t2v.mp4", fps=16)
Generasi dengan AnyFlow (FAR Causal)
Pipeline kausal memilih antara T2V / I2V / V2V melalui argumen video (atau video_latents): biarkan keduanya kosong untuk text-to-video biasa, atau berikan video=<tensor> dengan bentuk (B, T, C, H, W) dalam rentang [0, 1] dengan T = 4n + 1 untuk mengondisikan pada frame yang sudah ada. Gunakan satu frame kondisioning untuk I2V dan klip yang lebih panjang untuk kelanjutan V2V. Jika Anda sudah memiliki latents yang telah di-encode sebelumnya dalam tata letak model, berikan melalui video_latents=<tensor> untuk melewati encoding VAE. video dan video_latents bersifat saling eksklusif.
Checkpoint yang dirilis membakar
chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2](jumlah 21) ke dalam konfigurasi transformer, yang disesuaikan dengan 81 frame mentah kanonik (21 frame laten pada langkah temporal VAE sebesar 4). Saat Anda mengubahnum_frames, berikanchunk_partitionyang sesuai dengan jumlah(num_frames - 1) // 4 + 1, jika tidak pipeline akan melemparValueError.
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
prompt = (
"An astronaut runs smoothly and appears almost weightless on the lunar surface, "
"as seen from a low-angle shot that highlights the vast, desolate background of the moon."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_far_t2v.mp4", fps=16)
import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_image
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
# Example conditioning image from the AnyFlow repo.
first_frame = load_image(
"https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/images/1.jpg"
).resize((832, 480))
arr = np.asarray(first_frame).astype("float32") / 255.0 # (480, 832, 3)
context_tensor = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda") # (1, 1, 3, 480, 832)
prompt = (
"A towering, battle-scarred humanoid robot, reminiscent of a Transformer with powerful, segmented armor "
"and glowing red optics, walking through the skeletal remains of a city ruin. Twisted metal and shattered "
"concrete crunch under its heavy steps, as the robot scans the desolate, dust-choked skyline under an dark sky."
)
video = pipe(
prompt=prompt,
video=context_tensor,
num_inference_steps=4,
num_frames=81,
).frames[0]
export_to_video(video, "anyflow_far_i2v.mp4", fps=16)
import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_video
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
# Example conditioning clip from the AnyFlow repo — take the first 9 frames (3 latent frames at VAE temporal stride 4).
context_frames = load_video(
"https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/videos/2.mp4"
)[:9]
arr = np.stack([np.asarray(f.resize((832, 480))) for f in context_frames]).astype("float32") / 255.0
context_tensor = torch.from_numpy(arr).permute(0, 3, 1, 2).unsqueeze(0).to("cuda") # (1, 9, 3, 480, 832)
prompt = (
"A focused trail runner's powerful strides through a dense, sun-dappled forest. "
"The camera tracks alongside, highlighting muscular exertion, sweat, and determined facial expression."
)
video = pipe(
prompt=prompt,
video=context_tensor,
num_inference_steps=4,
num_frames=81,
# Override chunk_partition so the first chunk covers exactly the 3 latent context frames.
chunk_partition=[3, 3, 3, 3, 3, 3, 3],
).frames[0]
export_to_video(video, "anyflow_far_v2v.mp4", fps=16)
Catatan
- Classifier-free guidance telah dilebur ke dalam checkpoint yang dirilis, sehingga inferensi tidak menjalankan langkah forward terpandu kedua. Pertahankan nilai default
guidance_scale=1.0kecuali checkpoint Anda sendiri memerlukan pengaturan lain. FlowMapEulerDiscreteSchedulerbersifat serbaguna. Anda dapat menempelkannya ke checkpoint flow-map-distilled mana pun melaluifrom_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).AnyFlowPipelinemenggunakanAnyFlowTransformer3DModel(bidireksional).AnyFlowFARPipelinemenggunakanAnyFlowFARTransformer3DModel, yang menambahkan patch embedding frame terkompresi dan block-mask kausal FAR.- Pembebanan LoRA didukung melalui
WanLoraLoaderMixin, mixin yang sama yang digunakan oleh pipeline Wan upstream. - Untuk resep pelatihan (pelatihan forward flow-map dan distilasi on-policy), silakan merujuk ke framework pelatihan AnyFlow asli di
NVlabs/AnyFlow; pelatihan berada di luar cakupan diffusers.
AnyFlowPipeline[[diffusers.AnyFlowPipeline]]
diffusers.AnyFlowPipeline[[diffusers.AnyFlowPipeline]]
diffusers.AnyFlowPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)
Parameter:
tokenizer ([AutoTokenizer]) : Tokenizer dari google/umt5-xxl.
text_encoder ([UMT5EncoderModel]) : encoder teks google/umt5-xxl.
transformer ([AnyFlowTransformer3DModel]) : Transformer 3D flow-map bidireksional.
vae ([AutoencoderKLWan]) : VAE yang mengodekan/menguraikan video ke dan dari representasi laten.
scheduler ([FlowMapEulerDiscreteScheduler]) : Sampler flow-map. Pipeline menggerakkan scheduler.step(..., timestep, sample, r_timestep) per langkah inferensi.
Pipeline generasi teks-ke-video bidireksional untuk checkpoint AnyFlow yang telah di-distilasi flow-map, diperkenalkan dalam AnyFlow.
AnyFlow mempelajari transisi interval arbitrer alih-alih pemetaan tetap dari model konsistensi, sehingga satu checkpoint yang telah didistilasi dapat dievaluasi pada 1, 2, 4, 8, 16... NFE tanpa pelatihan ulang. Pipeline ini beroperasi pada tensor video penuh dalam satu pass bidireksional; untuk generasi autoregresif (kausal) per-chunk gunakan AnyFlowFARPipeline.
Sampling menggunakan Euler polos dalam bentuk kecepatan rata-rata (z_r = z_t - (t - r) * u) tanpa re-noising. Checkpoint NVIDIA yang dirilis menggabungkan classifier-free guidance ke dalam bobot model, sehingga pengaturan default guidance_scale=1.0 adalah yang direkomendasikan.
Model ini mewarisi dari [DiffusionPipeline]. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
call[[diffusers.AnyFlowPipeline.call]]
__call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True)
Parameter:
prompt (str atau List[str], opsional) : Prompt atau prompt-prompt untuk mengarahkan generasi video. Jika tidak didefinisikan, gunakan prompt_embeds sebagai gantinya.
video (torch.Tensor, opsional) : Bingkai kondisioning pra-VAE dengan bentuk (B, T, C, H, W) dalam [0, 1]. Jika diberikan, pipeline akan meng-encode-nya dengan VAE dan mempertahankan prefiks laten yang sesuai tetap tetap selama sampling. Saling eksklusif dengan video_latents.
video_latents (torch.Tensor, opsional) : Laten VAE yang sudah di-encode sebelumnya dalam tata letak AnyFlow (B, T_latent, C, H_latent, W_latent). Melewati pengkodean VAE di sisi pipeline. Saling eksklusif dengan video.
negative_prompt (str atau List[str], opsional) : Prompt atau prompt-prompt yang harus dihindari selama pembuatan video. Diabaikan ketika tidak menggunakan panduan (guidance_scale < 1).
height (int, defaultnya 480) : Tinggi video yang dihasilkan dalam piksel.
width (int, defaultnya 832) : Lebar video yang dihasilkan dalam piksel.
num_frames (int, defaultnya 81) : Jumlah frame dalam video yang dihasilkan. Harus memenuhi (num_frames - 1) % vae_scale_factor_temporal == 0.
num_inference_steps (int, defaultnya 50) : Jumlah langkah denoising. Checkpoint Distilled AnyFlow mendukung any-step sampling, sehingga nilai serendah 1, 2, 4, atau 8 adalah hal yang umum. Diabaikan ketika sigmas atau timesteps disediakan.
sigmas (List[float], opsional) : Jadwal sigma kustom untuk sampling any-step, dalam [0, 1] dan diurutkan dari berisik ke bersih. Panjang menentukan num_inference_steps efektif; scheduler menambahkan sigma terminal 0.
timesteps (List[float], opsional) : Jadwal timestep kustom untuk sampling any-step, dalam satuan yang sama dengan self.scheduler.timesteps (yaitu diskalakan oleh num_train_timesteps). Saling eksklusif dengan sigmas.
guidance_scale (float, defaultnya 1.0) : Skala panduan bebas-pengklasifikasian (classifier-free guidance). Checkpoint AnyFlow yang dirilis menggabungkan CFG ke dalam bobot selama pelatihan; pertahankan di 1.0 kecuali Anda tahu bahwa checkpoint Anda mengharapkan nilai lain.
num_videos_per_prompt (int, opsional, defaultnya 1) : Jumlah video yang akan dihasilkan per prompt.
generator (torch.Generator atau List[torch.Generator], opsional) : Sebuah torch.Generator untuk membuat proses generasi menjadi deterministik.
latents (torch.Tensor, opsional) : Laten berisik yang telah dibuat sebelumnya untuk digunakan sebagai input. Jika tidak disediakan, laten akan diambil dari generator yang diberikan.
prompt_embeds (torch.Tensor, opsional) : Embedding teks yang telah dibuat sebelumnya. Dapat digunakan untuk menyesuaikan input teks (misalnya, pembobotan prompt). Jika tidak disediakan, embedding akan dihasilkan dari prompt.
negative_prompt_embeds (torch.Tensor, opsional) : Embedding teks negatif yang telah dibuat sebelumnya.
output_type (str, opsional, defaultnya "np") : Format output. Salah satu dari "pil", "np", "pt", atau "latent".
return_dict (bool, opsional, defaultnya True) : Apakah akan mengembalikan AnyFlowPipelineOutput alih-alih tuple biasa.
attention_kwargs (dict, opsional) : Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
callback_on_step_end (Callable, opsional) : Fungsi atau PipelineCallback yang dipanggil di akhir setiap langkah inferensi. Lihat callbacks untuk detailnya.
callback_on_step_end_tensor_inputs (List[str], opsional, defaultnya ["latents"]) : Input tensor yang diteruskan ke callback. Harus berupa subset dari self._callback_tensor_inputs.
max_sequence_length (int, defaultnya 512) : Panjang maksimum urutan text-encoder. Prompt yang lebih panjang akan dipotong.
use_mean_velocity (bool, defaultnya True) : Ketika True, model flow-map dikondisikan pada kedua timestep sumber t dan timestep target r untuk memprediksi kecepatan rata-rata, sesuai dengan perilaku saat pelatihan. Nonaktifkan untuk mencerminkan langkah Euler mentah (r = t).
Mengembalikan: ~AnyFlowPipelineOutput atau tuple
Jika return_dict adalah True, AnyFlowPipelineOutput dikembalikan, selain itu sebuah tuple yang elemen pertamanya adalah video yang dihasilkan.
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> from diffusers import AnyFlowPipeline
>>> from diffusers.utils import export_to_video
>>> pipe = AnyFlowPipeline.from_pretrained(
... "nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")
>>> prompt = "A red panda eating bamboo in a forest, cinematic lighting"
>>> video = pipe(prompt, num_inference_steps=4, num_frames=33).frames[0]
>>> export_to_video(video, "anyflow_t2v.mp4", fps=16)
encode_prompt[[diffusers.AnyFlowPipeline.encode_prompt]]
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None)
Parameter:
prompt (str atau list[str], opsional) : prompt yang akan dienkod
negative_prompt (str atau list[str], opsional) : Prompt atau prompt-prompt yang tidak akan memandu generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan saat tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
do_classifier_free_guidance (bool, opsional, defaultnya True) : Apakah akan menggunakan classifier free guidance atau tidak.
num_videos_per_prompt (int, opsional, default 1) : Jumlah video yang harus dihasilkan per prompt. perangkat torch untuk menempatkan embedding yang dihasilkan
prompt_embeds (torch.Tensor, opsional) : Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
negative_prompt_embeds (torch.Tensor, opsional) : Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen input negative_prompt.
device : (torch.device, opsional): perangkat torch
dtype : (torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
encode_video[[diffusers.AnyFlowPipeline.encode_video]]
encode_video(video: Tensor, height: int, width: int)
Enkodekan video ruang piksel ke dalam tata letak laten AnyFlow.
Mengikuti konvensi helper tunggal dari pipeline diffusers lainnya (lihat WanImageToVideoPipeline.encode_image): membungkus pra-pemrosesan, enkoding VAE, dan normalisasi laten ke dalam satu panggilan. Tata letak output adalah (B, T_latent, C, H, W), yang merupakan format yang diharapkan oleh transformer AnyFlow untuk frame kondisioning.
AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]
diffusers.AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]
diffusers.AnyFlowFARPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowFARTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)
Parameter:
tokenizer ([AutoTokenizer]) : Tokenizer dari google/umt5-xxl.
text_encoder ([UMT5EncoderModel]) : encoder teks google/umt5-xxl.
transformer ([AnyFlowFARTransformer3DModel]) : Transformer 3D flow-map kausal FAR.
vae ([AutoencoderKLWan]) : VAE yang mengodekan/menguraikan video ke dan dari representasi laten.
scheduler ([FlowMapEulerDiscreteScheduler]) : Sampler flow-map.
Causal (FAR-based) text-to-video / image-to-video / video-to-video pipeline for AnyFlow checkpoints, introduced in AnyFlow.
Pipeline menggerakkan loop sampling autoregresif per chunk: setiap chunk didenois dengan langkah flow-map sambil hanya memperhatikan chunk sebelumnya melalui perhatian kausal blok-sparse, dan cache KV antara digunakan kembali di antara chunk.
Mode tugas (T2V / I2V / V2V) dipilih berdasarkan argumen kondisioning mana yang diteruskan ke __call__:
- baik
video=Nonemaupunvideo_latents=None— teks-ke-video murni. video=&lt;tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1>— frame kondisioning pra-VAE; pipeline akan melakukan VAE-encoding pada frame tersebut. Kirimkan video satu frame untuk I2V atau klip multi-frame untuk V2V.video_latents=&lt;latent tensor of shape (B, T_latent, C, H_latent, W_latent)>— latents yang sudah dikodekan dalam layout FAR (melewati langkah encode VAE).
Backbone FAR adalah varian Wan2.1 kausal yang diperkenalkan oleh FAR. Inferensi menggunakan Euler polos dalam bentuk kecepatan rata-rata per chunk tanpa re-noising. Dukungan untuk T2V / I2V / V2V gabungan disediakan oleh satu model terdistilasi.
Model ini mewarisi dari [DiffusionPipeline]. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
call[[diffusers.AnyFlowFARPipeline.call]]
__call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True, use_kv_cache: bool = True, chunk_partition: typing.Optional[typing.List[int]] = None)
Parameter:
prompt (str atau List[str], opsional) : Prompt atau prompt-prompt untuk mengarahkan generasi video. Jika tidak didefinisikan, gunakan prompt_embeds sebagai gantinya.
video (torch.Tensor, opsional) : Bingkai kondisioning pra-VAE dengan bentuk (B, T, C, H, W) dalam [0, 1] (T = 4n + 1). Jika diberikan, pipeline akan meng-encode-nya dengan VAE dan mempertahankan prefiks laten yang sesuai tetap tetap selama sampling. Saling eksklusif dengan video_latents.
video_latents (torch.Tensor, opsional) : Laten VAE yang sudah di-encode sebelumnya dalam layout FAR (B, T_latent, C, H_latent, W_latent). Melewati pengkodean VAE di sisi pipeline. Saling eksklusif dengan video.
negative_prompt (str atau List[str], opsional) : Prompt atau prompt-prompt yang harus dihindari selama pembuatan video. Diabaikan ketika tidak menggunakan panduan (guidance_scale < 1).
height (int, defaultnya 480) : Tinggi video yang dihasilkan dalam piksel.
width (int, defaultnya 832) : Lebar video yang dihasilkan dalam piksel.
num_frames (int, defaultnya 81) : Jumlah frame dalam video yang dihasilkan. Harus memenuhi (num_frames - 1) % vae_scale_factor_temporal == 0.
num_inference_steps (int, defaultnya 50) : Jumlah langkah denoising per chunk. Checkpoint AnyFlow-FAR yang telah didistilasi mendukung pengambilan sampel dengan langkah apa pun (1, 2, 4, 8, ...). Diabaikan ketika sigmas atau timesteps disediakan.
sigmas (List[float], opsional) : Jadwal sigma kustom untuk sampling any-step, dalam [0, 1] dan diurutkan dari berisik ke bersih. Panjang menentukan num_inference_steps efektif; scheduler menambahkan sigma terminal 0.
timesteps (List[float], opsional) : Jadwal timestep kustom untuk sampling any-step, dalam satuan yang sama dengan self.scheduler.timesteps (yaitu diskalakan oleh num_train_timesteps). Saling eksklusif dengan sigmas.
guidance_scale (float, defaultnya 1.0) : Skala panduan bebas-pengklasifikasian (classifier-free guidance). Checkpoint AnyFlow yang dirilis menggabungkan CFG ke dalam bobot selama pelatihan; pertahankan di 1.0 kecuali checkpoint tersebut membutuhkan pengaturan lain.
num_videos_per_prompt (int, opsional, defaultnya 1) : Jumlah video yang akan dihasilkan per prompt.
generator (torch.Generator atau List[torch.Generator], opsional) : Generator yang digunakan untuk menabur benih (seed) sampling.
latents (torch.Tensor, opsional) : Laten berisik yang telah dibuat sebelumnya. Jika tidak disediakan, laten akan diambil dari generator yang diberikan.
prompt_embeds (torch.Tensor, opsional) : Embedding teks yang telah dibuat sebelumnya. Jika tidak disediakan, embedding akan dibuat dari prompt.
negative_prompt_embeds (torch.Tensor, opsional) : Embedding teks negatif yang telah dibuat sebelumnya.
output_type (str, opsional, defaultnya "np") : Format output. Salah satu dari "pil", "np", "pt", atau "latent".
return_dict (bool, opsional, defaultnya True) : Apakah akan mengembalikan AnyFlowPipelineOutput alih-alih tuple biasa.
attention_kwargs (dict, opsional) : Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
callback_on_step_end (Callable, opsional) : Fungsi atau PipelineCallback yang dipanggil di akhir setiap langkah inferensi.
callback_on_step_end_tensor_inputs (List[str], opsional, defaultnya ["latents"]) : Input tensor yang diteruskan ke callback. Harus berupa subset dari self._callback_tensor_inputs.
max_sequence_length (int, defaultnya 512) : Panjang maksimum sekuens text-encoder.
use_mean_velocity (bool, defaultnya True) : Ketika True, kondisikan model flow-map pada kedua timestep sumber t dan timestep target r untuk memprediksi kecepatan rata-rata. Nonaktifkan untuk mencerminkan langkah Euler mentah.
use_kv_cache (bool, defaultnya True) : Gunakan ulang cache KV perhatian FAR di antara chunk kausal. Nonaktifkan hanya untuk debugging.
chunk_partition (List[int], opsional) : Jumlah frame per chunk. Nilainya secara default adalah self.transformer.config.chunk_partition (disesuaikan dengan checkpoint 81-frame yang dirilis). Saat Anda mengubah num_frames, berikan chunk_partition yang jumlahnya sama dengan (num_frames - 1) // vae_scale_factor_temporal + 1.
Mengembalikan: ~AnyFlowPipelineOutput atau tuple
Jika return_dict adalah True, sebuah AnyFlowPipelineOutput dikembalikan, selain itu sebuah tuple yang elemen pertamanya adalah video yang dihasilkan.
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import numpy as np
>>> import torch
>>> from diffusers import AnyFlowFARPipeline
>>> from diffusers.utils import export_to_video, load_image
>>> pipe = AnyFlowFARPipeline.from_pretrained(
... "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")
>>> # Single-frame I2V: wrap the conditioning image as a (1, 1, 3, H, W) tensor in [0, 1].
>>> first_frame = load_image("path/to/first_frame.png").resize((832, 480))
>>> arr = np.asarray(first_frame).astype("float32") / 255.0
>>> context = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda")
>>> video = pipe(
... prompt="a cat walks across a sunlit lawn",
... video=context,
... num_inference_steps=4,
... num_frames=81,
... ).frames[0]
>>> export_to_video(video, "anyflow_far.mp4", fps=16)
encode_prompt[[diffusers.AnyFlowFARPipeline.encode_prompt]]
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None)
Parameter:
prompt (str atau list[str], opsional) : prompt yang akan dienkod
negative_prompt (str atau list[str], opsional) : Prompt atau prompt-prompt yang tidak akan memandu generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan saat tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
do_classifier_free_guidance (bool, opsional, defaultnya True) : Apakah akan menggunakan classifier free guidance atau tidak.
num_videos_per_prompt (int, opsional, default 1) : Jumlah video yang harus dihasilkan per prompt. perangkat torch untuk menempatkan embedding yang dihasilkan
prompt_embeds (torch.Tensor, opsional) : Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
negative_prompt_embeds (torch.Tensor, opsional) : Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen input negative_prompt.
device : (torch.device, opsional): perangkat torch
dtype : (torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
encode_video[[diffusers.AnyFlowFARPipeline.encode_video]]
encode_video(video: Tensor, height: int, width: int)
Enkodekan video ruang piksel ke dalam tata letak laten AnyFlow.
Mengikuti konvensi helper tunggal dari pipeline diffusers lainnya (lihat WanImageToVideoPipeline.encode_image): membungkus pra-pemrosesan, enkoding VAE, dan normalisasi laten ke dalam satu panggilan. Tata letak output adalah (B, T_latent, C, H, W), yang merupakan format yang diharapkan oleh transformer AnyFlow untuk frame kondisioning.
AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]
diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]
diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput(frames: Tensor)
Parameter:
frames (torch.Tensor, np.ndarray, atau list[list[PIL.Image.Image]]) : daftar output video - Dapat berupa daftar bersarang dengan panjang batch_size, di mana setiap sub-daftar berisi urutan gambar PIL yang telah didenoise dengan panjang num_frames. Dapat juga berupa array NumPy atau tensor Torch dengan bentuk (batch_size, num_frames, channels, height, width).
Kelas output untuk pipeline AnyFlow.
Xet Storage Details
- Size:
- 33.5 kB
- Xet hash:
- 11ca643a34dc6e1842f2edec091ef0a1a12e6ad769dfacf2f336376bba10548a
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.