Plan a project
Lay out chapters, blocks and scenes, change the structure, and pick a style. 28 tools.
On the main list
The tools a client sees when it connects.
create_project
Create a project
Your plan laid out exactly, no planner; returns it with ids and the settings it got. Free. Without plan: script/topic via our planner (async). Guide: "The plan".
| Input | Type | Description |
|---|---|---|
plan | object | {tempo?:{bpm,meter?}, chapters:[{title?, blocks:[{scenes:[{narration | duration | music:{bars}, title?, brief?, cast?}]}]}]}. No other keys. |
blank | boolean | true = empty; fill with apply_changes. |
draft_id | string | Adopt this suggest_plan draft. |
script | string | Narration, verbatim. |
topic | string | A brief. |
workspace_id required | string | From get_account. |
name | string | Project name. |
aspect_ratio | "16:9" | "9:16" | "1:1" | |
voice_id | string | list_voices. Needed if the workspace has none. |
theme_slug | string | Theme. |
template_slug | string | Planner template. |
duration_seconds | number | Target length for a topic. |
music_track_id | string | list_catalog("music"). |
captions_enabled | boolean | false = no captions. |
suggest_plan
Suggest a plan
Optional planner draft: topic or script → draft id; again with draft_id → the plan JSON for create_project {plan, draft_id}. Free.
| Input | Type | Description |
|---|---|---|
draft_id | string | Read the draft (repeat while planning:true). |
topic | string | |
script | string | Narration, verbatim. |
target_sec | number | Target length. |
sources | array | |
workspace_id | string | |
template_slug | string | Planner template. |
apply_changes
Apply a changeset
Change structure in one atomic batch (≤40 ops): add/update/delete chapters, blocks, scenes — how you reshape a project after create_project. dry_run first. Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
ops required | array | In order. Op shapes: resource typecut://studio/guide, "Structure edits". |
base_version | number | structure_version from get_timeline (or a dry run). Mismatch → conflict. |
dry_run | boolean | Validate and project only. |
list_skills
List skills
The skills Typecut serves: each a whole way of making one kind of video (e.g. history-map: a chibi cast over a living map with one continuous camera) — when to use it, the kits it pins, its latest version. Load one with get_skill. Free.
No inputs.
get_skill
Load a skill
One skill (a whole look or way of making a video). By default its CARD, a few hundred tokens: what it is, when to use it, what must survive, tokens, kits, pacing, checks, and a map of its body with sizes, ending with the one section:"…" read that has what you need to write a scene. A full SKILL.md is 10-66 KB, half of it paste-ready code, so read parts: section:"Rules|Scene stub" (several at once with |); full:true for all of it. slug "history-map" (latest) or "history-map@2". With brief (one line on the beat you are writing), the k nearest worked shots ride along. format:"json" returns the structured record. Free.
| Input | Type | Description |
|---|---|---|
slug required | string | "history-map", or "history-map@2" for one version. |
brief | string | Optional: what happens in the beat you are about to write; returns the nearest exemplars. |
k | number | How many exemplars with brief (default 3). |
format | "md" | "json" | md (default): the SKILL.md; json: the structured record. |
outline | boolean | md only: just the headings with their sizes. |
section | string | md only: only the section(s) whose heading contains these words (with sub-sections); several with |, e.g. "Rules|Scene stub". |
full | boolean | md only: the whole SKILL.md instead of the card (10-66 KB). |
Callable by name
Not listed on connect, to keep the list short. Call them directly by name, or find them with tools.
create_chapter
Create a chapter
Create ONE chapter in a project (then grow it with apply_changes add_block / create_scene — a scene with nothing spoken takes create_scene brief + duration, no narration). Omit position and it is placed BEFORE the conclusion / outro wherever that sits, appended when there is none; pass position (1-based) to insert elsewhere. Chapter ids come back for the follow-up calls.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
title | string | Chapter title. |
position | number | 1-based insert position. Omit to place before the conclusion (or append). |
delete_chapter
Delete a chapter
Delete ONE chapter of a project. Refused while the chapter still has scenes unless cascade is true — then its scenes go with it. PERMANENT: confirm with the user before calling. Use it to remove empty or duplicate chapters; ids come from get_storyboard.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
chapter_id required | string | Chapter id (from get_storyboard). |
cascade | boolean | true = also delete its scenes. Default false: a chapter with scenes is refused. |
estimate_project
Price a project before creating it
What would this cost, and can the user afford it? Creates nothing, spends nothing. Returns the credit estimate with its breakdown, the account balance, and whether the two add up. ALWAYS call this before a create_project that lets Typecut generate the scenes, and show the user the number — creation itself has no undo, and spending someone's credits without telling them first is the fastest way to lose their trust. It prices Typecut composing every scene: when you author the scenes yourself (authoring:"own") creation is free, and resolve_project voice_only dry_run prices the voice. A blank project (create_project blank:true, or with no template, topic or script) and a plan project cost nothing to create: do not price those here.
| Input | Type | Description |
|---|---|---|
template_slug | string | Template slug the project would use. |
duration_seconds | number | Target length in seconds. Longer = more scenes = more credits. |
tts_preset_id | string | Voice id, if not the workspace default (affects narration cost). |
quality_tier | string | Quality tier id; plan-gated, free accounts are forced to the lowest. |
export_project
Export the project
Export the whole project, the same way the app does. Formats: mp4, webm_alpha, audio, srt, vtt, premiere, resolve, finalcut, nle_package (flag), hyperframes. mp4 / webm_alpha (a transparent-background project) start the film render and return generation_id; premiere, resolve, finalcut and nle_package start an editor package (built from rendered clips; scenes without one are listed in notes). srt / vtt answer with the file text; audio with a hosted mix (options.container m4a|wav|mp3, loudness_lufs); hyperframes with a zip url. Film export is included in the plan. Finished pieces or on request only.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
format required | "mp4" | "webm_alpha" | "png" | "gif" | "png_sequence" | "webp_animated" | "mov_prores_alpha" | "audio" | "srt" | "vtt" | "premiere" | "resolve" | "finalcut" | "nle_package" | "hyperframes" | "web_block" | Format id (export_formats). |
options | object | Format options (export_formats lists each format's), e.g. {t: 2.5} for png, {resolution: "720p"} for mp4. |
fork_project
Fork a project, or freeze a snapshot of it
Copy a project into a NEW project that continues on its own, and keep the lineage. Use it to try a different cut ("keep this one as it is, fork a version with memes and sound effects"), to iterate on another concept without risking the original, or to snapshot a state you may want back. Everything that makes the film comes along: chapters, script and pauses, scenes and their compositions, music, theme, captions, the bible and characters. Voice and media are shared by URL (a re-voice of the original never changes the fork), and every voice take is kept. History, comments, costs, renders and share links are NOT copied; the fork has to be rendered itself. kind "snapshot" makes a frozen, hidden copy; to restore one, fork the snapshot. The copy counts toward the plan's project limit. workspace_id puts it in another workspace. Free. Returns the new project_id; call get_project_lineage to see how forks relate.
| Input | Type | Description |
|---|---|---|
project_id required | string | The project to fork (or the snapshot to restore). |
name | string | Name of the new project. Default "<name> (fork)" / "<name> (snapshot)". |
kind | "fork" | "snapshot" | "fork" (default) is a live copy; "snapshot" is a frozen, hidden copy. |
workspace_id | string | Workspace for the copy. Default: the same workspace as the source. |
purpose | string | One line (max 200 chars) saying why this fork exists, like a branch name: "tighter intro", "memes and sound effects". |
get_project
Get a project
Read one project: name, status, workspace, aspect ratio, and the editorial brief (topic, hook, angle) that drives generation. Read this before changing creative direction — the brief is what the pipeline actually follows. charged_credits is the ledger total linked to this project, net of refunds (credits_charged is the same figure). complete:false means some charges are booked without the project's keys and are NOT in it: unattributed names each kind (voiceover, character, unlinked) with its generation count and quoted credits_estimate. get_account before/after is the receipt for that part.
Status is one of: draft (created, not planned) · planning · generating · review · ready (all scenes resolved, renderable) · rendering · rendered (render_url is populated) · failed.
edit_version is the version of the project-level settings (music cues, tempo, theme, captions, voice, mix, ...): pass it as expected_version to set_tempo / set_theme / set_captions / set_branding / set_project_runtime / set_project_voice / set_music / set_mix / set_groove so a stale write is refused (a conflict with current_version and last_writer) instead of overwriting someone else's change.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
get_project_activity
Who is working on the project now
Who is on the project right now: live scene claims, who wrote in the last minutes, and the agent runs touching it (status, last tool, scenes). Presence is not available server-side. Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
minutes | number | Window for recent writers (default 15, max 1440). |
get_project_gist
Project gist — what this project did
What a finished project DID, compact enough to build another one from — the reference you read BEFORE authoring a new project in the same vein. Where get_inventory says what is on screen, this says what it is FOR: the intent of the whole piece and of every section, the DEVICES the project reaches for (the recurring composition moves, each with its purpose and how it is actually built — for hand-written scenes, the dozen lines of the author's own code that build it in its best example), a CODE line (the modules every scene stands on and the preamble each repeats), one line per scene saying what that scene does for its section, the palette and motion grammar as used, and the rules it held to. Bounded: a long project costs about what a short one does, because devices are a vocabulary and not a scene list. text is the form to paste into an authoring prompt. Since v5 it is drawn from EVIDENCE, not only markup: SPEC (scene length, narration pace, whether cuts land on sentence starts, audio, seams — measured from the platform), BUILD (whether scenes are built up in stages or held, read from the renderer as the scene runs), and the LOOK (colours measured from frames' pixels, the style described from the frames), each saying how it is known — a look with no frame behind it is marked unverified. SCENE LENGTH is reported as groups, not one average, and INNER says how much the picture changes inside scenes (measured from frames, so it sees drawn art too). Two PICTURES are attached: the SIGNATURE STRIP (the colour of every moment with the visual change under it, scene boundaries marked) and a contact sheet — they are STYLE reference only; copy the look, never the subject they show (images:false omits them). CAST says whether characters are stored in the project bible (reuse them) or drawn inline. next is where to look closer: frames to open and get_scene_brief calls for each technique's best example scene; gaps names anything that could not be gathered. Cached on the project and redrawn at most every 15 minutes, only when enough scenes changed (stale says when the cached one was served anyway); refresh forces a redraw. A cold draw takes a minute or two: the call holds up to wait_sec (default 50) for it; if it is still drawing it returns status "drawing" (and the previous gist, stale, if any) and keeps drawing — call again and that call waits on the same draw. Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id — the project to read as a reference. |
detail | string | 'full' (default) prints a line per scene; 'compact' prints per-section runs only. |
refresh | boolean | Re-draw a cached gist (after re-generating scenes, say). |
wait_sec | integer | How long to hold the call for a draw in progress (default 50). A draw still running after that answers "drawing"; call again and it waits on the same draw. |
skeleton | boolean | Derived half only — identity, structure and choreography, with no intent lines. |
images | boolean | Attach the signature strip and a contact sheet of frames (default true). false = words and numbers only. |
structured | boolean | Return the same content as a JSON object (text and structuredContent) instead of the prose alone (default false). The /v1 route always carries both. |
get_project_history
Project history: what changed and who did it
Described change history, newest first: each event has who (person, agent, agent run, Director), what in words, and structured per-key changes for tempo, conductor, music, mix, theme, captions, branding, voice and the rest. event_id = one event in full. Filters, paging and the legacy fallback: guide "Debugging a project". Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
event_id | string | One event in full (an id from the list). Reviewer and above. |
actor_kind | "person" | "agent" | "agent_run" | "director" | "system" | Who made the change. |
actor | string | A user id, or "me". |
agent_run_id | string | One agent run. |
scene_id | string | One scene. |
chapter_id | string | One chapter. |
kind | string | Kind prefix: "project.", "project.settings", "scene.composition". |
since | string | ISO time, inclusive. |
until | string | ISO time, inclusive. |
group_id | string | One recorded group (request, changeset). |
limit | number | Max events (default 50, max 200). |
cursor | string | next_cursor from the previous page. |
get_project_lineage
Where a project was forked from, and its forks and snapshots
The lineage of a project: its parent (the project it was forked or snapshotted from, if any) and the forks and snapshots made from it, newest first, each with id, name, kind (fork / snapshot), when, and whether it is archived. Read it before choosing which version to continue or restore. Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
get_storyboard
Get the storyboard
The map of a project: chapters, script blocks (narration/direction), and the scenes anchored to each block, with voiceover status and durations. This is the primary orientation tool — call it before editing anything so you address real scene ids rather than guessing. Each scene carries seamIn — the cut BEFORE it: a transition (slug, length, who set it), an authored hard cut, or undecided. Scene detail (the scene source) is deliberately NOT here; use get_scene.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
view | string | "compact" (the default here): one row per scene (id, title, start on the film clock, duration, one line). "full": blocks, anchors and seams, the whole script, which can run past the output limit on a long project; use it with chapter. |
chapter | string | Chapter id: only that chapter, in full, or in compact rows with its scenes. |
offset | number | Compact view: rows to skip; use next_offset. |
limit | number | Compact view: rows per page (default 100, max 200). |
list_changes
List changesets
A project's change history (newest first) and its current structure_version. changesets are the batches (apply_changes, split/merge/move, undos); edits are what API and MCP callers changed outside a batch (element edits, authored compositions, transitions, cues, music, mix, tempo), one entry per call, each tagged with a domain (timeline / audio / scene / captions / script / structure / project). Every entry carries actor: the key's label and the X-Typecut-Session the caller declared, so you can tell your own work from another session's.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
limit | number | Max rows (default 20, max 100). |
list_projects
List projects
List projects newest-first, with status, workspace, editor_url and render_url. Use to find the project a user is referring to by name ("the Bronze Age one") before acting on it. Returns ids you pass to every other project tool, and links you can hand straight to the user without a second call.
Status is one of: draft (created, not planned) · planning · generating · review · ready (all scenes resolved, renderable) · rendering · rendered (render_url is populated) · failed.
| Input | Type | Description |
|---|---|---|
workspace_id | string | Only projects in this workspace. Omit for all. |
limit | number | Max projects to return (default 20, max 100). |
cursor | string | The next_cursor of the previous page, to continue. |
view | string | "compact" = id, name, status, workspace, updated only (a page you can scan); default "full". |
ls
Look at the workspace tree
Look at where work lives: workspaces, folders, projects, and inside a project its chapters and scenes. No at lists the workspaces. at is a path like tc:/development/eng-music/clock-fixes (a chapter or scene is #c2.s5) or the id of a workspace, folder or project. Returns the node, compact children with their id and path (either works as input anywhere), and notes: the short markdown notes of the folders on the way down, which say how that place is used. q searches project names under the node. Paged by cursor. since (30m, 48h, 7d, 2w or an ISO date) lists only projects edited since, newest first, across everything under at; add scenes:true and each also carries scenes_since: the scenes touched in that window, each with a one-line gist, duration and a thumbnail_url, so "what did we work on this week" is one call. Opening a project (at a project) gives every scene the same gist/duration/thumbnail. Free, read-only. Replaces browsing with list_workspaces + list_projects.
| Input | Type | Description |
|---|---|---|
at | string | A tc:/… path or an id. Omit to list the workspaces. |
q | string | Search project names under at. |
since | string | Only projects edited since: 30m, 48h, 7d, 2w or an ISO date. |
scenes | boolean | With since: include each project's recently edited scenes (gist, duration, thumbnail). |
cursor | string | The next_cursor of the previous page. |
limit | number | Rows per page (default 30, max 100). |
merge_from_fork
Pull a fork's changes back into its parent
Pull a fork's changes back into the project it was forked from. Scenes are matched by lineage (forked_from, or copied_from), or by a composition url that is unique on both sides, as project_diff matches them. Their composition, title and length are written into the parent scene. Narration, scenes only the fork has (copy those with copy_scenes) and scenes only the parent has are reported, not changed. Nothing is deleted. dry_run:true returns the plan and writes nothing. Free.
| Input | Type | Description |
|---|---|---|
from_project required | string | The fork: its changes are pulled from it. |
to_project required | string | The project it was forked from: it receives the changes. |
dry_run | boolean | Plan only; nothing written. |
open_project_wizard
Open the project wizard
Show the user a form to set up a video — workspace, template, brief, length, voice and look, with the palettes visible — then price it and create it. Free to open; creating from it spends credits, and the form shows the cost against their balance before the commit button appears.
Prefer this over interrogating the user one question at a time when they want a video and have not specified much: five choices are faster to make by looking than by describing. If they have ALREADY told you what they want, just call create_project — do not make them fill in a form to repeat themselves.
Only useful in a client that renders MCP Apps. Elsewhere this returns the same options as data, and you should ask in conversation instead.
No inputs.
organize
Organize workspaces, folders and projects
Change where things live. op: mkdir {workspace_id, parent_id?, name, note?} (folders nest 3 deep) · rename {id, name} (folder or project) · note {folder_id, note} (short markdown that ls returns to anyone working in that folder: what the place is for, naming, what not to do) · mv {id, to_folder_id|null} (a project or folder; null = workspace root; inside one workspace) · dup {project_id, name?, to_folder_id?, workspace_id?} (a copy of a project, filed where you say; counts toward the plan cap) · archive {id, archived?} (project, or an empty folder) · chapter_copy / chapter_move {chapter_id, to_project_id, position?} (a whole chapter into another project WITH its narration, audio and scenes; a move archives the source after the copy is in place, nothing is hard-deleted) · restore {archive_id} (undo a chapter or scene move: the move returned archive_id) · workspace_rename / workspace_archive {workspace_id}. Folders only decide where a project is listed; contents, media and sources are untouched. dry_run:true says what would change. Find ids and paths with ls. Single scenes: copy_scenes copies them into another project by reference, with their narration and voice when every scene of a script block goes (move:true moves them: sources soft-deleted, emptied narration blocks archived, undo with restore); move_scene moves one between chapters of a project.
| Input | Type | Description |
|---|---|---|
op required | string | mkdir | rename | note | mv | dup | chapter_copy | chapter_move | restore | archive | workspace_rename | workspace_archive |
workspace_id | string | mkdir, dup, workspace_*: the workspace. |
parent_id | string | mkdir: the parent folder (omit for the workspace root). |
name | string | mkdir, rename, dup, workspace_rename: the name. |
note | string | mkdir, note: markdown, at most 4000 characters. |
id | string | rename, mv, archive: a folder or project id. |
folder_id | string | note: the folder. |
project_id | string | dup: the project to copy. |
to_folder_id | string | null | mv, dup: the destination folder; null = workspace root. |
archived | boolean | archive: false restores. Default true. |
chapter_id | string | chapter_copy, chapter_move: the chapter. |
to_project_id | string | chapter_copy, chapter_move: the project it goes into (can be the one it is in, for a copy). |
position | number | chapter_copy, chapter_move: 1-based position among the target's chapters. Omit to append. |
archive_id | string | restore: the archive_id a chapter or scene move returned. |
dry_run | boolean | Say what would change, change nothing. |
project_deps
What a project stands on
Read before you change a scene in a project you did not build: what it is tied to. Live, a second or two, no model. The clock (fps, tempo, music, voice); the RUNTIME and SKILLS every scene lands with; the CAST; which scenes link which shared module version (\<script data-tc-module\>), and which are BEHIND the runtime; the SOUNDS the project already uses (its own kit: reuse before adding new); a line per scene. With scene_id: that scene in depth (its modules with their API, the scenes either side, its continuity rows, its sound cues, and what to KEEP), so you call the modules instead of rewriting them inline. get_project_gist is the other read: the style of a finished piece, for making one like it. Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | The project. |
scene_id | string | One scene in depth: what it is tied to and what to keep. |
structured | boolean | Return the same content as a JSON object (text and structuredContent) instead of the prose alone (default false). The /v1 route always carries both. |
project_diff
Compare two projects scene by scene
Compare two projects scene by scene, read only: which scenes match (by id, by copy lineage, or by a shared composition, as a fork matches its parent), which changed (composition, title, length, narration), which moved chapter or position, and which are only in one project. Use it before merging work between projects or to see what another agent changed in a fork. Free; writes nothing.
| Input | Type | Description |
|---|---|---|
from_project required | string | The project to compare from (read). |
to_project required | string | The project to compare against (read). |
reorder_chapters
Reorder chapters
Set a project's chapter order. Either pass order (EVERY chapter id exactly once, from get_storyboard) or move ONE chapter with chapter_id + position (1-based). Use it when a chapter sits in the wrong place — e.g. after the conclusion. Returns the full new order with chapter numbers.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
order | array | Every chapter id in the desired order. |
chapter_id | string | The one chapter to move (with position). |
position | number | 1-based target position for chapter_id. |
resolve_project
Generate unresolved work
Generate everything still missing — voiceover, then scene compositions, correctly sequenced. SPENDS CREDITS. Scope it to the whole project, one chapter, or one block. Authoring the HTML yourself? Pass voice_only:true — voiceover and word timings only, the composer never runs. ALWAYS run with dry_run true first and show the user the cost before running it for real; that is the difference between a helpful agent and an expensive one. Returns immediately — poll get_project_status. voice_timing reports voiced vs target seconds; warnings says when the finished voice is more than 10% off the target length.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
scope | "project" | "chapter" | "block" | How much to resolve. Default "project". |
chapter_id | string | Required when scope is "chapter". |
block_id | string | Required when scope is "block". |
dry_run | boolean | True = report the cost and change nothing. Do this first. |
voice_only | boolean | True = voiceover only (voice + word timings) — never dispatches the composer, so no scene is composed or billed. For callers that author their own compositions. |
include_stale | boolean | Also regenerate STALE work — voice made from narration that changed since, scenes whose prompt/narration changed after generation. The response's stale counts say what is stale; off by default so nothing existing is re-charged. |
set_project_runtime
Declare the shared modules a project runs on
List the hosted modules (put_module) every scene of a project — or of one chapter — runs on, ONCE, instead of pinning them in every scene: {modules: ["kit3d@11", "rig:kaykit@1"]}. Each authored land then gets those pins in front of its own scripts (vendored, hash-checked and linked like a pin you wrote), so a scene carries only what differs, and moving to a new kit version is one call plus a re-land (repin_modules does the re-landing). chapter_id (a chapter id from get_project / get_storyboard) sets that chapter's own list, which ADDS to the project's there (the chapter's entry for a module wins, so a chapter can hold another version); modules: [] with chapter_id means NO shared modules in that chapter (a DOM chapter in a 3D film); modules: null with chapter_id makes the chapter inherit again, without it clears the project list. A scene that pins a module itself keeps its own version; data-tc-runtime="none" on any element opts a scene out. Applies at land: scenes landed earlier keep what they were landed with until re-landed. Returns the whole runtime. Free.
| Input | Type | Description |
|---|---|---|
project_id required | string | Project id. |
modules required | array | null | Module refs "id@version", in load order (a module's requirements first). null clears. |
chapter_id | string | A chapter id (get_storyboard lists them). Sets this chapter's own list, which adds to the project's; [] = none in this chapter. |
expected_version | integer | The project's edit_version (from get_project or the last project-level write's response). Optional: when sent, the write is refused with a conflict (current_version, last_writer) if anyone changed the project settings since — nothing is written. Omit to write unconditionally. |
transpose_project
Transpose a project
Make a NEW project about a NEW topic on an existing project's skeleton: same chapter count and roles, word weight per chapter, block counts and scenes-per-block rhythm, theme / template / voice / music / duration (each overridable). dry_run:true returns the structure brief that will be mirrored — show it, confirm, then run. Planning is free; the new project rests at draft (poll get_project_status). Then link_transposed_references to carry the source designs over, and resolve_project (dry_run first) to generate. Exactly one of topic / script.
| Input | Type | Description |
|---|---|---|
project_id required | string | The SOURCE project whose structure is mirrored. |
topic | string | The new brief: subject, angle, tone. |
script | string | The user's own narration for the new video, reshaped onto the skeleton. |
name | string | Project name (default derived from the topic). |
workspace_id | string | Workspace for the new project (default the source's). |
duration_seconds | number | Target length; default the source's. The shape scales, the chapter count does not. |
theme_slug | string | Theme override; default the source's. |
dry_run | boolean | Return the structure brief without creating anything. |
references | array | Projects whose FORM to borrow on top of the mirrored skeleton — include the source itself to carry its format and look, not only its structure. Other projects of yours whose FORM to borrow — format, look, scene jobs, staging devices, rules — read as subject-free gists (see get_project_gist). Up to 3. "My stickman one, but about X" → that project; "and the infographic scenes from Y" → add Y with borrow "only its diagram scenes". The first sets the overall format and look. The planner and visual director use them; the new video's subject still comes only from its own brief. |