LTX-Video 2.3 22B — IC-LoRA: CrossView Warp 0.9
This is a PoC, that's why the 0.9.
What it does: you give it a video and a camera offset (azimuth / elevation / distance), and it generates the same scene from that new viewpoint. It's an IC-LoRA for LTX-Video 2.3 (22B) with two reference videos: a depth-warp of your video (this carries the geometry) and the original video itself (this keeps the identity). The warps come from the CrossViewWarp ComfyUI node, which uses Depth Anything V2 input.
The offset doesn't have to be a single fixed pose. Right-clicking the node's 3D orbit picker drops keyframes, and it interpolates a camera pose per frame — so instead of a new static viewpoint you can drive a whole camera move (an orbit around the subject) across the clip.
Unlike my CrossView Prompt LoRA (which takes the camera angle from a text prompt), this one takes the angle as numbers — so you can set the viewpoint precisely instead of choosing from a fixed phrase list.
Example outputs
Each clip is a side-by-side comparison: the reference input and the generated new camera view. The first two clips are keyframed camera moves — an orbit driven by keyframes on the node's picker, not a single fixed viewpoint. The rest are static offsets, captioned with the azimuth / elevation set on the CrossViewWarp node (distance 1.0). All were generated on real footage, not the synthetic training data.
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.°
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.
- Prompt
- Crossview.
Usage (ComfyUI)
- Install the
ComfyUI-CrossViewWarp
custom node (clone into
ComfyUI/custom_nodes/, install its requirements, restart ComfyUI). It needs the Depth Anything V2 node for the depth input. - Load
LTX2.3-22B_IC-LoRA-CrossView-Warp_v0.9_18000.safetensorsas the IC-LoRA. - Wire your input video to both the CrossViewWarp node (frames + DA-V2
depth) and an IC-LoRA reference guide. The node's
warpoutput goes to a second reference guide. Setlatent_downscale_factor = 1on both guides. - Set the camera on the node — either with the numbers or by dragging the camera marker on the built-in 3D orbit picker widget.
Important: Unfortunately distance setting doesn't work as expected due to some dataset problems which will be solved in the next release.
Settings that worked for me
- IC-LoRA strength: 1.3
- Both IC-LoRA guides:
latent_downscale_factor = 1 - For
distance > 1: describe the revealed content in the prompt (see in "limitations" below)
Recommended angle ranges
The CrossViewWarp node's orbit picker shows these zones as green/yellow shading on the sphere — they come from the training data coverage:
| Zone | Azimuth | Elevation | What to expect |
|---|---|---|---|
| Green | up to ±45° | up to +30° (camera above), down to −15° (camera below) | Reliable |
| Yellow | ±45–65° | +30–40° / −15–25° | Usable |
| Beyond | >±65° | >+40° / <−25° | outside the training range |
Two things to know: the zones combine (a large azimuth plus a large elevation together is harder than either alone — that's why the picker shades an ellipse, not a box), and looking up at the subject from below is the weakest direction — the training cameras rarely went there.
Training Details
Trained on RunPod cloud GPUs (NVIDIA RTX PRO 6000 Blackwell, 96 GB). (affiliate link — I get a small credit)
| Parameter | Value |
|---|---|
| Base model | LTX-Video 2.3 (22B) |
| Training framework | ltx-trainer (Lightricks) |
| Training strategy | IC-LoRA (flexible, dual reference conditioning) |
| Released checkpoint | step 18,000 |
| LoRA rank / alpha | 32 / 32 |
| Target modules | attn1, attn2 (to_k/q/v/out) |
| Optimizer | AdamW — 2.5e-4 linear |
| Mixed precision | bf16 |
| Batch size | 1 (gradient checkpointing enabled) |
| References | depth-warp + source video |
| Training dataset | 548 pairs (300 Syn4D + 248 SynCamVideo) |
| Resolution | 768x768, mixed 49 & 81 frames |
Dataset
Each training pair is: a source video, a real second-camera video as the target, and a depth-warp of the source into the target camera's pose as the geometric conditioning. Warps use monocular Depth Anything V2 depth, scale-fitted against the known camera geometry, with magenta disocclusion holes.
- SynCamVideo (KlingTeam, Apache-2.0): 248 camera pairs, 15–65° apart
- Syn4D (
syn4d_simsubset, CC-BY-4.0): 300 pairs
Limitations
- It steers the viewpoint, it doesn't reproject it. The model treats the warp as a hint and re-imagines the scene from the new angle. You often get a smaller rotation than you asked for.
- Pulling the camera back (
distance > 1) often does nothing on its own. What helped: describe the unseen parts in the prompt. If you want a character shown from farther away, write out the clothing and body details that weren't visible in the source ("full-body shot, knee-high leather boots, long dark skirt"). The prompt fills in what the warp can't know.
What's next
The PoC did its job, the concept works and I have some ideas where it breaks. What I'm planning to do with the next version:
- More diverse training data
- Better depth, shared between training and inference
- Wider trained angle range
- More steps — the current model needs the 1.0-1.3 strength to follow angles. In the next versions probably more training steps will be needed.
License
This LoRA is shared under the Apache License 2.0. It was trained on two
permissively licensed datasets:
SynCamVideo
(Apache-2.0) and the
Syn4D syn4d_sim subset
(CC-BY-4.0)
Note: using this LoRA requires the LTX-Video 2.3 base model, which is governed by its own license — please review Lightricks' terms for the base weights separately.
Support
Producing and sharing this kind of open-source work requires renting cloud GPUs, which gets expensive quickly. If you find it useful and would like me to keep contributing, your support is very much appreciated:
Model tree for Cseti/LTX2.3-22B_IC-LoRA-CrossView-Warp
Base model
Lightricks/LTX-2.3