> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

# LongLive-2.0 prompt guide

> How to prompt LongLive-2.0 and compose multi-shot sequences.

Getting a strong LongLive-2.0 result comes down to writing each prompt as a dense, cinematic
paragraph, and composing those prompts into a *sequence* of shots and cuts. A sequence opens on a
scene, evolves it with soft shots, and breaks to new scenes with hard cuts, which can be fired live
or scheduled in advance. This guide covers the dense-paragraph prompt, the shot-vs-cut decision,
scheduling, a cookbook of worked sequences, and the common mistakes to avoid.

## Where it shines

LongLive-2.0 is strongest with prompts that focus on **natural environments, landscapes, and
animals** (savannas, oceans, forests, weather, wildlife) and on cinematic camera language. It is
also unusually sensitive to prompt density: **terse prompts produce visibly weaker, less stable
video.** Write a full, descriptive paragraph, not a phrase.

## Weak vs strong prompts

The fastest way to understand a strong prompt is to compare it to a weak one. Each pair uses the
same subject; the only difference is the level of detail.

**Wildlife scene**

<div className="rea-example rea-example-dont">
  A tiger walking through grass.
</div>

<div className="rea-example rea-example-do">
  A powerful Bengal tiger prowls slowly through tall sun-bleached savanna grass at golden hour, the
  muscles rolling beneath its orange-and-black striped fur, amber eyes fixed dead ahead, whiskers and
  breath catching the light. Warm low sunlight rakes through the swaying grass and backlights drifting
  seed-fluff in the air. Long telephoto lens, very shallow depth of field, slow tracking dolly moving
  alongside the cat, rich golden-amber palette, exquisitely fine fur detail, photoreal
  nature-documentary look.
</div>

**Landscape & character scene**

<div className="rea-example rea-example-dont">
  An astronaut on a red planet.
</div>

<div className="rea-example rea-example-do">
  A lone astronaut in a worn white-and-orange pressure suit walks slowly across a vast windswept dune
  of deep rust-red sand, fine dust streaming off the crest and trailing from each heavy boot-step.
  Golden sunlight rakes across the surface from the left, carving long soft shadows down the ripples;
  a pale ringed planet hangs low and enormous on the dusty horizon. Wide cinematic establishing shot
  on a long lens, shallow depth of field, gentle slow dolly, warm crimson-and-amber palette,
  volumetric haze, photoreal, 35mm film look.
</div>

## Anatomy of a prompt

A strong prompt gets its density from specifics. Name each of these, in this rough order:

* **Subject + specific detail**: not "a tiger" but "a Bengal tiger, muscles rolling under striped
  fur".
* **Action**: what it's doing right now ("prowls slowly", "leaps clear of the water").
* **Setting + time of day**: "tall savanna grass at golden hour".
* **Lighting, by its effect**: "warm low sunlight rakes through the grass", not a temperature value.
* **Lens + camera move**: "long telephoto, shallow depth of field, slow tracking dolly".
  LongLive-2.0 responds strongly to camera language.
* **Color palette & texture**: "rich golden-amber palette, fine fur detail".
* **A render cue**: "photoreal", "cinematic", "nature-documentary look".

Two rules on top of the recipe:

* **One coherent idea per shot.** Don't pack a whole scene change into it (that's a cut).
* **Re-establish the scene on soft shots.** When you `set_shot` mid-scene, restate the subject and
  setting so continuity holds; only the new change should land.

## Shots vs cuts: the core decision

LongLive-2.0 provides two kinds of prompt-transitions. A **shot** (`set_shot`) keeps the camera
rolling: it takes the current image and evolves it with no hard break (this is simlilar to the
continuous morph [Helios](/model-api-reference/helios/overview) produces between prompts). The
subject and setting carry over, so only the new change lands. A **cut** (`scene_cut`) is the
opposite, a hard break that purges memory and builds a new scene from scratch, with no carry-over
from what came before.

A shot stays inside the current scene and spends its 48-chunk budget (\~58s), so it can't make the
video any longer; a cut resets the budget to a fresh 48 chunks, which is the only way to run past a
single scene.

|              | **Shot** (`set_shot`)                                | **Cut** (`scene_cut`)                   |
| ------------ | ---------------------------------------------------- | --------------------------------------- |
| Feel         | Evolves the current take                             | A hard break                            |
| Memory       | Preserved, continuity holds                          | Purged, starts from scratch             |
| Chunk budget | Spends the current scene's budget                    | Resets it (fresh 48 chunks)             |
| Use for      | Camera moves, action, time-of-day, evolving a moment | A new scene: location, subject, or look |

See [Chunks, scenes, and length](/model-api-reference/longlive-v2/overview#chunks-scenes-and-length)
for why a scene maxes out at 48 chunks and a cut is what extends it.

## Scheduling a sequence

Beyond firing transitions live, you can **schedule** them at chunk indices (`session_chunk`) with
`schedule_shot` / `schedule_scene_cut`. A chunk is \~1.2s.

Keep each scene's prompts inside its 48-chunk budget. If you want a prompt to land after chunk 48,
put a **cut** before it; otherwise the first scene completes and the later prompt never fires.

## Cookbook

### Shot chain: evolving one scene

A single scene, evolved with soft shots. Maxes out at \~58s.

```typescript theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
await longlive.setShot({ prompt: "A chef plates a dish in a sunlit restaurant kitchen, close-up" });
await longlive.scheduleShot({
  prompt: "Camera pushes in on the steam rising off the plate",
  at_session_chunk: 14,
});
await longlive.scheduleShot({
  prompt: "The chef garnishes with herbs, hands in frame",
  at_session_chunk: 30,
});
await longlive.start();
```

**What you'll see:** continuous action in one kitchen; the dish and lighting stay consistent.
**Pitfall:** without a cut, generation ends near chunk 48; don't schedule beyond it.

### Cut chain: a nature-documentary montage

Rapid scheduled cuts across animals in natural settings, LongLive-2.0's sweet spot. This is the
sequence shipped in the
[reference example](https://github.com/reactor-team/js-sdk/tree/main/examples/longlive-v2) (prompts
abbreviated here for readability; keep yours dense per
[Weak vs strong prompts](#weak-vs-strong-prompts)).

```typescript theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
await longlive.setShot({
  prompt:
    "A powerful Bengal tiger prowls through tall savanna grass at golden hour, telephoto, shallow depth of field, photoreal",
});
await longlive.scheduleSceneCut({
  prompt:
    "A pod of dolphins leaping through a glittering turquoise ocean, spray catching the midday sun, photoreal",
  at_session_chunk: 10,
});
await longlive.scheduleSceneCut({
  prompt:
    "A herd of elephants drinking at a watering hole at sunset, acacia trees on the horizon, golden backlight, photoreal",
  at_session_chunk: 20,
});
await longlive.scheduleSceneCut({
  prompt:
    "A bald eagle soaring over snow-capped peaks and pine forest, sweeping aerial tracking shot, photoreal",
  at_session_chunk: 30,
});
await longlive.start();
```

**What you'll see:** clean cuts every \~12s through four natural scenes. **Pitfall:** keep each
prompt dense; terse prompts degrade the output.

### Combining shots and cuts

Establish a scene, evolve it with a soft shot, cut to a new scene, then evolve that one too.

```typescript theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
await longlive.setShot({
  prompt: "A fisherman casts a line from a weathered dock on a still lake at first light",
});
await longlive.scheduleShot({
  prompt: "The camera drifts low to the water as ripples spread from the line",
  at_session_chunk: 14,
});
await longlive.scheduleSceneCut({
  prompt: "A busy fish market at midday, crates of crushed ice and silver fish",
  at_session_chunk: 28,
});
await longlive.scheduleShot({
  prompt: "A vendor hefts a fish onto a brass scale, hands and gills in frame",
  at_session_chunk: 42,
});
await longlive.start();
```

**What you'll see:** the dock scene evolves in one continuous take, the cut hard-breaks to the
market, then the market scene evolves in turn. **Pitfall:** a scheduled shot only fires inside its
scene's budget; the cut at 28 opens a fresh 48-chunk window, so the shot at 42 lands fine.

## Common pitfalls

* **Scheduling a prompt past a scene's 48-chunk ceiling.** A scene auto-completes at 48 chunks. A
  shot or cut scheduled after that point, with no earlier cut to reset the budget, never fires. Put
  a `scene_cut` before the ceiling, or keep the prompt inside the budget.
* **Using a cut when you meant a shot (and vice-versa).** A `scene_cut` for a small framing change
  throws away continuity you wanted to keep. A `set_shot` for a true scene change bleeds the old
  scene into the new one. Match the transition to the intent.
* **Packing a scene change into one prompt.** "A forest that becomes a city" confuses the model
  mid-shot. Make it two prompts: a shot or cut with each scene described on its own.
* **Expecting reference-image input.** This release is text-to-video only. There is no image
  conditioning. Describe the look in words.

## See also

* [LongLive-2.0 overview](/model-api-reference/longlive-v2/overview): model specs, chunks and
  scenes, lifecycle
* [LongLive-2.0 tutorial](/model-api-reference/longlive-v2/tutorial): end-to-end example project
* [Concepts → Commands and messages](/concepts/commands-and-messages): the generic `sendCommand` /
  message contract
