# Make a talking video from a script and a portrait

> Turn a written script into speech with Nodespell Voice Generator, then make a portrait or clip speak it with the Speak Creative Tool.

Source: https://docs.nodespell.com/recipes/talking-video/ · Last updated: 2026-11-10

The Nodespell talking-video recipe turns a script and a portrait into a video of that person speaking. Voice Generator reads the script aloud as an audio take, and the Speak Creative Tool animates a still image, or lip-syncs an existing clip, to that audio. Because the voice is its own node, you can change the delivery without regenerating the face, and the other way round.

**What you need**

- A script, written the way it should be spoken.
- A portrait: a clear, front-facing image of the face, uploaded to [Asset Manager](https://docs.nodespell.com/assets/asset-manager/) or generated in Nodespell. For lip-sync, an existing video clip of the person instead.
- Credits for two runs: Voice Generator and Speak.

**Graph at a glance:** Prompt (script) → Voice Generator → Speak ← Portrait Asset

> **Where credits are spent:** Voice Generator and Speak each run a model and use credits. On paid plans, Create shows **Estimated per run** before you select **Generate**, and the run button in Graph shows the estimate for the selection. Rerunning Speak reuses the existing voice take, so the voice is not charged again.

## Stage 1: Write the script in a Prompt node

1. Open the Project in **Graph** mode.
2. Press `Tab` and add a **Prompt** node.
3. Double-click the Prompt node and type the script exactly as it should be spoken.

Keeping the script in its own node lets you reuse it and edit it in one place. See [Prompts and saved text](https://docs.nodespell.com/graph/prompts-and-saved-text/).

## Stage 2: Generate the voice

1. Press `Tab` and add **Voice Generator**.
2. Connect the Prompt output to the Voice Generator text input (shown as **Text** on ElevenLabs TTS V3).
3. Select the Voice Generator node. In **Parameters**, choose a voice. With ElevenLabs TTS V3, for example, choose a **Voice** and adjust **Stability**, **Style**, and **Speed**. Lower stability sounds more varied; higher stability is steadier.
4. Press `Cmd/Ctrl+Shift+R` to run it, or open **Run options** and choose a batch such as **Generate 3 takes** to hear several reads.
5. Play each take, then select **Use Take** for the best read and choose **Keep this take** from **More take actions**.

You can also do this in **Create**: choose **Voice Generator**, type the script into the model's text field, and select **Generate**. See [Voice Generator](https://docs.nodespell.com/creative-tools/voice-generator/).

## Stage 3: Make the portrait speak

1. Press `Tab` and add an **Asset** node. Right-click it, choose **Load Asset**, and pick the portrait.
2. Press `Tab` and add **Speak**.
3. Connect the portrait to the Speak image input (shown as **Source image** in the Speak controls) and the Voice Generator output to the Speak audio input.
4. Select the Speak node. Set **Resolution**, and adjust the video prompt if the model offers one (P-Video Avatar, for example, starts with "The person is talking.").
5. Run the Speak node. Voice Generator already has a take, so only Speak generates.

See [Speak](https://docs.nodespell.com/creative-tools/speak/).

## Which Speak model fits your source?

Speak groups several models that need different inputs. The model picker shows only models that fit the tool.

| Starting point                                              | Example model                  | Inputs it needs                                                                   |
| ----------------------------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------- |
| A still portrait and your own audio                         | P-Video Avatar, Omni Human     | An image and an audio track                                                       |
| A still portrait and a typed script, no separate voice step | P-Video Avatar                 | An image and a **Voice script**, with a built-in **Voice** and **Voice Language** |
| An existing video of the person                             | Kling Lip Sync, Sync Lipsync 2 | A video and an audio track                                                        |

With P-Video Avatar you can skip Voice Generator entirely: leave **Audio** empty and type the script into **Voice script**. The node then needs either audio or a voice script before it can run.

## Check the result

- Play the Speak take with sound and watch the lips on hard consonants such as "p", "b", and "m".
- Check the first and last second: the face should match the portrait and the clip should not cut off a word.
- If the timing is wrong, change the voice take first; it is cheaper than regenerating video and the face can stay the same.

## Variations

- **Lip-sync existing footage.** Switch the Speak node to a lip-sync model such as Sync Lipsync 2 and connect a video instead of an image. Changing the model of a node that has run creates a branch, so the first version stays.
- **A consistent presenter.** Build the portrait with the [consistent character recipe](https://docs.nodespell.com/recipes/consistent-character/) so the same face can speak in several clips.
- **Longer scripts.** Split the script into several Voice Generator nodes. ElevenLabs TTS V3 accepts previous and next text to keep the delivery consistent across pieces. Then join the Speak clips on the Timeline; see [Add a soundtrack to a clip](https://docs.nodespell.com/recipes/soundtrack-for-a-clip/) for the Timeline steps.
- **Add music under the speech.** Place the talking clip and a Music Generator take on the Timeline and lower the music **Gain**.

## Frequently asked questions

### Do I need Voice Generator to use Speak?

No. Some Speak models, such as P-Video Avatar, accept a typed **Voice script** and a built-in voice. Use Voice Generator when you want more control over the voice or want to reuse the same audio.

### Why is the Speak node not ready to run?

Each Speak model needs specific inputs. P-Video Avatar needs a source image plus either audio or a voice script; lip-sync models need both a video and an audio track.

### Can I change the voice without regenerating the face?

The face is regenerated whenever Speak runs, because the mouth must follow the new audio. You can change the voice take freely, but you need a new Speak run to sync to it.

### Which languages does the voice support?

It depends on the model. Check the voice and language options shown in **Parameters** for the model you picked, or its description in the model picker.

## Related

- [Voice Generator](https://docs.nodespell.com/creative-tools/voice-generator/) — voices and delivery controls
- [Speak](https://docs.nodespell.com/creative-tools/speak/) — talking-avatar and lip-sync models
- [Prompts and saved text](https://docs.nodespell.com/graph/prompts-and-saved-text/) — keep the script in a Prompt node
- [Takes](https://docs.nodespell.com/graph/takes/) — choose the best read and the best clip
- [Timeline](https://docs.nodespell.com/edit/timeline/) — join several talking clips
