---
title: Two characters, one conversation
summary: Two rigged SVG characters talk in a set. Each line is spoken in the character's own GroundSlate voice, the mouths are timed to the recordings, the listener keeps acting, and the camera cuts between them. The film is built from one cut document, so a rewrite is a re-render, not a rebuild.
lede: Two SVG puppets, HTML shots, mouths timed off the audio
outcome: design
tools: get_context, list_avatars, get_avatar, list_kits, get_kit, write_project_file, read_project_file, synthesize_speech, lipsync, audio_energy, generate_sound_effect, preview_html, preview_frame, cut_doctor, render_cut, sample_frames, job_wait, commit_to_library, add_media_to_project, request_review, review_status
series: animation
series_order: 8
order: 7
image: /resources/series/animation/two-characters.webp
image_alt: Gary and Roz in the lobby, a clipboard passing between them
---

A two hander is the first thing a cartoon has to manage, and it is where a puppet that looked fine on its turnaround falls apart. The mouths drift off the words, both characters stare at the camera, and the shot sits still for twelve seconds while somebody explains the plot.

This ask avoids all three. Each line is spoken in the character's own voice on your Mac, and the mouth shapes are timed to those recordings. The character who is not talking keeps acting, and the camera cuts on the beats. Each shot is an HTML page of the SVG puppets, captured and assembled from a single cut document, so changing a line means re-recording it and re-rendering, not rebuilding the scene.

You need two characters already set up as puppets on avatars, from [A cartoon character you can actually animate](/resources/groundslate/recipes/a-cartoon-character-you-can-animate), [The front that can be rigged](/resources/groundslate/skills/the-front-that-can-be-rigged) and [The cast that reads at a glance](/resources/groundslate/skills/the-cast-that-reads-at-a-glance), and a set from [The sets the camera moves through](/resources/groundslate/skills/the-sets-the-camera-moves-through).

> Put <<AVATAR ID OR NAME>> and <<AVATAR ID OR NAME>> in a scene together in GroundSlate profile <<PROFILE ID OR NAME>>, in the set <<SET NAME>>, and shoot the conversation below. Animate every shot as an HTML page of those SVG puppets, then capture the pages into the film. Speak every line in each character's own voice, time the mouths off those recordings, and keep the one who is not talking acting: blinks, a look across, a reaction on the line that lands. Cut between a two shot and a single on whoever is speaking, and never let five seconds pass without a move or a cut. Add the room's own sound under it. 16:9, 24 fps, rendered locally. Show me the shot plan before you render, then the film, and tell me what did not resolve. The conversation: <<PASTE THE LINES, ONE PER LINE, NAME FIRST>>

Everything in <<double brackets>> is yours. Fill it in before you paste.

- Record before you animate. The take sets the timing of everything on top of it, so a scene animated first gets built twice.
- `lipsync` reads the recording and returns mouth shapes on the frame grid, holding each one long enough to be seen. Hand timing looks hand timed.
- Don't forget the listener. A character who freezes while the other talks looks like a bug; two blinks and a look are enough to fix it.
- Cue positions in the cut document are frames counted from the start of the film. A line placed at its offset inside the shot lands in the wrong place once the shot moves, and the render will not warn you.
- Listen to the whole film before you call it done, not the first ten seconds. `audio_energy` across the full runtime catches a mix that is right at the top and silent from the second shot on.
- To rewrite a line, re-record it, re-run its lip sync and rebuild the cut. Shots that did not change are cached and not rendered again.
- Plan the camera first. Open wide, cut to faces, cut at least every ten seconds, and vary within a shot with snap moves. When a line is about an action, show the action. Tight means the face fills the frame. Ten setups in half a minute is a good rhythm.
- Set effect levels from a measured reading so they sit under the voices, keep a sting below the dialogue, and record a yell in the character's own voice.
- A 16:9 version of a 9:16 short is a new film. Recompose every setup; never scale the zoom by the frame ratio.
