---
title: causal_fast_pipeline
---

<div class="python-reference">
<a id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline-classes"></a>
<a id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline-functions"></a>
<a id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastGenerationStage-functions"></a>
<a id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline-functions"></a>
<a id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2TextEncodingStage-functions"></a>
<a id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline"></a>
<p>LingBot World 2 causal-fast image-to-video pipeline.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_local_torch_device"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_local_torch_device</code></h2>
<pre class="doc-signature"><code>get_local_torch_device() -&gt; torch.device</code></pre>
<p>Return the torch device for the current rank.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_sp_world_size"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_sp_world_size</code></h2>
<pre class="doc-signature"><code>get_sp_world_size() -&gt; int</code></pre>
<p>Return world size for the sequence model parallel group.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs</code></h2>
<pre class="doc-signature"><code>FastVideoArgs(model_path: str, mode: ExecutionMode = ExecutionMode.INFERENCE, workload_type: WorkloadType = WorkloadType.T2V, distributed_executor_backend: str = &#x27;mp&#x27;, enable_streaming_ipc_queues: bool = False, ray_placement_group: PlacementGroup | None = None, ray_runtime_env: RuntimeEnv | None = None, inference_mode: bool = True, trust_remote_code: bool = False, revision: str | None = None, num_gpus: int = 1, tp_size: int = -1, sp_size: int = -1, hsdp_replicate_dim: int = 1, hsdp_shard_dim: int = -1, dist_timeout: int | None = None, pipeline_config: PipelineConfig = PipelineConfig(), preprocess_config: PreprocessConfig | None = None, lora_path: str | None = None, lora_nickname: str = &#x27;default&#x27;, lora_strength: float = 1.0, lora_target_modules: list&#91;str&#93; | None = None, output_type: str = &#x27;pil&#x27;, attention_backend: str | None = None, dit_cpu_offload: bool = True, use_fsdp_inference: bool = False, dit_layerwise_offload: bool = True, text_encoder_cpu_offload: bool = True, image_encoder_cpu_offload: bool = True, vae_cpu_offload: bool = True, pin_cpu_memory: bool = True, h3_sequential_load: bool | None = None, h3_encoder_split: bool | None = None, h3_encoder_nodes: int = -1, h3_encoder_workers: int = 0, video_decode_backend: str = &#x27;h3-vae&#x27;, taeh3_checkpoint: str | None = None, taeh3_chunk_size: int = 5, h3_vae_nvfp4_decoder: str | None = None, lazy_module_load: bool | None = None, vae_parallel_decode: bool = False, vae_parallel_encode: bool = False, vae_parallel_decode_strategy: str | None = None, enable_torch_compile: bool = False, regional_compile: bool = False, enable_torch_compile_text_encoder: bool = False, enable_torch_compile_vae: bool = False, enable_torch_compile_audio_vae: bool = False, torch_compile_kwargs: dict&#91;str, Any&#93; = dict(), torch_compile_kwargs_dit: dict&#91;str, Any&#93; = dict(), torch_compile_kwargs_text_encoder: dict&#91;str, Any&#93; = dict(), torch_compile_kwargs_vae: dict&#91;str, Any&#93; = dict(), torch_compile_kwargs_audio_vae: dict&#91;str, Any&#93; = dict(), inference_torch_compile: bool = False, h3_vsa_fp4: dict&#91;str, Any&#93; = dict(), disable_autocast: bool = False, VSA_sparsity: float | None = None, VSA_tile_size: int | None = None, moba_config_path: str | None = None, moba_config: dict&#91;str, Any&#93; = dict(), master_port: int | None = None, enable_stage_verification: bool = True, prompt_txt: str | None = None, ltx2_vae_tiling: bool | None = None, ltx2_vae_spatial_tile_size_in_pixels: int | None = None, ltx2_vae_spatial_tile_overlap_in_pixels: int | None = None, ltx2_vae_temporal_tile_size_in_frames: int | None = None, ltx2_vae_temporal_tile_overlap_in_frames: int | None = None, ltx2_initial_latent_path: str | None = None, ltx2_audio_latent_path: str | None = None, refine_enabled: bool | None = None, refine_upsampler_path: str | None = None, refine_transformer_path: str | None = None, refine_lora_path: str | None = None, refine_num_inference_steps: int | None = None, refine_guidance_scale: float | None = None, refine_add_noise: bool | None = None, refine_noise_path: str | None = None, refine_audio_noise_path: str | None = None, ltx2_refine_enabled: bool = False, ltx2_refine_upsampler_path: str | None = None, ltx2_refine_transformer_path: str | None = None, ltx2_refine_lora_path: str | None = None, ltx2_refine_num_inference_steps: int = 3, ltx2_refine_guidance_scale: float = 1.0, ltx2_refine_add_noise: bool = True, ltx2_refine_noise_path: str | None = None, ltx2_refine_audio_noise_path: str | None = None, ltx2_legacy_native_noise_order: bool = False, ltx2_use_distilled_sigmas: bool = True, model_paths: dict&#91;str, str&#93; = dict(), model_loaded: dict&#91;str, bool&#93; = (lambda: &#123;&#x27;transformer&#x27;: True, &#x27;vae&#x27;: True, &#x27;upsampler&#x27;: True&#125;)(), override_text_encoder_safetensors: str | None = None, override_text_encoder_quant: QuantizationMethods = None, transformer_quant: Any | None = None, override_transformer_cls_name: str | None = None, init_weights_from_safetensors: str = &#x27;&#x27;, init_weights_from_safetensors_2: str = &#x27;&#x27;, override_pipeline_cls_name: str | None = None, boundary_ratio: float | None = 0.875)</code></pre>


<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.is_output_rank"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.is_output_rank</code></h3>
<pre class="doc-signature"><code>is_output_rank: bool</code></pre>
<p>Whether this process may materialize user-facing outputs.</p>
<p>This is runtime state assigned by an SPMD executor, not a public
configuration field, so dataclass serialization and typed config
parsing deliberately ignore it.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.add_cli_args"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.add_cli_args</code></h3>
<pre class="doc-signature"><code>add_cli_args(parser: FlexibleArgumentParser) -&gt; FlexibleArgumentParser</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.from_cli_args"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.from_cli_args</code></h3>
<pre class="doc-signature"><code>from_cli_args(args: argparse.Namespace) -&gt; FastVideoArgs</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.from_kwargs"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.from_kwargs</code></h3>
<pre class="doc-signature"><code>from_kwargs(**kwargs: Any) -&gt; FastVideoArgs</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.check_fastvideo_args"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.check_fastvideo_args</code></h3>
<pre class="doc-signature"><code>check_fastvideo_args() -&gt; None</code></pre>
<p>Validate inference arguments for consistency</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.finalize_device_offload_policy"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.finalize_device_offload_policy</code></h3>
<pre class="doc-signature"><code>finalize_device_offload_policy(device_id: int = 0) -&gt; bool</code></pre>
<p>Apply device-local memory policy, then resolve incompatible modes.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.disable_offload_on_unified_memory"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FastVideoArgs.disable_offload_on_unified_memory</code></h3>
<pre class="doc-signature"><code>disable_offload_on_unified_memory(device_id: int = 0, *, offload_flag: str | None = None) -&gt; bool</code></pre>
<p>Disable host offload after a worker has selected its device.</p>
<p>CUDA's unified-memory probe reads runtime device properties and may
initialize a CUDA context. Callers must therefore use this only inside
a device-owning process, after selecting and binding <code>device_id</code>.
Returning the classification lets direct component-loader callers
apply the same policy to explicit per-call overrides. When
<code>offload_flag</code> is given, the return value says whether this policy
covers that component role.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.init_logger"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.init_logger</code></h2>
<pre class="doc-signature"><code>init_logger(name: str) -&gt; _FastvideoLogger</code></pre>
<p>The main purpose of this function is to ensure that loggers are
retrieved in such a way that we can be sure the root fastvideo logger has
already been configured.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.compute_relative_poses"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.compute_relative_poses</code></h2>
<pre class="doc-signature"><code>compute_relative_poses(c2ws_mat: torch.Tensor, framewise: bool = False, normalize_trans: bool = True) -&gt; torch.Tensor</code></pre>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_Ks_transformed"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_Ks_transformed</code></h2>
<pre class="doc-signature"><code>get_Ks_transformed(Ks: torch.Tensor, height_org: int, width_org: int, height_resize: int, width_resize: int, height_final: int, width_final: int)</code></pre>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_plucker_embeddings"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.get_plucker_embeddings</code></h2>
<pre class="doc-signature"><code>get_plucker_embeddings(c2ws_mat: torch.Tensor, Ks: torch.Tensor, height: int, width: int)</code></pre>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.interpolate_camera_poses"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.interpolate_camera_poses</code></h2>
<pre class="doc-signature"><code>interpolate_camera_poses(src_indices: np.ndarray, src_rot_mat: np.ndarray, src_trans_vec: np.ndarray, tgt_indices: np.ndarray) -&gt; torch.Tensor</code></pre>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler</code></h2>
<pre class="doc-signature"><code>FlowUniPCMultistepScheduler(num_train_timesteps: int = 1000, solver_order: int = 2, prediction_type: str = &#x27;flow_prediction&#x27;, shift: float | None = 1.0, use_dynamic_shifting = False, thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, predict_x0: bool = True, solver_type: str = &#x27;bh2&#x27;, lower_order_final: bool = True, disable_corrector: tuple = (), solver_p: SchedulerMixin = None, timestep_spacing: str = &#x27;linspace&#x27;, steps_offset: int = 0, final_sigmas_type: str | None = &#x27;zero&#x27;, **kwargs)</code></pre>
<p><code>UniPCMultistepScheduler</code> is a training-free framework designed for the fast sampling of diffusion models.</p>
<p>This model inherits from [<code>SchedulerMixin</code>] and [<code>ConfigMixin</code>]. Check the superclass documentation for the generic
methods the library implements for all schedulers such as loading and saving.</p>
<h3>Parameters</h3>
<dl>
<dt><code>num_train_timesteps: `int`, defaults to 1000</code></dt><dd><p>The number of diffusion steps to train the model.</p></dd>
<dt><code>solver_order: `int`, default `2`</code></dt><dd><p>The UniPC order which can be any positive integer. The effective order of accuracy is <code>solver_order + 1</code>
due to the UniC. It is recommended to use <code>solver_order=2</code> for guided sampling, and <code>solver_order=3</code> for
unconditional sampling.</p></dd>
<dt><code>prediction_type: `str`, defaults to &quot;flow_prediction&quot;</code></dt><dd><p>Prediction type of the scheduler function; must be <code>flow_prediction</code> for this scheduler, which predicts
the flow of the diffusion process.</p></dd>
<dt><code>thresholding: `bool`, defaults to `False`</code></dt><dd><p>Whether to use the "dynamic thresholding" method. This is unsuitable for latent-space diffusion models such
as Stable Diffusion.</p></dd>
<dt><code>dynamic_thresholding_ratio: `float`, defaults to 0.995</code></dt><dd><p>The ratio for the dynamic thresholding method. Valid only when <code>thresholding=True</code>.</p></dd>
<dt><code>sample_max_value: `float`, defaults to 1.0</code></dt><dd><p>The threshold value for dynamic thresholding. Valid only when <code>thresholding=True</code> and <code>predict_x0=True</code>.</p></dd>
<dt><code>predict_x0: `bool`, defaults to `True`</code></dt><dd><p>Whether to use the updating algorithm on the predicted x0.</p></dd>
<dt><code>solver_type: `str`, default `bh2`</code></dt><dd><p>Solver type for UniPC. It is recommended to use <code>bh1</code> for unconditional sampling when steps &lt; 10, and <code>bh2</code>
otherwise.</p></dd>
<dt><code>lower_order_final: `bool`, default `True`</code></dt><dd><p>Whether to use lower-order solvers in the final steps. Only valid for &lt; 15 inference steps. This can
stabilize the sampling of DPMSolver for steps &lt; 15, especially for steps &lt;= 10.</p></dd>
<dt><code>disable_corrector: `list`, default `[]`</code></dt><dd><p>Decides which step to disable the corrector to mitigate the misalignment between <code>epsilon_theta(x_t, c)</code>
and <code>epsilon_theta(x_t^c, c)</code> which can influence convergence for a large guidance scale. Corrector is
usually disabled during the first few steps.</p></dd>
<dt><code>solver_p: `SchedulerMixin`, default `None`</code></dt><dd><p>Any other scheduler that if specified, the algorithm becomes <code>solver_p + UniC</code>.</p></dd>
<dt><code>use_karras_sigmas: `bool`, *optional*, defaults to `False`</code></dt><dd><p>Whether to use Karras sigmas for step sizes in the noise schedule during the sampling process. If <code>True</code>,
the sigmas are determined according to a sequence of noise levels &#123;σi&#125;.</p></dd>
<dt><code>use_exponential_sigmas: `bool`, *optional*, defaults to `False`</code></dt><dd><p>Whether to use exponential sigmas for step sizes in the noise schedule during the sampling process.</p></dd>
<dt><code>timestep_spacing: `str`, defaults to `&quot;linspace&quot;`</code></dt><dd><p>The way the timesteps should be scaled. Refer to Table 2 of the <a href="https://huggingface.co/papers/2305.08891">Common Diffusion Noise Schedules and
Sample Steps are Flawed</a> for more information.</p></dd>
<dt><code>steps_offset: `int`, defaults to 0</code></dt><dd><p>An offset added to the inference steps, as required by some model families.</p></dd>
<dt><code>final_sigmas_type: `str`, defaults to `&quot;zero&quot;`</code></dt><dd><p>The final <code>sigma</code> value for the noise schedule during the sampling process. If <code>"sigma_min"</code>, the final
sigma is the same as the last sigma in the training schedule. If <code>zero</code>, the final sigma is set to 0.</p></dd>
</dl>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.step_index"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.step_index</code></h3>
<pre class="doc-signature"><code>step_index</code></pre>
<p>The index counter for current timestep. It will increase 1 after each scheduler step.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.begin_index"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.begin_index</code></h3>
<pre class="doc-signature"><code>begin_index</code></pre>
<p>The index for the first timestep. It should be set from pipeline with <code>set_begin_index</code> method.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.set_shift"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.set_shift</code></h3>
<pre class="doc-signature"><code>set_shift(shift: float) -&gt; None</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.set_begin_index"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.set_begin_index</code></h3>
<pre class="doc-signature"><code>set_begin_index(begin_index: int = 0)</code></pre>
<p>Sets the begin index for the scheduler. This function should be run from pipeline before the inference.</p>
<h4>Parameters</h4>
<dl>
<dt><code>begin_index: `int`</code></dt><dd><p>The begin index for the scheduler.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.set_timesteps"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.set_timesteps</code></h3>
<pre class="doc-signature"><code>set_timesteps(num_inference_steps: int | None = None, device: str | torch.device = None, sigmas: list&#91;float&#93; | None = None, mu: float | None | None = None, shift: float | None | None = None, use_karras_sigmas: bool | None = None, use_kerras_sigma: bool | None = None)</code></pre>
<p>Sets the discrete timesteps used for the diffusion chain (to be run before inference).
Args:
    num_inference_steps (<code>int</code>):
        Total number of the spacing of the time steps.
    device (<code>str</code> or <code>torch.device</code>, <em>optional</em>):
        The device to which the timesteps should be moved to. If <code>None</code>, the timesteps are not moved.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.time_shift"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.time_shift</code></h3>
<pre class="doc-signature"><code>time_shift(mu: float, sigma: float, t: torch.Tensor)</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.convert_model_output"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.convert_model_output</code></h3>
<pre class="doc-signature"><code>convert_model_output(model_output: torch.Tensor, *args, sample: torch.Tensor = None, **kwargs) -&gt; torch.Tensor</code></pre>
<p>Convert the model output to the corresponding type the UniPC algorithm needs.</p>
<h4>Parameters</h4>
<dl>
<dt><code>model_output: `torch.Tensor`</code></dt><dd><p>The direct output from the learned diffusion model.</p></dd>
<dt><code>timestep: `int`</code></dt><dd><p>The current discrete timestep in the diffusion chain.</p></dd>
<dt><code>sample: `torch.Tensor`</code></dt><dd><p>A current instance of a sample created by the diffusion process.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>torch.Tensor</code></dt><dd><p><code>torch.Tensor</code>:
The converted model output.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.multistep_uni_p_bh_update"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.multistep_uni_p_bh_update</code></h3>
<pre class="doc-signature"><code>multistep_uni_p_bh_update(model_output: torch.Tensor, *args, sample: torch.Tensor = None, order: int | None = None, **kwargs) -&gt; torch.Tensor</code></pre>
<p>One step for the UniP (B(h) version). Alternatively, <code>self.solver_p</code> is used if is specified.</p>
<h4>Parameters</h4>
<dl>
<dt><code>model_output: `torch.Tensor`</code></dt><dd><p>The direct output from the learned diffusion model at the current timestep.</p></dd>
<dt><code>prev_timestep: `int`</code></dt><dd><p>The previous discrete timestep in the diffusion chain.</p></dd>
<dt><code>sample: `torch.Tensor`</code></dt><dd><p>A current instance of a sample created by the diffusion process.</p></dd>
<dt><code>order: `int`</code></dt><dd><p>The order of UniP at this timestep (corresponds to the <em>p</em> in UniPC-p).</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>torch.Tensor</code></dt><dd><p><code>torch.Tensor</code>:
The sample tensor at the previous timestep.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.multistep_uni_c_bh_update"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.multistep_uni_c_bh_update</code></h3>
<pre class="doc-signature"><code>multistep_uni_c_bh_update(this_model_output: torch.Tensor, *args, last_sample: torch.Tensor = None, this_sample: torch.Tensor = None, order: int | None = None, **kwargs) -&gt; torch.Tensor</code></pre>
<p>One step for the UniC (B(h) version).</p>
<h4>Parameters</h4>
<dl>
<dt><code>this_model_output: `torch.Tensor`</code></dt><dd><p>The model outputs at <code>x_t</code>.</p></dd>
<dt><code>this_timestep: `int`</code></dt><dd><p>The current timestep <code>t</code>.</p></dd>
<dt><code>last_sample: `torch.Tensor`</code></dt><dd><p>The generated sample before the last predictor <code>x_&#123;t-1&#125;</code>.</p></dd>
<dt><code>this_sample: `torch.Tensor`</code></dt><dd><p>The generated sample after the last predictor <code>x_&#123;t&#125;</code>.</p></dd>
<dt><code>order: `int`</code></dt><dd><p>The <code>p</code> of UniC-p at this step. The effective order of accuracy should be <code>order + 1</code>.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>torch.Tensor</code></dt><dd><p><code>torch.Tensor</code>:
The corrected sample tensor at the current timestep.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.index_for_timestep"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.index_for_timestep</code></h3>
<pre class="doc-signature"><code>index_for_timestep(timestep, schedule_timesteps = None) -&gt; int</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.step"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.step</code></h3>
<pre class="doc-signature"><code>step(model_output: torch.Tensor, timestep: int | torch.Tensor, sample: torch.Tensor, return_dict: bool = True, generator = None) -&gt; SchedulerOutput | tuple</code></pre>
<p>Predict the sample from the previous timestep by reversing the SDE. This function propagates the sample with
the multistep UniPC.</p>
<h4>Parameters</h4>
<dl>
<dt><code>model_output: `torch.Tensor`</code></dt><dd><p>The direct output from learned diffusion model.</p></dd>
<dt><code>timestep: `int`</code></dt><dd><p>The current discrete timestep in the diffusion chain.</p></dd>
<dt><code>sample: `torch.Tensor`</code></dt><dd><p>A current instance of a sample created by the diffusion process.</p></dd>
<dt><code>return_dict: `bool`</code></dt><dd><p>Whether or not to return a [<code>~schedulers.scheduling_utils.SchedulerOutput</code>] or <code>tuple</code>.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>SchedulerOutput | tuple</code></dt><dd><p>[<code>~schedulers.scheduling_utils.SchedulerOutput</code>] or <code>tuple</code>:
If return_dict is <code>True</code>, [<code>~schedulers.scheduling_utils.SchedulerOutput</code>] is returned, otherwise a
tuple is returned where the first element is the sample tensor.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.scale_model_input"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.scale_model_input</code></h3>
<pre class="doc-signature"><code>scale_model_input(sample: torch.Tensor, *args, **kwargs) -&gt; torch.Tensor</code></pre>
<p>Ensures interchangeability with schedulers that need to scale the denoising model input depending on the
current timestep.</p>
<h4>Parameters</h4>
<dl>
<dt><code>sample: `torch.Tensor`</code></dt><dd><p>The input sample.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>torch.Tensor</code></dt><dd><p><code>torch.Tensor</code>:
A scaled input sample.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.add_noise"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.FlowUniPCMultistepScheduler.add_noise</code></h3>
<pre class="doc-signature"><code>add_noise(original_samples: torch.Tensor, noise: torch.Tensor, timesteps: torch.IntTensor) -&gt; torch.Tensor</code></pre>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase</code></h2>
<pre class="doc-signature"><code>ComposedPipelineBase(model_path: str, fastvideo_args: FastVideoArgs | TrainingArgs, required_config_modules: list&#91;str&#93; | None = None, loaded_modules: dict&#91;str, torch.nn.Module&#93; | None = None)</code></pre>
<p>Base class for pipelines composed of multiple stages.</p>
<p>This class provides the framework for creating pipelines by composing multiple
stages together. Each stage is responsible for a specific part of the diffusion
process, and the pipeline orchestrates the execution of these stages.</p>
<p>Initialize the pipeline. After <strong>init</strong>, the pipeline should be ready to
use. The pipeline should be stateless and not hold any batch state.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.get_hf_download_component_dirs"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.get_hf_download_component_dirs</code></h3>
<pre class="doc-signature"><code>get_hf_download_component_dirs() -&gt; tuple&#91;str, ...&#93; | None</code></pre>
<p>Return component directories for an opt-in partial Hub download.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.get_hf_download_allow_patterns"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.get_hf_download_allow_patterns</code></h3>
<pre class="doc-signature"><code>get_hf_download_allow_patterns() -&gt; list&#91;str&#93; | None</code></pre>
<p>Return Hub patterns for the manifest and selected components.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.set_trainable"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.set_trainable</code></h3>
<pre class="doc-signature"><code>set_trainable() -&gt; None</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.post_init"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.post_init</code></h3>
<pre class="doc-signature"><code>post_init() -&gt; None</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.initialize_training_pipeline"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.initialize_training_pipeline</code></h3>
<pre class="doc-signature"><code>initialize_training_pipeline(training_args: TrainingArgs)</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.initialize_validation_pipeline"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.initialize_validation_pipeline</code></h3>
<pre class="doc-signature"><code>initialize_validation_pipeline(training_args: TrainingArgs)</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.from_pretrained"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.from_pretrained</code></h3>
<pre class="doc-signature"><code>from_pretrained(model_path: str, device: str | None = None, torch_dtype: torch.dtype | None = None, pipeline_config: str | PipelineConfig | None = None, args: argparse.Namespace | None = None, required_config_modules: list&#91;str&#93; | None = None, loaded_modules: dict&#91;str, torch.nn.Module&#93; | None = None, **kwargs) -&gt; ComposedPipelineBase</code></pre>
<p>Load a pipeline from a pretrained model.
loaded_modules: Optional[Dict[str, torch.nn.Module]] = None,
If provided, loaded_modules will be used instead of loading from config/pretrained weights.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.get_module"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.get_module</code></h3>
<pre class="doc-signature"><code>get_module(module_name: str, default_value: Any = None) -&gt; Any</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.add_module"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.add_module</code></h3>
<pre class="doc-signature"><code>add_module(module_name: str, module: Any)</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.required_config_modules"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.required_config_modules</code></h3>
<pre class="doc-signature"><code>required_config_modules: list&#91;str&#93;</code></pre>
<p>List of modules that are required by the pipeline. The names should match
the diffusers directory and model_index.json file. These modules will be
loaded using the PipelineComponentLoader and made available in the
modules dictionary. Access these modules using the get_module method.</p>
<p>class ConcretePipeline(ComposedPipelineBase):
    _required_config_modules = ["vae", "text_encoder", "transformer", "scheduler", "tokenizer"]</p>
<pre><code>@property
def required_config_modules(self):
    return self._required_config_modules
</code></pre>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.stages"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.stages</code></h3>
<pre class="doc-signature"><code>stages: list&#91;PipelineStage&#93;</code></pre>
<p>List of stages in the pipeline.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.create_pipeline_stages"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.create_pipeline_stages</code></h3>
<pre class="doc-signature"><code>create_pipeline_stages(fastvideo_args: FastVideoArgs)</code></pre>
<p>Create the inference pipeline stages.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.create_training_stages"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.create_training_stages</code></h3>
<pre class="doc-signature"><code>create_training_stages(training_args: TrainingArgs)</code></pre>
<p>Create the training pipeline stages.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.initialize_pipeline"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.initialize_pipeline</code></h3>
<pre class="doc-signature"><code>initialize_pipeline(fastvideo_args: FastVideoArgs)</code></pre>
<p>Initialize the pipeline.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.load_modules"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.load_modules</code></h3>
<pre class="doc-signature"><code>load_modules(fastvideo_args: FastVideoArgs, loaded_modules: dict&#91;str, torch.nn.Module&#93; | None = None) -&gt; dict&#91;str, Any&#93;</code></pre>
<p>Load the modules from the config.
loaded_modules: Optional[Dict[str, torch.nn.Module]] = None, 
If provided, loaded_modules will be used instead of loading from config/pretrained weights.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.add_stage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.add_stage</code></h3>
<pre class="doc-signature"><code>add_stage(stage_name: str, stage: PipelineStage)</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Generate a video or image using the pipeline.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The batch to generate from.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<p>Returns:
    ForwardBatch: The batch with the generated video or image.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.train"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.train</code></h3>
<pre class="doc-signature"><code>train() -&gt; None</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.close"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ComposedPipelineBase.close</code></h3>
<pre class="doc-signature"><code>close() -&gt; None</code></pre>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline</code></h2>
<pre class="doc-signature"><code>LoRAPipeline(*args, **kwargs)</code></pre>
<p>Pipeline that supports injecting LoRA adapters into the diffusion transformer.
TODO: support training.</p>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.add_module"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.add_module</code></h3>
<pre class="doc-signature"><code>add_module(module_name: str, module: Any) -&gt; None</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.is_target_layer"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.is_target_layer</code></h3>
<pre class="doc-signature"><code>is_target_layer(module_name: str) -&gt; bool</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.convert_adapter_state_dict"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.convert_adapter_state_dict</code></h3>
<pre class="doc-signature"><code>convert_adapter_state_dict(state_dict: dict&#91;str, torch.Tensor&#93;, lora_path: str) -&gt; dict&#91;str, torch.Tensor&#93;</code></pre>
<p>Rewrite a foreign-layout adapter into the layout the model's name mapping speaks.</p>
<p>The default leaves the adapter alone. Pipelines override it for model families whose published
adapters use another naming or fusion scheme, and raise when the adapter is unusable.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.set_trainable"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.set_trainable</code></h3>
<pre class="doc-signature"><code>set_trainable() -&gt; None</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.convert_to_lora_layers"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.convert_to_lora_layers</code></h3>
<pre class="doc-signature"><code>convert_to_lora_layers() -&gt; None</code></pre>
<p>Unified method to convert the transformer to a LoRA transformer.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.set_lora_adapter"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.set_lora_adapter</code></h3>
<pre class="doc-signature"><code>set_lora_adapter(lora_nickname: str, lora_path: str | None = None, strength: float = 1.0, accumulate: bool = False)</code></pre>
<p>Load a LoRA adapter into the pipeline and merge it into the transformer.
Args:
    lora_nickname: The "nick name" of the adapter when referenced in the pipeline.
    lora_path: The path to the adapter, either a local path or a Hugging Face repo id.
    strength: Scale for the low-rank adapter. Hybrid adapters must set this at construction
        so their dense payload receives the same scale.
    accumulate: Add this adapter to an already merged pure low-rank adapter.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.merge_lora_weights"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.merge_lora_weights</code></h3>
<pre class="doc-signature"><code>merge_lora_weights() -&gt; None</code></pre>
<p>Merge LoRA weights, then repack the packed quantized buffers for the merged state.</p>
<p>NVFP4 layers are only supported while their BF16 weight is retained: a purged
BF16 weight cannot be unmerged and remerged.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.unmerge_lora_weights"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LoRAPipeline.unmerge_lora_weights</code></h3>
<pre class="doc-signature"><code>unmerge_lora_weights() -&gt; None</code></pre>
<p>Unmerge LoRA weights, then repack the packed quantized buffers for the unmerged state.</p>
<p>NVFP4 is rejected: its FP4 buffers cannot be rebuilt from a purged BF16 weight.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ForwardBatch"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ForwardBatch</code></h2>
<pre class="doc-signature"><code>ForwardBatch(data_type: str, generator: torch.Generator | list&#91;torch.Generator&#93; | None = None, image_path: str | None = None, image_embeds: list&#91;torch.Tensor&#93; = list(), pil_image: torch.Tensor | PIL.Image.Image | None = None, last_image: torch.Tensor | PIL.Image.Image | None = None, references: list&#91;Any&#93; | None = None, preprocessed_image: torch.Tensor | None = None, prompt: str | list&#91;str&#93; | None = None, negative_prompt: str | list&#91;str&#93; | None = None, prompt_path: str | None = None, output_path: str = &#x27;outputs/&#x27;, output_video_name: str | None = None, video_path: str | None = None, video_latent: torch.Tensor | None = None, pose_video_path: str | None = None, face_video_path: str | None = None, background_video_path: str | None = None, mask_video_path: str | None = None, animate_mode: str | None = None, pose_latents: torch.Tensor | None = None, face_pixel_values: torch.Tensor | None = None, audio_path: str | None = None, audio_embeds: torch.Tensor | None = None, t_thresh: float = 0.5, num_cond_frames: int = 0, prompt_embeds: list&#91;torch.Tensor&#93; = list(), negative_prompt_embeds: list&#91;torch.Tensor&#93; | None = None, prompt_attention_mask: list&#91;torch.Tensor&#93; | None = None, negative_attention_mask: list&#91;torch.Tensor&#93; | None = None, clip_embedding_pos: list&#91;torch.Tensor&#93; | None = None, clip_embedding_neg: list&#91;torch.Tensor&#93; | None = None, max_sequence_length: int | None = None, prompt_template: dict&#91;str, Any&#93; | None = None, do_classifier_free_guidance: bool = False, use_embedded_guidance: bool = False, true_cfg_scale: float = 1.0, batch_size: int | None = None, num_videos_per_prompt: int = 1, seed: int | None = None, seeds: list&#91;int&#93; | None = None, is_prompt_processed: bool = False, latents: torch.Tensor | None = None, audio_latents: torch.Tensor | None = None, lq_latents: torch.Tensor | None = None, raw_latent_shape: tuple&#91;int, ...&#93; | None = None, noise_pred: torch.Tensor | None = None, image_latent: torch.Tensor | None = None, first_frame_latent: torch.Tensor | None = None, helios_latent_chunks: list&#91;torch.Tensor&#93; | None = None, mouse_cond: torch.Tensor | None = None, keyboard_cond: torch.Tensor | None = None, grid_sizes: torch.Tensor | None = None, num_iterations: int | None = None, use_base_model: bool = False, pose: str | None = None, c2ws_plucker_emb: torch.Tensor | None = None, action_path: str | None = None, trajectory_type: str | None = None, movement_distance: float | None = None, camera_rotation: str | None = None, height_latents: list&#91;int&#93; | int | None = None, width_latents: list&#91;int&#93; | int | None = None, num_frames: list&#91;int&#93; | int = 1, height: list&#91;int&#93; | int | None = None, width: list&#91;int&#93; | int | None = None, height_sr: list&#91;int&#93; | int | None = None, width_sr: list&#91;int&#93; | int | None = None, fps: list&#91;int&#93; | int | None = None, timesteps: torch.Tensor | None = None, timestep: torch.Tensor | float | int | None = None, step_index: int | None = None, boundary_ratio: float | None = None, num_inference_steps: int = 50, num_inference_steps_sr: int = 50, guidance_scale: float = 1.0, batch_cfg: bool = False, guidance_scale_2: float | None = None, guidance_rescale: float = 0.0, eta: float = 0.0, sigmas: list&#91;float&#93; | None = None, pyramid_num_inference_steps_list: list&#91;int&#93; | None = None, history_sizes: list&#91;int&#93; | None = None, num_latent_frames_per_chunk: int = 9, keep_first_frame: bool = True, is_skip_first_chunk: bool = False, use_zero_init: bool = True, zero_steps: int = 1, is_amplify_first_chunk: bool = False, enable_teacache: bool = False, ltx2_cfg_scale_video: float = 1.0, ltx2_cfg_scale_audio: float = 1.0, ltx2_modality_scale_video: float = 1.0, ltx2_modality_scale_audio: float = 1.0, ltx2_rescale_scale: float = 0.0, ltx2_stg_scale_video: float = 0.0, ltx2_stg_scale_audio: float = 0.0, ltx2_stg_blocks_video: list&#91;int&#93; = list(), ltx2_stg_blocks_audio: list&#91;int&#93; = list(), ltx2_use_ancestral_sampler: bool = False, ltx2_images: list&#91;tuple&#91;str, int, float&#93;&#93; | None = None, ltx2_image_crf: float = 33.0, ltx2_conditioning_latent_stage1: torch.Tensor | None = None, ltx2_conditioning_latent_stage2: torch.Tensor | None = None, ltx2_video_conditions: list&#91;tuple&#91;list&#91;str&#93;, int, float&#93;&#93; | None = None, audio_start_in_s: float | None = None, audio_end_in_s: float | None = None, init_audio: Any = None, init_audio_strength: float | None = None, init_noise_level: float | None = None, inpaint_audio: Any = None, inpaint_mask: Any = None, n_tokens: int | None = None, extra_step_kwargs: dict&#91;str, Any&#93; = dict(), modules: dict&#91;str, Any&#93; = dict(), output: torch.Tensor | None = None, return_trajectory_latents: bool = False, return_trajectory_decoded: bool = False, trajectory_timesteps: list&#91;torch.Tensor&#93; | None = None, trajectory_latents: torch.Tensor | None = None, trajectory_decoded: list&#91;torch.Tensor&#93; | None = None, continuation_state: ContinuationState | None = None, return_continuation_state: bool = False, extra: dict&#91;str, Any&#93; = dict(), save_video: bool = True, return_frames: bool = False, is_cfg_negative: bool = False, VSA_sparsity: float = 0.0, logging_info: PipelineLoggingInfo = PipelineLoggingInfo(), *, return_samples: bool = False)</code></pre>
<p>Complete state passed through the pipeline execution.</p>
<p>This dataclass contains all information needed during the diffusion pipeline
execution, allowing methods to update specific components without needing
to manage numerous individual parameters.</p>

<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage</code></h2>
<pre class="doc-signature"><code>ConditioningStage()</code></pre>
<p>Stage for applying conditioning to the diffusion process.</p>
<p>This stage handles the application of conditioning, such as classifier-free guidance,
to the diffusion process.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Apply conditioning to the diffusion process.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch information.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>ForwardBatch</code></dt><dd><p>The batch with applied conditioning.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage.verify_input"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage.verify_input</code></h3>
<pre class="doc-signature"><code>verify_input(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify conditioning stage inputs.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage.verify_output"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.ConditioningStage.verify_output</code></h3>
<pre class="doc-signature"><code>verify_output(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify conditioning stage outputs.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage</code></h2>
<pre class="doc-signature"><code>DecodingStage(vae, pipeline = None)</code></pre>
<p>Stage for decoding latent representations into pixel space.</p>
<p>This stage handles the decoding of latent representations into the final
output format (e.g., pixel values).</p>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.verify_input"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.verify_input</code></h3>
<pre class="doc-signature"><code>verify_input(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify decoding stage inputs.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.verify_output"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.verify_output</code></h3>
<pre class="doc-signature"><code>verify_output(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify decoding stage outputs.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.decode"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.decode</code></h3>
<pre class="doc-signature"><code>decode(latents: torch.Tensor, fastvideo_args: FastVideoArgs) -&gt; torch.Tensor</code></pre>
<p>Decode latent representations into pixel space using VAE.</p>
<h4>Parameters</h4>
<dl>
<dt><code>latents: torch.Tensor</code></dt><dd><p>Input latent tensor with shape (batch, channels, frames, height_latents, width_latents)</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>Configuration containing:
- disable_autocast: Whether to disable automatic mixed precision (default: False)
- pipeline_config.vae_precision: VAE computation precision ("fp32", "fp16", "bf16")
- pipeline_config.vae_tiling: Whether to enable VAE tiling for memory efficiency</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>torch.Tensor</code></dt><dd><p>Decoded video tensor with shape (batch, channels, frames, height, width), </p></dd>
<dt><code>torch.Tensor</code></dt><dd><p>normalized to [0, 1] range and moved to CPU as float32</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.streaming_decode"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.streaming_decode</code></h3>
<pre class="doc-signature"><code>streaming_decode(latents: torch.Tensor, fastvideo_args: FastVideoArgs, cache: list&#91;torch.Tensor | None&#93; | None = None, is_first_chunk: bool = False) -&gt; tuple&#91;torch.Tensor, list&#91;torch.Tensor | None&#93;&#93;</code></pre>
<p>Decode latent representations into pixel space using VAE with streaming cache.</p>
<h4>Parameters</h4>
<dl>
<dt><code>latents: torch.Tensor</code></dt><dd><p>Input latent tensor with shape (batch, channels, frames, height_latents, width_latents)</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>Configuration object.</p></dd>
<dt><code>cache: list[torch.Tensor | None] | None</code></dt><dd><p>VAE cache from previous call, or None to initialize a new cache.</p></dd>
<dt><code>is_first_chunk: bool</code></dt><dd><p>Whether this is the first chunk.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>tuple[torch.Tensor, list[torch.Tensor | None]]</code></dt><dd><p>A tuple of (decoded_frames, updated_cache).</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.DecodingStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Decode latent representations into pixel space.</p>
<p>This method processes the batch through the VAE decoder, converting latent
representations to pixel-space video/images. It also optionally decodes
trajectory latents for visualization purposes.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch containing:
- latents: Tensor to decode (batch, channels, frames, height_latents, width_latents)
- return_trajectory_decoded (optional): Flag to decode trajectory latents
- trajectory_latents (optional): Latents at different timesteps
- trajectory_timesteps (optional): Corresponding timesteps</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>Configuration containing:
- output_type: "latent" to skip decoding, otherwise decode to pixels
- vae_cpu_offload: Whether to offload VAE to CPU after decoding
- model_loaded: Track VAE loading state
- model_paths: Path to VAE model if loading needed</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>ForwardBatch</code></dt><dd><p>Modified batch with:
- output: Decoded frames (batch, channels, frames, height, width) as CPU float32
- trajectory_decoded (if requested): List of decoded frames per timestep</p></dd>
</dl>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage</code></h2>
<pre class="doc-signature"><code>InputValidationStage()</code></pre>
<p>Stage for validating and preparing inputs for diffusion pipelines.</p>
<p>This stage validates that all required inputs are present and properly formatted
before proceeding with the diffusion process.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Validate and prepare inputs.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch information.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>ForwardBatch</code></dt><dd><p>The validated batch information.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage.verify_input"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage.verify_input</code></h3>
<pre class="doc-signature"><code>verify_input(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify input validation stage inputs.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage.verify_output"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.InputValidationStage.verify_output</code></h3>
<pre class="doc-signature"><code>verify_output(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify input validation stage outputs.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage</code></h2>
<pre class="doc-signature"><code>TextEncodingStage(text_encoders, tokenizers)</code></pre>
<p>Stage for encoding text prompts into embeddings for diffusion models.</p>
<p>This stage handles the encoding of text prompts into the embedding space
expected by the diffusion model.</p>
<p>Initialize the prompt encoding stage.</p>
<h3>Parameters</h3>
<dl>
<dt><code>enable_logging</code></dt><dd><p>Whether to enable logging for this stage.</p></dd>
<dt><code>is_secondary</code></dt><dd><p>Whether this is a secondary text encoder.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Encode the prompt into text encoder hidden states.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch information.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>ForwardBatch</code></dt><dd><p>The batch with encoded prompt embeddings.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.verify_input"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.verify_input</code></h3>
<pre class="doc-signature"><code>verify_input(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify text encoding stage inputs.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.encode_text"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.encode_text</code></h3>
<pre class="doc-signature"><code>encode_text(text: str | list&#91;str&#93;, fastvideo_args: FastVideoArgs, encoder_index: int | list&#91;int&#93; | None = None, return_attention_mask: bool = False, return_type: str = &#x27;list&#x27;, device: torch.device | str | None = None, dtype: torch.dtype | None = None, max_length: int | Sequence&#91;int | None&#93; | None = None, truncation: bool | None = None, padding: bool | str | None = None)</code></pre>
<p>Encode plain text using selected text encoder(s) and return embeddings.</p>
<h4>Parameters</h4>
<dl>
<dt><code>text: str | list[str]</code></dt><dd><p>A single string or a list of strings to encode.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments providing pipeline config,
including tokenizer and encoder settings, preprocess and postprocess
functions.</p></dd>
<dt><code>encoder_index: int | list[int] | None</code></dt><dd><p>Encoder selector by index. Accepts an int or list of ints.</p></dd>
<dt><code>return_attention_mask: bool</code></dt><dd><p>If True, also return attention masks for each
selected encoder.</p></dd>
<dt><code>return_type: str</code></dt><dd><p>"list" (default) returns a list aligned with selection;
"dict" returns a dict keyed by encoder index as a string; "stack" stacks along a
new first dimension (requires matching shapes).</p></dd>
<dt><code>device: torch.device | str | None</code></dt><dd><p>Optional device override for inputs; defaults to local torch device.</p></dd>
<dt><code>dtype: torch.dtype | None</code></dt><dd><p>Optional dtype to cast returned embeddings to.</p></dd>
<dt><code>max_length: int | Sequence[int | None] | None</code></dt><dd><p>Optional per-call tokenizer override. Either one value applied to every
selected encoder (existing behavior), or a sequence with one entry per encoder in
<code>encoder_index</code> order -- <code>None</code> at a position falls back to that encoder's own
configured default instead of the override.</p></dd>
<dt><code>truncation: bool | None</code></dt><dd><p>Optional per-call tokenizer override.</p></dd>
<dt><code>padding: bool | str | None</code></dt><dd><p>Optional per-call tokenizer override.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code></code></dt><dd><p>Depending on return_type and return_attention_mask:</p></dd>
<dt><code></code></dt><dd><ul>
<li>list: List[Tensor] or (List[Tensor], List[Tensor])</li>
</ul></dd>
<dt><code></code></dt><dd><ul>
<li>dict: Dict[str, Tensor] or (Dict[str, Tensor], Dict[str, Tensor])</li>
</ul></dd>
<dt><code></code></dt><dd><ul>
<li>stack: Tensor of shape [num_encoders, ...] or a tuple with stacked
attention masks</li>
</ul></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.return_embeds"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.return_embeds</code></h3>
<pre class="doc-signature"><code>return_embeds(embeds_list: list&#91;torch.Tensor&#93;, attn_masks_list: list&#91;torch.Tensor&#93;, return_type: str = &#x27;list&#x27;, return_attention_mask: bool = False, indices: list&#91;int&#93; | None = None) -&gt; Any</code></pre>

<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.verify_output"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.TextEncodingStage.verify_output</code></h3>
<pre class="doc-signature"><code>verify_output(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify text encoding stage outputs.</p>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage</code></h2>
<pre class="doc-signature"><code>PipelineStage()</code></pre>
<p>Abstract base class for all pipeline stages.</p>
<p>A pipeline stage represents a discrete step in the diffusion process that can be
composed with other stages to create a complete pipeline. Each stage is responsible
for a specific part of the process, such as prompt encoding, latent preparation, etc.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.verify_input"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.verify_input</code></h3>
<pre class="doc-signature"><code>verify_input(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify the input for the stage.</p>
<h4>Example</h4>
<p>from fastvideo.pipelines.stages.validators import V, VerificationResult</p>
<p>def verify_input(self, batch, fastvideo_args):
    result = VerificationResult()
    result.add_check("height", batch.height, V.positive_int_divisible(8))
    result.add_check("width", batch.width, V.positive_int_divisible(8))
    result.add_check("image_latent", batch.image_latent, V.is_tensor)
    return result</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch information.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>VerificationResult</code></dt><dd><p>A VerificationResult containing the verification status.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.verify_output"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.verify_output</code></h3>
<pre class="doc-signature"><code>verify_output(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; VerificationResult</code></pre>
<p>Verify the output for the stage.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch information.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>VerificationResult</code></dt><dd><p>A VerificationResult containing the verification status.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.device"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.device</code></h3>
<pre class="doc-signature"><code>device: torch.device</code></pre>
<p>Get the device for this stage.</p>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.set_logging"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.set_logging</code></h3>
<pre class="doc-signature"><code>set_logging(enable: bool)</code></pre>
<p>Enable or disable logging for this stage.</p>
<h4>Parameters</h4>
<dl>
<dt><code>enable: bool</code></dt><dd><p>Whether to enable logging.</p></dd>
</dl>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.PipelineStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Forward pass of the stage's processing.</p>
<p>This method should be implemented by subclasses to provide the forward
processing logic for the stage.</p>
<h4>Parameters</h4>
<dl>
<dt><code>batch: ForwardBatch</code></dt><dd><p>The current batch information.</p></dd>
<dt><code>fastvideo_args: FastVideoArgs</code></dt><dd><p>The inference arguments.</p></dd>
</dl>
<h4>Returns</h4>
<dl>
<dt><code>ForwardBatch</code></dt><dd><p>The updated batch information after this stage's processing.</p></dd>
</dl>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2TextEncodingStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2TextEncodingStage</code></h2>
<pre class="doc-signature"><code>LingBotWorld2TextEncodingStage(text_encoders, tokenizers)</code></pre>
<p>Keep LingBot World 2 T5 attention masks so DiT context matches the source pipeline.</p>
<details><summary>Source</summary><pre><code>class LingBotWorld2TextEncodingStage(TextEncodingStage):
    &quot;&quot;&quot;Keep LingBot World 2 T5 attention masks so DiT context matches the source pipeline.&quot;&quot;&quot;

    def forward(self, batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch:
        &quot;&quot;&quot;Initialize mask storage before running the shared text-encoding stage.&quot;&quot;&quot;
        if batch.prompt_attention_mask is None:
            batch.prompt_attention_mask = &#91;&#93;
        return super().forward(batch, fastvideo_args)</code></pre></details>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2TextEncodingStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2TextEncodingStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Initialize mask storage before running the shared text-encoding stage.</p>
<details><summary>Source</summary><pre><code>def forward(self, batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch:
    &quot;&quot;&quot;Initialize mask storage before running the shared text-encoding stage.&quot;&quot;&quot;
    if batch.prompt_attention_mask is None:
        batch.prompt_attention_mask = &#91;&#93;
    return super().forward(batch, fastvideo_args)</code></pre></details>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastGenerationStage"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastGenerationStage</code></h2>
<pre class="doc-signature"><code>LingBotWorld2CausalFastGenerationStage(transformer, scheduler, vae)</code></pre>
<p>Prepare LingBot World 2 conditions and run the released causal-fast sampling loop.</p>

<details><summary>Source</summary><pre><code>class LingBotWorld2CausalFastGenerationStage(PipelineStage):
    &quot;&quot;&quot;Prepare LingBot World 2 conditions and run the released causal-fast sampling loop.&quot;&quot;&quot;

    def __init__(self, transformer, scheduler, vae) -&gt; None:
        super().__init__()
        self.transformer = transformer
        self.scheduler = scheduler
        self.vae = vae
        self._cross_attn_initialized = False

    def _convert_flow_pred_to_x0(
        self,
        flow_pred: torch.Tensor,
        xt: torch.Tensor,
        timestep: torch.Tensor,
    ) -&gt; torch.Tensor:
        &quot;&quot;&quot;Convert LingBot World 2 flow prediction to x0 using the scheduler sigma.&quot;&quot;&quot;
        original_dtype = flow_pred.dtype
        flow_pred, xt, sigmas, timesteps = map(
            lambda x: x.double().to(flow_pred.device),
            &#91;flow_pred, xt, self.scheduler.sigmas, self.scheduler.timesteps&#93;,
        )
        timestep_id = torch.argmin((timesteps - timestep).abs())
        sigma_t = sigmas&#91;timestep_id&#93;.reshape(-1, 1, 1, 1)
        return (xt - sigma_t * flow_pred).to(original_dtype)

    def _initialize_self_kv_cache(
        self,
        batch_size: int,
        kv_size: int,
        dtype: torch.dtype,
        device: torch.device,
    ) -&gt; list&#91;dict&#93;:
        &quot;&quot;&quot;Allocate per-block self-attention KV cache tensors.&quot;&quot;&quot;
        head_dim = self.transformer.dim // self.transformer.num_heads
        num_heads = self.transformer.num_heads // get_sp_world_size()
        shape = &#91;batch_size, kv_size, num_heads, head_dim&#93;
        return &#91;&#123;
            &quot;k&quot;: torch.zeros(shape, dtype=dtype, device=device),
            &quot;v&quot;: torch.zeros(shape, dtype=dtype, device=device),
            &quot;global_end_index&quot;: torch.tensor(&#91;0&#93;, dtype=torch.long, device=device),
            &quot;local_end_index&quot;: torch.tensor(&#91;0&#93;, dtype=torch.long, device=device),
        &#125; for _ in range(self.transformer.num_layers)&#93;

    def _initialize_crossattn_cache(
        self,
        batch_size: int,
        max_sequence_length: int,
        dtype: torch.dtype,
        device: torch.device,
    ) -&gt; list&#91;dict&#93;:
        &quot;&quot;&quot;Allocate per-block text cross-attention KV cache tensors.&quot;&quot;&quot;
        head_dim = self.transformer.dim // self.transformer.num_heads
        shape = &#91;batch_size, max_sequence_length, self.transformer.num_heads, head_dim&#93;
        return &#91;&#123;
            &quot;k&quot;: torch.zeros(shape, dtype=dtype, device=device),
            &quot;v&quot;: torch.zeros(shape, dtype=dtype, device=device),
            &quot;is_init&quot;: torch.tensor(&#91;0&#93;, dtype=torch.bool, device=device),
        &#125; for _ in range(self.transformer.num_layers)&#93;

    @staticmethod
    def _prompt_context(batch: ForwardBatch, device: torch.device) -&gt; list&#91;torch.Tensor&#93;:
        &quot;&quot;&quot;Slice padded text encoder states back to LingBot World 2&#x27;s unpadded context list.&quot;&quot;&quot;
        assert batch.prompt_embeds
        context_tensor = batch.prompt_embeds&#91;0&#93;.to(device)
        if batch.prompt_attention_mask:
            mask = batch.prompt_attention_mask&#91;0&#93;.to(device)
            seq_lens = mask.gt(0).sum(dim=1).long()
            return &#91;u&#91;:v&#93; for u, v in zip(context_tensor, seq_lens, strict=True)&#93;
        return &#91;u for u in context_tensor&#93;

    def _prepare_image_tensor(self, batch: ForwardBatch, device: torch.device) -&gt; torch.Tensor:
        &quot;&quot;&quot;Return the source-style normalized image tensor `&#91;C,H,W&#93;`.&quot;&quot;&quot;
        image = batch.pil_image
        if image is None:
            raise ValueError(&quot;LingBot World 2 causal-fast requires `image_path` or `pil_image`.&quot;)
        if isinstance(image, torch.Tensor):
            if image.ndim == 5:
                return image&#91;0, :, 0&#93;.to(device)
            if image.ndim == 4:
                return image&#91;0&#93;.to(device)
            return image.to(device)
        return TF.to_tensor(image).sub_(0.5).div_(0.5).to(device)

    def _prepare_camera(
        self,
        action_path: str,
        c2ws: np.ndarray,
        h: int,
        w: int,
        lat_f: int,
        lat_h: int,
        lat_w: int,
        chunk_size: int,
        dtype: torch.dtype,
        device: torch.device,
    ) -&gt; torch.Tensor:
        &quot;&quot;&quot;Build the LingBot World 2 camera Plucker tensor for latent chunks.&quot;&quot;&quot;
        Ks = torch.from_numpy(np.load(os.path.join(action_path, &quot;intrinsics.npy&quot;))).float()
        Ks = get_Ks_transformed(
            Ks,
            height_org=480,
            width_org=832,
            height_resize=h,
            width_resize=w,
            height_final=h,
            width_final=w,
        )
        Ks = Ks&#91;0&#93;
        len_c2ws = len(c2ws)
        len_c2ws_ = int((len_c2ws - 1) // 4) + 1
        len_c2ws_ = int(len_c2ws_ - (len_c2ws_ % chunk_size))
        c2ws_infer = interpolate_camera_poses(
            src_indices=np.linspace(0, len_c2ws - 1, len_c2ws),
            src_rot_mat=c2ws&#91;:, :3, :3&#93;,
            src_trans_vec=c2ws&#91;:, :3, 3&#93;,
            tgt_indices=np.linspace(0, len_c2ws - 1, len_c2ws_),
        )
        c2ws_infer = compute_relative_poses(c2ws_infer, framewise=True)
        Ks = Ks.repeat(len(c2ws_infer), 1)
        c2ws_plucker_emb = get_plucker_embeddings(c2ws_infer.to(device), Ks.to(device), h, w)
        c2ws_plucker_emb = rearrange(
            c2ws_plucker_emb,
            &quot;f (h c1) (w c2) c -&gt; (f h w) (c c1 c2)&quot;,
            c1=int(h // lat_h),
            c2=int(w // lat_w),
        )
        c2ws_plucker_emb = c2ws_plucker_emb&#91;None, ...&#93;
        return rearrange(
            c2ws_plucker_emb,
            &quot;b (f h w) c -&gt; b c f h w&quot;,
            f=lat_f,
            h=lat_h,
            w=lat_w,
        ).to(device=device, dtype=dtype)

    def _encode_condition_video(
        self,
        img: torch.Tensor,
        h: int,
        w: int,
        frames: int,
        mask: torch.Tensor,
        fastvideo_args: FastVideoArgs,
    ) -&gt; torch.Tensor:
        &quot;&quot;&quot;Encode the first-frame conditioning video and prepend mask channels.&quot;&quot;&quot;
        device = get_local_torch_device()
        self.vae = self.vae.to(device)
        video_condition = torch.concat(
            &#91;
                torch.nn.functional.interpolate(
                    img&#91;None&#93;.cpu(),
                    size=(h, w),
                    mode=&quot;bicubic&quot;,
                ).transpose(0, 1),
                torch.zeros(3, frames - 1, h, w),
            &#93;,
            dim=1,
        ).to(device)
        vae_dtype = torch.float32
        with torch.autocast(device_type=&quot;cuda&quot;, dtype=vae_dtype, enabled=False):
            encoder_output = self.vae.encode(video_condition.unsqueeze(0).to(torch.float32))
        latent_condition = encoder_output.mean
        if not bool(getattr(self.vae, &quot;handles_latent_denorm&quot;, False)):
            if hasattr(self.vae, &quot;shift_factor&quot;) and self.vae.shift_factor is not None:
                latent_condition -= self.vae.shift_factor.to(latent_condition.device, latent_condition.dtype)
            latent_condition = latent_condition * self.vae.scaling_factor.to(latent_condition.device,
                                                                             latent_condition.dtype)
        if fastvideo_args.vae_cpu_offload:
            self.vae.to(&quot;cpu&quot;)
        return torch.concat(&#91;mask, latent_condition&#91;0&#93;&#93;, dim=0)

    @torch.no_grad()
    def forward(self, batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch:
        &quot;&quot;&quot;Execute LingBot World 2 causal-fast generation and store final latents on the batch.&quot;&quot;&quot;
        device = get_local_torch_device()
        cfg = fastvideo_args.pipeline_config.dit_config.arch_config
        chunk_size = int(cfg.chunk_size)
        max_sequence_length = int(batch.max_sequence_length or cfg.text_len)
        action_path = batch.action_path
        if action_path is None:
            raise ValueError(&quot;LingBot World 2 causal-fast requires `action_path`.&quot;)

        c2ws = np.load(os.path.join(action_path, &quot;poses.npy&quot;))
        len_c2ws = ((len(c2ws) - 1) // 4) * 4 + 1
        frame_num = ((int(batch.num_frames) - 1) // 4) * 4 + 1
        frame_num = min(frame_num, len_c2ws)
        c2ws = c2ws&#91;:frame_num&#93;

        img = self._prepare_image_tensor(batch, device)
        h0, w0 = img.shape&#91;1:&#93;
        aspect_ratio = h0 / w0
        lat_h = round(np.sqrt(cfg.max_area * aspect_ratio) // 8 // cfg.patch_size&#91;1&#93; * cfg.patch_size&#91;1&#93;)
        lat_w = round(np.sqrt(cfg.max_area / aspect_ratio) // 8 // cfg.patch_size&#91;2&#93; * cfg.patch_size&#91;2&#93;)
        h = lat_h * 8
        w = lat_w * 8
        lat_f = (frame_num - 1) // 4 + 1
        lat_f = int(lat_f - (lat_f % chunk_size))
        frames = (lat_f - 1) * 4 + 1
        batch.height = h
        batch.width = w
        batch.num_frames = frames

        seed = int(batch.seed if batch.seed is not None else 42)
        seed_g = torch.Generator(device=device)
        seed_g.manual_seed(seed)
        noise = torch.randn(16, lat_f, lat_h, lat_w, dtype=torch.float32, generator=seed_g, device=device)

        mask = torch.ones(1, frames, lat_h, lat_w, device=device)
        mask&#91;:, 1:&#93; = 0
        mask = torch.concat(&#91;torch.repeat_interleave(mask&#91;:, 0:1&#93;, repeats=4, dim=1), mask&#91;:, 1:&#93;&#93;, dim=1)
        mask = mask.view(1, mask.shape&#91;1&#93; // 4, 4, lat_h, lat_w).transpose(1, 2)&#91;0&#93;

        self.scheduler.set_timesteps(cfg.num_train_timesteps, shift=cfg.sample_shift)
        timesteps = self.scheduler.timesteps&#91;list(cfg.timesteps_index)&#93;.to(device)
        context = self._prompt_context(batch, device)
        c2ws_plucker_emb = self._prepare_camera(
            action_path,
            c2ws,
            h,
            w,
            lat_f,
            lat_h,
            lat_w,
            chunk_size,
            torch.bfloat16,
            device,
        )
        y = self._encode_condition_video(img, h, w, frames, mask, fastvideo_args).to(device=device,
                                                                                     dtype=torch.bfloat16)

        transformer_dtype = torch.bfloat16
        frame_seqlen = int(noise.shape&#91;-2&#93; * noise.shape&#91;-1&#93; // 4)
        kv_size = frame_seqlen * cfg.local_attn_size if cfg.local_attn_size &gt; -1 else frame_seqlen * lat_f
        self_kv_cache = self._initialize_self_kv_cache(1, kv_size, transformer_dtype, device)
        cross_kv_cache = self._initialize_crossattn_cache(1, max_sequence_length, transformer_dtype, device)

        if not fastvideo_args.use_fsdp_inference:
            self.transformer = self.transformer.to(device)
        self._cross_attn_initialized = False
        pred_latent_chunks = &#91;&#93;
        latents_chunk = noise.split(chunk_size, dim=1)
        condition_chunk = y.split(chunk_size, dim=1)
        c2ws_plucker_emb_chunk = c2ws_plucker_emb.split(chunk_size, dim=2)
        max_seq_len = int(math.ceil(chunk_size * lat_h * lat_w // 4))

        with torch.amp.autocast(&quot;cuda&quot;, dtype=transformer_dtype):
            for chunk_id, current_latent in enumerate(latents_chunk):
                current_condition = condition_chunk&#91;chunk_id&#93;
                current_c2ws_plucker_emb = c2ws_plucker_emb_chunk&#91;chunk_id&#93;
                dit_cond_dict = &#123;&quot;c2ws_plucker_emb&quot;: current_c2ws_plucker_emb.chunk(1, dim=0)&#125;
                kwargs = &#123;
                    &quot;context&quot;: &#91;context&#91;0&#93;&#93;,
                    &quot;seq_len&quot;: max_seq_len,
                    &quot;y&quot;: &#91;current_condition&#93;,
                    &quot;dit_cond_dict&quot;: dit_cond_dict,
                    &quot;kv_cache&quot;: self_kv_cache,
                    &quot;crossattn_cache&quot;: cross_kv_cache,
                    &quot;current_start&quot;: chunk_id * chunk_size * frame_seqlen,
                    &quot;max_attention_size&quot;: kv_size,
                    &quot;frame_seqlen&quot;: frame_seqlen,
                &#125;
                x0 = current_latent
                for timestep_idx, timestep_value in enumerate(timesteps):
                    # Stop if interrupted
                    if getattr(self, &quot;interrupt&quot;, False):
                        break
                    timestep = torch.stack(&#91;timestep_value&#93;).to(device)
                    noise_pred = self.transformer(
                        x=&#91;current_latent.to(device)&#93;,
                        t=timestep,
                        cross_attn_first_call=not self._cross_attn_initialized,
                        **kwargs,
                    )&#91;0&#93;
                    self._cross_attn_initialized = True
                    x0 = self._convert_flow_pred_to_x0(noise_pred, current_latent, timestep_value)
                    if timestep_idx &lt; len(timesteps) - 1:
                        next_timestep = timesteps&#91;timestep_idx + 1&#93;.reshape(1)
                        current_latent = self.scheduler.add_noise(
                            x0,
                            torch.randn(x0.shape, generator=seed_g, device=x0.device, dtype=x0.dtype),
                            next_timestep,
                        )
                pred_latent_chunks.append(x0)
                context_timestep = torch.stack(&#91;timesteps&#91;-1&#93; * 0.0&#93;).to(device)
                self.transformer(x=&#91;x0&#93;, t=context_timestep, cross_attn_first_call=False, **kwargs)

        batch.latents = torch.cat(pred_latent_chunks, dim=1).unsqueeze(0)
        return batch</code></pre></details>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastGenerationStage.forward"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastGenerationStage.forward</code></h3>
<pre class="doc-signature"><code>forward(batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch</code></pre>
<p>Execute LingBot World 2 causal-fast generation and store final latents on the batch.</p>
<details><summary>Source</summary><pre><code>@torch.no_grad()
def forward(self, batch: ForwardBatch, fastvideo_args: FastVideoArgs) -&gt; ForwardBatch:
    &quot;&quot;&quot;Execute LingBot World 2 causal-fast generation and store final latents on the batch.&quot;&quot;&quot;
    device = get_local_torch_device()
    cfg = fastvideo_args.pipeline_config.dit_config.arch_config
    chunk_size = int(cfg.chunk_size)
    max_sequence_length = int(batch.max_sequence_length or cfg.text_len)
    action_path = batch.action_path
    if action_path is None:
        raise ValueError(&quot;LingBot World 2 causal-fast requires `action_path`.&quot;)

    c2ws = np.load(os.path.join(action_path, &quot;poses.npy&quot;))
    len_c2ws = ((len(c2ws) - 1) // 4) * 4 + 1
    frame_num = ((int(batch.num_frames) - 1) // 4) * 4 + 1
    frame_num = min(frame_num, len_c2ws)
    c2ws = c2ws&#91;:frame_num&#93;

    img = self._prepare_image_tensor(batch, device)
    h0, w0 = img.shape&#91;1:&#93;
    aspect_ratio = h0 / w0
    lat_h = round(np.sqrt(cfg.max_area * aspect_ratio) // 8 // cfg.patch_size&#91;1&#93; * cfg.patch_size&#91;1&#93;)
    lat_w = round(np.sqrt(cfg.max_area / aspect_ratio) // 8 // cfg.patch_size&#91;2&#93; * cfg.patch_size&#91;2&#93;)
    h = lat_h * 8
    w = lat_w * 8
    lat_f = (frame_num - 1) // 4 + 1
    lat_f = int(lat_f - (lat_f % chunk_size))
    frames = (lat_f - 1) * 4 + 1
    batch.height = h
    batch.width = w
    batch.num_frames = frames

    seed = int(batch.seed if batch.seed is not None else 42)
    seed_g = torch.Generator(device=device)
    seed_g.manual_seed(seed)
    noise = torch.randn(16, lat_f, lat_h, lat_w, dtype=torch.float32, generator=seed_g, device=device)

    mask = torch.ones(1, frames, lat_h, lat_w, device=device)
    mask&#91;:, 1:&#93; = 0
    mask = torch.concat(&#91;torch.repeat_interleave(mask&#91;:, 0:1&#93;, repeats=4, dim=1), mask&#91;:, 1:&#93;&#93;, dim=1)
    mask = mask.view(1, mask.shape&#91;1&#93; // 4, 4, lat_h, lat_w).transpose(1, 2)&#91;0&#93;

    self.scheduler.set_timesteps(cfg.num_train_timesteps, shift=cfg.sample_shift)
    timesteps = self.scheduler.timesteps&#91;list(cfg.timesteps_index)&#93;.to(device)
    context = self._prompt_context(batch, device)
    c2ws_plucker_emb = self._prepare_camera(
        action_path,
        c2ws,
        h,
        w,
        lat_f,
        lat_h,
        lat_w,
        chunk_size,
        torch.bfloat16,
        device,
    )
    y = self._encode_condition_video(img, h, w, frames, mask, fastvideo_args).to(device=device,
                                                                                 dtype=torch.bfloat16)

    transformer_dtype = torch.bfloat16
    frame_seqlen = int(noise.shape&#91;-2&#93; * noise.shape&#91;-1&#93; // 4)
    kv_size = frame_seqlen * cfg.local_attn_size if cfg.local_attn_size &gt; -1 else frame_seqlen * lat_f
    self_kv_cache = self._initialize_self_kv_cache(1, kv_size, transformer_dtype, device)
    cross_kv_cache = self._initialize_crossattn_cache(1, max_sequence_length, transformer_dtype, device)

    if not fastvideo_args.use_fsdp_inference:
        self.transformer = self.transformer.to(device)
    self._cross_attn_initialized = False
    pred_latent_chunks = &#91;&#93;
    latents_chunk = noise.split(chunk_size, dim=1)
    condition_chunk = y.split(chunk_size, dim=1)
    c2ws_plucker_emb_chunk = c2ws_plucker_emb.split(chunk_size, dim=2)
    max_seq_len = int(math.ceil(chunk_size * lat_h * lat_w // 4))

    with torch.amp.autocast(&quot;cuda&quot;, dtype=transformer_dtype):
        for chunk_id, current_latent in enumerate(latents_chunk):
            current_condition = condition_chunk&#91;chunk_id&#93;
            current_c2ws_plucker_emb = c2ws_plucker_emb_chunk&#91;chunk_id&#93;
            dit_cond_dict = &#123;&quot;c2ws_plucker_emb&quot;: current_c2ws_plucker_emb.chunk(1, dim=0)&#125;
            kwargs = &#123;
                &quot;context&quot;: &#91;context&#91;0&#93;&#93;,
                &quot;seq_len&quot;: max_seq_len,
                &quot;y&quot;: &#91;current_condition&#93;,
                &quot;dit_cond_dict&quot;: dit_cond_dict,
                &quot;kv_cache&quot;: self_kv_cache,
                &quot;crossattn_cache&quot;: cross_kv_cache,
                &quot;current_start&quot;: chunk_id * chunk_size * frame_seqlen,
                &quot;max_attention_size&quot;: kv_size,
                &quot;frame_seqlen&quot;: frame_seqlen,
            &#125;
            x0 = current_latent
            for timestep_idx, timestep_value in enumerate(timesteps):
                # Stop if interrupted
                if getattr(self, &quot;interrupt&quot;, False):
                    break
                timestep = torch.stack(&#91;timestep_value&#93;).to(device)
                noise_pred = self.transformer(
                    x=&#91;current_latent.to(device)&#93;,
                    t=timestep,
                    cross_attn_first_call=not self._cross_attn_initialized,
                    **kwargs,
                )&#91;0&#93;
                self._cross_attn_initialized = True
                x0 = self._convert_flow_pred_to_x0(noise_pred, current_latent, timestep_value)
                if timestep_idx &lt; len(timesteps) - 1:
                    next_timestep = timesteps&#91;timestep_idx + 1&#93;.reshape(1)
                    current_latent = self.scheduler.add_noise(
                        x0,
                        torch.randn(x0.shape, generator=seed_g, device=x0.device, dtype=x0.dtype),
                        next_timestep,
                    )
            pred_latent_chunks.append(x0)
            context_timestep = torch.stack(&#91;timesteps&#91;-1&#93; * 0.0&#93;).to(device)
            self.transformer(x=&#91;x0&#93;, t=context_timestep, cross_attn_first_call=False, **kwargs)

    batch.latents = torch.cat(pred_latent_chunks, dim=1).unsqueeze(0)
    return batch</code></pre></details>
<h2 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline</code></h2>
<pre class="doc-signature"><code>LingBotWorld2CausalFastPipeline(*args, **kwargs)</code></pre>
<p>FastVideo pipeline for LingBot World 2 14B causal-fast I2V generation.</p>
<details><summary>Source</summary><pre><code>class LingBotWorld2CausalFastPipeline(LoRAPipeline, ComposedPipelineBase):
    &quot;&quot;&quot;FastVideo pipeline for LingBot World 2 14B causal-fast I2V generation.&quot;&quot;&quot;

    _required_config_modules = &#91;&quot;text_encoder&quot;, &quot;tokenizer&quot;, &quot;vae&quot;, &quot;transformer&quot;, &quot;scheduler&quot;&#93;

    def initialize_pipeline(self, fastvideo_args: FastVideoArgs):
        if &quot;scheduler&quot; not in self.modules:
            self.modules&#91;&quot;scheduler&quot;&#93; = FlowUniPCMultistepScheduler(shift=1.0, use_dynamic_shifting=False)

    def create_pipeline_stages(self, fastvideo_args: FastVideoArgs) -&gt; None:
        &quot;&quot;&quot;Set up the LingBot World 2 causal-fast pipeline stages.&quot;&quot;&quot;
        self.add_stage(stage_name=&quot;input_validation_stage&quot;, stage=InputValidationStage())
        self.add_stage(
            stage_name=&quot;prompt_encoding_stage&quot;,
            stage=LingBotWorld2TextEncodingStage(
                text_encoders=&#91;self.get_module(&quot;text_encoder&quot;)&#93;,
                tokenizers=&#91;self.get_module(&quot;tokenizer&quot;)&#93;,
            ),
        )
        self.add_stage(stage_name=&quot;conditioning_stage&quot;, stage=ConditioningStage())
        self.add_stage(
            stage_name=&quot;lingbotworld2_causal_fast_generation_stage&quot;,
            stage=LingBotWorld2CausalFastGenerationStage(
                transformer=self.get_module(&quot;transformer&quot;),
                scheduler=self.get_module(&quot;scheduler&quot;),
                vae=self.get_module(&quot;vae&quot;),
            ),
        )
        self.add_stage(stage_name=&quot;decoding_stage&quot;, stage=DecodingStage(vae=self.get_module(&quot;vae&quot;)))</code></pre></details>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline.initialize_pipeline"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline.initialize_pipeline</code></h3>
<pre class="doc-signature"><code>initialize_pipeline(fastvideo_args: FastVideoArgs)</code></pre>

<details><summary>Source</summary><pre><code>def initialize_pipeline(self, fastvideo_args: FastVideoArgs):
    if &quot;scheduler&quot; not in self.modules:
        self.modules&#91;&quot;scheduler&quot;&#93; = FlowUniPCMultistepScheduler(shift=1.0, use_dynamic_shifting=False)</code></pre></details>
<h3 id="fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline.create_pipeline_stages"><code>fastvideo.pipelines.basic.lingbotworld2.causal_fast_pipeline.LingBotWorld2CausalFastPipeline.create_pipeline_stages</code></h3>
<pre class="doc-signature"><code>create_pipeline_stages(fastvideo_args: FastVideoArgs) -&gt; None</code></pre>
<p>Set up the LingBot World 2 causal-fast pipeline stages.</p>
<details><summary>Source</summary><pre><code>def create_pipeline_stages(self, fastvideo_args: FastVideoArgs) -&gt; None:
    &quot;&quot;&quot;Set up the LingBot World 2 causal-fast pipeline stages.&quot;&quot;&quot;
    self.add_stage(stage_name=&quot;input_validation_stage&quot;, stage=InputValidationStage())
    self.add_stage(
        stage_name=&quot;prompt_encoding_stage&quot;,
        stage=LingBotWorld2TextEncodingStage(
            text_encoders=&#91;self.get_module(&quot;text_encoder&quot;)&#93;,
            tokenizers=&#91;self.get_module(&quot;tokenizer&quot;)&#93;,
        ),
    )
    self.add_stage(stage_name=&quot;conditioning_stage&quot;, stage=ConditioningStage())
    self.add_stage(
        stage_name=&quot;lingbotworld2_causal_fast_generation_stage&quot;,
        stage=LingBotWorld2CausalFastGenerationStage(
            transformer=self.get_module(&quot;transformer&quot;),
            scheduler=self.get_module(&quot;scheduler&quot;),
            vae=self.get_module(&quot;vae&quot;),
        ),
    )
    self.add_stage(stage_name=&quot;decoding_stage&quot;, stage=DecodingStage(vae=self.get_module(&quot;vae&quot;)))</code></pre></details>
</div>
