# Consistent characters

> The complete method to keep the same person, pet, product or place in every image and video, with assets, approved pictures, mentions and identity lock.

Source: https://nodaro.ai/docs/guides/consistent-characters

A **consistent character** is a person, pet, product or place that looks the same in every image and video of a project. In Nodaro, you define the subject once as an asset, approve its pictures, and connect the asset to every node that shows it. This guide covers the whole method, from the first photo to scenes with several characters and to video.

## The method at a glance

Consistency is built in layers. Most projects need the first four. Add the others when a face still drifts.

| Layer | What it does | Where you set it |
| --- | --- | --- |
| **An asset** | Holds the subject's identity: approved pictures and a canonical description. | The Character, Animal/Creature, Object/Props and Location asset nodes |
| **Approved pictures** | Give every generation the same starting point: a portrait and its angles. | The asset's studio |
| **Connections and mentions** | Send the asset to each image and video node, and place it in the prompt. | The **Assets** input and `@` mentions |
| **Roles** | Say what to take from each picture: the face, the clothes, the background. | The mention pill and the node's **Role** menu |
| **Identity lock** | Ask the model to keep the face exactly. | The node, the studio or a `~lock` mention |
| **Boards and grids** | Put every angle of the subject into one reference image. | Generate Image presets, and the studio's Sheet and Board pages |
| **The right model** | Use models that accept reference images. | Generate Image and Generate Video |
| **A trained model** | Gives the closest likeness in Generate Image, on Nodaro Cloud. | The studio's LoRA page |

## Step 1: Define the subject once

Choose the asset that fits the subject. Each one has its own studio and its own guide.

| Subject | Asset | Guide |
| --- | --- | --- |
| A person | [Character Asset](https://nodaro.ai/docs/nodes/assets/character) | [Character Studio](https://nodaro.ai/docs/guides/character-studio) |
| An animal, a pet or a fantasy creature | [Animal/Creature Asset](https://nodaro.ai/docs/nodes/assets/creature) | [Animals and creatures](https://nodaro.ai/docs/guides/creatures) |
| A product, a prop, a vehicle or furniture | [Object/Props Asset](https://nodaro.ai/docs/nodes/assets/object) | [Objects and props](https://nodaro.ai/docs/guides/objects) |
| A place | [Location Asset](https://nodaro.ai/docs/nodes/assets/location) | [Locations](https://nodaro.ai/docs/guides/locations) |
| Only a face, for lip-sync or face swap | [Create Face](https://nodaro.ai/docs/nodes/assets/create-face) | — |

For a person, build the character in this order:

### Start from good photos

On the **References** page of Character Studio, upload real photos of the person. One sharp, evenly lit, front-facing photo matters more than any setting. A soft, filtered or crowded photo is the most common reason a face drifts.

### Approve a portrait

On **Profile**, generate 2 or 4 portrait candidates and approve the best one. Approving also writes the canonical description, which Nodaro adds to prompts that use the character.

### Build the identity anchor set

On **Appearance**, generate the five head angles: front, 3/4 left, left profile, right profile and 3/4 right. Every picture the studio makes afterwards uses them as references, so expressions and poses keep the same face.

### Add the variants your story needs

Generate the expressions, poses and body angles the scenes need. Name them clearly, because you mention them by name, as in `@maya:1:smile`.

## Step 2: Connect the character to every shot

Connect the Character Asset node's **Character** output to the **Assets** input of every [Generate Image](https://nodaro.ai/docs/nodes/image/generate-image) and [Generate Video](https://nodaro.ai/docs/nodes/video/generate-video) node that shows the character. Nodaro then sends the character's portrait, any variants you mention and the character's description with every run, on every model that accepts references.

Workflow: One Character Asset and one Location Asset feed every scene, so each image starts from the same approved pictures.

- Character Asset → Generate Image (assets)
- Location Asset → Generate Image (assets)
- Character Asset → Generate Image (assets)
- Location Asset → Generate Image (assets)

### Mention the character in the prompt

Type `@` in the prompt and choose the character, and a mention such as `@maya:1` appears as a pill. A mention places the character exactly where you wrote it in the sentence. It also chooses which picture to send and what to take from it.

| Mention | What the node sends |
| --- | --- |
| `@maya:1` | The portrait, described as "the person from reference image A". |
| `@maya:1:smile` | The *smile* expression instead of the portrait. |
| `@maya:1:face` | The portrait, used only for the face. The clothes and hair come from your prompt. |
| `@maya:1:walking:clothes` | The *walking* pose, used only for the clothes. |
| `@maya:1~lock` | Forces the identity lock on for this mention. |
| `@maya:1~nolock` | Forces the identity lock off for this mention. |

Click the thumbnail on a mention pill to swap the picture, and click its label to choose the role. The mention name comes from the character's name: "Maya Chen" becomes `@maya-chen:1`.

You can mention an uploaded picture the same way. Give an [Upload Image](https://nodaro.ai/docs/nodes/image/upload-image) node a label, such as "Jacket", and write `@jacket:1:clothes`.

```
@maya:1:face wearing @jacket:1:clothes, standing in @night-market:1:background at dusk
```

### Check what the model receives

The settings panel of an image or video node has an **Injected references** list. It shows every picture the node will send, with the character or variant each one comes from.

- **Order.** Pictures from the **References** input come first, then assets, in the order you connected them. That order gives the letters A, B, C in the prompt. Drag the tiles to reorder them: most models treat the first reference as the most important.
- **Remove.** Click the cross on a tile to remove it. On a mention, this removes the mention from the prompt. On a character's portrait, it hides the portrait for this node only; mentioned variants still go.

A character you connect but do not mention still sends its portrait. A character's **Image** output sends only the picture, as a plain reference, without the description or the role.

## Step 3: Say what to take from each picture

Every reference has a **role** that tells the model what to take from it. A character starts as **person**, the whole subject. The other character roles are **face**, **clothes**, **hair**, **pose**, **expression** and **style**, or any word of your own.

- **The node sets the default.** The **Role** menu on the Character Asset node applies to every reference from that character.
- **A mention overrides it.** A role on one mention wins over the node's default.
- **ref-only sends the picture with no phrase.** The model sees the picture but is not told what to take from it.

Roles let you combine several references in one prompt. For example, take the face from one picture, the clothes from a second and the background from a third. Read [Reference roles](https://nodaro.ai/docs/guides/reference-roles) for every role of every asset type.

## Lock the identity

The **identity lock** adds a short line to the prompt that asks the model to keep the face. Set it on the node's **Identity lock** row, in the settings panel, or on the studio's **Profile** page. The three places change the same setting.

| Level | What it adds |
| --- | --- |
| **Off** (default) | No identity line. The role alone guides the model. |
| **Soft** | A mild line: preserve the overall likeness. |
| **Strict** | A strong line: match the face exactly. |

Each lock line names its reference image, so scenes with several characters stay clear. To change the lock for one mention only, open the pill's menu and turn on **Identity lock**, or type `~lock` or `~nolock` after the mention.

Start with **Off** and a clear role. Turn on **Soft** or **Strict** when the face drifts. For locations, the lock line asks the model to match the architecture, layout and lighting instead.

The settings panel of the Character Asset node also has **Inject identity description in downstream prompts**. Turn it on to add the canonical description to the prompts of connected image and video nodes.

## Step 4: Anchor with a board or a grid

A single image that shows the subject from every side is a strong anchor. Nodaro makes two kinds.

- **A consistency grid** is a clean grid of standard angles with no text, made for models. Make one from a photo with the **Character Reference Grid** preset of Generate Image.
- **A reference board** is an editorial sheet with labels and a palette, made for people.

In Character Studio, the **Sheet** page composes a turnaround such as **Studio · Main**. The **Board** page composes a dense identity board from 2 to 12 of the character's pictures, and the `@` menu lists boards first.

Connect a grid or a board to the **References** input of each image node, or to the **Image Refs** input of Generate Video. Read [Reference boards](https://nodaro.ai/docs/guides/reference-boards) for every preset and the model that suits it.

## Several characters in one scene

1. Connect every Character Asset node to the **Assets** input.
2. Mention each character in the prompt, for example `@maya:1 hands a letter to @leo:2`.
3. Give each character a different name, so each mention is clear.

```
@maya:1 hands a letter to @leo:2 across the counter, both lit by a single warm lamp
```

When a character and another asset share a name, the character wins. The order is: characters, then locations, named images, creatures and objects.

For a story with two to four characters, build one **Cast Mega Grid**. Each character gets a labeled strip in one image. Then refer to the characters by the names on the grid instead of describing them again. The less you describe a face, the less it drifts.

## Choose a model that accepts references

A character's pictures only help on a model that accepts reference images. These image models do:

| Model | Maker | Modes | Credits | Details |
| --- | --- | --- | --- | --- |
| [Nano Banana Pro](https://nodaro.ai/docs/models/image/nano-banana-pro) | Google | Text to image, Image to image | from 45 | Top-tier Nano Banana — best for text rendering, diagrams, and complex compositions. |
| [Nano Banana 2](https://nodaro.ai/docs/models/image/nano-banana-2) | Google | Text to image, Image to image | from 20 | Newer Nano Banana with native resolution control (1K/2K/4K) and Google Search context. |
| [GPT Image 2.5 Flare](https://nodaro.ai/docs/models/image/gpt-image-2-5-flare) | OpenAI | Text to image | from 15 | Fast everyday GPT Image 2.5 - higher quality than GPT Image 2 at about half the latency. The default of the pair: social and creator content, campaign variants, thumbnails, rapid iteration, high-volume work. |
| [GPT Image 2.5 Sunburst](https://nodaro.ai/docs/models/image/gpt-image-2-5-sunburst) | OpenAI | Text to image | from 15 | Precision GPT Image 2.5 - trades generation time for tighter control and detail fidelity. Pick it for brand-sensitive and production work: packaging, diagrams, ecommerce retouching, polished campaign creative. |
| [GPT Image 2](https://nodaro.ai/docs/models/image/gpt-image-2) | OpenAI | Text to image | from 15 | Next-gen GPT Image — broader aspect ratios, resolution-based pricing (1K/2K/4K). |
| [Seedream 5 Pro](https://nodaro.ai/docs/models/image/seedream-5-pro) | Bytedance | Text to image | from 18 | Flagship Seedream 5 Pro — strongest instruction following and visual reasoning. Basic = 1K, high = 2K. |
| [Flux Kontext Pro](https://nodaro.ai/docs/models/image/flux-kontext-pro) | Black Forest Labs | Text to image, Image editing | 13 | Context-aware editing and style transfer. Strong at preserving subject identity through edits. |

- **For the same face, use the Nano Banana family.** In our tests, [Nano Banana Pro](https://nodaro.ai/docs/models/image/nano-banana-pro) and [Nano Banana 2](https://nodaro.ai/docs/models/image/nano-banana-2) reproduced the same person from a photo.
- **GPT Image 2 makes a look-alike.** [GPT Image 2](https://nodaro.ai/docs/models/image/gpt-image-2) follows complex layouts well, but its faces were similar rather than identical.
- **Some models take no references.** [Imagen 4](https://nodaro.ai/docs/models/image/imagen-4), [Ideogram V3](https://nodaro.ai/docs/models/image/ideogram-v3) and [Z-Image](https://nodaro.ai/docs/models/image/z-image) ignore attached pictures. The settings panel warns you and suggests Nano Banana Pro.
- **Each model accepts a limited number of references.** When you attach more pictures than a model accepts, the settings panel warns you, and only the first ones are sent. Put the most important picture first.

For a comparison of every model, read [Choosing a model](https://nodaro.ai/docs/guides/choosing-models).

## Keep a character consistent in video

In video, the face has to hold across every frame of the clip. Use one of two methods, or both.

### Method 1: start from a still

Make the shot as a still with Generate Image, with the character connected. Then connect the still to the **Start Frame** input of Generate Video. The first frame carries the identity, and the model animates from it.

Workflow: The character shapes a still, and the still becomes the first frame of the video.

- Character Asset → Generate Image (assets)
- Generate Image → Generate Video (start frame)

This method works with every image-to-video model, including [VEO 3.1 Quality](https://nodaro.ai/docs/models/video/veo-3-1-quality) and the Kling family. It is also the way to bring a trained character into video.

### Method 2: give the video model references

Some video models accept reference images and use them as identity references. Connect the Character Asset node to the **Assets** input of Generate Video, and a grid or board to **Image Refs**. The references work with or without a start frame.

Workflow: A reference-capable video model receives the character and a cast grid as references, with the prompt from a Text node.

- Character Asset → Generate Video (assets)
- Generate Image → Generate Video (image refs)
- Text → Generate Video (prompt)

| Model | References it accepts | Good to know |
| --- | --- | --- |
| [Seedance 2](https://nodaro.ai/docs/models/video/seedance-2), [2 Fast](https://nodaro.ai/docs/models/video/seedance-2-fast) and [2 Mini](https://nodaro.ai/docs/models/video/seedance-2-mini) | 9 images, 3 videos and 3 audio clips | With any reference connected, start and end frames join the references. |
| [Seedance 2.5](https://nodaro.ai/docs/models/video/seedance-2-5) | 30 images, 10 videos and 10 audio clips | Up to 30 seconds in one clip. |
| [MiniMax Hailuo 3](https://nodaro.ai/docs/models/video/minimax-h3) | 9 images, 3 videos and 3 audio clips | Frames join the references when any reference is connected. |
| [Wan 3.0](https://nodaro.ai/docs/models/video/wan-3-0) and [Wan 3.0 Prime](https://nodaro.ai/docs/models/video/wan-3-0-prime) | 10 images, 5 videos and 5 audio clips | Frames join the references when any reference is connected. |
| [Gemini Omni](https://nodaro.ai/docs/models/video/gemini-omni) and [Gemini Omni Flash](https://nodaro.ai/docs/models/video/gemini-omni-flash) | 7 images | A start frame takes the first place. References past the limit are dropped, not refused. |
| [VEO 3.1 Fast](https://nodaro.ai/docs/models/video/veo-3-1-fast) and [VEO 3.1 Lite](https://nodaro.ai/docs/models/video/veo-3-1-lite) | 3 inputs in total, and a start frame takes one of them | With references, the clip is 8 seconds and the end frame is dropped. |
| [Kling 3 Omni](https://nodaro.ai/docs/models/video/kling-3-omni) | Up to 7 images | Also accepts an end frame. |
| [HappyHorse 1.1 Ref2V](https://nodaro.ai/docs/models/video/happyhorse-1-1-ref2v) | 1 to 9 images | Works from references only. |

VEO 3.1 Quality has no reference mode. Use VEO 3.1 Fast or Lite for references, or give Quality a start frame.

### Point the video prompt at a reference

On a reference-capable model, bind a phrase to one reference with a token. The `@` menu offers these tokens, or you can type them.

| Token | Becomes |
| --- | --- |
| `{image:1:person}` | "the person from @image_1" |
| `{image:2:jacket}` | "the jacket from @image_2" |
| `{video:1:clip}` | "the clip from @video_1" |

Pictures from **Image Refs** are numbered first, then the assets. A start or end frame is never numbered: Nodaro adds it at the end and names it as the opening or closing frame. Characters and locations also keep their `@maya:1` mentions in video prompts.

### More video tips

- **Use the Scene Recipes presets.** In Generate Video, the **Scene Recipes** presets are built to read reference boards and cast grids. See [Presets](https://nodaro.ai/docs/concepts/presets).
- **Let Auto decide how a frame travels.** The Seedance 2 family keeps its look better when the start frame travels as a reference image. **Send frames as** set to **Auto** chooses this for you.
- **Animate full-body pictures.** A character's **Motions** in the studio are animated from a front body angle, which moves better than a head-and-shoulders portrait.

## Trained characters

On Nodaro Cloud, you can train a custom model on a character's pictures. When a Generate Image node uses that one character, it runs the trained model for 20 credits per image. The trained model gives the closest likeness, but only in Generate Image and only with a single character. See [Character training](https://nodaro.ai/docs/guides/character-training).

## When the face still drifts

| What you see | What to do |
| --- | --- |
| The face changes from image to image | Check that the model accepts references. Approve a portrait and build the identity anchor set. |
| A look-alike instead of the same person | Switch to Nano Banana Pro or Nano Banana 2. Set the identity lock to **Soft** or **Strict**. |
| The reference's outfit appears when you want a new one | Use the **face** role, for example `@maya:1:face`, and describe the new outfit in the prompt. |
| Two characters blend or swap | Mention each one by name, give them distinct names, or build a Cast Mega Grid. |
| The references seem ignored | Read the warning next to the model. The model may take no references, or fewer than you attached. |
| The face drifts in video | Start from a still, or switch to a model from the video references table. |
| A board or grid has a drifted face | Generate it again. A slightly wrong board makes every later image slightly wrong. |

## Tips

- **Fix the photo first.** No setting makes up for a soft, filtered or crowded photo.
- **Describe less, reference more.** Let the pictures carry the face, and let the prompt carry the action.
- **Name everything.** Characters, variants and uploaded pictures are easier to mention with short, clear names.
- **Keep one style per project.** A realistic character next to an anime one breaks the look of a story.
- **Regenerate instead of settling.** A drifted picture carried forward drifts every picture made from it.

## From code and agents

Code can send the same references without the canvas. A `POST /v1/generate-image` call accepts reference image URLs, such as a character's approved pictures read from the API. It also accepts structured references that carry a role and an identity lock for each picture. See [Characters](https://nodaro.ai/docs/developers/api/characters) and the [MCP tools](https://nodaro.ai/docs/mcp/tools).

## Frequently asked questions

### How do I keep the same character in every image?

Create a Character Asset and approve its portrait in Character Studio. Connect the node to the Assets input of every image node, or mention it with @ in the prompt. Nodaro sends the character's portrait, the variants you mention and its description with each run, on every model that accepts references.

### Which model keeps a face most consistent?

In our tests the Nano Banana family kept the same face most reliably, so use Nano Banana Pro or Nano Banana 2 for a recurring character. Imagen 4, Ideogram V3 and Z-Image do not accept reference images, so they cannot use the character's pictures.

### How do I keep a character consistent in a video?

Make the shot as a still with Generate Image, then use it as the start frame of Generate Video. For shots without a start frame, choose a video model that accepts references, such as Seedance 2, and connect the character to the Assets input.

### What does identity lock do?

It adds a line to the prompt that asks the model to keep the face. Off is the default. Soft asks to preserve the overall likeness, and Strict asks for an exact match. Add ~lock or ~nolock to one mention to force it on or off there.

### Can I put two characters in the same image?

Yes. Connect both Character Asset nodes and mention each one by name, for example @maya:1 and @leo:2. For a story with two to four people, a Cast Mega Grid keeps each face in its own labeled strip.
