What it does, and what it works with
Exactly what GroundSlate does on your Mac, what comes in through your agent's own connections, and the habits that keep your work findable six months later.
GroundSlate indexes, analyses, generates, captures and renders on your Mac. Design comes from the AI agent driving it, over connections the agent already has. Apart from checking your licence and updates with coey.com, GroundSlate goes out to the network only for things you started: the weights for a local model you chose, a file at a URL your agent gives it, a web page on a site you have allowed, a call to a web service with a key you added, and a benchmark result you chose to send.
What GroundSlate does, on your Mac
- Indexes video, images (SVG included) and audio: shot logs, scene boundaries, summaries, place, capture date.
- Transcribes with word level timestamps, locally.
- Recognises people and keeps a face catalog, locally. Biometrics never reach an agent.
- Reads music: tempo, beat grid, song structure, drops, phrase aware cut points, loudness and key.
- Speaks narration, locally. Design a voice from a written description or pick a stock speaker, and attach it to a person or a character. Any script is then read on your Mac, identically on every run, so a timed edit stays timed. A voice can wear an effect, from a room or a telephone to a monster or a robot, on one take or on every take it speaks.
- Writes music and sound effects, locally. Describe a bed or name a sound, and Stable Audio 3 makes it on your Mac through MLX.
generate_musicandgenerate_sound_effectreturn a 44.1 kHz stereo wav that goes straight intomix_audio,render_cutorproduce_reel, saved in the library with its prompt and seed. The music is instrumental. The same prompt and seed give the same file. - Plans cuts from each clip's own analysis, and shows you the plan first.
- Joins clips with rendered transitions: whips, pushes, rolls, folds and morphs. These are real camera moves, not crossfades. A second library runs inside the page:
get_kit("transition kit")returns its files, andlist_transitions(engine=html)lists it. - Reframes to a fixed canvas.
reframe_personfollows one named person's face through a clip, moving the crop every frame, and reports how much of the time it was actually on them.make_reframefollows the shot's main subject without identifying them, one crop per shot. - Mixes with a real broadcast sidechain compressor, so a bed ducks under a voice properly.
- Authors overlays from a spec: lower thirds, location banners, callouts.
- Renders any self contained HTML page to video, deterministically, with the bundled ffmpeg.
- Works in a browser window on your screen. The agent opens a page at the size it will be recorded at, then clicks, types, scrolls and moves a visible pointer in it, or runs a whole timed walkthrough in one go and records it to an mp4. It can zoom the page while recording, spotlight what it is talking about, and hide or relabel parts of a page for the take. It only reaches sites you have allowed, and it will not press anything it has hidden or relabelled.
- Captures web pages itself, rendered by WebKit on your Mac, not fetched by your agent.
capture_pagetakes a still,record_pagerecords an mp4, andscroll=Truescrolls the page from top to bottom, which turns a static site into footage.consent="reject"dismisses a cookie banner by refusing it. There is no accept option and there will not be one: agreeing to tracking in your name is not an agent's decision. Capture is off until you turn it on, and then follows your site policy: block all, allow all, or a list you keep. An agent cannot widen that policy. It can only ask withrequest_browser_siteand wait for you to decide in the app. - Files the result into your library and projects, or exports a clip's edit for finishing elsewhere: an EDL, an FCPXML for Final Cut, a marker CSV, YouTube chapters, and a shot and transcript index. Premiere imports the EDL. A layered cut document can also go out through
export_cutas FCPXML or FCP7 XML. Nothing writes a Premiere project. - Asks for your notes:
request_reviewputs a render in front of you to mark up with boxes, arrows, labels, pictures and reference files, and the agent reads your notes back. - Shows you the frames: an agent can pull real frames out of a composition it is still writing and out of the file it just rendered, so it has looked at the result before it calls it done.
- Grades and treats a clip from a catalog of named looks: stocks, prints, glass, bloom, camera moves, each with its own settings and its measured cost. It also bakes a LUT from a reference clip. A second catalog runs neural models on every frame for depth and subject work, using weights you install yourself.
- Generates a shot from a written prompt, on your Mac, through MLX. Nothing is uploaded and no key is needed. Give it a spoken line and the picture speaks it, with the clip as long as the line, within the same length limit as any other shot. Ask for a preview first and it makes the shot in about two thirds of the time; finish the one you like and you get exactly the clip a full render would have made. The clip is saved to the library with its prompt and seed, so you can run a shot you liked again. The model pack is tens of gigabytes, and each generation takes minutes of GPU time.
- Separates a sound from a recording, as an opt-in extra on Macs where the SAM-Audio model has been installed by hand.
Speaking and designing voices needs a Mac with at least 16 GB of memory, and generating video needs a Max-class chip, M3 Max or newer, with 64 GB.
The reasoning and vision models are local too, on Apple's MLX by default, with Ollama supported as an alternative engine. Benchmark, in the app menu, times your Mac on the work the app ships, and sends the result to COEY only if you press Send. For a fuller local run your agent drives, see Time your own Mac.
What arrives through your agent
Research. GroundSlate fetches web pages itself. Everything else from outside the Mac comes in through the client driving it: competitor data, a CSV of prospects, a market figure someone has to stand behind, the writing itself.
Design, from a tool such as Claude Design. GroundSlate does not design. It ships tools, not a look: a ruler that lets a page measure itself instead of hard coding positions (get_kit("measurement kit")), and a browser library of transitions (get_kit("transition kit")). author_overlay makes the built-in overlay cards, lower thirds and callouts with no setup; that is the starting point, not the limit. A page you wrote must be saved to disk first: write_composition writes it, then preview_html and render_html can open the path. Anything with real brand control is a page your design tool makes. GroundSlate renders it and can keep it as a named kit with save_kit, in a collection you can refer to by name. Kits were called templates in earlier releases, and the app lists them under Code Kits.
A named track. GroundSlate writes its own beds, so an outside music model is optional. What it cannot give you is a specific song someone else wrote. That comes from a file you own, or through your agent's own connection to a music service: an MCP server or an API key the agent holds. GroundSlate analyses whatever arrives, lays it under the cut and ducks it under the voice.
A provider voice, such as ElevenLabs. You only need one when a character must sound like a specific voice you own at a provider. GroundSlate stores the voice id on the character, so the twelfth video sounds like the first. Your agent generates the audio through its own connection to the provider and hands the file back. Everyday narration does not need this; GroundSlate speaks it locally.
Your own keys for paid services. Add a key in the app, under Data then Provider Keys, with the address it may be sent to, what it may do there, and how many requests it may make a day, a week and a month. Saving the first key turns on the Provider gateway on that tab; switching it off stops every key at once. Keys belong to the profile you add them in. The agent calls the service through provider_request by the key's name. GroundSlate attaches the key on the way out, so the agent never sees it, and a clip from your library can be sent as the upload. It suits services that take the key in a request header over https and answer with text or JSON, including a public or signed link to a finished file the agent can then bring in with fetch_media. A reply that is itself a file, such as audio, is not passed back. Services that need an OAuth sign-in do not work.
Your camera and your screen recorder. Everything after the capture is local.
Voice and music models change every few months. Your library, your face catalog, the relationships you have recorded and the footage they describe stay on your Mac.
Work in a project, not in a folder
This habit is what keeps a library usable a year from now, instead of a Desktop full of final_v3.mp4.
create_project ties people, events and clips into one body of work, with kind set to personal or business. Create it before you render, not after.
Then commit each render to the library against that project. It appears in the project's Outputs tab, which is kept when Recent outputs is trimmed. list_project_outputs returns them all, newest first.
Keep the working material with the project too: the script, the fact base, the shot list, and the notes a later session will need. They are not media to add or renders to commit, so they go in the project's own working folder, where the next session can read them. A good test: would you need this file if the conversation ended right now?
Ask your agent to name each output as it goes. name_video gives a short, readable title based on the content. Once forty renders are each named for the person they are for, you can find any of them by name six months later.
Ask it to check its own work
Three results can look like success when they are not. Each has a field that tells you.
create_projectandadd_media_to_projectreturnunresolved: clip references that matched nothing in the catalog and were not added. The project is created anyway.name_videoreturnswritten; check that field. A clip the library has no record of returns a_not_founderror, and nothing is written.quick_cut_planrefuses the whole plan withunresolved sourcesinstead of planning around a bad reference, so retry the ask rather than assuming it worked.
"Tell me what did not resolve" is a good closing line on any ask that touches a lot of clips.
Prefer ids to paths
Clip, person and project ids survive being copied between tools. Paths do not: a path containing a non-ASCII character will not survive being retyped from another result, and the tools will say so rather than guess.
Most tools accept a clip id, a filename or a bare stem as well as a path. Use the id when you have one.