Skip to main content
Glama
650,537 tools. Updated 2026-10-14 07:11

"FFmpeg" matching MCP tools:

  • One-shot convenience tool: starts a blueprint run and polls until it completes, fails, or pauses for review. Returns the final run with `output_url` (or `outputs` [{label, url}] for multi-output blueprints — prefer `outputs` when present). Download URLs are signed with a 10-minute TTL; re-fetch with get_blueprint_run for fresh links. NOTE: caption-video pauses in status awaiting_review — this tool then returns early with `awaitingReview: true` and the run's `srt_text`; review/edit the transcript and resume with continue_blueprint_run. If your MCP client enforces a short per-request timeout (many default to 60s), use run_blueprint + get_blueprint_run polling instead. Per-blueprint input fields (* = required): - product-ad: logo_url*, photo_url*, music_url? — GENERATIVE, costs 200 tokens - caption-video: video_url*, language?, style? (bold-bottom|clean-lower|center-pop|top-title) — pauses at awaiting_review with srt_text for transcript review; resume with continue_blueprint_run - viral-short: video_url*, hook_text*, style? (top-hook|center-statement|bottom-caption|lower-left), music_url? - quote-card: quote*, name?, handle?, photo_url?, output? (video|image) - watermark: video_url*, logo_url*, position? (top-left|top-right|bottom-left|bottom-right|center), size? (small|medium|large) - resize-format: video_url*, format? (9x16|1x1|16x9|4x5), fit? (pad|crop) - zoom-in: video_url* - zoom-out: video_url* - camera-glide: video_url*, direction? (right|left) - boomerang: video_url* - speed-changer: video_url*, speed? (0.5|1.5|2|4) - video-to-gif: video_url*, length? (5|10|15), size? (480|640), caption?, caption_position? (bottom|top|center) — output is a .gif - product-slideshow: photo1_url*, photo2_url*, photo3_url?..photo5_url?, music_url?, aspect? (9x16|1x1|16x9) - listing-kit: video_url* — multi-output (4 platform variants in `outputs`) - hook-variants: video_url*, hook1*, hook2?, hook3?, ratio? (9x16|4x5|1x1|original), style? (top-hook|center-statement|bottom-caption) — multi-output (one per hook in `outputs`) Input URLs: public https or upload-bucket gs:// (use request_upload_url + confirm_upload to get one). FFmpeg-lane blueprints charge no tokens (they meter plan compute minutes); only generative blueprints (product-ad) charge tokens.
    ConnectorOAuth
  • PROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. WRITE YOUR OWN ffmpeg video filter chain and apply it to the program picture — for the look no preset makes. Presets FIRST: apply_look / add_stylize / set_color_grade / enhance_video cover the common asks; reach here when the user wants something none of them says (a CRT phosphor look, posterize, a slow hue drift, selective channel work). Rules: ONE chain on the single video stream — filters separated by commas, NO ';' or '[labels]', no file access — and it must keep the frame's size and rate. The chain is DRY-RUN on the real footage before it stores: a broken chain returns ffmpeg's own error (fix it, never retry the identical string); an over-heavy one returns its measured cost. start/end are PROGRAM seconds (omit both = whole video; windowed moments follow their footage through later cuts). label = short human name for the look ('CRT green') shown in diffs. Example chain: "hue=s=0.3,curves=green='0/0 0.5/0.6 1/1',noise=alls=8:allf=t". After it lands, LOOK at the window on the next preview — a chain that parses can still look wrong.
    ConnectorOAuth
  • Turn a video at a public URL into timestamped contact-sheet JPEG(s) that a vision model can read: frames sampled evenly across the clip, laid out as a grid, each cell stamped with its timecode. Use it when a video is too long to ingest, when the question is about what happens across time, or when the answer needs timestamps. One call replaces a whole download → ffmpeg → extract → montage pipeline — prefer it even if you have a shell. The first sheet is attached to the result as an image — read it directly; every sheet is also linked in `files` (valid ~24h), and every stamped timecode is repeated in `timecodes` (cells run left→right, top→bottom). Timecodes are ABSOLUTE to the source video — to look closer at a range you spotted, call this tool again with start/end set to those timecodes: each zoom yields finer timecodes, so you can drill down repeatedly (overview → range → moment).
    ConnectorNo auth
  • Write WHOLE files DIRECTLY — YOUR model generates the code, Kleap stores, builds and deploys it as-is. To change something in a file that ALREADY EXISTS, use edit_files instead (read_files → edit_files): it replaces just the lines you name, while write_files makes you retype the entire file and silently drops whatever you leave out — on a 30KB shared layout that is how headers and footers get wiped. No Kleap-AI step, so what ships is byte-for-byte what you wrote — the right choice when a phrase, a URL or a schema must be exact. Publishing still audits the result (see publish_app). Best for scaffolding exact pages/components — e.g. programmatic-SEO routes. Astro paths (src/pages/*.astro, src/data/*.json, src/components/*.astro, public/*). Overwrites by path. NPM PACKAGES: do not write package.json (the build replaces it) — the build installs whatever your code IMPORTS, so `import { jsPDF } from "jspdf";` is all it takes. Supported on import: @tiptap/*, jspdf, pdf-lib, html2canvas, papaparse, file-saver, jszip, @ffmpeg/*, howler, wavesurfer.js, browser-image-compression, react-dropzone, recharts, chart.js, d3, @tanstack/*, react-hook-form, three, @react-three/*, leaflet, maplibre-gl, gsap, framer-motion, zustand, date-fns, react-markdown, axios, socket.io-client, radix-ui/*, next-themes, lucide-react, @tabler/*, openai, @ai-sdk/*; anything else is refused at build with a message naming it. A client-side router is never the answer — a route is a FILE (src/pages/about.astro → /about). IMAGES AND BINARIES: set encoding:"base64" on the file and send the bytes — that is how you put a logo, a photo, an OG image, a favicon or a font on the site (png/jpg/webp/svg/ico/mp4/woff2/pdf, 512KB max each decoded). Without it you can only write text, and a site with no images looks unfinished. To ADD an image from a text prompt WITHOUT sending any bytes (a real photo's base64 is too big to emit reliably), use generate_image — Kleap generates it and stores it for you. To REMOVE a page or asset, use delete_files — overwriting it with empty content leaves a URL that answers 200 with nothing, which is worse than a 404. DATA & ACCOUNTS: write_files only STORES files — it cannot provision the Kleap Database, so DB or auth code pushed here has no backend and silently does nothing. Stand the feature up with modify_app first, then edit those pages here. After writing, call publish_app to build & go live.
    Connector
    Destructive
    OAuth
  • Write WHOLE files DIRECTLY — YOUR model generates the code, Kleap stores, builds and deploys it as-is. To change something in a file that ALREADY EXISTS, use edit_files instead (read_files → edit_files): it replaces just the lines you name, while write_files makes you retype the entire file and silently drops whatever you leave out — on a 30KB shared layout that is how headers and footers get wiped. No Kleap-AI step, so what ships is byte-for-byte what you wrote — the right choice when a phrase, a URL or a schema must be exact. Publishing still audits the result (see publish_app). Best for scaffolding exact pages/components — e.g. programmatic-SEO routes. Astro paths (src/pages/*.astro, src/data/*.json, src/components/*.astro, public/*). Overwrites by path. NPM PACKAGES: do not write package.json (the build replaces it) — the build installs whatever your code IMPORTS, so `import { jsPDF } from "jspdf";` is all it takes. Supported on import: @tiptap/*, jspdf, pdf-lib, html2canvas, papaparse, file-saver, jszip, @ffmpeg/*, howler, wavesurfer.js, browser-image-compression, react-dropzone, recharts, chart.js, d3, @tanstack/*, react-hook-form, three, @react-three/*, leaflet, maplibre-gl, gsap, framer-motion, zustand, date-fns, react-markdown, axios, socket.io-client, radix-ui/*, next-themes, lucide-react, @tabler/*, openai, @ai-sdk/*; anything else is refused at build with a message naming it. A client-side router is never the answer — a route is a FILE (src/pages/about.astro → /about). IMAGES AND BINARIES: set encoding:"base64" on the file and send the bytes — that is how you put a logo, a photo, an OG image, a favicon or a font on the site (png/jpg/webp/svg/ico/mp4/woff2/pdf, 512KB max each decoded). Without it you can only write text, and a site with no images looks unfinished. To ADD an image from a text prompt WITHOUT sending any bytes (a real photo's base64 is too big to emit reliably), use generate_image — Kleap generates it and stores it for you. To REMOVE a page or asset, use delete_files — overwriting it with empty content leaves a URL that answers 200 with nothing, which is worse than a 404. DATA & ACCOUNTS: write_files only STORES files — it cannot provision the Kleap Database, so DB or auth code pushed here has no backend and silently does nothing. Stand the feature up with modify_app first, then edit those pages here. After writing, call publish_app to build & go live.
    Connector
    Destructive
    No auth
  • Upscales a source video. Pass a public `videoUrl` and a target tier. Two engines: Atlas reaches 1080p and 2k only (7 and 10 cr/s; clips up to 53s at 1080p and 23s at 2k, source <=30fps); BytePlus also reaches 4k and 8k (4/8/16/62 cr/s at 1080p/2k/4k/8k) and is selected automatically for 4k and 8k. IMPORTANT, A TIER IS NOT A DIMENSION. These names are 16:9 standards, so '4k' means the 3840x2160 BOX and the source is fitted inside it, which means the SMALLER dimension wins. A square source at '4k' returns 2160x2160, NOT 3840x3840. Measured. A 3:4 source at Atlas '2k' returned 1664x2216. So never assume a tier lands on an exact pixel target: pick the highest sensible tier, then resize to exact dimensions in ffmpeg. Do NOT escalate to 8k to compensate, it is 62 cr/s to buy reconstruction a free lanczos resize gets you. For reference, Apple Music Album Motion Artwork requires exactly 3840x3840 and 2048x2732, and no tier produces either directly. Returns the upscaled video URL (R2-hosted). Returns within ~45 s. If the result has state "running" the job is still rendering: poll aetherwave_get_job with the returned taskId and kind every ~10 s. Pass wait:true ONLY if your MCP client permits tool calls longer than 60 s (most do not). Pass async:true to get the taskId back immediately without waiting.
    ConnectorNo auth

Matching MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables local media processing (video/audio) using FFmpeg and FFprobe, allowing frame extraction, audio conversion, and metadata retrieval through natural language.
    5
    -
  • A
    license
    A
    quality
    C
    maintenance
    A job queue-based FFmpeg wrapper enabling AI assistants to perform video processing tasks such as trimming, format conversion, resolution change, and subtitle conversion through natural language.
    8
    MIT

Matching MCP Connectors

  • Trim, convert, resize, compress, and remix audio and video.

  • FFmpeg Micro MCP Server. Transcode videos from n8n or Make using FFmpeg in the cloud. Code+Docs: https://github.com/javidjamae/ffmpeg-micro-mcp/

  • Transcribe a video or audio file from a public HTTPS URL into a speaker-labelled transcript — ONE call does everything. Source can be a direct HTTPS URL or a share link from Dropbox, Google Drive, OneDrive (personal or business), SharePoint, or Box — share links auto-resolve to the file. Internally: converts to audio, runs speech-to-text with speaker diarization, uses AI to name the speakers from your attendee list, and renders the document. Pass `options.attendees` (names, optional gender/role) and it tags who said what. Output formats: txt, json, srt, vtt, docx, pdf. CONSENT: you must have all parties' consent to record/transcribe — Botverse accepts no liability otherwise. Returns a job_id immediately — report it to the user, then poll get_job_status (it reports a live stage: converting audio → transcribing → AI augmenting → rendering) until 'complete', then get_download_url (or get_output_content for inline bytes in a sandbox). ~$3 per hour of audio. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Concatenate an ordered list of video and/or still-image segments (all public HTTPS URLs) into one continuous, fresh-encoded output — the video 'splice' step. This is the general mechanism behind several common editorial moves, depending on where you put the image segment(s): a HEAD SLATE or BUMPER (image first — a title card or logo before the footage starts), a TAIL SLATE or END CARD (image last — a credits or contact card after the footage ends), or a MID-ROLL INSERT or CUTAWAY (image in the middle — a still dropped into the timeline between two shots). Use all-video segments to splice two or more real clips together back-to-back instead (no image involved at all). Each segment is either {type: 'video', url} or {type: 'image', url, duration_seconds} (duration_seconds is how long that still holds; required for image, ignored for video). Needs at least 2 segments (max 8) and at least one type 'video' segment — its resolution and frame rate become the output's defaults unless options override them. Every segment is scaled to fit and letterboxed (not stretched) if its aspect ratio differs, and any segment without audio (every image, or a silent video) gets a matching silent track synthesised so audio never drops out mid-timeline. Output formats: mp4, webm, mov_prores. Returns a job_id immediately. Poll get_job_status until 'complete', then get_download_url. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Ports GO AI's browser Live Photo-to-GIF tool server-side: trims a SHORT video clip and converts it to an animated GIF, or (a server-side addition the browser tool cannot do) a real MP4/WebM video. Input is base64 video bytes plus its mimeType (any container/codec this server's ffmpeg build can decode) and a trim range in seconds (startSeconds/endSeconds). HARD LIMITS -- this runs in a 400 MB container on one shared vCPU behind a proxy that hangs up at 125s, so an over-budget request is REJECTED up front with a message naming the limit rather than accepted and then killed. Read these before calling: (1) the video itself must decode to at most 4 MB -- send a pre-trimmed clip, not a whole recording; (2) the trim range must span at least 0.25s and at most 10s; (3) width x height x frames must not exceed 12 megapixels TOTAL across the whole animation. That third one is the binding limit in practice and it is easy to trip with a portrait clip: at size=480 a 9:16 video is 480x854, so it fits about 29 frames (~2.9s at fps=10) -- while a 16:9 video at the same size is 480x270 and fits the full frame cap. If a call is rejected, the error names the exact frame/size that would fit; do not retry with the same numbers. size picks the output width in px (0 keeps the source's own width, clamped to 720; otherwise 720/480/320/240, default 320). Height is derived to preserve aspect ratio and both are forced even (a hard requirement of GIF and most video codecs). fps (10/12/15/20/25, default 10) is the target sampling rate; because GIF frame delays are whole hundredths of a second, the achieved rate (actualFps in the result) is rounded and rarely matches exactly what was requested -- always read actualFps back, do not assume it equals fps. speed (0.5/1/1.5/2) scales playback; speed below 1 samples MORE frames from the same span and so costs more of the pixel budget. motion is loop (plays once per cycle, restarts abruptly), bounce (plays forward then backward so it never visibly cuts -- this roughly DOUBLES the emitted frame count and therefore halves the span that fits the pixel budget), or once (plays through and stops; GIF only, this disables the NETSCAPE2.0 loop extension). For format 'gif' (the default): at most 120 frames are sampled from the trim range (bounce mirrors the middle back on top of that afterward, so a bounced GIF can carry up to 238 frames if the pixel budget allows), and colours (256/128/64, default 256) sets the palette size. The palette is a single median-cut palette built across every sampled frame at once, not per frame, exactly like the source -- a clip with wildly different scenes (e.g. a cut between two very different shots) will show banding because the whole clip is sharing one 256-or-fewer-colour palette. dither (default true) enables Floyd-Steinberg dithering, which smooths gradients at the cost of file size and adds visible noise to flat graphics/screen recordings -- turn it off for those. For format 'mp4' (H.264) or 'webm' (VP9): frame sampling and the GIF palette pipeline are skipped entirely and ffmpeg encodes the trimmed/scaled/speed-adjusted clip directly in one pass; audio is always dropped, since the source tool this is ported from is silent-GIF/loop focused and has no audio-preserving path of its own. The same trim-span and pixel limits apply. Frame extraction for GIF approximates the source's exact evenly-spaced-timestamp sampling with ffmpeg's own fps-filter resampling of the decoded stream (documented in code as a deliberate simplification, not a literal port) -- for most clips this is visually indistinguishable, but timing will not be bit-identical to the browser tool's output for the same input. Returns the encoded file (inline if small, otherwise a download link) plus a JSON stats object: frameCount (gif only), width, height, byteSize, requestedFps, actualFps, delayCentiseconds (gif only), format, outputPixels, maxOutputPixels, and more. An oversized request, a trim under 0.25s, an undecodable video, or an unsupported codec is reported as a tool error naming the problem, never a crash.
    ConnectorNo auth
  • Generate a short-lived (10 minute) signed HTTPS URL for a completed transcode's output file. The job must be in `completed` status. Use this instead of the `output_url` field on the job object, which is a `gs://` URL that HTTP clients cannot fetch directly.
    ConnectorOAuth
  • Generate an SRT subtitle file from an audio or video URL using Whisper. Returns a pending job envelope immediately — poll with `get_transcribe` until status is `completed`, then fetch the signed SRT URL with `get_transcribe_download`. The SRT URL can be dropped directly into a transcode's `subtitles='<url>'` filter to burn captions into a video.
    ConnectorOAuth
  • Offload a video or audio transcode to Botverse using a public URL — no upload step needed. Accepts a direct HTTPS download URL, or a share link from Dropbox, Google Drive, OneDrive (personal or business), SharePoint, or Box — share links auto-resolve to the file. Also works with any direct HTTPS download URL (CDN, S3, etc.). Limited to 2 GB. Returns a job_id immediately. IMPORTANT: tell the user the job_id right away so they can track it. Then poll get_job_status every 5 seconds. Large video files (>100 MB) can take 5–15 minutes — keep polling until status is 'complete' or 'failed', no matter how many polls it takes. Never give up early. Wallet debited on completion. Use options.start_time and options.duration to trim — e.g. start_time='00:01:00', duration=120 for a 2-minute clip. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Transcribe an already-uploaded video/audio file (from get_upload_url) into a speaker-labelled transcript. Same one-call pipeline and options as transcribe_from_url (attendee naming, srt/vtt, formatted docx/pdf). Use for local files or files larger than a URL fetch allows (up to 2 GB). CONSENT: you must have all parties' consent. Poll get_job_status (live stage) until complete, then get_download_url / get_output_content. ~$3 per hour of audio. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Mux a separate video file and audio file (both public HTTPS URLs) into one fresh-encoded output — the video/audio 'conform' step: combine two sources, and reconcile a frame-rate or duration mismatch between them so they line up. Default options.method 'mux' just combines both streams as-is (use this when the rates already match). For a real mismatch, set options.method to 'resample_video' (cheap frame duplicate/drop to options.target_framerate — real-time duration unchanged), 'interpolate_video' (motion-compensated retiming to options.target_framerate — smoother but much slower, best for a large rate change), or 'speed_conform' (true pulldown-style retime: every source frame is kept but played at options.target_framerate, so total duration changes by source_fps/target_fps and the audio is time-stretched by the same ratio to hold lip-sync — the classic 24→25fps NTSC/PAL-speed conform). options.duration_policy controls what happens if the two sources are still different lengths after any retiming: 'shortest' (default — trim to the shorter one) or 'match_video' (silence-pad audio so output length exactly matches the video). Returns a job_id immediately. Poll get_job_status until 'complete', then get_download_url. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Mux an already-uploaded video and audio file (both from get_upload_url) into one fresh-encoded output. Same conform methods and options as conform_from_url — use this for local files or files too large to fetch by URL. Poll get_job_status until 'complete', then get_download_url. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Concatenate an ordered list of already-uploaded video and/or still-image segments (all from get_upload_url) into one continuous, fresh-encoded output. Same segment shape, slate/bumper/end-card/insert use cases, and options as conform_splice_from_url — use this for local files or files too large to fetch by URL. Poll get_job_status until 'complete', then get_download_url. RELIABILITY & FALLBACK: Botverse returns structured errors with a message. A bare 'HTTP 500' or 'tool call failed' with no message body is the MCP connector / sandbox layer between your client and Botverse — NOT a Botverse outage (the service is up if get_wallet_balance succeeds). If MCP calls keep failing, do NOT write your own ffmpeg / transcription / document-conversion code as a workaround — that wastes tokens and reinvents what Botverse does. Instead, tell the user to run the equivalent Botverse CLI from their own (non-sandboxed) machine, e.g. `npx botverse transcribe <file> --to docx` (also `transcode` and `convert`), then retry the MCP call.
    ConnectorNo auth
  • Start a blueprint run — a pre-built video workflow (captioning, resizing, watermarking, ads, and more). Returns the new run ({id, status, blueprint, tokens_charged}); poll it with get_blueprint_run, or use run_blueprint_and_wait to do both in one step. Per-blueprint input fields (* = required): - product-ad: logo_url*, photo_url*, music_url? — GENERATIVE, costs 200 tokens - caption-video: video_url*, language?, style? (bold-bottom|clean-lower|center-pop|top-title) — pauses at awaiting_review with srt_text for transcript review; resume with continue_blueprint_run - viral-short: video_url*, hook_text*, style? (top-hook|center-statement|bottom-caption|lower-left), music_url? - quote-card: quote*, name?, handle?, photo_url?, output? (video|image) - watermark: video_url*, logo_url*, position? (top-left|top-right|bottom-left|bottom-right|center), size? (small|medium|large) - resize-format: video_url*, format? (9x16|1x1|16x9|4x5), fit? (pad|crop) - zoom-in: video_url* - zoom-out: video_url* - camera-glide: video_url*, direction? (right|left) - boomerang: video_url* - speed-changer: video_url*, speed? (0.5|1.5|2|4) - video-to-gif: video_url*, length? (5|10|15), size? (480|640), caption?, caption_position? (bottom|top|center) — output is a .gif - product-slideshow: photo1_url*, photo2_url*, photo3_url?..photo5_url?, music_url?, aspect? (9x16|1x1|16x9) - listing-kit: video_url* — multi-output (4 platform variants in `outputs`) - hook-variants: video_url*, hook1*, hook2?, hook3?, ratio? (9x16|4x5|1x1|original), style? (top-hook|center-statement|bottom-caption) — multi-output (one per hook in `outputs`) Input URLs: public https or upload-bucket gs:// (use request_upload_url + confirm_upload to get one). FFmpeg-lane blueprints charge no tokens (they meter plan compute minutes); only generative blueprints (product-ad) charge tokens.
    ConnectorOAuth
  • Fetch the current state of a blueprint run: status (pending/processing/awaiting_review/completed/failed), current step, and outputs when completed. Multi-output blueprints (listing-kit, hook-variants) return an `outputs` array of {label, url}; single-output blueprints return `output_url`. Download URLs are signed with a 10-minute TTL — re-fetch this run for fresh links. A caption-video run in status awaiting_review includes `srt_text`; review/edit it and resume with continue_blueprint_run.
    ConnectorOAuth
  • Step 1 of the direct-upload flow. Returns a short-lived presigned HTTPS URL that the caller PUTs the file bytes to (with the same Content-Type that was passed in). After the PUT succeeds, call `confirm_upload` with the same filename and fileSize to receive the final `gs://` URL for use as a transcode/transcribe input. The presigned URL expires in ~15 minutes.
    ConnectorOAuth
  • FREE deterministic. Turn shot-cut timestamps into the analysis topology every Film Protocol agent shares: numbered base shots (shot-000001), long-take windowing (shot-000017-w01of03 when a shot exceeds the profile cap), and greedy analysis units (≤20s / ≤8 shots per unit by default). Pass duration_sec + the cut timestamps you detected locally (e.g. ffmpeg scene filter, threshold 0.30 — see get_film_contract section="media_recipe"); you get back windows and units carrying both source-relative and clip-relative times to cut your analysis clips and label your observations with. No ffmpeg commands are returned (execution is your platform's business). 免费:切镜时间点 → 统一分析拓扑(长镜开窗 + ≤20s/≤8 镜单元)。
    ConnectorNo auth
  • Step 2 of the direct-upload flow. Call after PUTting the file bytes to the URL returned by `request_upload_url`. Returns the final `gs://...` `fileUrl` plus probe metadata (duration, format, codecs). Use the `fileUrl` directly as a `media_url` for `transcribe_audio` or as an `inputs[].url` for `transcode_video`.
    ConnectorOAuth