"The camera doesn't do what I asked" is the most common complaint about every video model, and it usually gets answered with prompt tips. For LTX 2.3 that answer is incomplete, because motion control here has three layers, and the prompt is only the first.
Lightricks ships dedicated LoRAs for individual camera moves — one each for dolly in, dolly out, dolly left, dolly right, jib up, jib down, and static. They ship IC-LoRAs that transfer motion and structure from a reference clip. And there is a guidance parameter, STG, whose entire job is temporal coherence, which almost nobody outside the docs mentions.
This guide covers all three layers and when to escalate between them. Sourced from the LTX-2 repository, the multimodal guidance docs, and the official ComfyUI tutorial, checked July 2026.
Layer 1: prompt language the model was built to read
The official prompting structure includes an explicit slot: specify camera angles and movements, alongside the action, appearance, environment, lighting, and any changes — all in one flowing paragraph under 200 words.
Vague direction gets vague motion. Name the move, the height, and the distance:
- "the camera tracks her from the front at chest height, pulling back to keep her centered"
- not "cinematic camera movement"
The strongest evidence that named moves work is layer 2: Lightricks trained a separate LoRA for each of them. When a lab ships an adapter called Camera-Control-Dolly-In, the vocabulary "dolly in" is unambiguously meaningful to the model family.
Prompt-only control is the right level for most shots. It costs nothing, it composes freely, and it does not constrain your checkpoint choice.
Layer 2: camera-control LoRAs, when the prompt is not enough
Lightricks publishes one LoRA per move:
| LoRA | Move |
|---|---|
LTX-2-19b-LoRA-Camera-Control-Dolly-In | Push toward the subject |
LTX-2-19b-LoRA-Camera-Control-Dolly-Out | Pull away |
LTX-2-19b-LoRA-Camera-Control-Dolly-Left / -Right | Lateral tracking |
LTX-2-19b-LoRA-Camera-Control-Jib-Up / -Jib-Down | Vertical crane |
LTX-2-19b-LoRA-Camera-Control-Static | Locked-off camera |
Note the 19b prefix: these are LTX-2 generation adapters, while Union Control, LipDub, and HDR are 22b LTX-2.3 era. Mixing generations is a known way to get output that is subtly wrong with no error message.
The Static LoRA deserves special attention. Suppressing camera movement is genuinely hard through prompting alone — "static camera" competes against a model whose training data is full of movement. A dedicated adapter for not moving is exactly the kind of tool that sounds unglamorous and solves a real problem, especially for product shots, interviews, and any composite work.
Apply on the CLI with the repeatable flag:
--lora path/to/ltx-2-19b-lora-camera-control-dolly-in.safetensors 0.8Default strength is 1.0; Lightricks' own example command applies a LoRA at 0.8, which is a sensible starting point. Camera LoRAs generally compose with identity or style LoRAs, since they are asking for different things.
Testing how far prompt-level control gets you? Before downloading move-specific adapters, find out whether your phrasing is already doing the job. ltx23.app runs LTX 2.3 in the browser — a fast loop for comparing camera phrasings.
Layer 3: IC-LoRA, when you have a reference
When you need the motion from an existing clip — not a generic move — that is in-context control.
LTX-2.3-22b-IC-LoRA-Union-Control— structural guidance from depth, pose, or edgesLTX-2.3-22b-IC-LoRA-Motion-Track-Control— motion-track based controlLTX-2-19b-IC-LoRA-Pose-Control— pose-driven control (19B era)
Two operating rules:
- Distilled checkpoint only. The docs state
ICLoraPipelinecan only be used with a distilled model. ComfyUI's IC-LoRA Union Control template loadsltx-2.3-22b-distilled-fp8.safetensorsfor exactly this reason. - Union Control needs a geometry estimator in ComfyUI:
moge_2_vitl_normal_fp16.safetensorsinmodels/geometry_estimation/. It converts your reference clip into depth and normal signals. Without it there is no control signal at all.
This is the layer to use when a client approved a specific camera move in a reference, or when you need several shots to share a motion path.
The parameter nobody mentions: STG
Here is the piece missing from essentially every LTX 2.3 tutorial.
The MultiModalGuiderParams documentation defines Spatio-Temporal Guidance:
| Parameter | What it does | Typical |
|---|---|---|
stg_scale | Perturbation-based guidance for improved temporal coherence | 0.5–1.5 (0.0 disables) |
stg_blocks | Which transformer blocks to perturb | e.g. [29] |
The mechanism: STG improves structural coherence by perturbing specific transformer blocks and steering away from the perturbed prediction. In other words it is guidance whose reference point is a deliberately degraded version of the model — pushing output toward coherence rather than toward the prompt.
Why this matters for motion: temporal coherence is the difference between movement and flicker. If your problem is that motion looks unstable rather than wrong, CFG will not fix it — CFG steers prompt adherence. STG is the parameter aimed at your actual symptom.
The trade is stated in the docs: higher stg_scale means better temporal coherence but slower inference, because it requires extra forward passes.
Two related parameters worth knowing while you are in there:
rescale_scale(typical 0.5–0.7) rescales the guided prediction toward the conditional variance, which limits over-saturation — the plastic look that shows up when guidance is pushed hard.skip_stepskips guidance every N steps, speeding inference with minimal quality loss.
A diagnostic ladder
Match the fix to the symptom instead of turning every knob:
| Symptom | Fix |
|---|---|
| Camera does something generic | Name the move, height, and distance in the prompt |
| Camera ignores a specific move | Load the matching camera-control LoRA |
| Motion looks jittery or incoherent | Raise stg_scale (0.5–1.5) |
| Output looks over-saturated / plastic | Lower CFG, set rescale_scale around 0.5–0.7 |
| Need motion from a reference clip | IC-LoRA Motion Track or Union Control, distilled checkpoint |
| Subject moves but scene is static | Rewrite the prompt chronologically — describe what changes |
| Everything drifts over a long clip | Generate shorter and extend, or repair with a region retake |
Composition and camera work at scale
For anyone doing more than one-off shots:
- Standardize a camera vocabulary across a project. Same phrasing, same move, same expectation — this is what makes a batch look like it came from one shoot.
- Two-stage matters for motion. Stage 1 decides framing, motion, and timing; stage 2 refines detail. Judge motion at stage 1 and stop paying for full renders of shots that were never going to work.
- Fix regions, don't reroll.
RetakePipelineregenerates a[start_time, end_time]window and preserves the rest — the right tool when the camera does something odd for one second.
FAQ
Does LTX 2.3 have camera control? Yes, at three levels: prompt language, dedicated camera-move LoRAs (dolly, jib, static), and IC-LoRA structural or motion-track control from a reference.
Why doesn't my prompt's camera move happen? Usually under-specification. Name the move, the height, and the distance. If it still misses, load the matching camera LoRA.
What is STG in LTX 2.3? Spatio-Temporal Guidance — perturbation-based guidance for temporal coherence, typically 0.5–1.5, at the cost of extra forward passes.
Can I stack a camera LoRA with a style or identity LoRA? Generally yes; they target different things. Start below full strength — Lightricks' own example uses 0.8.
Why does my IC-LoRA control run fail? Most often the checkpoint: IC-LoRA requires a distilled model. In ComfyUI, also confirm the geometry estimator is installed.
How do I keep the camera perfectly still? The Static camera-control LoRA is built for it, and it works better than fighting the model with prompt wording.
Bottom line
Motion control in LTX 2.3 is a ladder, not a slider: prompt language first, camera LoRAs when a specific move must land, IC-LoRA when motion comes from a reference — and STG when the problem is coherence rather than direction.
Most people never get past layer one and conclude the model cannot hold a camera. It can; the tools just live in three different places. Test your phrasing quickly at ltx23.app, then escalate only where it actually breaks.
Sources
Verified July 2026 against primary documentation:
- Lightricks/LTX-2 — official GitHub repository — camera-control LoRA catalog, prompting structure,
--lorausage - LTX-2 multimodal guidance documentation — STG mechanism,
stg_scale,stg_blocks,rescale_scale,skip_step - LTX-2 available pipelines documentation — IC-LoRA distilled-only rule, retake regions
- ComfyUI official LTX-2.3 tutorial — IC-LoRA template, distilled FP8 checkpoint, geometry estimator
- LTX-2.3-22b-IC-LoRA-Union-Control — depth/pose/edge control
- LTX-2.3-22b-IC-LoRA-Motion-Track-Control — motion-track control
- LTX-2-19b-LoRA-Camera-Control-Dolly-In — camera-move adapter
- LTX-2-19b-LoRA-Camera-Control-Static — static-camera adapter
- LTX-2 conditioning documentation — reference-video conditioning mechanism
- LTX-2 installation & CLI flags — LoRA flag and default strength
- ltx-core package documentation — guiders and transformer block structure
Guidance ranges are those published in Lightricks' documentation; optimal values vary by prompt, resolution, and checkpoint.


