---
title: wanvideo
---

<div class="python-reference">
<a id="fastvideo.models.dits.wanvideo-classes"></a>
<a id="fastvideo.models.dits.wanvideo.LayerNormScaleShift-functions"></a>
<a id="fastvideo.models.dits.wanvideo.WanI2VCrossAttention-functions"></a>
<a id="fastvideo.models.dits.wanvideo.WanSelfAttention-functions"></a>
<a id="fastvideo.models.dits.wanvideo.WanT2VCrossAttention-functions"></a>
<a id="fastvideo.models.dits.wanvideo"></a>
<p>Compatibility imports for the canonical :mod:<code>fastvideo.models.wan.transformer</code>.</p>
<h2 id="fastvideo.models.dits.wanvideo.LayerNormScaleShift"><code>fastvideo.models.dits.wanvideo.LayerNormScaleShift</code></h2>
<pre class="doc-signature"><code>LayerNormScaleShift(hidden_size: int, norm_type: str = &#x27;rms&#x27;, eps: float = 1e-06, elementwise_affine: bool = False, dtype: torch.dtype = torch.float32, compute_dtype: torch.dtype | None = None, prefix: str = &#x27;&#x27;)</code></pre>
<p>Fused operation that combines LayerNorm with scale and shift operations.
This reduces memory bandwidth by combining memory-bound operations.</p>

<h3 id="fastvideo.models.dits.wanvideo.LayerNormScaleShift.forward"><code>fastvideo.models.dits.wanvideo.LayerNormScaleShift.forward</code></h3>
<pre class="doc-signature"><code>forward(x: torch.Tensor, shift: torch.Tensor, scale: torch.Tensor, convert_modulation_dtype: bool = False) -&gt; torch.Tensor</code></pre>
<p>Apply ln followed by scale and shift in a single fused operation.</p>
<h2 id="fastvideo.models.dits.wanvideo.PatchEmbed"><code>fastvideo.models.dits.wanvideo.PatchEmbed</code></h2>
<pre class="doc-signature"><code>PatchEmbed(patch_size = 16, in_chans = 3, embed_dim = 768, norm_layer = None, flatten = True, bias = True, dtype = None, prefix: str = &#x27;&#x27;)</code></pre>
<p>2D Image to Patch Embedding</p>
<p>Image to Patch Embedding using Conv2d</p>
<p>A convolution based approach to patchifying a 2D image w/ embedding projection.</p>
<p>Based on the impl in https://github.com/google-research/vision_transformer</p>
<p>Hacked together by / Copyright 2020 Ross Wightman</p>
<p>Remove the _assert function in forward function to be compatible with multi-resolution images.</p>

<h3 id="fastvideo.models.dits.wanvideo.PatchEmbed.forward"><code>fastvideo.models.dits.wanvideo.PatchEmbed.forward</code></h3>
<pre class="doc-signature"><code>forward(x)</code></pre>

<h2 id="fastvideo.models.dits.wanvideo.WanI2VCrossAttention"><code>fastvideo.models.dits.wanvideo.WanI2VCrossAttention</code></h2>
<pre class="doc-signature"><code>WanI2VCrossAttention(dim: int, num_heads: int, window_size = (-1, -1), qk_norm = True, eps = 1e-06, supported_attention_backends: tuple&#91;AttentionBackendEnum, ...&#93; | None = None, quant_config: QuantizationConfig | None = None, prefix: str = &#x27;&#x27;)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanI2VCrossAttention.forward"><code>fastvideo.models.dits.wanvideo.WanI2VCrossAttention.forward</code></h3>
<pre class="doc-signature"><code>forward(x, context, context_lens)</code></pre>
<h4>Parameters</h4>
<dl>
<dt><code>x: Tensor</code></dt><dd><p>Shape [B, L1, C]</p></dd>
<dt><code>context: Tensor</code></dt><dd><p>Shape [B, L2, C]</p></dd>
<dt><code>context_lens: Tensor</code></dt><dd><p>Shape [B]</p></dd>
</dl>
<h2 id="fastvideo.models.dits.wanvideo.WanImageEmbedding"><code>fastvideo.models.dits.wanvideo.WanImageEmbedding</code></h2>
<pre class="doc-signature"><code>WanImageEmbedding(in_features: int, out_features: int)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanImageEmbedding.forward"><code>fastvideo.models.dits.wanvideo.WanImageEmbedding.forward</code></h3>
<pre class="doc-signature"><code>forward(encoder_hidden_states_image: torch.Tensor) -&gt; torch.Tensor</code></pre>

<h2 id="fastvideo.models.dits.wanvideo.WanSelfAttention"><code>fastvideo.models.dits.wanvideo.WanSelfAttention</code></h2>
<pre class="doc-signature"><code>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 = &#x27;&#x27;)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanSelfAttention.forward"><code>fastvideo.models.dits.wanvideo.WanSelfAttention.forward</code></h3>
<pre class="doc-signature"><code>forward(x: torch.Tensor, context: torch.Tensor, context_lens: int)</code></pre>
<h4>Parameters</h4>
<dl>
<dt><code>x: Tensor</code></dt><dd><p>Shape [B, L, num_heads, C / num_heads]</p></dd>
<dt><code>seq_lens: Tensor</code></dt><dd><p>Shape [B]</p></dd>
<dt><code>grid_sizes: Tensor</code></dt><dd><p>Shape [B, 3], the second dimension contains (F, H, W)</p></dd>
<dt><code>freqs: Tensor</code></dt><dd><p>Rope freqs, shape [1024, C / num_heads / 2]</p></dd>
</dl>
<h2 id="fastvideo.models.dits.wanvideo.WanT2VCrossAttention"><code>fastvideo.models.dits.wanvideo.WanT2VCrossAttention</code></h2>
<pre class="doc-signature"><code>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 = &#x27;&#x27;)</code></pre>

<h3 id="fastvideo.models.dits.wanvideo.WanT2VCrossAttention.forward"><code>fastvideo.models.dits.wanvideo.WanT2VCrossAttention.forward</code></h3>
<pre class="doc-signature"><code>forward(x, context, context_lens, crossattn_cache = None)</code></pre>
<h4>Parameters</h4>
<dl>
<dt><code>x: Tensor</code></dt><dd><p>Shape [B, L1, C]</p></dd>
<dt><code>context: Tensor</code></dt><dd><p>Shape [B, L2, C]</p></dd>
<dt><code>context_lens: Tensor</code></dt><dd><p>Shape [B]</p></dd>
</dl>
<h2 id="fastvideo.models.dits.wanvideo.WanTimeTextImageEmbedding"><code>fastvideo.models.dits.wanvideo.WanTimeTextImageEmbedding</code></h2>
<pre class="doc-signature"><code>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 = &#x27;additive&#x27;, r_embedder_gate_value: float = 0.25, r_embedder_deltatime_type: str = &#x27;r&#x27;)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanTimeTextImageEmbedding.forward"><code>fastvideo.models.dits.wanvideo.WanTimeTextImageEmbedding.forward</code></h3>
<pre class="doc-signature"><code>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)</code></pre>

<h2 id="fastvideo.models.dits.wanvideo.WanTransformer3DModel"><code>fastvideo.models.dits.wanvideo.WanTransformer3DModel</code></h2>
<pre class="doc-signature"><code>WanTransformer3DModel(config: WanVideoConfig, hf_config: dict&#91;str, Any&#93;)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanTransformer3DModel.forward"><code>fastvideo.models.dits.wanvideo.WanTransformer3DModel.forward</code></h3>
<pre class="doc-signature"><code>forward(hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor | list&#91;torch.Tensor&#93;, timestep: torch.LongTensor, encoder_hidden_states_image: torch.Tensor | list&#91;torch.Tensor&#93; | None = None, guidance = None, r_timestep: torch.Tensor | None = None, **kwargs) -&gt; torch.Tensor</code></pre>

<h2 id="fastvideo.models.dits.wanvideo.WanTransformerBlock"><code>fastvideo.models.dits.wanvideo.WanTransformerBlock</code></h2>
<pre class="doc-signature"><code>WanTransformerBlock(dim: int, ffn_dim: int, num_heads: int, qk_norm: str = &#x27;rms_norm_across_heads&#x27;, cross_attn_norm: bool = False, eps: float = 1e-06, added_kv_proj_dim: int | None = None, supported_attention_backends: tuple&#91;AttentionBackendEnum, ...&#93; | None = None, quant_config: QuantizationConfig | None = None, prefix: str = &#x27;&#x27;)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanTransformerBlock.forward"><code>fastvideo.models.dits.wanvideo.WanTransformerBlock.forward</code></h3>
<pre class="doc-signature"><code>forward(hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor, temb: torch.Tensor, freqs_cis: tuple&#91;torch.Tensor, torch.Tensor&#93;, original_seq_len: int) -&gt; torch.Tensor</code></pre>

<h2 id="fastvideo.models.dits.wanvideo.WanTransformerBlock_VSA"><code>fastvideo.models.dits.wanvideo.WanTransformerBlock_VSA</code></h2>
<pre class="doc-signature"><code>WanTransformerBlock_VSA(dim: int, ffn_dim: int, num_heads: int, qk_norm: str = &#x27;rms_norm_across_heads&#x27;, cross_attn_norm: bool = False, eps: float = 1e-06, added_kv_proj_dim: int | None = None, supported_attention_backends: tuple&#91;AttentionBackendEnum, ...&#93; | None = None, quant_config: QuantizationConfig | None = None, prefix: str = &#x27;&#x27;)</code></pre>


<h3 id="fastvideo.models.dits.wanvideo.WanTransformerBlock_VSA.forward"><code>fastvideo.models.dits.wanvideo.WanTransformerBlock_VSA.forward</code></h3>
<pre class="doc-signature"><code>forward(hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor, temb: torch.Tensor, freqs_cis: tuple&#91;torch.Tensor, torch.Tensor&#93;, original_seq_len: int) -&gt; torch.Tensor</code></pre>

</div>
