com.framesail/framesail
REMOTE · API.FRAMESAIL.COM · SCANNED AUG 3
Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 9752 tokens (~143/item across 68 items; 68 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · api.framesail.com
claude mcp add --transport http com-framesail-framesail https://api.framesail.com/mcp
[mcp_servers.com-framesail-framesail] url = "https://api.framesail.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-framesail-framesail": {
"type": "remote",
"url": "https://api.framesail.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-framesail-framesail --url https://api.framesail.com/mcp --transport streamable-http
mcp_servers:
com-framesail-framesail:
url: "https://api.framesail.com/mcp" {
"mcpServers": {
"com-framesail-framesail": {
"type": "http",
"url": "https://api.framesail.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +5
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 73
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://api.framesail.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.framesail.com | CN=YE2,O=Let's Encrypt,C=US | 20 Jun 2026 | 18 Sept 2026 | ECDSA 256 | ECDSA-SHA384 | 5c6b1cef4a9c696c389c6d9edab9fff5d2e |
| SANs: api.framesail.com | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
DNSSEC insecure
Validation of api.framesail.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| framesail.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://api.framesail.com/.well-known/oauth-protected-resource/mcp"
Bearer resource_metadata="https://api.framesail.com/.well-known/oauth-protected-resource/mcp" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| content-security-policy | default-src 'none'; frame-ancestors 'none' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
Protected resource metadata
| Document | https://api.framesail.com/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://api.framesail.com/mcp |
| Authorisation server | https://api.framesail.com |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.framesail.com/mcp | Verified | 200 | |
| http (plaintext) | http://api.framesail.com/mcp | HTTPS enforced | 301 | https://api.framesail.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
activate_script_version Activate script version ~85
Switch the project's active script to another saved version (ids come from get_script's version list — every save_script creates one). Re-run scan_script / rescan_voice_blocks afterwards if the text differs, since downstream artifacts follow the active version.
| Name | Type | Req | Description |
|---|---|---|---|
| script_id | string | yes | ID of the script version to activate, from get_script's version list |
No output schema declared.
No examples provided.
add_music_track Add music track ~210
Add background music to the project from the audio library (find track ids with browse_audio_library, category="music"). Defaults loop the track under the whole video at bed level (volume 0.12 ≈ -18.4 dB under narration — don't raise it without being asked); re-run export_video to hear it.
| Name | Type | Req | Description |
|---|---|---|---|
| library_track_id | string | yes | Audio library track ID, from browse_audio_library(category="music") |
| loop | boolean | — | True loops the track under the whole video; false plays it once |
| name | string | — | Display name for the track on the project's timeline |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| start_frame | integer | — | Timeline frame at which the track starts (0 = start of the video) |
| volume | number | — | Playback volume 0-1; the 0.12 default sits at bed level under narration — don't raise it unless asked |
No output schema declared.
No examples provided.
add_segment_sfx Add segment sound effect ~111
Attach a sound effect from the audio library to a segment (find track ids via browse_audio_library with category="sfx"). Re-run build_scenes to get it onto the timeline.
| Name | Type | Req | Description |
|---|---|---|---|
| library_track_id | string | yes | Audio library track ID, from browse_audio_library(category="sfx") |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
No output schema declared.
No examples provided.
analyze_style Re-analyze style ~59
Re-run style analysis (after changing a style's inputs). Async — await_jobs(style_id=...) until the style_analysis job completes.
| Name | Type | Req | Description |
|---|---|---|---|
| style_id | string | yes | ID of the style to re-analyze, from create_style or list_styles |
No output schema declared.
No examples provided.
await_jobs Wait for jobs ~179
Block (server-side) until the scope has no pending/running jobs, or the timeout passes — use this instead of polling get_workflow_status yourself. Returns {done, jobs}. If done=false the work is still running: just call await_jobs again (a 3-5 minute storyboard takes a few consecutive calls). Keep timeout_seconds <= 50 so the client doesn't time out the tool call.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | — | Project ID whose jobs to wait for; pass exactly one of project_id or style_id |
| style_id | string | — | Style ID whose analysis/template jobs to wait for; pass exactly one of project_id or style_id |
| timeout_seconds | integer | — | Max seconds to block server-side before returning done=false; keep <= 50 so the client doesn't time out the tool call |
No output schema declared.
No examples provided.
browse_audio_library Browse audio library ~132
Browse the audio library for background music and sound effects. category: "music" | "sfx". Returns track ids for add_music_track / add_segment_sfx.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | — | Track kind: "music" (background tracks) or "sfx" (sound effects); empty returns both |
| genre | string | — | Filter by the track's genre tag; empty for no filter |
| mood | string | — | Filter by the track's mood tag; empty for no filter |
| search | string | — | Free-text search over track names/descriptions; empty for no filter |
No output schema declared.
No examples provided.
build_scenes Build scenes ~56
Compile segments + assets + voiceover into the editor/render timeline (scenes). Run after segment assets are complete, before export.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
change_segment_type Change segment type ~147
Change a segment's visual type: "image" | "video" | "overlay_scene". carry_frame=true reuses the already-rendered image as the video start frame (or vice versa) instead of recreating it.
| Name | Type | Req | Description |
|---|---|---|---|
| carry_frame | boolean | — | True reuses the already-rendered frame as the new type's starting visual instead of recreating it from scratch |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
| segment_type | string | yes | New visual type: "image", "video", or "overlay_scene" |
No output schema declared.
No examples provided.
combine_segments Combine segments ~147
Merge a segment with an adjacent one (segment numbers must be neighbors). keep: "this" | "other" — whose creative data survives. Later segments renumber — re-check get_segments before further edits.
| Name | Type | Req | Description |
|---|---|---|---|
| keep | string | — | Whose creative data survives the merge: "this" (segment_number) or "other" (with_segment_number) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
| with_segment_number | integer | yes | 1-based number of the adjacent segment to merge with (must neighbor segment_number) |
No output schema declared.
No examples provided.
create_asset Create asset ~138
Manually add a character/environment/object the scan missed. asset_type: "character" | "environment" | "object". The description is the generation-facing spec of its look — be specific.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | yes | Kind of asset: "character", "environment", or "object" |
| description | string | — | Generation-facing spec of the asset's look; every shot renders from it, so be specific |
| name | string | yes | Asset name as the script refers to it (e.g. the character's name) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
create_channel Create channel ~73
Create a new channel — the container for projects and their reusable styles. Use when the user wants a fresh creative identity rather than adding to an existing channel.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | Optional free-text description of the channel's content focus |
| name | string | yes | Display name for the new channel |
No output schema declared.
No examples provided.
create_project Create project ~116
Create a project. The description (the video concept/topic) seeds script generation, so write a meaningful one. The response's web_url is the project's page in the web app — share it so the user can follow along.
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | ID of the channel to create the project in, from list_channels or create_channel |
| description | string | — | The video concept/topic; seeds script generation, so make it specific and meaningful |
| title | string | yes | Project title shown in the app |
No output schema declared.
No examples provided.
create_style Create style ~268
Create a style. Two mutually exclusive paths: References (best): inputs=[{"input_type": "youtube" | "text", "value": "<url or description>"}] — YouTube videos are watched and text directions read; async analysis writes the style's art/narrative/director fields: await_jobs(style_id=...) before using the style. (Image/video FILE references require the multipart REST endpoint POST /styles.) Presets (instant, no analysis): presets={"art_style": id, "narrative_style": id, "director_style": id} — all three axes, ids from list_style_presets.
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | ID of the channel to create the style in, from list_channels |
| inputs | — | — | Reference material to analyze, [{"input_type": "youtube" | "text", "value": "<url or description>"}]; triggers an async analysis job. Mutually exclusive with presets |
| name | string | yes | Display name for the style |
| presets | — | — | Preset IDs per axis, {"art_style": id, "narrative_style": id, "director_style": id}, from list_style_presets; instant, no analysis. Mutually exclusive with inputs |
No output schema declared.
No examples provided.
delete_asset Delete asset ~41
Delete a project asset (e.g. one the scan over-extracted).
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | ID of the asset to delete, from list_assets |
No output schema declared.
No examples provided.
delete_project Delete project ~62
Permanently delete a project and everything in it (script versions, assets, voiceover, segments, renders). Irreversible — confirm with your user first.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | ID of the project to permanently delete, from list_projects |
No output schema declared.
No examples provided.
delete_style Delete style ~63
Delete a style (e.g. a failed analysis experiment). Don't delete a style that projects still use as their default — rebind them first with set_project_style.
| Name | Type | Req | Description |
|---|---|---|---|
| style_id | string | yes | ID of the style to delete, from list_styles |
No output schema declared.
No examples provided.
director_note Director note (one scene) ~162
Edit ONE scene with a natural-language note (the same director chat the editor UI uses): move/restyle/add/remove layers and overlays, retime, etc. Synchronous — returns the applied mutations + updated scene. Use list_scenes to find scene ids; for notes spanning the whole video use project_director_note instead.
| Name | Type | Req | Description |
|---|---|---|---|
| conversation_history | — | — | Prior chat turns as [{"role": ..., "content": ...}] to continue an editing conversation on this scene; omit to start fresh |
| message | string | yes | Natural-language edit note for this scene, e.g. "move the caption to the top" or "remove the overlay" |
| scene_id | string | yes | ID of the scene to edit, from list_scenes |
No output schema declared.
No examples provided.
export_video Export video ~69
Render the final MP4 (Remotion). Fetches the current timeline and queues the render. Async — poll get_workflow_status for the video_export job, then call get_video_url.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
generate_asset_reference Generate asset reference image ~205
Render an asset's reference image in the channel's art style — the visual anchor that keeps a character/environment looking identical across every shot. EVERY character, environment, and object asset needs one before generate_voiceover (the server enforces this; fire the jobs for all assets, then one await_jobs). Async — the job writes the image onto the asset row: await_jobs(project_id), then list_assets and view_image the file_path to check likeness.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | ID of the asset to render a reference image for, from list_assets |
| editable_sections | — | — | Per-call prompt section overrides, keyed by section name; see get_section_template for the reference-image job |
| model | string | — | Image model ID; empty uses the server default for reference images |
| settings | — | — | Model-specific settings (e.g. image quality/orientation); valid keys come from the model's settings_schema in list_models |
No output schema declared.
No examples provided.
generate_script Generate script ~134
Generate the project's script from its description/concept and the channel's narrative style. Async — returns {job_id}; poll get_workflow_status.
| Name | Type | Req | Description |
|---|---|---|---|
| editable_sections | — | — | Per-call prompt section overrides, keyed by section name; see get_section_template("script") for the sections this job exposes |
| model | string | — | Model ID to generate with; empty uses the default (see list_models("script")) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| settings | — | — | Model-specific settings; valid keys come from the model's settings_schema in list_models("script") |
No output schema declared.
No examples provided.
generate_segments Render segment assets ~243
Render every actionable segment asset (images, video clips, overlays) across the project, in dependency order. THE most expensive call in the pipeline: ALWAYS dry_run=true first, show your user the estimate next to get_credit_balance, and wait for a fresh yes before the real run — prior blanket permission ("do the whole thing") does not cover this spend. Pass segment_numbers to render only a subset — e.g. segments 1-18 for the opening minute before committing to the full video. Safe to re-run: completed and currently-generating assets are skipped, so a second call only picks up new/failed work. Async — one job per asset; await_jobs until all complete.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | — | True returns the credit-cost estimate without rendering anything; ALWAYS run true first and get user approval before the real run |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_numbers | — | — | 1-based segment numbers (from get_segments) to render only a subset; omit to render every actionable asset in the project |
No output schema declared.
No examples provided.
generate_storyboard Generate storyboard ~207
Plan the full visual storyboard: segments, shot pacing, image/video prompts, overlays, continuation chains — driven by the channel's director and art styles. Requires voiceover to exist (timing comes from it). BEFORE calling: confirm the project's asset_mix with your user (image vs video vs generated_graphic percentages, update_project) — the storyboard plans against it and video-heavy mixes multiply the later render cost. Async — returns {job_id}; this is the longest LLM step.
| Name | Type | Req | Description |
|---|---|---|---|
| editable_sections | — | — | Per-call prompt section overrides, keyed by section name; see get_section_template("storyboard") |
| model | string | — | Model ID to plan with; empty uses the default (see list_models("storyboard")) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| settings | — | — | Model-specific settings; valid keys come from the model's settings_schema in list_models("storyboard") |
No output schema declared.
No examples provided.
generate_style_template Generate style template ~252
Render one of a style's two template images — a REAL step of style setup, not an optional extra: a style isn't finished until both its character and environment templates are rendered (the app shows them on the style card). Asset reference images render against them (characters → character template; environments and objects → environment template), and segment renders fall back on them when a shot has no asset reference — so finish BOTH before generate_asset_reference. Run once per template_type ("character" | "environment") for every new style; skip only types the style already has (get_style shows them). Async — await_jobs(style_id=...), then get_style.
| Name | Type | Req | Description |
|---|---|---|---|
| editable_sections | — | — | Per-call prompt section overrides, keyed by section name; see get_section_template for the template job |
| model | string | — | Image model ID; empty uses the template job's default (see list_models) |
| style_id | string | yes | Style ID, as returned by create_style or list_styles |
| template_type | string | yes | Which of the style's two template images to render: "character" or "environment" — run once for each |
No output schema declared.
No examples provided.
generate_voiceover Generate voiceover ~274
Generate TTS audio for the project's voice blocks. Without voice_block_ids it fills gaps: only blocks with no audio yet run, so re-calling it is always safe (already-generated and currently-generating blocks are skipped, never re-billed). Pass voice_block_ids to explicitly REgenerate those blocks (e.g. after changing a block's voice). Speakers must have voices bound first — set_narrator_voice / set_character_voice. Optional editable_sections/settings apply to every selected block (see get_section_template("voice_block") and list_models("voice_block")). Async — returns one job per block.
| Name | Type | Req | Description |
|---|---|---|---|
| editable_sections | — | — | Per-call prompt section overrides applied to every selected block; see get_section_template("voice_block") |
| model | string | — | TTS model ID; empty uses the default (see list_models("voice_block")) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| settings | — | — | Model-specific TTS settings applied to every selected block; valid keys come from the model's settings_schema in list_models("voice_block") |
| voice_block_ids | — | — | Block IDs (from list_voice_blocks) to explicitly REgenerate; omit to fill gaps — only blocks with no audio yet run |
No output schema declared.
No examples provided.
get_credit_balance Get credit balance ~55
Current credit balance + plan info. Check before expensive steps (a full segment render can cost hundreds of credits — generate_segments dry_run gives the estimate). Jobs covered by a BYOK provider key bill 0.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_pipeline_progress Get pipeline progress ~191
THE resume/orientation tool: one call returns every pipeline step's state (script -> scan -> reference_images -> voices -> voiceover -> style_templates -> storyboard -> segment_assets -> scenes -> export), any running jobs, and a next_action telling you exactly what to do next. Call this when picking up an existing project, after any await_jobs, or whenever you're unsure where a video stands — never guess pipeline position. Every step carries a web_url — the page in the Framesail web app where your user can see that step's output. Share it whenever you present a step's results ("review the storyboard here: ...") so they can inspect and edit in the browser; the app and this API act on the same live state.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
get_project Get project ~43
Fetch a project row — settings, voice config, default style, export URL.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
get_script Get script ~87
Read the active script's full text + the version list. Use this to show the script to your user for review/feedback before scan_script — the review-edit-resave loop (get_script -> discuss -> save_script) is the expected workflow when the user wants input.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
get_section_template Get section template ~93
Inspect the prompt sections a generation job exposes for per-call override via editable_sections (jobs: script, script_scan, storyboard, segment_image, segment_video, voice_block, ...). Sections marked locked cannot be overridden.
| Name | Type | Req | Description |
|---|---|---|---|
| job | string | yes | Generation job name, e.g. "script", "script_scan", "storyboard", "segment_image", "segment_video", "voice_block" |
No output schema declared.
No examples provided.
get_segment_assets Get segment assets ~95
List one segment's assets (images/video/overlays) including their status, config (prompts, model), and public URLs of rendered files — pass an image's public_url to view_image to actually look at it.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
No output schema declared.
No examples provided.
get_segments List segments ~177
List the storyboard's segments (narration span, type, duration, creative direction). The 1-based segment_number is the handle every segment tool takes (update/split/combine/continuation/regenerate) — you never need a UUID. Each segment also reports `continues_from_segment`. When set, this shot is a CONTINUATION of that earlier segment: its rendered frame carries over (same composition, characters, and setting) and only the delta changes — an added overlay, a shifted expression, a closer angle, a slow reframe. Null means a fresh, independent shot. The storyboard plans these chains automatically; adjust them with set_segment_continuation.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
get_style Get style ~75
Fetch one style row — its inputs (reference material) and analyzed fields (art_style, narrative_style, director_style, script_prompt, ...). Show fields to the user for review; fine-tune with update_style_fields.
| Name | Type | Req | Description |
|---|---|---|---|
| style_id | string | yes | Style ID, as returned by create_style or list_styles |
No output schema declared.
No examples provided.
get_video_url Get video download URL ~37
Download URL for the most recent completed export.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
get_workflow_status Get workflow status ~188
Poll this between steps: returns active + recently-finished AI jobs (scope by project_id, or style_id for style analysis), plus per-segment- asset render statuses for projects. A step is done when its jobs reach status=complete (or error, with a user-readable message). NOTE: finished jobs drop out of `jobs` after ~30s — a short list does NOT mean work was lost; judge render batches by `segment_assets` statuses (or get_pipeline_progress), never by counting jobs. Prefer await_jobs over polling this in a tight loop.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | — | Project ID to scope jobs to; pass exactly one of project_id or style_id |
| style_id | string | — | Style ID to scope jobs to (style analysis); pass exactly one of project_id or style_id |
No output schema declared.
No examples provided.
list_assets List assets ~175
List the project's assets extracted by scan_script — characters, environments, objects. Each has a description (the spec every shot uses to render it — surfaced top-level here; the raw row nests it at ai_output.description), an optional reference image (file_path is a public URL — view_image it), and for characters a voice_id. Review these after scan_script: fix descriptions, then generate_asset_reference for each one (all of them need a reference image before voiceover). asset_type filter: "character" | "environment" | "object".
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | — | Optional filter: "character", "environment", or "object"; empty lists all asset types |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
list_channels List channels ~38
List your channels. Every project lives in a channel, which owns the reusable styles (art/narrative/director) that drive generation.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_models List models ~109
List the models allowed for a generation job, with display names, credit estimates, and each model's settings_schema — the valid keys for that tool's `settings` param (e.g. image quality/orientation, video duration). The first entry is the default every tool uses when model is omitted.
| Name | Type | Req | Description |
|---|---|---|---|
| job | string | yes | Generation job whose allowed models to list, e.g. "script", "storyboard", "segment_image", "segment_video", "voice_block" |
No output schema declared.
No examples provided.
list_music_tracks List music tracks ~41
List the project's background music tracks (volume, loop, timing).
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
list_projects List projects ~37
List projects in a channel.
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | ID of the channel whose projects to list, from list_channels or create_channel |
No output schema declared.
No examples provided.
list_provider_keys List provider keys ~24
List registered BYOK providers (masked — only the last 4 characters).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_scenes List scenes ~40
List the project's scenes (composition layers, durations, layout).
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
list_style_presets List style presets ~117
The curated preset catalog for the no-AI style creation path, grouped by axis (art_style / narrative_style / director_style). Show the user the labels + descriptions and let THEM pick one per axis — don't choose silently. Art presets include preview image URLs (view_image works on them). Create with create_style(presets={axis: id, ...}) — instant, no analysis job. Full field text lands on the style row (get_style shows it after creation).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_styles List styles ~69
List the channel's style rows (variable groups). Styles hold the art_style / narrative_style / director_style / script_prompt fields that drive every generation step, plus any custom @variables.
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | ID of the channel that owns the styles, from list_channels |
No output schema declared.
No examples provided.
list_voice_blocks List voice blocks ~50
List the project's voice blocks (per-speaker narration chunks) with their audio status and assigned voices.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
list_voices List voices ~100
List available TTS voices (id, label, preview audio URL) for a provider: "minimax" (default engine) or "elevenlabs". Match the project's voice_tts_provider (see get_project) so picked ids work with its engine.
| Name | Type | Req | Description |
|---|---|---|---|
| provider | string | — | TTS engine to list voices for: "minimax" (default engine) or "elevenlabs"; match the project's voice_tts_provider |
No output schema declared.
No examples provided.
project_director_note Director note (whole project) ~141
Apply a project-WIDE director note ("make the intro punchier", "all captions bigger", "tighten pacing in the back half"). A routing pass picks only the scenes the note applies to and edits each one. Synchronous — a few seconds per affected scene. Returns the per-scene results; re-run export_video afterwards to see changes in the final render.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Project-wide director note in natural language, e.g. "make the intro punchier" or "all captions bigger" |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
regenerate_segment_asset Regenerate segment asset ~262
Regenerate a segment's primary image or video with optional overrides — the API equivalent of the editor's expert drawer. asset_type: "image" | "video" (for a video segment, "image" targets its start frame). Use a different model, override prompt sections (see get_section_template("segment_image")), or tweak settings (e.g. image quality), then re-run just this asset. Async — returns {job_id}.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | yes | "image" or "video"; for a video segment, "image" targets its start frame |
| editable_sections | — | — | Per-call prompt section overrides, keyed by section name; see get_section_template("segment_image") or ("segment_video") |
| model | string | — | Model ID to render with; empty uses the job's default (see list_models("segment_image") / list_models("segment_video")) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
| settings | — | — | Model-specific settings (e.g. image quality, video duration); valid keys come from the model's settings_schema in list_models |
No output schema declared.
No examples provided.
remove_music_track Remove music track ~37
Remove a music track from the project.
| Name | Type | Req | Description |
|---|---|---|---|
| track_id | string | yes | ID of the music track to remove, from list_music_tracks |
No output schema declared.
No examples provided.
remove_segment_sfx Remove segment sound effect ~122
Remove a sound effect from a segment. With one SFX attached, no name needed; with several, pass sfx_name (the asset name shown by get_segment_assets).
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
| sfx_name | string | — | Name of the SFX asset to remove, as shown by get_segment_assets; needed only when the segment has several SFX attached |
No output schema declared.
No examples provided.
rescan_voice_blocks Rescan voice blocks ~117
Re-extract voice blocks from the active script WITHOUT touching assets or their reference images — the non-destructive alternative to scan_script after a script edit. Existing audio is superseded by the new block split, so re-run generate_voiceover afterwards. Async — returns {job_id}.
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | — | Model ID for the re-extraction; empty uses the default (see list_models("voice_block_scan")) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.