Diffusers documentation
AnyFlow
AnyFlow
AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation de NVIDIA, National University of Singapore y Massachusetts Institute of Technology, por Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai y Mike Zheng Shou.
Resumen: AnyFlow es el primer marco de difusión de video de pasos arbitrarios basado en mapas de flujo, que permite a un único modelo (bidireccional o causal) adaptarse a presupuestos de inferencia arbitrarios.
La generación de video en pocos pasos ha avanzado significativamente gracias a los modelos de consistencia. Sin embargo, su rendimiento suele degradarse en los modelos de difusión de video de cualquier paso debido a la formulación de punto fijo. Para abordar esta limitación, presentamos AnyFlow, el primer marco de destilación de difusión de video de cualquier paso basado en mapas de flujo. En lugar de aprender solo el mapeo z_t → z_0, AnyFlow aprende transiciones z_t → z_r en intervalos de tiempo arbitrarios, lo que permite que un solo modelo se adapte a diferentes presupuestos de inferencia. Diseñamos una receta mejorada de entrenamiento de mapas de flujo hacia adelante que ajusta modelos de difusión de video preentrenados en modelos de mapas de flujo, e introducimos la Simulación hacia Atrás de Mapas de Flujo para habilitar la destilación en política para modelos de mapas de flujo. Experimentos extensos en arquitecturas bidireccionales y causales, a escalas que van desde 1.3B hasta 14B, en tareas de texto a video e imagen a video, demuestran que AnyFlow supera a las líneas base basadas en consistencia mientras preserva una alta fidelidad y una muestreo flexible bajo presupuestos de pasos variables.
Los pipelines de AnyFlow fueron aportados por el equipo de AnyFlow. El código original está disponible en GitHub, la página del proyecto se encuentra en nvlabs.github.io/AnyFlow y los modelos preentrenados pueden encontrarse en la colección nvidia/anyflow de Hugging Face.
Modelos disponibles:
| Checkpoint | Backbone | Descripción |
|---|---|---|
nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers | Wan2.1 1.3B | T2V bidireccional |
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers | Wan2.1 14B | T2V bidireccional |
nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers | FAR + Wan2.1 1.3B | T2V / I2V / V2V causal |
nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers | FAR + Wan2.1 14B | T2V / I2V / V2V causal |
AnyFlowPipelineestá diseñado para modelos de difusión bidireccionales en la generación de texto a video (T2V).AnyFlowFARPipelinees un modelo de difusión causal por bloques que admite la generación de texto a video (T2V), la generación de imagen a video (I2V) y la continuación de video (V2V).
Generación con AnyFlow (T2V bidireccional)
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)Generación con AnyFlow (FAR Causal)
El pipeline causal selecciona entre T2V / I2V / V2V mediante el argumento video (o video_latents):
omite ambos para texto a video simple, o pasa video=<tensor> de forma (B, T, C, H, W) en [0, 1] con T = 4n + 1 para condicionar en fotogramas existentes. Usa un único fotograma de condicionamiento para I2V y un clip más largo para la continuación V2V. Si ya tienes latentes pre-codificados en el layout del modelo, pásalos mediante video_latents=<tensor> para omitir la codificación VAE. video y video_latents son mutuamente excluyentes.
Los puntos de control publicados incluyen
chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2](suma 21) en la configuración del transformer, correspondiente a los 81 fotogramas crudos canónicos (21 fotogramas latentes con la distancia temporal del VAE de 4). Cuando cambiasnum_frames, pasa unchunk_partitionque sume(num_frames - 1) // 4 + 1; de lo contrario, el pipeline lanza unValueError.
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)Notas
- La guía sin clasificador se fusiona en los puntos de control publicados, por lo que la inferencia no ejecuta una segunda pasada de adelante guiada. Mantenga el valor predeterminado
guidance_scale=1.0a menos que su propio punto de control requiera lo contrario. FlowMapEulerDiscreteScheduleres de uso general. Puedes adjuntarlo a cualquier punto de control destilado de flow-map mediantefrom_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).AnyFlowPipelineutilizaAnyFlowTransformer3DModel(bidireccional).AnyFlowFARPipelineutilizaAnyFlowFARTransformer3DModel, que añade un patch embedding de cuadro comprimido y la máscara de bloques causal de FAR.- La carga de LoRA se admite mediante
WanLoraLoaderMixin, el mismo mixin utilizado por las pipelines de Wan de origen. - Para las recetas de entrenamiento (entrenamiento de forward flow-map y destilación on-policy), consulte el marco de entrenamiento original de AnyFlow en
NVlabs/AnyFlow; el entrenamiento está fuera del alcance de diffusers.
AnyFlowPipeline
clase diffusers.AnyFlowPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )
Parámetros
- tokenizer ([AutoTokenizer]) — Tokenizer de google/umt5-xxl.
- text_encoder ([UMT5EncoderModel]) — codificador de texto google/umt5-xxl.
- transformer ([AnyFlowTransformer3DModel]) — Transformador 3D de flujo bidireccional.
- vae ([AutoencoderKLWan]) — VAE que codifica y decodifica videos hacia y desde representaciones latentes.
- scheduler ([FlowMapEulerDiscreteScheduler]) —
Muestreador de mapa de flujo. El pipeline ejecuta
scheduler.step(..., timestep, sample, r_timestep)en cada paso de inferencia.
Pipeline de generación de texto a video bidireccional para puntos de control destilados con flow-map de AnyFlow, introducidos en AnyFlow.
AnyFlow aprende transiciones de intervalos arbitrarios en lugar del mapeo fijo de los modelos de consistencia, por lo que un único punto de control destilado puede evaluarse con 1, 2, 4, 8, 16… NFE sin necesidad de volver a entrenar. Este pipeline opera sobre el tensor completo del video en una sola pasada bidireccional; para la generación autoregresiva (causal) por fragmentos, usa AnyFlowFARPipeline.
El muestreo es un Euler simple en forma de velocidad media (z_r = z_t - (t - r) * u) sin re-ruido. Los puntos de control de NVIDIA publicados integran la guía libre de clasificador en los pesos del modelo, por lo que la configuración predeterminada guidance_scale=1.0 es la recomendada.
Este modelo hereda de [DiffusionPipeline]. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, etc.).
__call__
< source >( prompt: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = True ) → ~AnyFlowPipelineOutput or tuple
Parámetros
- prompt (
stroList[str], opcional) — El prompt o prompts para guiar la generación del video. Si no se define, paseprompt_embedsen su lugar. - video (
torch.Tensor, opcional) — Fotogramas de condicionamiento previos al VAE con forma(B, T, C, H, W)en[0, 1]. Cuando se proporciona, el pipeline los codifica con el VAE y mantiene fijo el prefijo latente correspondiente durante el muestreo. Es mutuamente excluyente convideo_latents. - video_latents (
torch.Tensor, opcional) — Latentes VAE precodificados en el formato AnyFlow(B, T_latent, C, H_latent, W_latent). Omite la codificación VAE en el lado del pipeline. Es mutuamente excluyente convideo. - negative_prompt (
stroList[str], opcional) — El prompt o los prompts a evitar durante la generación de video. Se ignora cuando no se usa guía (guidance_scale < 1). - height (
int, por defecto480) — La altura en píxeles del video generado. - width (
int, por defecto832) — El ancho en píxeles del video generado. - num_frames (
int, por defecto81) — El número de fotogramas del video generado. Debe cumplir(num_frames - 1) % vae_scale_factor_temporal == 0. - num_inference_steps (
int, por defecto50) — El número de pasos de desruido. Los puntos de control destilados de AnyFlow admiten muestreo en cualquier paso, por lo que valores tan bajos como1,2,4o8son habituales. Se ignora cuando se proporcionasigmasotimesteps. - sigmas (
List[float], optional) — Custom sigma schedule for any-step sampling, in[0, 1]and ordered from noisy to clean. Length determines the effectivenum_inference_steps; the scheduler appends the terminal0sigma. - timesteps (
List[float], opcional) — Programa de pasos de tiempo personalizado para el muestreo de cualquier paso, en las mismas unidades queself.scheduler.timesteps(es decir, escalado pornum_train_timesteps). Mutuamente excluyente consigmas. - guidance_scale (
float, por defecto1.0) — Escala de guía libre de clasificador. Los puntos de control de AnyFlow publicados fusionan CFG en los pesos durante el entrenamiento; manténgala en1.0a menos que sepa que su punto de control espera lo contrario. - num_videos_per_prompt (
int, opcional, valor predeterminado1) — El número de vídeos que se generarán por prompt. - generator (
torch.GeneratoroList[torch.Generator], opcional) — Untorch.Generatorpara hacer que la generación sea determinista. - latents (
torch.Tensor, opcional) — Latentes ruidosos pregenerados para usar como entradas. Si no se proporcionan, los latentes se muestrean delgeneratorsuministrado. - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar las entradas de texto (p. ej., ponderación del prompt). Si no se proporcionan, las incrustaciones se generan a partir deprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. - output_type (
str, opcional, valor predeterminado"np") — El formato de salida. Uno de"pil","np","pt"o"latent". - return_dict (
bool, opcional, valor predeterminadoTrue) — Si se debe devolver unAnyFlowPipelineOutputen lugar de una tupla simple. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor. - callback_on_step_end (
Callable, opcional) — Una función oPipelineCallbackque se llama al final de cada paso de inferencia. Consultecallbackspara más detalles. - callback_on_step_end_tensor_inputs (
List[str], opcional, valor predeterminado["latents"]) — Las entradas de tensor que se reenvían a la función de callback. Debe ser un subconjunto deself._callback_tensor_inputs. - max_sequence_length (
int, por defecto512) — La longitud máxima de la secuencia del codificador de texto. Los prompts más largos se truncan. - use_mean_velocity (
bool, por defectoTrue) — Cuando esTrue, el modelo flow-map se condiciona tanto en el paso de tiempo de origentcomo en el paso de tiempo de destinorpara predecir una velocidad media, coincidiendo con el comportamiento durante el entrenamiento. Desactívalo para replicar el pasoado bruto de Euler (r = t).
Devuelve
~AnyFlowPipelineOutput o tuple
Si return_dict es True, se devuelve AnyFlowPipelineOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es el video generado.
La función de llamada para el pipeline de generación.
Ejemplos:
>>> 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
< 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 )
Parámetros
- prompt (
strolist[str], opcional) — prompt a codificar - negative_prompt (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - do_classifier_free_guidance (
bool, opcional, valor predeterminadoTrue) — Si se debe usar classifier free guidance o no. - num_videos_per_prompt (
int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entradanegative_prompt. - device — (
torch.device, opcional): dispositivo de torch - dtype — (
torch.dtype, opcional): dtype de torch
Codifica el prompt en estados ocultos del codificador de texto.
Codifica un video en el espacio de píxeles en el diseño latente de AnyFlow.
Refleja la convención de un único helper de otros pipelines de diffusers (cf. WanImageToVideoPipeline.encode_image): encapsula el preprocesamiento, la codificación VAE y la normalización de latentes en una sola llamada. El formato de salida es (B, T_latent, C, H, W), que es lo que el transformer de AnyFlow espera para los fotogramas de condicionamiento.
AnyFlowFARPipeline
clase diffusers.AnyFlowFARPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowFARTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )
Parámetros
- tokenizer ([AutoTokenizer]) — Tokenizer de google/umt5-xxl.
- text_encoder ([UMT5EncoderModel]) — codificador de texto google/umt5-xxl.
- transformer ([AnyFlowFARTransformer3DModel]) — Transformador 3D de flujo causal FAR.
- vae ([AutoencoderKLWan]) — VAE que codifica y decodifica videos hacia y desde representaciones latentes.
- scheduler ([FlowMapEulerDiscreteScheduler]) — Muestreador de mapa de flujo.
Pipeline de texto a video / imagen a video / video a video causal (basado en FAR) para puntos de control de AnyFlow, introducido en AnyFlow.
El pipeline dirige un bucle de muestreo autoregresivo por bloques: cada bloque se desruidifica con pasos de flow-map mientras atiende únicamente a los bloques anteriores mediante atención causal bloque-esparcida, y la caché KV intermedia se reutiliza entre bloques.
El modo de tarea (T2V / I2V / V2V) se selecciona según el argumento de condicionamiento que se pase a __call__:
- tanto
video=Nonecomovideo_latents=None— texto a video puro. video=<tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1>— fotogramas de condicionamiento previos al VAE; el pipeline los codifica con el VAE. Pasa un video de un solo fotograma para I2V o un clip de varios fotogramas para V2V.video_latents=<latent tensor of shape (B, T_latent, C, H_latent, W_latent)>— latentes ya codificados en el formato FAR (omite el paso de codificación VAE).
El backbone FAR es la variante causal Wan2.1 introducida por FAR. La inferencia es un Euler simple en forma de velocidad media por chunk, sin re-ruído. Se admite T2V / I2V / V2V conjunto mediante un único modelo destilado.
Este modelo hereda de [DiffusionPipeline]. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, etc.).
__call__
< source >( prompt: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = Trueuse_kv_cache: bool = Truechunk_partition: typing.Optional[typing.List[int]] = None ) → ~AnyFlowPipelineOutput or tuple
Parámetros
- prompt (
stroList[str], opcional) — El prompt o prompts para guiar la generación del video. Si no se define, paseprompt_embedsen su lugar. - video (
torch.Tensor, opcional) — Fotogramas de condicionamiento previos al VAE con forma(B, T, C, H, W)en[0, 1](T = 4n + 1). Cuando se proporciona, el pipeline los codifica con el VAE y mantiene fijo el prefijo latente correspondiente durante el muestreo. Es mutuamente exclusivo convideo_latents. - video_latents (
torch.Tensor, opcional) — Latentes VAE precodificados en el formato FAR(B, T_latent, C, H_latent, W_latent). Omite la codificación VAE en el lado del pipeline. Es mutuamente excluyente convideo. - negative_prompt (
stroList[str], opcional) — El prompt o los prompts a evitar durante la generación de video. Se ignora cuando no se usa guía (guidance_scale < 1). - height (
int, por defecto480) — La altura en píxeles del video generado. - width (
int, por defecto832) — El ancho en píxeles del video generado. - num_frames (
int, por defecto81) — El número de fotogramas del video generado. Debe cumplir(num_frames - 1) % vae_scale_factor_temporal == 0. - num_inference_steps (
int, por defecto50) — El número de pasos de desruido por bloque. Los puntos de control destilados de AnyFlow-FAR admiten muestreo con cualquier número de pasos (1, 2, 4, 8, …). Se ignora cuando se proporcionasigmasotimesteps. - sigmas (
List[float], optional) — Custom sigma schedule for any-step sampling, in[0, 1]and ordered from noisy to clean. Length determines the effectivenum_inference_steps; the scheduler appends the terminal0sigma. - timesteps (
List[float], opcional) — Programa de pasos de tiempo personalizado para el muestreo de cualquier paso, en las mismas unidades queself.scheduler.timesteps(es decir, escalado pornum_train_timesteps). Mutuamente excluyente consigmas. - guidance_scale (
float, por defecto1.0) — Escala de guía libre de clasificador. Los puntos de control de AnyFlow publicados fusionan CFG en los pesos durante el entrenamiento; manténgala en1.0a menos que el punto de control requiera lo contrario. - num_videos_per_prompt (
int, opcional, valor predeterminado1) — El número de vídeos que se generarán por prompt. - generator (
torch.GeneratoroList[torch.Generator], opcional) — Generador utilizado para sembrar la muestreo. - latents (
torch.Tensor, opcional) — Latentes ruidosos pregenerados. Si no se proporcionan, los latentes se muestrean delgeneratorsuministrado. - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Si no se proporcionan, las incrustaciones se generan a partir deprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. - output_type (
str, opcional, por defecto"np") — Formato de salida. Uno de"pil","np","pt"o"latent". - return_dict (
bool, opcional, valor predeterminadoTrue) — Si se debe devolver unAnyFlowPipelineOutputen lugar de una tupla simple. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor. - callback_on_step_end (
Callable, opcional) — Una función oPipelineCallbackque se llama al final de cada paso de inferencia. - callback_on_step_end_tensor_inputs (
List[str], opcional, valor predeterminado["latents"]) — Entradas de tensor reenviadas a la función de callback. Debe ser un subconjunto deself._callback_tensor_inputs. - max_sequence_length (
int, por defecto512) — La longitud máxima de la secuencia del codificador de texto. - use_mean_velocity (
bool, por defectoTrue) — CuandoTrue, condiciona el modelo flow-map tanto en el paso de tiempo de origentcomo en el paso de tiempo de destinorpara predecir una velocidad media. Desactívalo para replicar el pasoado bruto de Euler. - use_kv_cache (
bool, por defectoTrue) — Reutiliza la caché KV de atención FAR entre los fragmentos causales. Desactívalo solo para depuración. - chunk_partition (
List[int], opcional) — Número de fotogramas por bloque. El valor predeterminado esself.transformer.config.chunk_partition(ajustado a los puntos de control de 81 fotogramas publicados). Cuando cambienum_frames, proporcione unchunk_partitioncuya suma sea(num_frames - 1) // vae_scale_factor_temporal + 1.
Devuelve
~AnyFlowPipelineOutput o tuple
Si return_dict es True, se devuelve un AnyFlowPipelineOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es el video generado.
La función de llamada para el pipeline de generación.
Ejemplos:
>>> 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
< 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 )
Parámetros
- prompt (
strolist[str], opcional) — prompt a codificar - negative_prompt (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - do_classifier_free_guidance (
bool, opcional, valor predeterminadoTrue) — Si se debe usar classifier free guidance o no. - num_videos_per_prompt (
int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entradanegative_prompt. - device — (
torch.device, opcional): dispositivo de torch - dtype — (
torch.dtype, opcional): dtype de torch
Codifica el prompt en estados ocultos del codificador de texto.
Codifica un video en el espacio de píxeles en el diseño latente de AnyFlow.
Refleja la convención de un único helper de otros pipelines de diffusers (cf. WanImageToVideoPipeline.encode_image): encapsula el preprocesamiento, la codificación VAE y la normalización de latentes en una sola llamada. El formato de salida es (B, T_latent, C, H, W), que es lo que el transformer de AnyFlow espera para los fotogramas de condicionamiento.
AnyFlowPipelineOutput
clase diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput
< source >( frames: Tensor )
Parámetros
- frames (
torch.Tensor,np.ndarrayo list[list[PIL.Image.Image]]) — lista de salidas de video. Puede ser una lista anidada de longitudbatch_size,donde cada sublista contiene secuencias de imágenes PIL desruidas de longitudnum_frames.También puede ser un array de NumPy o un tensor de Torch de forma(batch_size, num_frames, channels, height, width).
Clase de salida para las tuberías de AnyFlow.