Pick a real launch video as a template, get its frame-by-frame breakdown and plan your own remake.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetch one Kuchi reference by the id from search, with its notes, links and metadata.
Video id from search
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http kuchi https://kuchi.kalarislabs.com/mcp
Fetch one Kuchi reference by the id from search, with its notes, links and metadata.
| Argument | Type | Description |
|---|---|---|
| id* | string | Video id from search |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Video id from search"
}
},
"additionalProperties": false
}Check a drafted or finished remake against the rules for using a Kuchi reference. Pass your shot list: timing, the reference shot each one rebuilds, how it enters, the on-screen text, and where each asset came from. Flags text that carries over the reference's brand, assets taken from the reference, generated logos or product UI, placeholders, timing gaps, and shots whose length or entrance drifted from the reference shot they rebuild. Also returns compare_frames: the exact time in your video and in the reference that show the same moment, to set side by side. passed=false means there are errors to fix. It checks what you report, not the rendered file: Kuchi never receives your video. Be accurate about each asset's source.
| Argument | Type | Description |
|---|---|---|
| shots* | array | Your shots in order |
| reference* | string | A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL |
| music_source | string | Where the soundtrack came from |
| product_name* | string | The user's product name |
| target_seconds | number | The length you were aiming for |
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference",
"product_name",
"shots"
],
"properties": {
"shots": {
"type": "array",
"items": {
"type": "object",
"required": [
"start_s",
"end_s"
],
"properties": {
"end_s": {
"type": "number",
"maximum": 600,
"minimum": 0,
"description": "When it ends, in seconds"
},
"assets": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"source"
],
"properties": {
"kind": {
"enum": [
"logo",
"screenshot",
"screen_recording",
"product_photo",
"illustration",
"music",
"voiceover",
"font",
"other"
],
"type": "string"
},
"source": {
"enum": [
"user",
"generated",
"stock",
"placeholder",
"reference"
],
"type": "string",
"description": "'user' = the user supplied it; 'reference' = taken from the Kuchi reference video"
}
},
"additionalProperties": false
},
"maxItems": 20
},
"enters": {
"enum": [
"cut",
"transition",
"hold",
"blank_black",
"blank_white"
],
"type": "string",
"description": "How this shot enters in your video"
},
"start_s": {
"type": "number",
"maximum": 600,
"minimum": 0,
"description": "When the shot starts in your video, in seconds"
},
"on_screen_text": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 20,
"description": "Every line of text visible in this shot"
},
"reference_shot": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "The reference shot this one rebuilds (the blueprint's reference_shot). Needed for the timing check and compare_frames."
}
},
"additionalProperties": false
},
"maxItems": 150,
"minItems": 1,
"description": "Your shots in order"
},
"reference": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL"
},
"music_source": {
"enum": [
"none",
"user",
"licensed",
"generated",
"reference"
],
"type": "string",
"description": "Where the soundtrack came from"
},
"product_name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The user's product name"
},
"target_seconds": {
"type": "number",
"maximum": 600,
"minimum": 1,
"description": "The length you were aiming for"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
}
},
"additionalProperties": false
}Get the shot-by-shot breakdown of one Kuchi reference, measured from every frame of its video file. Returns exact facts (fps, frame count, length), every shot's start and end in seconds and frames, how it enters (cut, animated transition, hold or blank frame), how much of the frame moves, its tone and colors, motion and loudness per second, and storyboard sheets: grids of real frames stamped with their time and shot number. Each shot says where to see it: its frame on the overview sheet, when it has one, and the detail sheets that show it. Kuchi measures when things happen; what each shot shows is read from the frames. The result lists the shot kinds to classify against, and the analysis goes to kuchi_plan_remake as shot_analysis. Set storyboard="overview" (one frame per shot, or per longest shot when there are many) or "detail" (evenly spaced frames that cover every shot, page with detail_sheet) to receive that sheet as an image. Use it before kuchi_plan_remake to study a reference, and while building to match each shot.
| Argument | Type | Description |
|---|---|---|
| reference* | string | A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL |
| shot_limit | integer | Shots per page (1-60, default 40) |
| storyboard | string | 'links' (default) returns sheet URLs only; 'overview' or 'detail' also returns one sheet as an image |
| shot_offset | integer | Shots to skip, for videos with many shots |
| detail_sheet |
Get one Kuchi reference by id, slug, Kuchi link or X post URL: playable video file, poster, storyboard sheet, length, size, aspect ratio, styles, measured rhythm and notes on its motion. Use kuchi_search_videos to find ids and kuchi_get_breakdown for the shot list.
| Argument | Type | Description |
|---|---|---|
| reference* | string | A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL |
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference"
],
"properties": {
"reference": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
}
},
"additionalProperties": false
}Get Kuchi's workflow for turning a reference into the user's own launch video: how to pick a reference, how to analyse each shot from the storyboard sheets, what to ask the user for, how to match timing to the frame, and how to check the result against the reference. Returns Markdown. Pass step to get one step ("find", "study", "plan", "build" or "check") with the rules that hold for all of them, or leave it out for the whole workflow. Read it before a first remake; the other tools return the data each step works on.
| Argument | Type | Description |
|---|---|---|
| step | string | 'all' (default) for the whole workflow, or one step: 'find', 'study', 'plan', 'build' or 'check' |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"step": {
"enum": [
"all",
"find",
"study",
"plan",
"build",
"check"
],
"type": "string",
"default": "all",
"description": "'all' (default) for the whole workflow, or one step: 'find', 'study', 'plan', 'build' or 'check'"
}
},
"additionalProperties": false
}List every motion style, category, format, aspect ratio, pace and theme in Kuchi, with how many videos each has, to use as filters in kuchi_search_videos. Also lists the shot kinds a shot is classified into when you analyse a storyboard.
| Argument | Type | Description |
|---|---|---|
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
}
},
"additionalProperties": false
}Plan a launch video for the user's product, using a Kuchi reference as an inspiration template. Pass the user's own product details and assets, and your shot_analysis: the kind of each reference shot, read from the storyboard sheets of kuchi_get_breakdown. Returns what to borrow from the reference (rhythm, color roles, motion), a blueprint that re-times the reference's shots to the target length on whole frames and says what content of the user's goes in each shot, the rules for using a reference, and missing_inputs: questions to ask the user before building. ready=false means required inputs are missing. Shots without a kind keep their exact timing and get placeholder content. Call it again with the user's answers and your analysis until ready=true and every shot has a kind. Only list assets the user actually gave you. It does not render video; build it with your own tools, then call kuchi_check_remake.
| Argument | Type | Description |
|---|---|---|
| fps | number | Frame rate you will render at, e.g. 30 or 60; defaults to the reference's. The blueprint's frame numbers use it. |
| tone | string | e.g. 'calm and premium', 'playful' |
| fonts | array | Brand typefaces |
| assets | array | Assets the user has provided. Only list assets the user actually gave you. |
| audience | string | Who the video is for |
| reference* |
Search Kuchi's launch-video references by product type, brand, motion style, format, pace, theme, aspect ratio or length. Returns one page of videos with notes on their motion, measured rhythm (shots, pace, theme), a poster image, a storyboard sheet and a playable Kuchi link. Use kuchi_list_filters for valid filter values, kuchi_get_video for one video's details and kuchi_get_breakdown for its shot list. Examples: - "dark cinematic AI launch" -> query="AI", theme="dark" - "a short vertical teaser" -> aspect_ratio="9:16", max_seconds=20 - "launch videos built from app UI" -> style="UI motion" - "fast-cut launch with charts" -> pace="fast", style="Charts"
| Argument | Type | Description |
|---|---|---|
| pace | string | Measured cutting pace: slow is under 1.5 shot changes per 10 s, rapid is 7 or more |
| sort | string | 'relevance' (default) or 'newest' |
| limit | integer | Videos per page (1-20, default 6) |
| query | string | Keywords matched against titles, brands, styles, formats, motion notes and shot descriptions |
| style | string | Exact motion style, e.g. 'UI motion', 'Kinetic type', 'Device motion' |
| theme | string | Measured overall brightness |
| format | string |
Send feedback about this server to its developers: a capability you needed that no tool provides, a tool that failed or misled you, or something that worked well. Records the feedback; it does not add or change tools. Leave out personal or sensitive details.
| Argument | Type | Description |
|---|---|---|
| details | string | Optional longer context: what you tried, exact parameter values, the error text you saw, and any workaround you used. Omit when the summary says it all. |
| summary* | string | One self-contained sentence. For 'missing_capability': the capability you needed, e.g. 'No tool to delete multiple cohorts in one call.' For 'issue': the tool and the problem, e.g. 'query-trends rejects relative date ranges with an unclear error.' |
| sentiment | string | Optional: how the experience felt overall. |
| tool_name | string | Optional: the existing tool this feedback is about (for 'issue' or 'praise'). Leave empty for 'missing_capability' - the point is that no tool fits. |
| feedback_type* | string | What kind of feedback this is. Use 'missing_capability' when the tool you needed does not exist in the tool list - nothing failed, the capability is absent. Use 'issue' when an existing tool behaved badly: it failed, returned a confusing error, or its description or schema misled you. Use 'praise' when something worked notably well. Use 'other' for anything else. |
| task_completed | boolean |
Get a short list of Kuchi launch videos for the user to choose their template from, ranked against what they want and what they can supply. Pass what is known: a few words on the product and the feel wanted, preferred styles, theme, pace, aspect ratio, target length and the kinds of asset the user has. All are optional, and they rank rather than filter. Returns up to 6 numbered choices, each with what fits, what differs, what the user would need to supply, a poster and a watch link; a recommended choice; a question to put to the user; and the gallery link, where the user can pick any video and paste its link instead. Use it when the user wants a launch video and has not picked a reference. Use kuchi_search_videos to browse or filter the whole library.
| Argument | Type | Description |
|---|---|---|
| pace | string | Preferred cutting pace |
| count | integer | Choices to return (1-6, default 3) |
| theme | string | Preferred overall brightness |
| styles | array | Preferred motion styles, e.g. ['UI motion', 'Kinetic type']; kuchi_list_filters has the full list |
| exclude | array | Videos the user has already turned down |
| looking_for | string | A few words on the product and the feel wanted, e.g. 'AI note-taking app, calm and premium' |
Search Kuchi launch-video references. Returns ids to pass to fetch. Same catalog as kuchi_search_videos.
| Argument | Type | Description |
|---|---|---|
| query* | string | Keywords, e.g. "pastel UI cursor demo" |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 300,
"description": "Keywords, e.g. \"pastel UI cursor demo\""
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
| integer |
| Which detail sheet to return when storyboard="detail" (1 is the start of the video) |
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference"
],
"properties": {
"reference": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL"
},
"shot_limit": {
"type": "integer",
"default": 40,
"maximum": 60,
"minimum": 1,
"description": "Shots per page (1-60, default 40)"
},
"storyboard": {
"enum": [
"links",
"overview",
"detail"
],
"type": "string",
"default": "links",
"description": "'links' (default) returns sheet URLs only; 'overview' or 'detail' also returns one sheet as an image"
},
"shot_offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Shots to skip, for videos with many shots"
},
"detail_sheet": {
"type": "integer",
"default": 1,
"maximum": 40,
"minimum": 1,
"description": "Which detail sheet to return when storyboard=\"detail\" (1 is the start of the video)"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
}
},
"additionalProperties": false
}| string |
| A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL |
| shot_limit | integer | Blueprint shots per page (1-40, default 40) |
| shot_offset | integer | Blueprint shots to skip, for references with many shots |
| aspect_ratio | string | Output ratio; defaults to the reference's |
| brand_colors | array | Brand colors, e.g. ['#0B0B0F', '#7C5CFF'] |
| key_features | array | 1-3 features or moments to show, most important first |
| product_name* | string | The user's product name |
| shot_analysis | array | Your reading of the reference's shots from its storyboard sheets. One entry per shot; send as many as you have analysed. |
| call_to_action | string | The closing line or URL, e.g. 'Try it at acme.com' |
| target_seconds | integer | Target length in seconds; defaults to the reference's length |
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
| product_description | string | What the product does and who it is for, in the user's words |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference",
"product_name"
],
"properties": {
"fps": {
"type": "number",
"maximum": 120,
"minimum": 12,
"description": "Frame rate you will render at, e.g. 30 or 60; defaults to the reference's. The blueprint's frame numbers use it."
},
"tone": {
"type": "string",
"maxLength": 100,
"description": "e.g. 'calm and premium', 'playful'"
},
"fonts": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 4,
"description": "Brand typefaces"
},
"assets": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"description"
],
"properties": {
"kind": {
"enum": [
"logo",
"screenshot",
"screen_recording",
"product_photo",
"illustration",
"music",
"voiceover",
"font",
"other"
],
"type": "string",
"description": "What the asset is"
},
"location": {
"type": "string",
"maxLength": 500,
"description": "URL or file path, if the user gave one. Kuchi never opens it."
},
"description": {
"type": "string",
"maxLength": 200,
"description": "What it shows, e.g. 'Dashboard, dark mode'"
}
},
"additionalProperties": false
},
"maxItems": 30,
"description": "Assets the user has provided. Only list assets the user actually gave you."
},
"audience": {
"type": "string",
"maxLength": 200,
"description": "Who the video is for"
},
"reference": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL"
},
"shot_limit": {
"type": "integer",
"default": 40,
"maximum": 40,
"minimum": 1,
"description": "Blueprint shots per page (1-40, default 40)"
},
"shot_offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Blueprint shots to skip, for references with many shots"
},
"aspect_ratio": {
"type": "string",
"maxLength": 20,
"description": "Output ratio; defaults to the reference's"
},
"brand_colors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 30
},
"maxItems": 8,
"description": "Brand colors, e.g. ['#0B0B0F', '#7C5CFF']"
},
"key_features": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 6,
"description": "1-3 features or moments to show, most important first"
},
"product_name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The user's product name"
},
"shot_analysis": {
"type": "array",
"items": {
"type": "object",
"required": [
"shot",
"kind"
],
"properties": {
"kind": {
"enum": [
"title_card",
"kinetic_type",
"logo",
"ui_screen",
"ui_closeup",
"device",
"chart",
"character",
"product_render",
"live_action",
"collage",
"abstract",
"end_card",
"blank"
],
"type": "string",
"description": "What the shot is; kuchi_get_breakdown describes each kind"
},
"shot": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "The reference shot's number, from kuchi_get_breakdown"
},
"shows": {
"type": "string",
"maxLength": 200,
"description": "One line on what is on screen and where it sits, e.g. 'Dashboard centered, sidebar left, cursor moves to a button'"
}
},
"additionalProperties": false
},
"maxItems": 150,
"description": "Your reading of the reference's shots from its storyboard sheets. One entry per shot; send as many as you have analysed."
},
"call_to_action": {
"type": "string",
"maxLength": 120,
"description": "The closing line or URL, e.g. 'Try it at acme.com'"
},
"target_seconds": {
"type": "integer",
"maximum": 180,
"minimum": 5,
"description": "Target length in seconds; defaults to the reference's length"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
},
"product_description": {
"type": "string",
"maxLength": 500,
"description": "What the product does and who it is for, in the user's words"
}
},
"additionalProperties": false
}| Format id or name, e.g. 'pastel-ui-cursor-demos' |
| offset | integer | Videos to skip, for pagination |
| category | string | Exact category, e.g. 'AI launch', 'Feature clip', 'Startup launch' |
| max_seconds | number | Only videos at most this long |
| aspect_ratio | string | Exact ratio, e.g. '16:9', '1:1', '9:16' |
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pace": {
"enum": [
"slow",
"medium",
"fast",
"rapid"
],
"type": "string",
"description": "Measured cutting pace: slow is under 1.5 shot changes per 10 s, rapid is 7 or more"
},
"sort": {
"enum": [
"relevance",
"newest"
],
"type": "string",
"default": "relevance",
"description": "'relevance' (default) or 'newest'"
},
"limit": {
"type": "integer",
"default": 6,
"maximum": 20,
"minimum": 1,
"description": "Videos per page (1-20, default 6)"
},
"query": {
"type": "string",
"maxLength": 300,
"description": "Keywords matched against titles, brands, styles, formats, motion notes and shot descriptions"
},
"style": {
"type": "string",
"maxLength": 100,
"description": "Exact motion style, e.g. 'UI motion', 'Kinetic type', 'Device motion'"
},
"theme": {
"enum": [
"dark",
"light",
"mixed"
],
"type": "string",
"description": "Measured overall brightness"
},
"format": {
"type": "string",
"maxLength": 100,
"description": "Format id or name, e.g. 'pastel-ui-cursor-demos'"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Videos to skip, for pagination"
},
"category": {
"type": "string",
"maxLength": 100,
"description": "Exact category, e.g. 'AI launch', 'Feature clip', 'Startup launch'"
},
"max_seconds": {
"type": "number",
"maximum": 600,
"description": "Only videos at most this long",
"exclusiveMinimum": 0
},
"aspect_ratio": {
"type": "string",
"maxLength": 20,
"description": "Exact ratio, e.g. '16:9', '1:1', '9:16'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
}
},
"additionalProperties": false
}| Optional: whether you still completed the user's task despite the problem. |
| friction_points | string | Optional: the specific moments that slowed you down, as short bullet-like sentences, quoting exact tool names, parameters, or error text. |
| suggested_improvement | string | Optional: the concrete change that would have helped, e.g. the tool to add, the description to reword, or the error message to improve. |
{
"type": "object",
"required": [
"feedback_type",
"summary"
],
"properties": {
"details": {
"type": "string",
"description": "Optional longer context: what you tried, exact parameter values, the error text you saw, and any workaround you used. Omit when the summary says it all."
},
"summary": {
"type": "string",
"description": "One self-contained sentence. For 'missing_capability': the capability you needed, e.g. 'No tool to delete multiple cohorts in one call.' For 'issue': the tool and the problem, e.g. 'query-trends rejects relative date ranges with an unclear error.'"
},
"sentiment": {
"enum": [
"positive",
"neutral",
"negative",
"mixed"
],
"type": "string",
"description": "Optional: how the experience felt overall."
},
"tool_name": {
"type": "string",
"description": "Optional: the existing tool this feedback is about (for 'issue' or 'praise'). Leave empty for 'missing_capability' - the point is that no tool fits."
},
"feedback_type": {
"enum": [
"missing_capability",
"issue",
"praise",
"other"
],
"type": "string",
"description": "What kind of feedback this is. Use 'missing_capability' when the tool you needed does not exist in the tool list - nothing failed, the capability is absent. Use 'issue' when an existing tool behaved badly: it failed, returned a confusing error, or its description or schema misled you. Use 'praise' when something worked notably well. Use 'other' for anything else."
},
"task_completed": {
"type": "boolean",
"description": "Optional: whether you still completed the user's task despite the problem."
},
"friction_points": {
"type": "string",
"description": "Optional: the specific moments that slowed you down, as short bullet-like sentences, quoting exact tool names, parameters, or error text."
},
"suggested_improvement": {
"type": "string",
"description": "Optional: the concrete change that would have helped, e.g. the tool to add, the description to reword, or the error message to improve."
}
}
}| aspect_ratio |
| string |
| Output ratio wanted, e.g. '16:9', '1:1', '9:16' |
| target_seconds | integer | Length wanted, in seconds |
| response_format | string | 'markdown' (default) for readable text, 'json' for structured data |
| available_assets | array | The kinds of asset the user can supply. Templates that need something else rank lower and say so. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pace": {
"enum": [
"slow",
"medium",
"fast",
"rapid"
],
"type": "string",
"description": "Preferred cutting pace"
},
"count": {
"type": "integer",
"default": 3,
"maximum": 6,
"minimum": 1,
"description": "Choices to return (1-6, default 3)"
},
"theme": {
"enum": [
"dark",
"light",
"mixed"
],
"type": "string",
"description": "Preferred overall brightness"
},
"styles": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 5,
"description": "Preferred motion styles, e.g. ['UI motion', 'Kinetic type']; kuchi_list_filters has the full list"
},
"exclude": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "A Kuchi video id ('34'), slug, Kuchi link (https://kuchi.kalarislabs.com/#video-34) or the original X post URL"
},
"maxItems": 20,
"description": "Videos the user has already turned down"
},
"looking_for": {
"type": "string",
"maxLength": 300,
"description": "A few words on the product and the feel wanted, e.g. 'AI note-taking app, calm and premium'"
},
"aspect_ratio": {
"type": "string",
"maxLength": 20,
"description": "Output ratio wanted, e.g. '16:9', '1:1', '9:16'"
},
"target_seconds": {
"type": "integer",
"maximum": 180,
"minimum": 5,
"description": "Length wanted, in seconds"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "'markdown' (default) for readable text, 'json' for structured data"
},
"available_assets": {
"type": "array",
"items": {
"enum": [
"logo",
"screenshot",
"screen_recording",
"product_photo",
"illustration",
"music",
"voiceover",
"font",
"other"
],
"type": "string"
},
"maxItems": 9,
"description": "The kinds of asset the user can supply. Templates that need something else rank lower and say so."
}
},
"additionalProperties": false
}