LTX-Video 2.3 22B — IC-LoRA: CrossView Warp v2

Give it a video and a camera offset — azimuth, elevation, distance — and it generates the same scene from that new viewpoint.

It is an IC-LoRA for LTX-Video. It reads two reference videos: a depth-warp of your clip, which carries the geometry, and the clip itself, which carries the identity. The warp comes from the CrossViewWarp ComfyUI node.

The offset doesn't have to be one fixed pose. The node's 3D orbit picker takes keyframes and interpolates a camera pose per frame, so you can drive a whole camera move, not just a new static viewpoint.

What changed since v0.9

v0.9 was a proof of concept. This version shares almost nothing with it but the idea:

v0.9 v2
Training data 548 pairs from SynCamVideo + Syn4D 719 scenes I rendered myself in Blender
Depth Depth Anything V2, scale-fitted to known geometry MoGe-2, native metric — no fit
LoRA targets attention only attention + feed-forward
Warp resolution downscale 2 downscale 1 (full resolution)

Examples

Prompt
Crossview.
Prompt
Crossview.
Prompt
Crossview.
Prompt
Crossview.
Prompt
Crossview.

Usage (ComfyUI)

There is a ready-made graph — ltx2.3-ic-lora-crossview-warp-v2.json — which is the workflow the gallery clips were generated with. Load that and you only need to point it at your own video and set the camera. The steps below are what it wires up, in case you are building your own.

  1. Install the ComfyUI-CrossViewWarp node.
  2. Depth comes from MoGe, which is a core ComfyUI node.
  3. Load LTX2.3-22B_IC-LoRA-CrossView-Warp_v2_6000.safetensors as the IC-LoRA.
  4. Wire your clip to both an IC-LoRA reference guide and the CrossViewWarp node. The node's warp output goes to the other guide. Set latent_downscale_factor = 1 on both.
  5. The prompt is one word: crossview.
  6. Set the camera on the CrossView Warp node
  7. If the effect of the LoRA is weak, increase the LoRA strength to 1.2-1.3.

Angle range

How far you can push the camera, and how much I'd trust each range:

Azimuth Elevation Why
Reliable up to ±45° −20° to +30° evenly represented in training, and the range I swept properly
Usable ±45° to ±90° +30° to +40° in the data but not systematically tested
Weakest below −20° 22 of 719 scenes. Looking up at a subject is the direction the data starves

Training

Trained on RunPod cloud GPUs — NVIDIA RTX PRO 6000 Blackwell, 96 GB.

Base model LTX-Video 2.3 (22B)
Framework ltx-trainer (Lightricks), unmodified
Strategy IC-LoRA, flexible, dual reference conditioning
Released checkpoint step 6,000
LoRA rank / alpha 32 / 32
Target modules attn1, attn2 (to_k/q/v/out.0) and ff.net.0.proj, ff.net.2
Trainable parameters 163,577,856
Optimizer AdamW 2.5e-4, cosine_with_restarts, eta_min 2.5e-5, T_0 1500
Schedule 6,000 optimizer steps × grad-accum 4 = 24,000 samples = 33.4 epochs
Batch 1, gradient checkpointing
Precision bf16
Resolution 768×768 × 81 frames, single bucket
References depth-warp + source, both downscale_factor 1, order [warp, source]
Measured 46.85 s/step, ~86 h, 65.4 of 95.6 GB peak

Dataset

719 scenes, rendered in Blender 4.2 . I rendered 978, 772 passed the quality gates, and 719 survived a cap of 130 scenes per azimuth band.

Each sample is a source view, a target view from a second camera, and a depth-warp of the source into the target's pose as the geometric conditioning. The warps use MoGe-2 ViT-L metric depth.

Limitations

  • It steers the viewpoint, it doesn't reproject it. It treats the warp as a suggestion and regenerates the frame, so even parts that were perfectly visible in your clip come back redrawn rather than copied. You often get less rotation than you asked for, and at large angles most of what you see is invented rather than recovered from your footage.
  • Distance barely moves in the training data. A big pull-back is outside anything the model saw, and it will under-deliver. This is the one place a prompt earns its keep: describe the clothing and background the wider frame should reveal.
  • Looking up from below is the weak axis. 3.1% of the training scenes.
  • pivot_z has to be found per clip

License

The LoRA weights in this repository are released under the Apache License 2.0.

They were trained on 719 scenes I rendered myself. Those renders contain third-party assets — CC-BY 3D models, CC0 HDRIs and textures, and CMU motion capture. Every one is listed in ATTRIBUTION.md.

Using this LoRA requires the LTX-Video base model, governed by Lightricks' own terms — review those separately. Building the conditioning requires MoGe-2.

Support

Everything here is open, and the GPUs behind it are rented. If this was useful, please consider supporting my work:

Ko-fi Liberapay

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Cseti/LTX2.3-22B_IC-LoRA-CrossView-Warp_v2

Adapter
(107)
this model