Skip to main content
LTX turns a photo and a script into a video-and-audio take of that person speaking. One generation pass produces the speech and the lip-synced picture together; there is no separate text-to-speech step. LTX is a Lightricks model. Reactor serves it as a live session your app opens, drives, and watches over WebRTC, rather than a render job you queue and wait on. The LTX reference is split across four pages: this overview, the complete command and event schema, the prompt guide for writing scripts and scene prompts that render well, and an end-to-end tutorial. The base wire protocol is the same as every other Reactor model: open a session with the Reactor class (model name reactor/ltx2), send named commands, receive events. LTX’s surface adds commands for the avatar photo, the script, delivery style, and take-level controls like speech rate and seed.

At a glance

The model name is the string you pass when you open a session, e.g. new Reactor({ modelName: "reactor/ltx2" }); the create-reactor-app CLI and the pricing catalog use the short slug ltx2. See Pricing & Billing for how billing works.

Key features

Identity lock

One photo fixes the face for the whole take. Identity, framing, and background hold from the first frame to the last.

Joint video + audio

One generation pass produces the voice and the lip-synced picture together, on a single sample clock, and streams both as one take.

Scene-driven delivery

A separate scene prompt casts the voice and controls tone, energy, and setting, independent of the words being spoken.

How a long take holds together

A take is not one continuous render. The model generates it in 20-second windows and opens a new window every 10 seconds, so each window overlaps the one before it by half its length. That overlap is what holds a long take together: each window is generated against the second half of the previous one under the same conditioning, so the face, the voice, and the background carry forward from window to window instead of drifting the way a chain of separate clips would. Frames arrive at 24 fps in wall-clock time, whatever lead generation has built up. Play the stream as it arrives; there is nothing to buffer or poll.
Take length defaults to the script length divided by the speech rate you set with set_wpm. A duration outside the 4 to 300 second range clamps into it. If your script is shorter than the requested duration, the avatar holds an idle presence for the remainder instead of looping or repeating the script.

Install

npx create-reactor-app my-avatar-app --model=ltx2 scaffolds a running app around the package, with a server-side token route and a video element already wired.

Quick start

Ltx2Model is the typed client: one named method per command, one subscription per message.
The same package ships React bindings, <Ltx2Provider> and useLtx2(), which the tutorial builds a full app on. If you would rather send raw commands, the base Reactor class speaks the same wire protocol; see Typed Model SDKs.

How it works

  1. Connect to the model.
  2. Set the avatar image with set_avatar_image. Required before start.
  3. Set the script with set_script. Required before start.
  4. Set optional conditions: a scene/delivery prompt, speech rate, duration, or seed.
  5. Start the take.
  6. Control playback with pause / resume / stop.
  7. Reset to clear the avatar image and start over. reset is the only way to clear it.
The schema documents every command, message, and state field; the prompt guide covers writing scripts and scene prompts; the tutorial walks the whole flow in a working app.