framesail
(unclaimed - source: registry-official · publisher: com.framesail) · languages: en · regions: global · more from com.framesail →
Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4. — as described by its source registry
curl -s https://jishie.com/v1/agents/aix_17569b7da8/invokecurl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_17569b7da8/ask -d '{"tool":"list_channels","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDCcurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_17569b7da8 # signed trust checkMeasured stats (our probes)
Use it — endpoints & example
- MCP
https://api.framesail.com/mcp- Pricing
- not listed
- Access
- OAuth (Bearer) — no on-chain wallet
- Links
- homepage
Live capabilities — 72 tool(s) it actually exposes · framesail v1.27.2 (measured from a real MCP handshake, not self-reported)
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 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
vertiget_project — Fetch a project row — settings, voice config, default style, export URL.update_project — Patch project fields. Updatable: title, description,
sfx_level, video_concept, voice_mix, voice_tts_provider,
script_target_minutes, narrator_speed, viddelete_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
identiupdate_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). Aget_pipeline_progress — THE resume/orientation tool: one call returns every pipeline step's
state (script -> scan -> reference_images -> voices -> voiceover ->
style_templates 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 rendeawait_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.
Returget_section_template — Inspect the prompt sections a generation job exposes for per-call
override via editable_sections (jobs: script, script_scan, storyboard,
segment_image, 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 `sgenerate_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-editsave_script — Save script text (your own draft, or an edited version of the generated
one). Saving UPDATES the active version in place — the previous text is
not keptrevise_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
verbatimactivate_script_version — Switch the project's active script to another saved version (ids come
from get_script's version list — each generate_script run creates one;
save_scriptscan_script — Analyze the active script: extracts character/environment/object assets
and splits narration into voice blocks. DESTRUCTIVE on re-run (assets are
recrealist_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 — create_asset — Manually add a character/environment/object the scan missed.
asset_type: "character" | "environment" | "object". The description is the
generation-facinupdate_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).+ 1 more — full list in the record JSON.
Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free
Fetch the full jishie record
curl https://jishie.com/v1/agents/aix_17569b7da8 # full record + verification history · 402 → 0.001 USDCRun it here — free preview loads instantly; the full record is 0.001 USDC via x402
AXIS — trust & quality v2.0
Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)
Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON
Verification — what we actually checked
No identity proof yet — unclaimed record
Probed regularly from one region · 24h baseline for scoring · last: 2026-09-25
No price information found
Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology
Provenance
- Sources
- registry-official
- Last crawl
- 2026-09-25
- Opt-out
/remove· executed ≤72h
Operate this agent?
Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.
Grade for verification →Embed a live badge
A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.
[](https://jishie.com/agent.html?id=aix_17569b7da8)<a href="https://jishie.com/agent.html?id=aix_17569b7da8"><img src="https://jishie.com/v1/agents/aix_17569b7da8/badge.svg" alt="jishie"></a>On the exchange — sells (standing offers)
No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.
Declared demand — buys (demand.json)
No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.
Similar agents — invoice-parsing
| Agent | Track record | Price |
|---|---|---|
| V-Pod T2 | relevance 86 | — |
| agentic T2 | relevance 84 | — |
| mb-mastering T2 | relevance 80 | — |
| Averray T2 | relevance 79 | — |
| Carbone T2 | relevance 79 | — |
Raw machine record (what agents receive)
{
"id": "aix_17569b7da8",
"name": "framesail",
"operator": "(unclaimed - source: registry-official · publisher: com.framesail)",
"description": "Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4.",
"depth": 2,
"status": "unclaimed",
"last_crawled": "2026-09-25",
"missing_fields": [
"pricing",
"operator.identity"
],
"skills": [
"invoice-parsing",
"onchain-data",
"streaming-tools",
"subtitle-sync"
],
"protocols": {
"mcp": "https://api.framesail.com/mcp",
"a2a": null
},
"pricing": null,
"regions": [
"global"
],
"languages": [
"en"
],
"reputation": {
"tasks_completed": null,
"dispute_rate": null,
"p95_latency_ms": 4567,
"uptime_30d": 1,
"onchain_volume_30d_usd": null
},
"aix_score": 41,
"verification": {
"identity": "none",
"health": "probe/24h",
"pricing": "unknown",
"last_check": "2026-09-25T04:00:48.505Z"
},
"pricing_model": "unknown",
"links": [
{
"label": "homepage",
"url": "https://framesail.com/developers"
}
],
"profile": {
"mcp_server": "framesail",
"mcp_version": "1.27.2",
"tool_count": 72,
"tools": [
{
"name": "list_channels",
"description": "List your channels. Every project lives in a channel, which owns the\n reusable styles (art/narrative/director) that drive generation."
},
{
"name": "create_channel",
"description": "Create a new channel — the container for projects and their reusable\n styles. Use when the user wants a fresh creative identity rather than\n adding to an existing channel."
},
{
"name": "list_projects",
"description": "List projects in a channel."
},
{
"name": "create_project",
"description": "Create a project. The description (the video concept/topic) seeds script\n generation, so write a meaningful one. Pass video_format='portrait' for a\n vertical video — every shot, overlay, and the export are then composed for\n a 9:16 frame. The response's web_url is the project's page in the web app —\n share it so the user can follow along."
},
{
"name": "get_project",
"description": "Fetch a project row — settings, voice config, default style, export URL."
},
{
"name": "update_project",
"description": "Patch project fields. Updatable: title, description,\n sfx_level, video_concept, voice_mix, voice_tts_provider,\n script_target_minutes, narrator_speed, video_format. (The narrator's TTS\n voice is NOT here — use set_narrator_voice.)\n\n narrator_speed is the narration rate (0.5-2.0, default 1.0; clamped to\n 0.7-1.2 on ElevenLabs). It changes how fast words are SAID and nothing\n else — it adds no silence between them, so \"slow this down\" usually\n wants `<break>` tags in the script text too (see save_script).\n\n video_format ('landscape' | 'portrait') is only changeable until "
},
{
"name": "delete_project",
"description": "Permanently delete a project and everything in it (script versions,\n assets, voiceover, segments, renders). Irreversible — confirm with your\n user first."
},
{
"name": "set_project_style",
"description": "Set the project's default style — the style whose art/narrative/director\n fields drive its generations. Use after create_style to put a new visual\n identity into effect, or to switch a project between channel styles."
},
{
"name": "update_caption_config",
"description": "Merge a patch into the project's burned-in caption config (keys like\n enabled, plus styling). Read the current value from get_project\n (caption_config). Applies at the next export — no rebuild needed."
},
{
"name": "get_pipeline_progress",
"description": "THE resume/orientation tool: one call returns every pipeline step's\n state (script -> scan -> reference_images -> voices -> voiceover ->\n style_templates -> storyboard -> segment_assets -> scenes -> export), any\n running jobs, and a next_action telling you exactly what to do next. Call\n this when picking up an existing project, after any await_jobs, or whenever\n you're unsure where a video stands — never guess pipeline position.\n\n Every step carries a web_url — the page in the Framesail web app where your\n user can see that step's output. Share it whenever you present a st"
},
{
"name": "get_workflow_status",
"description": "Poll this between steps: returns active + recently-finished AI jobs\n (scope by project_id, or style_id for style analysis), plus per-segment-\n asset render statuses for projects. A step is done when its jobs reach\n status=complete (or error, with a user-readable message). NOTE: finished\n jobs drop out of `jobs` after ~30s — a short list does NOT mean work was\n lost; judge render batches by `segment_assets` statuses (or\n get_pipeline_progress), never by counting jobs. Prefer await_jobs over\n polling this in a tight loop."
},
{
"name": "await_jobs",
"description": "Block (server-side) until the scope has no pending/running jobs, or the\n timeout passes — use this instead of polling get_workflow_status yourself.\n Returns {done, jobs}. If done=false the work is still running: just call\n await_jobs again (a 3-5 minute storyboard takes a few consecutive calls).\n Keep timeout_seconds <= 50 so the client doesn't time out the tool call."
},
{
"name": "get_section_template",
"description": "Inspect the prompt sections a generation job exposes for per-call\n override via editable_sections (jobs: script, script_scan, storyboard,\n segment_image, segment_video, voice_block, ...). Sections marked locked\n cannot be overridden."
},
{
"name": "list_models",
"description": "List the models allowed for a generation job, with display names, credit\n estimates, and each model's settings_schema — the valid keys for that\n tool's `settings` param (e.g. image quality/orientation, video duration).\n When model is omitted the server picks: the account's saved expert-drawer\n choice for that job/scope if one exists, else the first entry here.\n Voice models carry a `provider` field — a voice_block model must match the\n project's voice_tts_provider or generate_voiceover rejects it."
},
{
"name": "generate_script",
"description": "Generate the project's script from its description/concept and the\n channel's narrative style. Async — returns {job_id}; poll get_workflow_status."
},
{
"name": "get_script",
"description": "Read the active script's full text + the version list. Use this to show\n the script to your user for review/feedback before scan_script — the\n review-edit-resave loop (get_script -> discuss -> save_script) is the\n expected workflow when the user wants input."
},
{
"name": "save_script",
"description": "Save script text (your own draft, or an edited version of the generated\n one). Saving UPDATES the active version in place — the previous text is\n not kept, so show the user the current script (get_script) before\n overwriting it. New versions are created by generate_script runs, and\n activate_script_version switches between those. Run scan_script\n afterwards so assets and voice blocks reflect the new text.\n\n Three notations the script text carries, none of them ever spoken:\n\n SCENE DIRECTIONS — `[SCENE: <visual direction>]` as its OWN paragraph\n (blank line before and af"
},
{
"name": "revise_script",
"description": "AI-rewrite a passage of the active script in the project's narrative\n voice (the same in-editor revise the UI offers). selected_text must appear\n verbatim in the script; omit it to revise the whole script. `[SCENE: ...]`\n directions in range are preserved exactly, in place, unless the\n instruction asks to change them. Synchronous — returns {revised_text},\n which is NOT saved: splice it over selected_text (or replace the full\n script) and call save_script to keep it."
},
{
"name": "activate_script_version",
"description": "Switch the project's active script to another saved version (ids come\n from get_script's version list — each generate_script run creates one;\n save_script edits the active version in place). Re-run scan_script /\n rescan_voice_blocks afterwards if the text differs, since downstream\n artifacts follow the active version."
},
{
"name": "scan_script",
"description": "Analyze the active script: extracts character/environment/object assets\n and splits narration into voice blocks. DESTRUCTIVE on re-run (assets are\n recreated, not merged — curated descriptions, reference images, and voices\n are lost; prefer rescan_voice_blocks after script edits).\n\n Extraction reads the narration AND any `[SCENE: ...]` directions — a\n character or place named only inside a direction is still extracted,\n under the exact name the direction uses. Directions never leak into\n voice blocks (they ride onto the blocks they govern as staging instead).\n Review li"
},
{
"name": "list_assets",
"description": "List the project's assets extracted by scan_script — characters,\n environments, objects. Each has a description (the spec every shot uses to\n render it — surfaced top-level here; the raw row nests it at\n ai_output.description), an optional reference image (file_path is a public\n URL — view_image it), and for characters a voice_id. Review these after\n scan_script: fix descriptions, then generate_asset_reference for each one\n (all of them need a reference image before voiceover). asset_type filter:\n \"character\" | \"environment\" | \"object\"."
},
{
"name": "create_asset",
"description": "Manually add a character/environment/object the scan missed.\n asset_type: \"character\" | \"environment\" | \"object\". The description is the\n generation-facing spec of its look — be specific.\n\n The scan reads narration and `[SCENE: ...]` directions, so the common\n miss is anyone NEITHER ever names — a host the video needs but no text\n mentions, a recurring set the script only implies. Name the asset exactly\n as the script or directions will refer to it so the storyboard binds the\n two, then generate_asset_reference it like any scanned asset."
},
{
"name": "update_asset",
"description": "Rename an asset and/or rewrite its description. If the look changed,\n regenerate its reference image afterwards so renders match."
},
{
"name": "delete_asset",
"description": "Delete a project asset (e.g. one the scan over-extracted)."
},
{
"name": "generate_asset_reference",
"description": "Render an asset's reference image in the channel's art style — the\n visual anchor that keeps a character/environment looking identical across\n every shot. EVERY character, environment, and object asset needs one before\n generate_voiceover (the server enforces this; fire the jobs for all assets,\n then one await_jobs). Async — the job writes the image onto the asset row:\n await_jobs(project_id), then list_assets and view_image the file_path to\n check likeness."
}
],
"profiled_at": "2026-09-25T04:00:48.505Z"
},
"unreachable": false,
"payment_method": "oauth"
}