Buckets:
| import"../chunks/DsnmJJEf.js";import{i as S,h as w,C as N,H as i,a as z,D as o,E as C,s as U}from"../chunks/BLbO27j4.js";import{p as B,o as E,s as e,f as q,a as b,b as A,c as n,d as T,n as r,r as a}from"../chunks/jDjavuwI.js";const j='{"title":"SanaWMTransformer3DModel","local":"sanawmtransformer3dmodel","sections":[{"title":"SanaWMTransformer3DModel","local":"diffusers.SanaWMTransformer3DModel","sections":[],"depth":2},{"title":"Transformer2DModelOutput","local":"diffusers.models.modeling_outputs.Transformer2DModelOutput","sections":[],"depth":2}],"depth":1}';var J=T('<meta name="hf:doc:metadata"/>'),L=T(`<p></p> <!> <!> <p>A 3D Diffusion Transformer (1.6B parameters) for camera-controlled image-to-video generation, used as the stage-1 | |
| sampler of <a href="/docs/diffusers/pr_15088/en/api/pipelines/sana_wm#diffusers.SanaWMPipeline">SanaWMPipeline</a>. The transformer combines:</p> <ul><li>a bidirectional GDN-Triton linear-attention main branch (depth 20, hidden 2240, 20 heads),</li> <li>a UCPE (Unified Camera Pose Embedding) camera-control branch that consumes a raymap + Plücker representation of | |
| the requested trajectory, and</li> <li>a Wan-style 3D rotary position embedding plus periodic softmax-attention blocks injected every <code>softmax_every_n</code> layers.</li></ul> <p>The model can be loaded with:</p> <!> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>SANA-WM 1600M bidirectional camera-controlled DiT.</p> <p>A single-class DiT (depth=20, hidden_size=2240, patch_size=(1,1,1), num_heads=20 — i.e. the public <code>Efficient-Large-Model/SANA-WM_bidirectional</code> release). <code>save_pretrained</code> / <code>from_pretrained</code> work out of the | |
| box via <a href="/docs/diffusers/pr_15088/en/api/configuration#diffusers.ConfigMixin">ConfigMixin</a>.</p> <p>Every block runs a camera-conditioned (UCPE) attention: [<em>BidirectionalGDNUCPESinglePathLiteLA</em>], except every <code>softmax_every_n</code>-th block which runs its softmax counterpart [<em>_SoftmaxUCPESinglePathLiteLA</em>].</p> <p>The state-dict is identical to the public sana checkpoint apart from the intentionally-removed <code>pos_embed</code> buffer.</p> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Run the SANA-WM DiT.</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>x: (N, T, patch_size*<em>2</em> C) imgs: (N, H, W, C)</p></div></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>The output of <a href="/docs/diffusers/pr_15088/en/api/models/transformer2d#diffusers.Transformer2DModel">Transformer2DModel</a>.</p></div> <!> <p></p>`,1);function V(v,k){B(k,!1),E(()=>{new URLSearchParams(window.location.search).get("fw")}),S();var m=L();w("x0f9w2",g=>{var M=J();U(M,"content",j),b(g,M)});var c=e(q(m),2);N(c,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var l=e(c,2);i(l,{title:"SanaWMTransformer3DModel",local:"sanawmtransformer3dmodel",headingTag:"h1"});var f=e(l,8);z(f,{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwU2FuYVdNVHJhbnNmb3JtZXIzRE1vZGVsJTBBJTBBdHJhbnNmb3JtZXIlMjAlM0QlMjBTYW5hV01UcmFuc2Zvcm1lcjNETW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMCUyMkVmZmljaWVudC1MYXJnZS1Nb2RlbCUyRlNBTkEtV01fYmlkaXJlY3Rpb25hbC1kaWZmdXNlcnMlMjIlMkMlMEElMjAlMjAlMjAlMjBzdWJmb2xkZXIlM0QlMjJ0cmFuc2Zvcm1lciUyMiUyQyUwQSUyMCUyMCUyMCUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMkMlMEEp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> SanaWMTransformer3DModel | |
| transformer = SanaWMTransformer3DModel.from_pretrained( | |
| <span class="hljs-string">"Efficient-Large-Model/SANA-WM_bidirectional-diffusers"</span>, | |
| subfolder=<span class="hljs-string">"transformer"</span>, | |
| torch_dtype=torch.bfloat16, | |
| )`,lang:"python",wrap:!1});var p=e(f,2);i(p,{title:"SanaWMTransformer3DModel",local:"diffusers.SanaWMTransformer3DModel",headingTag:"h2"});var s=e(p,2),_=n(s);o(_,{name:"class diffusers.SanaWMTransformer3DModel",anchor:"diffusers.SanaWMTransformer3DModel",source:"https://github.com/huggingface/diffusers/blob/vr_15088/src/diffusers/models/transformers/transformer_sana_wm.py#L2663",parameters:[{name:"in_channels",val:": int = 128"},{name:"num_layers",val:": int = 20"},{name:"hidden_size",val:": int = 2240"},{name:"num_attention_heads",val:": int = 20"},{name:"patch_size",val:": tuple[int, int, int] = (1, 1, 1)"},{name:"softmax_every_n",val:": int = 4"},{name:"linear_head_dim",val:": int = 112"},{name:"ffn_type",val:": str = 'GLUMBConvTemp'"},{name:"t_kernel_size",val:": int = 3"},{name:"conv_kernel_size",val:": int = 4"},{name:"k_conv_only",val:": bool = True"},{name:"pos_embed_type",val:": str = 'wan_rope'"},{name:"qk_norm",val:": bool = True"},{name:"cross_norm",val:": bool = True"},{name:"y_norm",val:": bool = True"},{name:"cam_attn_compress",val:": int = 1"},{name:"init_cam_from_base",val:": bool = True"},{name:"use_chunk_plucker_post_attn",val:": bool = True"},{name:"chunk_plucker_channels",val:": int = 48"},{name:"chunk_plucker_post_attn_blocks",val:": int = 20"},{name:"fp32_attention",val:": bool = True"},{name:"image_size",val:": int = 720"},{name:"caption_channels",val:": int = 2304"},{name:"mlp_ratio",val:": float = 3.0"},{name:"mlp_acts",val:": tuple = ('silu', 'silu', None)"},{name:"use_pe",val:": bool = True"},{name:"learn_sigma",val:": bool = False"},{name:"pred_sigma",val:": bool = False"},{name:"mixed_precision",val:": str = 'bf16'"}],parametersDescription:[{anchor:"diffusers.SanaWMTransformer3DModel.in_channels",description:"<strong>in_channels</strong> (<em>int</em>, defaults to 128) — VAE latent channels (LTX-2).",name:"in_channels"},{anchor:"diffusers.SanaWMTransformer3DModel.softmax_every_n",description:"<strong>softmax_every_n</strong> (<em>int</em>, defaults to 4) — Use a softmax attention block every N blocks.",name:"softmax_every_n"},{anchor:"diffusers.SanaWMTransformer3DModel.linear_head_dim",description:"<strong>linear_head_dim</strong> (<em>int</em>, defaults to 112) — GDN head dimension.",name:"linear_head_dim"},{anchor:"diffusers.SanaWMTransformer3DModel.ffn_type",description:"<strong>ffn_type</strong> (<em>str</em>, defaults to <code>"GLUMBConvTemp"</code>) — FFN.",name:"ffn_type"},{anchor:"diffusers.SanaWMTransformer3DModel.t_kernel_size",description:"<strong>t_kernel_size</strong> (<em>int</em>, defaults to 3) — Temporal conv kernel.",name:"t_kernel_size"},{anchor:"diffusers.SanaWMTransformer3DModel.conv_kernel_size",description:"<strong>conv_kernel_size</strong> (<em>int</em>, defaults to 4) — Spatial conv kernel inside attention.",name:"conv_kernel_size"},{anchor:"diffusers.SanaWMTransformer3DModel.k_conv_only",description:"<strong>k_conv_only</strong> (<em>bool</em>, defaults to True) — Apply conv only on K.",name:"k_conv_only"},{anchor:"diffusers.SanaWMTransformer3DModel.pos_embed_type",description:"<strong>pos_embed_type</strong> (<em>str</em>, defaults to <code>"wan_rope"</code>) — Position embedding.",name:"pos_embed_type"},{anchor:"diffusers.SanaWMTransformer3DModel.qk_norm",description:"<strong>qk_norm</strong> (<em>bool</em>, defaults to True) — RMSNorm on Q/K.",name:"qk_norm"},{anchor:"diffusers.SanaWMTransformer3DModel.cross_norm",description:"<strong>cross_norm</strong> (<em>bool</em>, defaults to True) — RMSNorm on cross-attention K.",name:"cross_norm"},{anchor:"diffusers.SanaWMTransformer3DModel.y_norm",description:"<strong>y_norm</strong> (<em>bool</em>, defaults to True) — Apply <code>attention_y_norm</code> to text embeddings.",name:"y_norm"},{anchor:"diffusers.SanaWMTransformer3DModel.init_cam_from_base",description:`<strong>init_cam_from_base</strong> (<em>bool</em>, defaults to True) — Unused; the camera branch is loaded from the checkpoint. | |
| Kept so released <em>config.json</em> files load.`,name:"init_cam_from_base"},{anchor:"diffusers.SanaWMTransformer3DModel.use_chunk_plucker_post_attn",description:"<strong>use_chunk_plucker_post_attn</strong> (<em>bool</em>, defaults to True). —",name:"use_chunk_plucker_post_attn"},{anchor:"diffusers.SanaWMTransformer3DModel.chunk_plucker_channels",description:"<strong>chunk_plucker_channels</strong> (<em>int</em>, defaults to 48) — <code>6 dims * temporal_stride 8</code>.",name:"chunk_plucker_channels"},{anchor:"diffusers.SanaWMTransformer3DModel.chunk_plucker_post_attn_blocks",description:"<strong>chunk_plucker_post_attn_blocks</strong> (<em>int</em>, defaults to 20) — All blocks.",name:"chunk_plucker_post_attn_blocks"},{anchor:"diffusers.SanaWMTransformer3DModel.fp32_attention",description:`<strong>fp32_attention</strong> (<em>bool</em>, defaults to True) — Unused; attention always runs in fp32. Kept so released | |
| <em>config.json</em> files load.`,name:"fp32_attention"},{anchor:"diffusers.SanaWMTransformer3DModel.image_size",description:"<strong>image_size</strong> (<em>int</em>, defaults to 720) — Nominal image size.",name:"image_size"},{anchor:"diffusers.SanaWMTransformer3DModel.caption_channels",description:"<strong>caption_channels</strong> (<em>int</em>, defaults to 2304) — Gemma-2 hidden size.",name:"caption_channels"}]});var t=e(_,10),y=n(t);o(y,{name:"forward",anchor:"diffusers.SanaWMTransformer3DModel.forward",source:"https://github.com/huggingface/diffusers/blob/vr_15088/src/diffusers/models/transformers/transformer_sana_wm.py#L2896",parameters:[{name:"hidden_states",val:": torch.Tensor"},{name:"timestep",val:": torch.Tensor"},{name:"encoder_hidden_states",val:": torch.Tensor"},{name:"encoder_attention_mask",val:": torch.Tensor | None = None"},{name:"mask",val:": torch.Tensor | None = None"},{name:"return_dict",val:": bool = True"},{name:"data_info",val:": Optional[dict] = None"},{name:"camera_conditions",val:": torch.Tensor | None = None"},{name:"chunk_plucker",val:": torch.Tensor | None = None"},{name:"cam_pos_embeds",val:": Optional[dict] = None"},{name:"pos_embeds",val:": torch.Tensor | None = None"},{name:"raymats",val:": torch.Tensor | None = None"},{name:"frame_valid_mask",val:": torch.Tensor | None = None"},{name:"chunk_size",val:": int | None = None"}],parametersDescription:[{anchor:"diffusers.SanaWMTransformer3DModel.forward.hidden_states",description:"<strong>hidden_states</strong> — <code>(B, C, T, H, W)</code> latents.",name:"hidden_states"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.timestep",description:"<strong>timestep</strong> — <code>(B, 1, T)</code> per-frame diffusion timesteps (LTX style).",name:"timestep"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.encoder_hidden_states",description:"<strong>encoder_hidden_states</strong> — <code>(B, 1, L, D_caption)</code> text embeddings.",name:"encoder_hidden_states"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.encoder_attention_mask",description:"<strong>encoder_attention_mask</strong> — <code>(B, L)</code> text attention mask (diffusers convention).",name:"encoder_attention_mask"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.mask",description:`<strong>mask</strong> — Alias for <code>encoder_attention_mask</code> matching the sana DiT’s | |
| kwarg name. If both are passed, <code>mask</code> takes precedence.`,name:"mask"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.return_dict",description:`<strong>return_dict</strong> — If <code>True</code> (default), returns a <code>Transformer2DModelOutput</code>; | |
| otherwise returns a one-tuple <code>(sample,)</code>.`,name:"return_dict"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.data_info",description:`<strong>data_info</strong> — Extra conditioning; <code>data_info["image_vae_embeds"]</code> is | |
| concatenated to the latents along the channel axis when present.`,name:"data_info"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.camera_conditions",description:`<strong>camera_conditions</strong> — <code>(B, T, 20)</code> raw camera conditions driving the | |
| camera-control (UCPE) branch.`,name:"camera_conditions"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.chunk_plucker",description:`<strong>chunk_plucker</strong> — Plucker ray embeddings <code>(B, C, T, H, W)</code>, consumed when | |
| the model is configured with <code>use_chunk_plucker_input</code> / <code>use_chunk_plucker_post_attn</code>.`,name:"chunk_plucker"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.cam_pos_embeds",description:`<strong>cam_pos_embeds</strong> — Optional pre-computed camera positional embeddings | |
| (<code>"absmap"</code> / <code>"P"</code> entries) reused instead of recomputing them.`,name:"cam_pos_embeds"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.pos_embeds",description:`<strong>pos_embeds</strong> — Optional pre-computed rotary position embeddings; when <code>None</code> | |
| they are built from the latent shape.`,name:"pos_embeds"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.raymats",description:`<strong>raymats</strong> — Optional pre-computed UCPE ray matrices (used only when | |
| <code>cam_pos_embeds</code> does not carry <code>"P"</code>).`,name:"raymats"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.frame_valid_mask",description:`<strong>frame_valid_mask</strong> — Optional per-frame validity mask, shaped | |
| <code>(B, 1, T, 1, 1)</code>, <code>(B, 1, T)</code> or <code>(B, T)</code>.`,name:"frame_valid_mask"},{anchor:"diffusers.SanaWMTransformer3DModel.forward.chunk_size",description:`<strong>chunk_size</strong> — Chunk length override forwarded to the blocks; falls back | |
| to each block’s configured <code>chunk_size</code>.`,name:"chunk_size"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>Transformer2DModelOutput</code> with <code>sample</code> of shape <code>(B, C, T, H, W)</code>.</p> | |
| `}),r(2),a(t);var u=e(t,2),D=n(u);o(D,{name:"unpatchify",anchor:"diffusers.SanaWMTransformer3DModel.unpatchify",source:"https://github.com/huggingface/diffusers/blob/vr_15088/src/diffusers/models/transformers/transformer_sana_wm.py#L3099",parameters:[{name:"x",val:""},{name:"post_patch_num_frames",val:""},{name:"post_patch_height",val:""},{name:"post_patch_width",val:""}]}),r(2),a(u),a(s);var h=e(s,2);i(h,{title:"Transformer2DModelOutput",local:"diffusers.models.modeling_outputs.Transformer2DModelOutput",headingTag:"h2"});var d=e(h,2),x=n(d);o(x,{name:"class diffusers.models.modeling_outputs.Transformer2DModelOutput",anchor:"diffusers.models.modeling_outputs.Transformer2DModelOutput",source:"https://github.com/huggingface/diffusers/blob/vr_15088/src/diffusers/models/modeling_outputs.py#L21",parameters:[{name:"sample",val:": torch.Tensor"}],parametersDescription:[{anchor:"diffusers.models.modeling_outputs.Transformer2DModelOutput.sample",description:`<strong>sample</strong> (<code>torch.Tensor</code> of shape <code>(batch_size, num_channels, height, width)</code> or <code>(batch size, num_vector_embeds - 1, num_latent_pixels)</code> if <a href="/docs/diffusers/pr_15088/en/api/models/transformer2d#diffusers.Transformer2DModel">Transformer2DModel</a> is discrete) — | |
| The hidden states output conditioned on the <code>encoder_hidden_states</code> input. If discrete, returns probability | |
| distributions for the unnoised latent pixels.`,name:"sample"}]}),r(2),a(d);var W=e(d,2);C(W,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/en/api/models/sana_wm_transformer3d.md"}),r(2),b(v,m),A()}export{V as component}; | |
Xet Storage Details
- Size:
- 15.9 kB
- Xet hash:
- 88ff0d807fcf11252cfe63279f56cbf348c041ad9b50244fe6dc584ed25ad62f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.