# Character & place consistency

Recurring characters and places drift when you re-prompt them from scratch each shot. Pin them as **entity
assets** in the project and reuse the same entity across clips so generation stays consistent.

## Entity assets

```jsonc
"char_ana": {
  "kind": "character",           // or "place"
  "name": "Ana",
  "refImages": ["files/ana-1.png", "files/ana-2.png"],  // 1-3 clear reference stills
  "descriptor": "28, freckles, red parka, short dark hair",
  "seedLock": 4412               // reuse this seed for the same look
}
```

Register one with `timeline_edit` → `add_asset`. Build the reference stills once (generate or supply them),
then reuse the entity everywhere that character/place appears.

## Using an entity when generating

When a shot features an entity, feed its identity into the generation call:

1. **Reference images** → pass the entity's `refImages` as `imagePaths` to `image_generate` (for stills) or
   `video_generate` (for image-to-video), so the model matches the look.
2. **Descriptor** → include the entity's `descriptor` text in the prompt.
3. **Seed** → pass the entity's `seedLock` in `params.seed` so the same face/place recurs.

Example — a new clip of Ana:
- `video_generate` with `imagePaths: ["files/ana-1.png"]`, prompt `"Ana (28, freckles, red parka) walking through the market, handheld"`, `model: "wan-2.2"`.
- Then `add_asset` for the result **and** record `"params": { "seed": 4412, "entity": "char_ana" }` so the link is traceable.

## Places

Same pattern with `kind: "place"`: keep 1-2 establishing stills + a descriptor ("Café Aurora interior: warm
oak, brass, big front window"). Reuse them so every scene set there matches.

## Rules of thumb

- Prefer **reusing** an entity's existing stills over regenerating the character each time.
- Keep `refImages` tight (2-3 images) and consistent; contradictory refs confuse the model.
- Store the entity id in each generated clip's `params.entity`, so later edits know which identity to keep.
- For a wardrobe/lighting change, make a **variant entity** (`char_ana_evening`) rather than editing the base.
