AI-powered video & image production server — prompt in, on-brand rendered media out.
https://159-203-115-164.nip.io/mcpPoint any MCP-capable client (claude.ai custom connector, Claude Desktop, Cowork) at the endpoint above. On claude.ai: Settings → Connectors → Add custom connector, paste the MCP URL. Then ask it to "make a launch video for my product" — it has every tool listed below, from brand extraction through generation, editing and rendering.
You'll need a tenant id and access token from whoever runs this server — the server owner configures those.
The Quotient Recorder Chrome extension captures a tab + your voice (and camera), and this server assembles it into a branded, captioned, auto-edited film — no editor required.
⬇ Download the extension v0.33.5
The popup shows its version in the header — if it doesn't match the one above, re-download and reload the unpacked folder.
chrome://extensions, enable Developer mode,
click Load unpacked and pick the unzipped folder. Pin it.| Tool | Description |
|---|---|
add | Add a scene to a project, or a component to a scene. If scene_id is provided, adds a component to that scene. Otherwise adds a new scene. |
audio | Add, update, or remove audio tracks (voiceover, music, SFX) on a project. For voiceover tracks, provide 'text' instead of 'source' to auto-generate TTS. Use sync_points with scene_id to store timing markers in a scene's audio_hints. |
brand | Get, set, or extract a tenant's brand kit (colors, fonts, logo, style, assets). Pass a url to extract + store the brand kit from a website. Pass no fields to get the current brand kit. Pass fields to update. |
capture | Capture a screenshot of a URL. Can save as a project asset or create an image-showcase component from it. |
cast | CAST: who performs a SPEAKER / CREATOR-CUT film's person. Three ways: the recording itself; RECAST -- the recording performed by a cast actor through a vendor (HeyGen hears the voice and draws the whole person -- the most natural; Kling / Higgsfield / Runway copy the recording's gestures onto a portrait); GENERATE -- no recording: the storyboard's lines voiced (HeyGen or ElevenLabs) and performed by the actor through any vendor (Kling and Runway animate the portrait from the voice), attached as the film's take. Actors are HeyGen looks (the user's own twin and photo looks, or HeyGen stock presenters), portraits (need consent), or generated people (fictional: true -- a start frame as the portrait plus the model sheet it was drawn from; Higgsfield reads both). SCENE BY SCENE (one film can mix them): perform_scene -- a cast actor performs ONE scene with no recording: a start frame drawn for the shot (start_frame first to see and redraw it -- cheap), the scene's line voiced in the actor's ElevenLabs voice (voice_source script), the scene's recording converted to it (take: the delivery kept), or the recording as is (recording: the speaker's own voice, no clone), Seedance 2.5 performs it, attached as that scene's take (quality draft = 480p preview ~2 min; then final = the same shot at 1080p); recast with scenes:[...] -- only those scenes' recordings, performed one-to-one (Higgsfield) and those scenes cast as the actor; WHERE A RECAST IS FRAMED differs by vendor (list shows each one's framedBy): HeyGen -- the look (pick or new_look another for another room); Higgsfield -- the shot (recast shot, else the scene's setting: the actor drawn there, the recording's performance only); Kling / Runway -- the recording's own camera; hear_voice -- the scene's voice alone, before any video (a delivery with v4 tags, pauses, CAPS, /IPA/); continue_from -- the scene starts from another scene's LAST frame (default the one before), so they link without a jump; scene_cast -- who plays a scene (an actor, 'recording', or 'film' to follow the film); actor_clip -- b-roll of the actor, no speech, over a scene (shot, seconds, at); scenes -- every scene's performer, its PLAN (set with the update tool's storyboard cast_plan / scenes[].performer: who, how, engine, where) and state (ready / todo / stale: made for another plan), and any job. A perform_scene or start_frame with no actor or location uses the plan's; choosing one there writes it into the scene's plan. LOCATIONS (Seedance only; a HeyGen look is its own setting): a tenant library of sets, each a clean plate (the room with nobody in it) -- add_location from a prompt (drawn), or an image (a frame of a take: the person is removed; clean:false keeps it as is), async: it lists as 'drawing' until it lands; locations lists them; scene_location sets a scene's (or pass location on start_frame / perform_scene). Actions: list (actors + vendors), looks (the user's HeyGen looks, or public:true for stock presenters, paged), new_look (a new HeyGen look from a prompt on one of theirs), look_status, add_actor, update_actor (name, voice_id -- the actor's ElevenLabs voice, used by generate / perform_scene and by a recast with voice_id 'actor'; '' clears -- or sheet), remove_actor, add_photo / remove_photo (more photos of a person, up to 5 beside the portrait), make_sheet (a model sheet drawn from the portrait + photos, faithful to a real face, ~1 min; lands as sheet_draft) then use_sheet or discard_sheet, voices, recast, generate, status, clear (back to the recording), frame (pull a made recast back or push it in: framing tight / medium / wide). Recast and generate are async: poll action='status'. A recast swaps only the picture (the take stays the clock; clear undoes it). GENERATE REPLACES the film's take and re-times its scenes -- duplicate the project first (create copy_of) unless the user asked for it on this film. Neither renders. |
create | Create a new media project (video, image, presentation, one-pager, slideshow, gif, social) |
delete | Delete a project, scene, component, or brand asset. Infers the target from the IDs you provide: project_id + scene_id + component_id removes a component; project_id + scene_id removes a scene; project_id alone deletes the whole project. Set target='brand' with asset_names to remove brand assets from the tenant kit. This is the safe, explicit counterpart to add/update. |
edit_speaker | Edit the TALK TRACK of a narrated recorder film. action='cut' removes a span of FILM time from the speaker: the voice loses it, the film shortens, captions ripple -- and the SCREEN keeps every frame (its map re-fits through pins; only the camera bubble mirrors the cut so lips match). action='restore' gives a previous cut's time back. action='list' shows the speaker clip and its cuts, each with the film-time seam where it sits, so you can pick what to restore. Times are FILM seconds -- what the Studio timeline shows. Use for requests like 'cut the dead air at 1:16' or 'remove where I said um'. A CAMERA-TAKE film (one take per scene) edits each scene's take instead: pass scene_index -- action='trim' takes head/tail seconds off the take's start/end (negative gives them back), action='cut' removes from/to in SCENE seconds (a jump cut; the take's blur, alpha and recast copies follow), action='restore' gives a cut back, action='list' shows every scene's take window and cuts; action='speed' sets a take's pace (speed 0.75-1.5, pitch kept; no scene_index = every scene); the scene re-times to what is left. action='look' sets the soft look on the booth take behind scene_index -- look 'soft' with strength 0-1 (skin smoothing; 0.5 the house pick) or 'natural'; correct:false turns off the studio colour/exposure correction every take gets (true back on); fill 0-1 sets the fill light on the face's shadows (default off; 0.5 a gentle lift, 0 off) -- re-graded from the kept original in the background (every scene cut from the same recording follows; Studio refreshes when it lands). |
extract_brand_from_website | Extract design tokens (colors, typography, spacing, radius, shadows, motion, patterns) from a live website URL. Optionally enhances with LLM analysis. With include_images, also crawls the site (entry page + interior product/feature pages), downloads product/background imagery, captions each with a vision LLM, and stores them as described brand assets. Merges everything into the tenant's brand kit. |
generate | Generate media from a natural language prompt. THE GOLDEN WORKFLOW (how every good film here was made): (1) generate -> you get a STORYBOARD, not a film -- its finished job carries plan, the whole film as a markdown table (beat | time | shot | line): show the person that table first; (2) iterate the storyboard round and round with mode='storyboard' + feedback until every beat is right -- this is the cheap, fast loop, spend your revisions HERE; (3) build the scenes ONCE with mode='full' + project_id; (4) after that only small tweaks (update/revise/Studio), then render. For video targets mode defaults to 'storyboard' -- generating a film cold stops at the storyboard on purpose; building is a deliberate second call. Pass mode='full' explicitly to build in one shot (quick drafts, fire-and-forget). Non-video targets (image, component, scene revisions) are one-shot as before. Rendering to MP4 is the separate render tool. Recorder films (screen recordings from the Quotient Recorder extension) assemble automatically on upload and get a SPEAKER lane -- edit their talk track with edit_speaker, not by regenerating. |
generate_clip | Generate a standalone AI video clip with Veo (diffusion video) from a text prompt -- a talking-head take (Veo generates the VOICE too: put the spoken line in quotes inside the prompt), a branded shot no stock library has, or b-roll to attach to a project later. Async: returns a job_id to poll with get(target='job'); the completed job carries download_url, and the clip is saved as a tenant brand video asset so it can be referenced in briefs/uploads. Clips are ~8 seconds. ASSET MODES: mode='cutout' draws a TRANSPARENT PNG sticker with the image model instead of Veo (~15 s, no clip; prompt = what to draw, e.g. 'a cartoon taco'), saved as a *-cutout.png brand image; mode='texture' high-passes a frame of a Veo clip into a neutral surface tile (prompt 'extreme close-up macro photograph of <surface>, filling the frame, static'). Clip and texture need GEMINI_API_KEY on the server. |
generate_presenter | Generate a consistent AI presenter delivering a FULL SCRIPT (script-to-presenter). Splits the speech into ~8s Veo takes at sentence boundaries, anchors every take to a reference frame from take 1 (same face/framing/light; voice consistency is best-effort), whisper-verifies each take, and stitches them into ONE clip saved as a tenant brand video asset -- ready to pass to generate as speaker_source for a speaker-led film. Async job; caps at 8 takes (~60s of speech). Requires GEMINI_API_KEY. |
get | Get a project's state, tenant brand kit, a single scene, or a scene's MEASURED layout. Pass project_id for project, 'brand_kit' target for brand kit, project_id + scene_id for a single scene. target='layout' (with project_id + scene_id, optional selector) renders the scene headless and returns real element boxes, container chains, video intrinsic sizes and object-fit crop math, plus plain-English warnings -- use it to diagnose WHY something looks wrong (e.g. "video runs over the frame") before writing a revise instruction. |
job | Check or wait for any async job (generate, render). action=status to poll, action=wait to block until done or timeout, action=list to list jobs for a tenant. |
list | List projects for a tenant (each with its tags), or available component types. Pass tag to list only the films carrying it. Pass target='components' to see the component catalog. Pass target='vocabulary' for the creator vocabulary (SPEC-creator-formats.md): every option of the four hard concepts -- grammars (film), recipes grouped by viral format (film), settings (scene: where the person is), proof uses (beat: where the proof sits) -- and the frames. |
regenerate_asset | Re-run a generated image asset in place using its stored generation params (prompt, model, size, quality) -- optionally with a tweak -- without rebuilding the whole video. Writes a new version, re-wires the scene that uses it, and saves. Re-render the project to see the new asset in the video. |
render | Render a project to its output format, or render a single scene as a preview image (pass scene_id). ITERATE BEFORE YOU RENDER -- the cheap-to-expensive ladder: (1) paper-edit the beats and get sign-off, (2) proof layout with single-scene stills (scene_id), (3) review motion LIVE in the project's studio_url (every project response includes it; Studio plays scenes in the browser with no render), (4) first full motion pass with quality:'preview' (lower fps, much faster), (5) production render only to ship. A production render captures every scene frame-by-frame (~2min/scene cold; unchanged scenes are free via the scene cache). NEVER edit a project while its render job runs. |
reorder | Reorder scenes in a project by providing scene IDs in the desired order |
revise | Surgically revise ONE scene from a natural-language instruction. Patches the scene's codegen source (fast SEARCH/REPLACE), versions the prior source, and re-runs the fast legibility/runtime gates. Pass `element` to scope the change to a selected element; omit it to revise the whole scene. For a full from-scratch redo of a scene use generate with target='scene'. |
sticker | The HOUSE STICKER LIBRARY (shared by every tenant): die-cut stickers in one house style -- a stack of cash on 'money', a chimp on 'MailChimp' (never a brand's logo), a rocket on 'launch'. action='list' returns every sticker by name with its tags. action='make' draws a new one in the house style from a name and a subject (what to draw) and adds it to the library (~15 s). Use a sticker by NAME on a component: sticker-prop {kind:'image', sticker:'money-stack'} for one sticker popping in, sticker-rain {sticker:'dollar-bill'} for a shower. A name the library lacks is also drawn automatically the first time a component uses it. |
storyboard | Surgically edit ONE scene of a project's storyboard (before or after a build; a built film is rebuilt from its board with generate mode='full') -- the per-scene grain of the golden workflow's iterate loop. Exactly one of: delete_index (remove that scene -- instant, data-only, no LLM), scene_index + feedback (re-author just that scene from the feedback), insert_at + feedback (author ONE new scene and splice it in at that position). All other scenes stay byte-identical, and the storyboard cards re-photograph before the job completes. Whole-board redrafts stay generate(mode='storyboard') + feedback. Indices are 0-based positions in the current board (check with get first if unsure). Returns a job -- poll with job(action='status'). |
take | Ask the human for a camera take of a SPEAKER or CREATOR-CUT film (SPEC-take-flow.md). Returns the Studio link to hand them (on a phone it is the phone Studio: what is still needed, Record on each scene, Upload; add scene_index to point the booth at one scene), the open needs, and a job that completes when the take lands -- poll job(action='status'). On arrival the file is sanitized (orientation, frame, dialogue loudness), attached as that scene's base, and the scene's need flips to provided. Then build with generate(mode='full') and render. |
team | Who shares this tenant (SPEC-team.md). Everyone at the same company domain lands in one tenant on login; action='invite' adds an email from outside it (or pre-approves one), action='remove' takes a member out (they get a tenant of their own on their next login), action='list' shows members and pending invites. Members see every project and the brand kit; there are no per-project permissions. |
update | Update a project, scene, component, or storyboard. Infers target from which IDs are provided. Use provide_asset to upload assets for a storyboard scene. Use storyboard to directly edit the storyboard. |
upload | Upload an asset (image, video, audio) to a project or to the tenant brand kit. Set target='brand' to upload a brand asset. |
website_to_video | One-shot: turn a website URL into an on-brand, rendered launch video. Extracts the brand kit from the URL (colors, fonts, logos, theme), generates scenes, and renders -- in a single async job. Returns a job_id; poll with get(target='job'). |