---
name: groundslate-sets
description: Build the locations of a 2D animated show as SVG set kits in GroundSlate: planes at depths that parallax under the camera, a ground line, named marks and interaction points, a near plane, drawn to the style kit and checked with a scale figure on every mark, shown to the human as wide, pan and marks HTML sheets. The detailed world step of the animated series skill.
---

# The sets the camera moves through

A set is a place a camera can move through and a character can stand in, not a picture behind them. It has depth, so a pan separates what is far from what is near. It has a ground, so feet land on something. It has marks, so a scene says "Wendell at the counter" and the counter is where Wendell ends up. It has a near plane, so something passes in front of the actors when the camera moves and the frame stops being a diorama.

Everything you make lives in GroundSlate: each set as SVG planes in one HTML kit in a collection of kind `sets`, drawn to the show's style kit, its marks and depths recorded in the world notes. Nothing is traced or generated from an image. You look at references; you draw.

## Before you start

`get_context`, confirm the profile, pass `profile=` on every call. Confirm the built-in kits exist with `get_kit("draw kit")` and `get_kit("puppet engine")`, and read the engine contract's set section: a set file registers a name, a background colour, a list of planes each with an id, a depth and an SVG fragment, a `marks` map of named world points, and a `ground` line. Depth 1 is the actors' plane; smaller depths move less under a pan, larger depths move more, and a plane with a `z` above the actors' draws in front of them.

Find the show's style kit and look at it: `style_kit_doctor`, `style_kit_sheet` for `swatches`. A set is drawn to the same line rule and palette as the cast, or the cast looks pasted on. If there is no kit, stop and build it first with the kit tools, or hand that to the cast skill.

Read `notes/WORLD.md` and `notes/EPISODE_1.md` if they exist: which locations, what happens in each, which shots the episode wants there. A set is designed for its shots. A wide that is never framed is wasted, and a two-shot with no mark for it is a shot that will be staged by guesswork.

Make or find the sets collection: `create_kit_collection(name, kind="sets")`, or `set_collection_kind` on one that exists. Have one puppet on hand to stand on marks; if the cast is not drawn yet, the engine's worked-example puppet from `get_kit("puppet engine")` is the scale figure.

## Ask first

- Reference images? A real place, a frame of a show, a sketch of a layout. To look at, never to trace. Ask for one per location at least; a set drawn from a one-line note comes back as boxes.
- Which locations, and which one first? The one with the most shots.
- Time of day and weather: does a location need a second state (night, rain, the sign repainted)? Each state is a set of its own, sharing the marks.
- How wide? A location the camera pans across needs to be authored wider than the frame; one it only cuts around can be the frame's width.
- What do they want to see? Offer one review per set: the wide, the pan strip and the marks sheet together.

Write the answers into the world notes.

## One set at a time

### The layout before the drawing

Decide the shots first. For each shot the episode wants in this location, write the framing: wide, two-shot, cut-in, over the shoulder, a walk from here to there. Each framing names the marks it needs and the camera's world point and zoom. From that list comes the set's authored width, where the ground line sits, which marks exist, and what has to be at the edges so a pan has somewhere to go. Put the list in the notes before you draw.

### The brief, part by part, before the planes

A set gets the brief a character gets, or it comes back as boxes. A set built straight from a one-line location note is every object drawn as the primitive nearest to hand: a rectangle for the garage, a rectangle on a rectangle for the two doors, an ellipse for every bush, a box with two circles for the van. It does not look like a car, or a door, or a bush, and the creator will say so. Draw the background the way you draw a character: describe it first, part by part, then draw to the description.

So write `notes/sets/<set>.md` before you draw, in the same shape as a character brief:

1. **Visual idiom**, copied from the kit: line weights, the cel shadow, the palette for THIS place at THIS time of day, and the one saturated accent the frame is allowed (a porch light, a neon sign). Nothing in a set may use a cast member's hue at any size.
2. **Delivery contract**: the registered name, the world size, the ground line, every mark with its world point, the planes with their depths.
3. **The place, part by part.** One paragraph per object the camera will see: the house (roof pitch, siding, the garage as one door in one frame with its panels counted, the porch on its posts, the steps), each planting (a hydrangea is mop-head clusters over a leaf mass with a darker lower half; a boxwood is a clipped mound with a bumpy top edge and leaf notches), the vehicle (nose, windscreen, visor, bumper, wheels with hubs, a roof rack, the dent), the street furniture, the ground (mown stripes, a bare patch, tufts with pointed blades), the sky (bands that sag, clouds with pointed ends and flat bottoms). Say what makes each thing THIS thing and not the generic one: the sprung boards on the crate, the violation notice under the wiper.
4. **Checks**: flat black at 64 px with each principal object identifiable; no cast hue; the vehicle's wheels, nose and windscreen visible in the flat black; the garage as one door; every bush's top edge something other than an arc; the cast standing on their marks in front of it with nothing behind a head that fights the silhouette.

Then draw to the brief. **Organic and drawn, not assembled from shapes**: every edge a curve with a little sag or wobble in it, roof lines that are not level, siding suggested by five wavy lines rather than fifty straight ones, shingles as a few long strokes, tufts and blossom clusters and mop heads instead of ellipses, a shadow half on every mass. A `<rect>`, `<circle>` or `<ellipse>` is allowed only as an invisible base under a drawn shape. If a thing reads as the shape you started from, it is not finished.

### Drawn from where the camera stands

Draw every object from the camera's view of it, at the depth it sits, or it reads as a sticker on the set. A van parked nose out to the camera shows two tread faces under its bumper, tall and narrow, and a flat contact shadow on the concrete; it never shows hubcaps, which belong to the side view. The same rule reaches everything: draw a chimney before the roof so it rises out of it, draw a far house's walls before its roof so the eave sits over the wall, and stand a bush in a bed on the bed's ground line with the edging under it, never at its own height beside it.

Two more. A near plane holds only what stands where it stands: grass blades rooted at the bottom of the world are grass growing in the road. And keep a driveway's oil stain out from under a parked vehicle, because it reads as a shadow that makes no sense; give the vehicle a contact shadow of its own.

### The planes

Three or four planes is usual; more when the location is deep.

- Far: sky, hills, the far side of the street. Depth well under 1, so it barely moves under a pan.
- Mid: the building, the room's back wall, the counter's far side. Depth under 1.
- Ground: the actors' plane at depth 1: the floor, the road, the porch boards, and everything a character stands beside at their own depth.
- Near: depth above 1 with a `z` above the actors, so it draws in front and passes across them when the camera moves. A fence, a doorframe, a hanging sign, the near edge of a table. Not every location needs one; every location with a pan benefits from one.

Draw each plane as an SVG fragment to the kit: masses from the draw kit's builders, contours as filled outlines from the taper helper, the kit's palette, nothing that is a raw rectangle unless the thing is a rectangle, and even then with the kit's hand in its corners. Text on a sign is drawn as shapes, in the show's lettering, never as a live font.

### The ground and the marks

The ground is one number: the world y where feet land. Every mark is a world point on or near it, named for what happens there: `counter`, `door`, `step`, `rope`, `left_two_shot`, `right_two_shot`. A mark for every framing in the shot list, plus an entrance and an exit at the edges. Interaction points are marks too: where a hand reaches for a handle, where a prop sits when it is put down.

### The scale figure

This is the check that catches most set mistakes, and it goes in the FIRST round, not the last, because scale is invisible in an empty set and obvious the moment a figure stands in it. Make a page that spawns the set and puts a puppet on every mark at scene scale, then run a camera through the shot list: the wide, a pan across the authored width, a push into the first mark, and pull back. If the eave is not above the tallest character's head, or a garage door would not admit a car beside them, the set is at the wrong scale, and the fix is to scale the whole drawing about the ground line and thin its strokes to match, never to shrink the cast. Preview it with `preview_html` at shuffled timestamps and look. A door a character cannot walk through, a counter at their chin, a mark that leaves them floating: each is a number to change in the plane or the mark, now, before a scene is animated against it.

The purity rule applies to sets: a frame is a function of time, so a plane that changes with the previous seek (a memoised write, a `non-scaling-stroke`) is a bug the renderer will show. `preview_html` reports `seek_not_pure`; treat any finding as red.

When the scale is wrong, fix the set and never the cast. Scale the whole drawing about its ground line, thin its strokes by the same factor so the line stays the cast's weight, and move the marks with it. Check it against the body: a person stands about half the height of a single-storey wall and three quarters of a garage door, and a mower character stands knee high against a person. If they do not, the set is wrong, however good it looks empty.

### The sheets and the review

Save the set as a kit in the sets collection with three preview pages declared in its sheets: `wide`, the whole authored width at the frame's height; `pan`, three frames of a camera pan with the scale figure standing on the marks, so depth is judged; `marks`, the wide with every mark named on it. Render them with `refresh_kit_preview` and look.

One review per set, always, and before any shot is rendered against it: `request_review` on the wide with an ask that names the pan and the marks sheets. A set that was never put in front of the creator is a set the creator will reject under the first cut, with the cast already animated against it. Read the notes, fix all of them in one pass, reply beside each mark, re-render. A note about scale means the plane changes, not the character.

Expect the notes to name objects: a vehicle cut off at the frame edge or flat on the ground, a bush outside its bed, an eave beside its wall, grass in the road. Fix each object from the camera's view, answer beside the mark, and re-render the same check so the creator sees the fix where the note was.

### Variants

Night, rain, the same place with the sign repainted: a variant is a set of its own, registered under its own name, sharing the marks and the ground exactly, with its own planes. Keep the shared numbers in the notes so a variant cannot drift.

## Props in the world

Props a character holds belong to the cast and the props collection, with a grip point and the slots they fit. Props that live in a set, a cooler on the porch, a hubcap by the road, are drawn into the set's planes at the depth they sit, and get an interaction mark if anyone touches them. A prop that starts in the set and ends in a hand is both: drawn into the plane at rest and swapped for the held prop on the beat.

## Notes for the next agent

Update `notes/WORLD.md` with every set's kit name and id, its authored width, its ground, every mark with its world point and what it is for, its planes with their depths, its variants, and the shot list it was designed for. `add_project_note` pointing at the file. A second agent staging a scene should never have to open the set's SVG to know where the door is.

## Deliver

Report each set with its kit id, its marks, its planes and depths, the three sheets' paths, and what the human approved. Then what did not resolve: a mark the shot list needs that the drawing could not give, a variant not yet built, a pan the authored width cannot cover. Say what you would build next, and stop.
