wanvideo
Compatibility imports for the canonical :mod:fastvideo.models.wan.transformer.
fastvideo.models.dits.wanvideo.LayerNormScaleShift
LayerNormScaleShift(hidden_size: int, norm_type: str = 'rms', eps: float = 1e-06, elementwise_affine: bool = False, dtype: torch.dtype = torch.float32, compute_dtype: torch.dtype | None = None, prefix: str = '')
Fused operation that combines LayerNorm with scale and shift operations. This reduces memory bandwidth by combining memory-bound operations.
fastvideo.models.dits.wanvideo.LayerNormScaleShift.forward
forward(x: torch.Tensor, shift: torch.Tensor, scale: torch.Tensor, convert_modulation_dtype: bool = False) -> torch.Tensor
Apply ln followed by scale and shift in a single fused operation.
fastvideo.models.dits.wanvideo.PatchEmbed
PatchEmbed(patch_size = 16, in_chans = 3, embed_dim = 768, norm_layer = None, flatten = True, bias = True, dtype = None, prefix: str = '')
2D Image to Patch Embedding
Image to Patch Embedding using Conv2d
A convolution based approach to patchifying a 2D image w/ embedding projection.
Based on the impl in https://github.com/google-research/vision_transformer
Hacked together by / Copyright 2020 Ross Wightman
Remove the _assert function in forward function to be compatible with multi-resolution images.
fastvideo.models.dits.wanvideo.PatchEmbed.forward
forward(x)
fastvideo.models.dits.wanvideo.WanI2VCrossAttention
WanI2VCrossAttention(dim: int, num_heads: int, window_size = (-1, -1), qk_norm = True, eps = 1e-06, supported_attention_backends: tuple[AttentionBackendEnum, ...] | None = None, quant_config: QuantizationConfig | None = None, prefix: str = '')
fastvideo.models.dits.wanvideo.WanI2VCrossAttention.forward
forward(x, context, context_lens)
Parameters
x: TensorShape [B, L1, C]
context: TensorShape [B, L2, C]
context_lens: TensorShape [B]
fastvideo.models.dits.wanvideo.WanImageEmbedding
WanImageEmbedding(in_features: int, out_features: int)
fastvideo.models.dits.wanvideo.WanImageEmbedding.forward
forward(encoder_hidden_states_image: torch.Tensor) -> torch.Tensor
fastvideo.models.dits.wanvideo.WanSelfAttention
WanSelfAttention(dim: int, num_heads: int, window_size = (-1, -1), qk_norm = True, eps = 1e-06, parallel_attention = False, quant_config: QuantizationConfig | None = None, prefix: str = '')
fastvideo.models.dits.wanvideo.WanSelfAttention.forward
forward(x: torch.Tensor, context: torch.Tensor, context_lens: int)
Parameters
x: TensorShape [B, L, num_heads, C / num_heads]
seq_lens: TensorShape [B]
grid_sizes: TensorShape [B, 3], the second dimension contains (F, H, W)
freqs: TensorRope freqs, shape [1024, C / num_heads / 2]
fastvideo.models.dits.wanvideo.WanT2VCrossAttention
WanT2VCrossAttention(dim: int, num_heads: int, window_size = (-1, -1), qk_norm = True, eps = 1e-06, parallel_attention = False, quant_config: QuantizationConfig | None = None, prefix: str = '')
fastvideo.models.dits.wanvideo.WanT2VCrossAttention.forward
forward(x, context, context_lens, crossattn_cache = None)
Parameters
x: TensorShape [B, L1, C]
context: TensorShape [B, L2, C]
context_lens: TensorShape [B]
fastvideo.models.dits.wanvideo.WanTimeTextImageEmbedding
WanTimeTextImageEmbedding(dim: int, time_freq_dim: int, text_embed_dim: int, image_embed_dim: int | None = None, *, r_embedder: bool = False, r_embedder_fusion: str = 'additive', r_embedder_gate_value: float = 0.25, r_embedder_deltatime_type: str = 'r')
fastvideo.models.dits.wanvideo.WanTimeTextImageEmbedding.forward
forward(timestep: torch.Tensor, encoder_hidden_states: torch.Tensor, encoder_hidden_states_image: torch.Tensor | None = None, timestep_seq_len: int | None = None, r_timestep: torch.Tensor | None = None)
fastvideo.models.dits.wanvideo.WanTransformer3DModel
WanTransformer3DModel(config: WanVideoConfig, hf_config: dict[str, Any])
fastvideo.models.dits.wanvideo.WanTransformer3DModel.forward
forward(hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor | list[torch.Tensor], timestep: torch.LongTensor, encoder_hidden_states_image: torch.Tensor | list[torch.Tensor] | None = None, guidance = None, r_timestep: torch.Tensor | None = None, **kwargs) -> torch.Tensor
fastvideo.models.dits.wanvideo.WanTransformerBlock
WanTransformerBlock(dim: int, ffn_dim: int, num_heads: int, qk_norm: str = 'rms_norm_across_heads', cross_attn_norm: bool = False, eps: float = 1e-06, added_kv_proj_dim: int | None = None, supported_attention_backends: tuple[AttentionBackendEnum, ...] | None = None, quant_config: QuantizationConfig | None = None, prefix: str = '')
fastvideo.models.dits.wanvideo.WanTransformerBlock.forward
forward(hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor, temb: torch.Tensor, freqs_cis: tuple[torch.Tensor, torch.Tensor], original_seq_len: int) -> torch.Tensor
fastvideo.models.dits.wanvideo.WanTransformerBlock_VSA
WanTransformerBlock_VSA(dim: int, ffn_dim: int, num_heads: int, qk_norm: str = 'rms_norm_across_heads', cross_attn_norm: bool = False, eps: float = 1e-06, added_kv_proj_dim: int | None = None, supported_attention_backends: tuple[AttentionBackendEnum, ...] | None = None, quant_config: QuantizationConfig | None = None, prefix: str = '')
fastvideo.models.dits.wanvideo.WanTransformerBlock_VSA.forward
forward(hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor, temb: torch.Tensor, freqs_cis: tuple[torch.Tensor, torch.Tensor], original_seq_len: int) -> torch.Tensor