---
title: Design and render
summary: Build an overlay from a spec, save a page to disk, render it to video, keep an approved look as a kit, and keep a character consistent.
eyebrow: Capabilities
accent: arc
order: 4
outcome: design
---

## Graphics and render

| Tool | What it does |
| --- | --- |
| `author_overlay` | Build an animated overlay page from a short spec, ready for `render_html`. No framework or npm needed |
| `write_composition` | Save an HTML page you wrote to a path on your Mac and get the path back. `render_html`, `render_composition`, `preview_html` and `check_fonts` all need a saved `html_path` |
| `render_html` | Render an HTML page to a video file. No framework or npm needed |
| `render_composition` | Render an HTML or GSAP composition to video with Chromium and ffmpeg. The picture comes from the page, not from library clips |
| `render_concat` | Join rendered segments, with optional audio, into one file |
| `render_ffmpeg` | Run an ffmpeg render from the `ffmpeg_argv` that `make_reframe`, `make_highlights`, `make_highlights_vertical` or `make_captions` returned. Start the argv at the flags (`-y`, `-i`, …); GroundSlate adds the ffmpeg binary |
| `author_film` | Build a page film: several scenes of your own media joined by the page transition kit, as one HTML page for `render_html` |
| `generate_video` | Generate a short video on your Mac with LTX 2.5 through MLX, from a prompt and optionally a starting still, and give it a spoken line as `audio` so the picture speaks it. `quality="preview"` auditions a shot for less, and `finish_of` turns that preview into the finished clip |
| `list_effects` | The looks you can apply to a clip, by category: light, color, blur, emulsion, print, lenses, camera, glitch (`category=` shows one) |
| `apply_effect` | Apply a named look to one clip and save a new file, using ffmpeg on your Mac |
| `list_ai_effects` | The AI effects, each with its own settings |
| `preview_ai_effect` | Try an AI effect on one frame with up to six settings, before spending minutes applying it to a whole clip |
| `apply_ai_effect` | Apply an AI effect to one clip and save a new file |
| `preview_html` | See a page you are still writing at the times you name, without rendering it. Returns pictures |
| `preview_frame` | One frame of a page at `t`, as fast as possible |
| `sample_frames` | See frames from a finished video or image, as pictures. Use it to check your own renders or any library clip |
| `composition_doctor` | Check that your Mac can render pages to video (Playwright, headless Chromium and ffmpeg), and what a page can use there: which browser draws, WebGL and WebGPU and their limits, and the frame formats |
| `save_kit` | Save HTML as a named kit in this profile: a reusable brand or style reference, not a finished render |
| `get_kit` | Get a kit's HTML to read or adapt before you build a page. Works for your saved kits and the built-in ones: `get_kit("measurement kit")`, `get_kit("transition kit")` and `get_kit("draw kit")` |
| `list_kits` | This profile's saved kits, such as a lower third, a title card layout or a brand kit. `collection=groundslate` lists the built-in ones |
| `import_kit` | Copy an .html or .htm file into this profile's kits. The name defaults to the filename |
| `delete_kit` | Delete a saved kit by name |
| `refresh_kit_preview` | Redraw a kit's `preview.png` at `t` and its `preview-motion.mp4`, and mark the preview as current |
| `kit_detail` | Render a kit large into Scratch Outputs, without changing it: its main page or one named `sheet`, at any `width` from 1280 to 3840. Use it to look closely at a puppet turnaround or a style kit's sheet |
| `list_kit_collections` | The collections this profile's kits are grouped into, with a count for each. These are kit collections (Toolkit then Code Kits), not Library or People collections |
| `create_kit_collection` | Create or update a kit collection. `kind` is `looks` (the default), `engine`, `puppets`, `sets`, `props` or `style_kit` |
| `set_collection_kind` | Change a kit collection's `kind` to `looks`, `engine`, `puppets`, `sets`, `props` or `style_kit`. Older collections read as `looks` until you set one |
| `delete_kit_collection` | Delete a kit collection. Refuses if it still holds kits, and says how many, unless you pass `force=True` |
| `export_collection` | Export a kit collection as one shareable `.gskit` file, with checksums and the fonts it needs |
| `analyze_style` | Build a look profile, a prompt suffix and reference stills |
| `remove_background` | Cut the subject out of a still image and save it as a transparent PNG |
| `list_fonts` | The fonts `render_html` can use right now, each with its files, weights and styles |
| `check_fonts` | Check a page's fonts without rendering: which are available and which are missing |
| `register_font` | Add one font file (.woff2, .woff, .ttf or .otf) so `render_html` can use `family`, with no silent fallback to a system font |
| `import_fonts` | Add every font file in a folder, or a single file, in one call |
| `remove_font` | Remove a font family or one of its styles. GroundSlate deletes its own copy; your original file is never touched |

## Puppets and style kits

| Tool | What it does |
| --- | --- |
| `style_kit_scaffold` | Start a show's style kit from a working template. Writes a complete starter kit called `name` into `collection` and checks it, so your first edit starts from a kit that passes |
| `style_kit_doctor` | Check a style kit before drawing a puppet to it. `kit` is its name or `kit_…` id; each show has one style kit collection. Returns a list of problems, even for a half-finished kit |
| `style_kit_sheet` | See a style kit. Renders its `swatches` page (palette, line weights, shading, and sample mouths, eyes and brows) or its `mouths` page, and returns the picture with any problems found |
| `puppet_convert` | Turn a hand-written `puppet-&lt;name&gt;.js` rig into a puppet kit, once: separate parts, face shapes, a preview sheet and the built-in engine, saved as one kit in `collection`. The engine is GroundSlate's own (`gs-tween.js`, `gs-morph.js`, `gs-puppet.js`), with no GSAP |
| `puppet_doctor` | Check a puppet against the rules before using it in a scene: structure, mouth chart, line and silhouette. Instant, and changes nothing |
| `puppet_sheet` | See a puppet. Renders a sheet and returns the picture: `turnaround` (six views), `expressions` (twelve), `mouths`, `hands`, `chart:&lt;joint&gt;`, or a costume (`costume="flannel"`) |
| `puppet_build` | Rebuild the character file `puppet-&lt;id&gt;.js` from the puppet kit, plus one file per extra costume. This is the character, not the engine |
| `puppet_costume` | Add, change, rename, remove or choose a puppet's costume, from SVG you write. A costume replaces body parts, so a shirt or coat moves with the joints. Renames and removals carry over to every avatar wearing it |
| `set_puppet_preset` | Name a set of poses on a puppet, face included, so a scene's `emote` can ask for it in one word. Unknown charts or states are refused, and the puppet is rebuilt and checked |
| `remove_puppet_preset` | Remove a named preset from a puppet. If it replaced a built-in one, the built-in comes back |
| `author_rig` | Build a prop or a set without editing kit files. A prop has states (poses a scene cuts to), triggers (how it moves between them over time), idle loops and parts. A set has marks, planes, a background and a ground |
| `migrate_project_rigs` | Move a project's copied rigs and engines into the kit store and update its pages. Runs as a dry run by default |
| `lipsync` | Mouth-shape keyframes for 2D lip sync from a spoken line (mp3, wav or m4a), computed on your Mac, as Rhubarb Lip Sync does |

## The web

| Tool | What it does |
| --- | --- |
| `capture_page` | Screenshot a web page, rendered by WebKit on your Mac |
| `confirm_capture_plan` | Save the proportions the user chose for capturing a site. Call it with no `proportions` to get the options and the site's latest capture to show them, then again with their choice |
| `record_page` | Record a web page to an mp4, rendered by WebKit on your Mac |
| `open_browser_window` | Open a visible browser window on your Mac, at a set size and on a chosen screen. The agent can then work in it with the tools below, and you can too |
| `list_displays` | Your Mac's screens, with their sizes and scale. The index is what `open_browser_window` takes to open a window on a given screen |
| `browser_read` | Look at a browser window the agent opened: its elements and where they are, its text, or a screenshot. It can read just what is under the pointer, to find a control that only appears on hover |
| `browser_act` | Act in a browser window the agent opened: move the pointer, click, type, press keys, scroll, drag, go to an address, zoom and pan the page, and point things out with a spotlight, a highlight or a ring on each click. Each action is shown in the window as it happens |
| `browser_script` | Run a whole timed sequence of actions in a browser window and record it as one mp4 with the pointer's path. A step can wait for words, an element or an address before it runs |
| `browser_mask` | Hide parts of a page, or change the words on a button, for a recording. Only what is drawn changes, the change is logged, and the window then refuses to press anything it touched |
| `record_browser_window` | Record a browser window the agent opened to an mp4 while it works in it, for up to half an hour |
| `stop_window_recording` | Stop a `record_browser_window` recording early. The file keeps what was recorded |
| `list_browser_windows` | List open browser windows and whether each is still running |
| `close_browser_window` | Close a window opened with `open_browser_window` |

## Avatars

| Tool | What it does |
| --- | --- |
| `create_avatar` | Create an avatar, a reusable identity kit. Add its reference media afterwards with `set_avatar_media`, one call per slot |
| `delete_avatar` | Archive an avatar. It leaves the lists, but everything generated with it still links back to it |
| `get_avatar` | One avatar's full kit, everything needed to generate it consistently, in one call |
| `list_avatars` | Every avatar, for real people or fictional characters, with reference views, voice and key facts |
| `link_avatar_person` | Link a real person's avatar to their entry in People, or remove the link with `unlink=true` |
| `set_avatar_info` | Update an avatar's details. Keys you leave out stay the same; an empty value clears that field |
| `set_avatar_media` | Fill one of an avatar's reference slots with a library clip. The avatar points at the clip and does not copy it |
| `set_avatar_provider` | Attach the provider identity an avatar performs as: your HeyGen avatar id, a D-ID presenter or a Synthesia avatar |
| `set_avatar_tag` | Add or `remove` one tag on an avatar, to help find it |
| `tag_avatar` | Tag an avatar as appearing in a library clip, as `tag_person` does for people, or `remove=true` to untag. Different from `set_avatar_tag`, which labels the avatar itself |
| `set_avatar_trait` | Set or `remove` one fact about an avatar that an AI reads when building a shot ("species": "anthropomorphic lobster", "silhouette": "round, stocky") |
| `set_avatar_voice` | Attach a provider voice you own (ElevenLabs or any other) to an avatar, so the character always sounds the same |
| `set_avatar_puppet` | Give an avatar a body by pointing it at a puppet kit, by name or `kit_` id. The avatar stores the link, not the drawings |
| `clear_avatar_puppet` | Remove an avatar's puppet link. The kit stays in its collection. Returns `cleared: false` if there was no link |
| `add_avatar_extra` | Add a reference beyond an avatar's five main slots: another angle, an outfit, a second sample video, another voice read |
| `remove_avatar_extra` | Remove one of an avatar's extra references, by `extra_id` (from `get_avatar`) or by the clip it uses |
| `add_avatar_note` | Add a note to an avatar. Title optional, body is the text, and you are listed as the author |
| `amend_generation` | Update a generated clip's history: add `lineage` entries, merge `params`, set `provider_job_id`, change `project_id`, or correct `avatar_ids` |
| `ingest_generation` | Add an AI-generated file you made with a provider (fal.ai, ElevenLabs, …) and downloaded, as a searchable clip with its history saved |
| `reject_generation` | Reject a generated take. The file is deleted to free space (or kept with `keep_file=true`), but the clip keeps its poster, its history, and who rejected it, when and why (`reason`, such as "off-brief lighting") |

## Shows and episodes

A show is what an episode belongs to: a record, a bible of rules the show follows, a cast, and the kits it is drawn with. The compile tools turn a script into something you can watch.

| Tool | What it does |
| --- | --- |
| `set_show` | Create or change a show, except its cast. A blank `show_id` creates one and needs `name`. When changing a show, blank fields are left alone; use `clear` to empty one |
| `get_show` | One show and its bible, or every show. Read the bible before writing for a show, or episodes drift from it |
| `cast_show` | Add one avatar or real person to a show's cast, or remove one. A character can be cast by name alone, without an avatar |
| `delete_show` | Archive a show. Nothing is deleted, and its episodes, cast and kits are untouched |
| `compile_scene` | Turn one scene spec into a rendered scene. Finds each character's puppet, speaks every line in that character's voice, syncs the mouths and renders the scene |
| `compile_episode` | Turn a script into an animatic in one call. Compiles every scene in order, lays each line on the voice track, checks and renders the cut, and sends it for review so the person can watch it |
