---
title: A GroundSlate character you can animate
summary: Two cartoon characters, one set and a 24 second short built on one Mac through GroundSlate's MCP, with the creator marking up every render as it landed. The step by step: the front brief written part by part from the style kit, the front drawn and approved, the puppet cut from it, a voice on the avatar, a set that gets the same brief, the shots as HTML pages with cuts and snap moves, a designed title card, a mix leveled from readings, the film, and a 16:9 version reframed shot by shot. Every prompt is here to copy, with the picture each step produced.
lede: Deb, Sprocket and the Barlow front yard, from a brief to two finished films
date: 2026-09-02
updated: 2026-09-04
authors: Team COEY
image: /blog/animated-character/over-code/sprocket_hero.png
image_alt: Sprocket, a boxy orange robot lawnmower with cyan lamp eyes and a grin, blade and trimmer raised against a huge moon at dusk, his siren throwing a beam, clippings in the air
keywords: GroundSlate
canonical: /resources/blog/2026/09/02/how-to-create-an-animated-character-in-groundslate
software: groundslate
skills: the-animated-series, the-front-that-can-be-rigged, the-cast-that-reads-at-a-glance, the-sets-the-camera-moves-through
recipes: a-cartoon-character-you-can-animate, two-characters-one-conversation
guides: the-animated-series-in-five-steps, puppets-and-style-kits
tools: get_kit, import_kit, write_project_file, read_project_file, preview_html, request_review, review_status, review_reply, puppet_doctor, puppet_build, puppet_sheet, create_avatar, set_avatar_puppet, attach_voice, synthesize_speech, generate_sound_effect, register_font, check_fonts, render_html, cut_doctor, render_cut, sample_frames, audio_energy, job_wait
---

Ask an AI agent for a cartoon character and you usually get a diagram. A rectangle for a torso, two ellipses for eyes, a uniform line at the same weight everywhere, and a face that belongs to nobody. It passes every technical check. You would not put it on television.

This is the walkthrough for getting the other thing. Two characters, one set, four shots, two voices, a title card, a mix, and a 24 second short delivered twice, once vertical and once 16:9. Every step went through GroundSlate's MCP from an agent on one Mac, in one afternoon. The show is Earth, Unfortunately. Deb Kowalski is the HOA president, 58, the square. Sprocket is a repossessed robot lawnmower who thinks he is a dog. The short is called Over Code. The lawn is three eighths of an inch over it.

```figure
src: /blog/animated-character/over-code/sprocket_hero.png
alt: Sprocket close, grinning, cyan lamp eyes wide, his circular blade raised on one arm and his string trimmer on the other, a huge moon behind him, his siren throwing a beam across the dusk, clippings flying
caption: Sprocket. Everything is lawn if you believe.
credit: COEY
```

## The loop

One thing makes all of this work, and it is not a tool. Every picture goes to you in the app before the next step starts: the agent imports what it drew, opens a review on the picture GroundSlate renders, you mark it up, and the agent answers each note beside the mark, fixes them in one pass, and opens the review again. The agent draws, you direct, and every note becomes a rule the next character inherits. That is the whole method. The rest of this post is what the steps look like when you run them that way.

## Before anything: the show is drawn once

The first mistake is drawing a character first. Do that and the second character is drawn to a different idea of the same show, and by the fifth you have five styles and a redraw ahead of you.

So the first artifact is a style kit: one object that owns the palette with a role for every colour, the line rule, the shading, the proportions in heads, and the shared libraries of mouth, eye and brow shapes. One kit per show, and every drawing inherits it. [Puppets and style kits](/resources/groundslate/guides/puppets-and-style-kits) is the reference for what lives where. Earth, Unfortunately already had its kit, so this build started from it: a stroked line, a cel shadow on the lower right of every part, four and a third heads for an adult.

One rule from the kit that matters most: the kit's twelve swatches are the show's palette, not the cast's. Every character gets one saturated hue that is theirs, written into the brief. Deb's is mustard. Sprocket's is orange.

## Step 1: the front brief, part by part

The order matters more than anything else in this post: **write the front brief from the kit, draw one T-pose front SVG, and cut nothing into a puppet until that front is approved.**

A brief is not a name and a sentence. It has six sections: the visual idiom copied from the kit in the kit's own numbers, the delivery contract (the file, a named group for every part that will move, the T-pose), the character part by part the way a designer briefs a modeller, the three shapes of the silhouette, the palette row with the one hue that is theirs, and the checks the sheet has to answer. Deb's said, among fifty other things, that the cardigan hem is A-line into wider slacks and that the readers sit on a chain. Sprocket's said he is a box on two wheels with a face plate, a siren, a circular blade on one arm and a string trimmer on the other.

The ask, one character per run, with your own values in the double brackets:

```text
Build me a cartoon character in GroundSlate profile <<PROFILE ID OR NAME>>, for a show called <<SHOW NAME>>. The character is <<NAME, AGE, WHAT THEY DO, AND THE ONE SENTENCE THAT MAKES THEM FUNNY>>. Their silhouette is <<THREE SHAPES: ONE BIG, ONE MEDIUM, ONE SMALL>>, their one colour is <<A SATURATED HUE>>, and they talk like <<HOW THEY SPEAK>>. Write the front brief from the show's style kit first, part by part, and show it to me. Then draw one T-pose front SVG with a named group for every movable part, import it as a kit, and open a review on the store's render of the sheet: the face at three times size, the whole figure, the flat black silhouette at full size and at 64 pixels, and every joint turned 30 degrees. Answer each of my notes beside it and re-render until I approve the front. Do not cut a puppet or start the next character before then.
```

```figure
src: /blog/animated-character/over-code/deb_front_round4.png
alt: A front sheet for a stocky woman in a mustard cardigan: face at three times size, T-pose figure, flat black silhouette, and every joint turned 30 degrees
caption: Deb's approved front. The face at three times scene size, the figure, the flat black at full size and at 64 pixels, and every joint turned so a seam would show if there were one. There is none: the hidden end of every limb segment is unstroked, which is the rule every cut-out puppet keeps.
credit: COEY
```

```figure
src: /blog/animated-character/over-code/sprocket_front_round4.png
alt: A front sheet for a boxy orange robot lawnmower with a gunmetal face plate, cyan lamp eyes, a siren, a circular blade on one arm and a string trimmer on the other
caption: Sprocket's approved front. The blade is its own group at its own centre, so it can spin on its own joint instead of swinging on the arm. The thing coming out of his head is his tail.
credit: COEY
```

## Step 2: the puppet, cut from the front

A finished character is not a picture. It is a rigged puppet: a skeleton with an SVG drawing on every joint, per view, that an HTML page can pose and a recording can talk through. The puppet is cut from the approved front: the front's groups become parts, each on a joint with a pivot, each with a depth so the arms draw in front of the torso and the far leg behind the near one. The manifest names the skeleton, the parts and their order, the face (Deb's eyes and brows are her own, her mouths come from the kit's chart; Sprocket draws eight of his own mouths on the grille and the rest resolve through the kit's fallback table), and the overrides the puppet carries against the kit. Both puppets throw the kit's cel shadow harder than the kit does, because the kit is set for a full frame and these live on a phone.

`puppet_doctor` checks the rig, `puppet_build` writes the file the engine loads, and `puppet_sheet` renders the turnaround, the expressions, the mouths and the hands. Look at every sheet before anyone else does.

```html
<figure class="blog-figure">
  <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
    <img src="/blog/animated-character/over-code/rig_deb.gif" alt="Deb's rigged puppet on a grey sheet: her arm comes up and waves on its shoulder and elbow pivots, her head tilts, her brows and mouth run through their states, one leg lifts and bends at the knee" loading="lazy" style="width:100%;height:auto;border-radius:12px;" />
    <img src="/blog/animated-character/over-code/rig_sprocket.gif" alt="Sprocket's rigged puppet on a grey sheet: he bounces on his wheels, his tail wags, the blade arm comes up and the blade spins on its own pivot, the trimmer buzzes, his head tilts and his mouth runs through its shapes" loading="lazy" style="width:100%;height:auto;border-radius:12px;" />
  </div>
  <figcaption>The two puppets as rigs, rendered from the engine: every part on a joint with a pivot, the blade turning about its own centre, the faces running through their states. COEY</figcaption>
</figure>
```

## Step 3: the avatar and the voice

The body lives on the avatar with its voice, so a scene asks for the character once and gets both. `create_avatar` with the name, the identity, the bio and the voice direction in the bible's words; `set_avatar_puppet` to point it at the kit; `attach_voice` with a GroundSlate voice. Deb got Sana. Sprocket got Kit.

Then the lines, recorded before anything is animated, because the take decides the timing of everything laid on top of it. `synthesize_speech` returns one file per line with word timings, every take normalised to the same speech level, and the timings drive the mouths: the shot page hands the words to the puppet's `say` and the shapes land on the frames the take says they do. Ask for temperature 0.9 and three takes of anything shouted, and pick.

## Step 4: the set gets the brief a character gets

A background drawn from a one-line location note comes back as boxes: a rectangle for the garage, an ellipse for every bush, a box with two circles for the van. So the set gets a brief in the same six sections as a character: the visual idiom from the kit for this place at dusk, the delivery contract (the registered name, the world size, the ground line, every mark), the place part by part with one paragraph per object the camera will see, and the checks. Then it is drawn to the brief, organic and drawn rather than assembled from shapes: every edge a curve with a little sag, siding as five wavy lines, shingles as a few long strokes, mop heads and tufts instead of ellipses, and every object drawn from the camera's view of it, so a van parked nose out shows two tread faces and a contact shadow, not hubcaps.

```text
Build the set <<LOCATION NAME>> for <<SHOW NAME>> in GroundSlate profile <<PROFILE ID OR NAME>>, drawn to the style kit <<KIT NAME>>. Before you draw a plane, write it a brief in the same shape as a character brief: the idiom from the kit, the delivery contract, the place part by part with one paragraph per object the camera will see, and the checks. Then draw it organic and drawn, not assembled from shapes: no rectangle, circle or ellipse anywhere the eye can see it, and every object drawn from the camera's view of it. Give me planes at depths the camera can pan through, a ground line, named marks for <<THE SHOTS THE SCENE NEEDS>>, and a near plane. Put the cast on the marks at scene scale in the very first set check, run the camera through the shot list, and open a review on it. Fix every note, answer each beside its mark, and do not render a shot against this set until I approve it.
```

```figure
src: /blog/animated-character/over-code/barlow_rounds_1_3_5_8.png
alt: Four wide frames of the same front yard: the first pass drawn from boxes and ovals; a pass drawn from a brief with a ranch, a porch and a van; a pass with the two puppets standing in it; the approved yard with the van on the drive and the cast the right size against the house
caption: The Barlow front yard, from the first pass to the approved one. Top left is the one-line note. Top right is the brief. Bottom left is the first check with the cast standing in it, which is what shows you the scale. Bottom right is the yard the shots were rendered against.
credit: COEY
```

The cast stands in the set check from the first round, because scale is only visible with a figure in the frame, and the fix for a scale problem is always to the set and never to the cast: scale the whole drawing about its ground line, thin the strokes to match, and a mower character stands knee high against a person.

```figure
src: /blog/animated-character/over-code/barlow_dusk_r8_porch.png
alt: The porch side of the yard at dusk with the two puppets on the lawn in front of a bed of hydrangeas and boxwoods: the woman about half the wall's height, the robot knee high, a lit window, a red door on a porch with white posts
caption: The approved yard from the porch camera of the set check. She is half the wall. He is knee high. The bed sits behind the ground line so his wheels are on the grass.
credit: COEY
```

## Step 5: the script, and shots that are pages

Write the scene before you touch the software. Ours is four shots and four lines, played straight by both of them.

> DEB: Sprocket. This lawn is three eighths of an inch over code.
> SPROCKET: On it, Deb! Good boy? Good boy.
> DEB: Not the hydrangeas. Sprocket. Not the hydrangeas.
> SPROCKET: Everything is lawn if you believe, Deb!

Every shot is one HTML page that loads the engine, the set and the two rigs, spawns the puppets on the set's marks, keys the poses, the emotes, the blinks and the breathing on a timeline, hands each line's word timings to the speaker, and moves the camera. The page exposes a seek and a duration, so GroundSlate captures it frame by frame in any order. Preview it at the timestamps that matter, then `render_html` the page to a clip.

```text
Put <<AVATAR ID OR NAME>> and <<AVATAR ID OR NAME>> in <<SET NAME>> in GroundSlate profile <<PROFILE ID OR NAME>> and shoot the scene below as a <<9:16 or 16:9>> short. Record every line in each character's own voice first and time the mouths off those takes. Animate every shot as an HTML page of the two puppets on the set: open wide, cut at least every ten seconds, and inside every shot give me a two shot and a face, with the one who is not talking still acting. When a line is about an action, the action is in the frame. Cut the film from one document, level every cue from a reading with the bed ducked under the voices, and open a review on the film. Answer every note beside its mark and re-render until I approve it.
```

The camera rules this short keeps, and they are the ones to ask for first: open wider than you think, then cut to faces. Cut, and vary the framing inside every shot; in a page a cut is a camera move with no duration and a snap is a fifth of a second on an exponential ease, which reads as a whip. Between shots, hard cuts. When the line is about an action, the action is in the frame: the blade is up in the hydrangeas before Deb says "not the hydrangeas". Tight means tight: for his last line his screen fills the frame with the blade at the corner. And debris is a plane: sixteen leaves burst off the blade on their own layer over the actors, each a keyed shape arcing up and tumbling down, while the camera punches onto the blade.

```figure
src: /blog/animated-character/over-code/leaves_shot3.png
alt: The robot close, blade arm raised into a hedge and spinning, green leaves flying off it across the frame
caption: Shot three. The blade is its own joint turning about its own centre, and the leaves are keyed shapes on a plane in front of the actors, bursting in waves for as long as the blade is in the bush.
credit: COEY
```

```figure
src: /blog/animated-character/over-code/deb_face_zoom.png
alt: The woman's face filling the frame, furious, glasses on a chain, pearls, her fists coming up
caption: The last zoom, on "Damn you, Sprocket!" in her own voice, fists up on the line, the trombone landing under its tail.
credit: COEY
```

## Step 6: the title card

A title is a designed card, not a line of type. Ours is a hand-drawn ink banner with a yellow keyline that springs in tilted, the show name small in Chalkboard SE above, and OVER and CODE stacked in Phosphate, yellow with an ink stroke and a hard magenta shadow pulled from Deb's cardigan and the front door, each letter popping in with a bounce. It sits on a screen-locked plane under the actors, so when the camera snaps in to the two shot her head passes in front of it. The two faces are registered in the profile's font library with `register_font` before the page names them, so the render embeds the real face, and `check_fonts` confirms every face resolves before a render is spent.

```figure
src: /blog/animated-character/over-code/title_card.png
alt: A title card over the front yard: a tilted dark banner with a yellow keyline, EARTH UNFORTUNATELY small at the top, OVER CODE stacked large in yellow with a black stroke and a magenta drop shadow, the two characters standing below it
caption: The card at full pop, two seconds in. It drops out of frame before the cut to her face.
credit: COEY
```

## Step 7: sound, from readings

Every cue in the mix has a level that was read, not guessed. The dialogue takes are normalised when they are made. The bed is measured and placed four decibels under, then ducked six to one under the voice bus. The effects are generated on the Mac with `generate_sound_effect`, whose prompt wants a source, a material, a motion and a perspective, and each one is measured before it is placed. The hedge trimmer is a small two-stroke engine that sits under her line and drops further under his. The sting sits below the dialogue and lands under the tail of her last word. The yell is a line, recorded in her voice.

The check that decides it is a reading across the whole film, not the first ten seconds. `audio_energy` at half-second intervals, and the numbers to read off it are the level under the lines, the level in the gaps with only the bed, and the loudest half second, which had better be a line and not an effect.

## Step 8: the cut

The film is one document: four scenes with their frame counts, six audio tracks with every cue placed by its film-absolute frame, the ducking, a limiter and a fade to black. `cut_doctor` checks it for free before a render, `render_cut` renders it, and the result carries a receipt: the frames predicted from the document and the frames measured off the file. Every shot renders on its own and the cut caches captures by content, so a note on one shot re-renders that shot and the cut, and nothing else.

```video
src: /blog/animated-character/over-code-vertical.mp4
poster: /blog/animated-character/over-code/title_card.png
alt: A 24 second vertical animated short: an HOA president confronts a robot lawnmower that thinks it is a dog over a lawn three eighths of an inch over code, and the robot trims her hydrangeas
caption: Over Code, vertical. 1080 by 1920, 24 frames a second. Every drawing, every voice, every sound and the render itself came off one Mac.
credit: COEY
```

## Step 9: the same scene, 16:9

A 16:9 version of a vertical short is not a zoom out. Scaling every zoom by the ratio of the frame heights shows the same world with the sides let in and looks like a phone video played on a television. The real version composes every setup again for the wide frame: the wide with the house across the frame and both of them centre low, a two shot that uses the width with both figures whole, faces that fill the height, the title card upper right and clear of her head. Same scene, same actions, same timings, same audio: the four pages with their camera blocks rewritten, rendered at 1920 by 1080, cut from the same document with the size changed.

```figure
src: /blog/animated-character/over-code/over_code_wide_frames.png
alt: Four 16:9 frames from the same short: the wide with the title card upper right and both characters on the lawn, the robot close with his trimmer arm up, the quick zoom onto his face with leaves crossing, the tight face for his last line
caption: The 16:9 version. Each frame is a setup composed for this shape, not the vertical one with the sides let in.
credit: COEY
```

```video
src: /blog/animated-character/over-code-wide.mp4
poster: /blog/animated-character/over-code/barlow_dusk_r8_porch.png
alt: The same 24 second animated short in 16:9, every shot reframed for the wide picture
caption: Over Code, 16:9. The same document, the same mix, four pages with their cameras composed again.
credit: COEY
```

## Where to start

If you want the whole pipeline in order, read [The animated series in five steps](/resources/groundslate/guides/the-animated-series-in-five-steps). If you would rather hand the whole thing to your agent and answer its questions, [The animated series](/resources/groundslate/skills/the-animated-series) is the shortcut. [The front that can be rigged](/resources/groundslate/skills/the-front-that-can-be-rigged) is the character step on its own, [The sets the camera moves through](/resources/groundslate/skills/the-sets-the-camera-moves-through) is the world step, and [Two characters, one conversation](/resources/groundslate/recipes/two-characters-one-conversation) is the scene.

If you only want to find out whether your idea has a character in it, do the smallest version of this: paste the character ask, answer the three shapes and the one colour properly, and look at the face at three times size on the store's render. That is one afternoon, and by the end of it you know whether you have somebody or a diagram.

Deb would like it on the record that the hydrangeas were not the lawn.
