Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4.
healthy
status
68
tools exposed
1538ms
connect latency
993538750f28
schema fingerprint
Tools (68)
list_channels
List your channels. Every project lives in a channel, which owns the
reusable styles (art/narrative/director) that drive generation.
create_channel
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.
list_projects
List projects in a channel.
create_project
Create a project. The description (the video concept/topic) seeds script
generation, so write a meaningful one. Pass video_format='portrait' for a
vertical video — every shot, overlay, and the export are then composed for
a 9:16 frame. The response's web_url is the project's page in the
Patch project fields. Updatable: title, description, asset_mix,
sfx_level, video_concept, voice_mix, voice_tts_provider,
script_target_minutes, narrator_speed, video_format. (The narrator's TTS
voice is NOT here — use set_narrator_voice.)
video_format ('landscape' | 'portrait') is o
delete_project
Permanently delete a project and everything in it (script versions,
assets, voiceover, segments, renders). Irreversible — confirm with your
user first.
set_project_style
Set the project's default style — the style whose art/narrative/director
fields drive its generations. Use after create_style to put a new visual
identity into effect, or to switch a project between channel styles.
update_caption_config
Merge a patch into the project's burned-in caption config (keys like
enabled, plus styling). Read the current value from get_project
(caption_config). Applies at the next export — no rebuild needed.
get_pipeline_progress
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
get_workflow_status
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
await_jobs
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 ca
get_section_template
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.
list_models
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.
generate_script
Generate the project's script from its description/concept and the
channel's narrative style. Async — returns {job_id}; poll get_workflow_status.
get_script
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.
save_script
Save script text (your own draft, or an edited version of the generated
one — saving creates a new version, old versions are kept). Run scan_script
afterwards so assets and voice blocks reflect the new text.
revise_script
AI-rewrite a passage of the active script in the project's narrative
voice (the same in-editor revise the UI offers). selected_text must appear
verbatim in the script; omit it to revise the whole script. Synchronous —
returns {revised_text}, which is NOT saved: splice it over selected_te
activate_script_version
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.
scan_script
Analyze the active script: extracts character/environment/object assets
and splits narration into voice blocks. DESTRUCTIVE on re-run (assets are
recreated, not merged — curated descriptions, reference images, and voices
are lost; prefer rescan_voice_blocks after script edits). Async — r
list_assets
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 — vi
create_asset
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.
update_asset
Rename an asset and/or rewrite its description. If the look changed,
regenerate its reference image afterwards so renders match.
delete_asset
Delete a project asset (e.g. one the scan over-extracted).
generate_asset_reference
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 ass
set_character_voice
Bind a TTS voice to a character asset — required before generate_voiceover
for every character with dialogue (the narrator's voice is separate:
set_narrator_voice). Browse ids with list_voices.
list_voices
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.
set_narrator_voice
Set the project's narrator TTS voice — required before generate_voiceover
whenever the script has narration. Browse ids with list_voices. (Character
dialogue voices are separate: set_character_voice.)
list_voice_blocks
List the project's voice blocks (per-speaker narration chunks) with
their audio status and assigned voices.
update_voice_block
Override one voice block's voice or playback volume (block ids from
list_voice_blocks). Re-run generate_voiceover for the block afterwards if
you changed its voice — existing audio is not regenerated automatically.
rescan_voice_blocks
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}.
generate_voiceover
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
generate_storyboard
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
v
get_segments
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, th
get_segment_assets
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.
regenerate_segment_asset
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("s
change_segment_type
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.
update_segment_content
Rewrite one segment's creative direction from feedback ("make this shot
a close-up", "show the machine from above") — an LLM rewrites the shot's
prompts; continuation links, SFX, and overlays are preserved. The visual
assets reset to not_started: re-render them afterwards (generate_segme
split_segment
Split a segment at the given time offsets (ms, 1-3 cuts → 2-4 parts).
inherit_index picks which resulting part keeps the original creative data.
Later segments renumber — re-check get_segments before further edits.
combine_segments
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.
set_segment_continuation
Make a segment's image render as a continuation of an EARLIER segment's
frame (same composition evolving — the storyboard's continues_from_segment,
settable after the fact). continues_from is that earlier segment's number;
pass 0 to clear the link. Regenerate the segment's image afterwar
add_segment_sfx
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.
remove_segment_sfx
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).
generate_segments
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
build_scenes
Compile segments + assets + voiceover into the editor/render timeline
(scenes). Run after segment assets are complete, before export.
list_scenes
List the project's scenes (composition layers, durations, layout).
director_note
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
pr
project_director_note
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
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.
get_video_url
Download URL for the most recent completed export.
list_styles
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.
get_style
Fetch one style row — its inputs (reference material), analyzed fields
(art_style, narrative_style, director_style, script_prompt, ...), and
`templates`: {"character": url|null, "environment": url|null}, the two
template images. A null there means that template is genuinely missing and
update_style_fields
Hand-edit a style's analyzed fields after reviewing them — e.g. tighten
the art_style wording or adjust the director_style pacing rules. `fields`
is the FULL flat dict to write: {key: {"value": str, "applies_to": [...]}}
(fetch with get_style, modify, send back). Editing fields does NOT
list_style_presets
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
th
create_style
Create a style. Two mutually exclusive paths:
References (best): inputs=[{"input_type": "youtube" | "text", "value":
"<url or description>"}] — YouTube videos are watched (a channel link or
@handle resolves to that channel's newest usable upload) and text
directions read; async anal
analyze_style
Re-run style analysis (after changing a style's inputs). Async —
await_jobs(style_id=...) until the style_analysis job completes.
generate_style_template
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 →
cha
delete_style
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.
set_provider_key
Register a BYOK provider API key (encrypted at rest, BYOK plan only).
Jobs whose model belongs to this provider then run on YOUR key and charge
0 credits. Providers: openai, gemini, anthropic, fal, elevenlabs, minimax.
list_provider_keys
List registered BYOK providers (masked — only the last 4 characters).
whoami
Verify the connection: the account email and plan behind the current
credential. Call once after connecting — before creating anything — to
confirm you're on the right account; costs nothing.
get_credit_balance
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.
browse_audio_library
Browse the audio library for background music and sound effects.
category: "music" | "sfx". Returns track ids for add_music_track /
add_segment_sfx.
list_music_tracks
List the project's background music tracks (volume, loop, timing).
add_music_track
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 i
update_music_track
Tweak a music track. fields keys: name, volume (0-1), loop, start_frame,
duration_frames, position, trim_start_frame, trim_end_frame.
remove_music_track
Remove a music track from the project.
view_image
Fetch a rendered Framesail image so you (and your user) can SEE it —
pass a URL from get_segment_assets, get_style, or asset endpoints. Returns
the image inline. Only Framesail media URLs are allowed.
Endpoint
https://api.framesail.com/mcp Category: Web & Scraping · Last checked: 2026-08-15T09:05:09Z
Monitor your own MCP server
Get alerted the moment yours goes down, a tool schema drifts, or an upstream silently breaks.
What this means. This server responded to the MCP handshake and listed its tools without authentication. The schema fingerprint lets us flag if tool signatures silently change (schema drift) between checks.