# KinoPipe > KinoPipe is a video editing tool for AI agents: typed editing operations over a REST API and a hosted MCP server, run on FFmpeg 9 workers with no shell commands. Base URL: https://kinopipe.com OpenAPI: https://kinopipe.com/openapi.json Documentation: https://kinopipe.com/docs Tool catalog: https://kinopipe.com/tools How-to guides: https://kinopipe.com/guides Remote MCP: https://kinopipe.com/mcp Connect guide: https://kinopipe.com/connect FFmpeg as a service overview: https://kinopipe.com/ffmpeg-as-a-service Benchmark report (FFmpeg 9 on serverless, CPU vs GPU, cold starts, cost per job): https://kinopipe.com/benchmarks/ffmpeg-serverless-cpu-vs-gpu FFmpeg command reference (commands verified on FFmpeg 9.0.1, with the typed KinoPipe equivalent): https://kinopipe.com/ffmpeg Typed operations published: 45. Benchmark: p50 render 8.2s for a 1080p H.264 edit, 100% success across 325 runs (cold, warm and burst phases). Compound edits compile to one single-pass FFmpeg job. Agent and automation guides: - Claude: https://kinopipe.com/for/claude - Claude Code: https://kinopipe.com/for/claude-code - Codex: https://kinopipe.com/for/codex - ChatGPT: https://kinopipe.com/for/chatgpt - Cursor: https://kinopipe.com/for/cursor - GitHub Copilot: https://kinopipe.com/for/copilot - Windsurf: https://kinopipe.com/for/windsurf - n8n: https://kinopipe.com/for/n8n Claude Code skill (recipe guidance): https://kinopipe.com/skills/kinopipe/SKILL.md Calling KinoPipe from a language, each page with a complete submit-and-poll example: - Python: https://kinopipe.com/with/python - Node.js: https://kinopipe.com/with/nodejs - PHP: https://kinopipe.com/with/php - Go: https://kinopipe.com/with/go - Java: https://kinopipe.com/with/java - Ruby on Rails: https://kinopipe.com/with/ruby-on-rails - Rust: https://kinopipe.com/with/rust Task guides (the manual FFmpeg command next to the typed call): - How to add subtitles to a video with an API: https://kinopipe.com/guides/add-subtitles-to-a-video-with-an-api - How to convert MOV to MP4 with an API: https://kinopipe.com/guides/convert-mov-to-mp4-with-an-api - How to make a video vertical for Reels with an API: https://kinopipe.com/guides/make-a-video-vertical-for-reels-with-an-api - How to compress a video with an API: https://kinopipe.com/guides/compress-a-video-with-an-api - How to extract audio from a video with an API: https://kinopipe.com/guides/extract-audio-from-a-video-with-an-api - How to trim a video with an API: https://kinopipe.com/guides/trim-a-video-with-an-api - How to add a watermark to a video with an API: https://kinopipe.com/guides/add-a-watermark-to-a-video-with-an-api - How to merge videos with an API: https://kinopipe.com/guides/merge-videos-with-an-api - How to convert a video to a GIF with an API: https://kinopipe.com/guides/convert-a-video-to-a-gif-with-an-api - How to generate a video thumbnail with an API: https://kinopipe.com/guides/generate-a-video-thumbnail-with-an-api - How to turn a long podcast into short clips with an API: https://kinopipe.com/guides/turn-a-long-podcast-into-short-clips-with-an-api - How to generate YouTube chapter timestamps from a video: https://kinopipe.com/guides/generate-youtube-chapter-timestamps-from-a-video - How to build a slideshow video from images and a voiceover with an API: https://kinopipe.com/guides/build-a-slideshow-video-from-images-and-a-voiceover-with-an-api - How to turn a podcast episode into a video with an API: https://kinopipe.com/guides/turn-a-podcast-episode-into-a-video-with-an-api FFmpeg commands (each page: verified command, flags, variants, pitfalls, typed equivalent): - Trim a video with FFmpeg (ffmpeg trim video): https://kinopipe.com/ffmpeg/trim-video - Resize a video with FFmpeg (ffmpeg resize video): https://kinopipe.com/ffmpeg/resize-video - Compress a video with FFmpeg (ffmpeg compress video): https://kinopipe.com/ffmpeg/compress-video - Convert MOV to MP4 with FFmpeg (ffmpeg mov to mp4): https://kinopipe.com/ffmpeg/convert-mov-to-mp4 - Extract audio from a video with FFmpeg (ffmpeg extract audio): https://kinopipe.com/ffmpeg/extract-audio - Convert a video to GIF with FFmpeg (ffmpeg video to gif): https://kinopipe.com/ffmpeg/video-to-gif - Crop a video with FFmpeg (ffmpeg crop video): https://kinopipe.com/ffmpeg/crop-video - Merge videos with FFmpeg (ffmpeg concat videos): https://kinopipe.com/ffmpeg/merge-videos - Speed up or slow down a video with FFmpeg (ffmpeg speed up video): https://kinopipe.com/ffmpeg/change-video-speed - Add subtitles to a video with FFmpeg (ffmpeg burn subtitles): https://kinopipe.com/ffmpeg/add-subtitles - Add a watermark to a video with FFmpeg (ffmpeg watermark): https://kinopipe.com/ffmpeg/add-watermark - Remove audio from a video with FFmpeg (ffmpeg remove audio): https://kinopipe.com/ffmpeg/remove-audio - Rotate a video with FFmpeg (ffmpeg rotate video): https://kinopipe.com/ffmpeg/rotate-video - Make a video vertical (9:16) with FFmpeg (ffmpeg 9:16 vertical video): https://kinopipe.com/ffmpeg/video-to-vertical - Extract a thumbnail from a video with FFmpeg (ffmpeg extract frame): https://kinopipe.com/ffmpeg/video-thumbnail - Normalize audio loudness with FFmpeg (ffmpeg normalize audio): https://kinopipe.com/ffmpeg/normalize-audio - Detect silence with FFmpeg (ffmpeg silencedetect): https://kinopipe.com/ffmpeg/detect-silence - Remove silence from audio with FFmpeg (ffmpeg remove silence): https://kinopipe.com/ffmpeg/remove-silence - Detect scene changes with FFmpeg (ffmpeg scene detection): https://kinopipe.com/ffmpeg/detect-scenes - Split a video into parts with FFmpeg (ffmpeg split video into parts): https://kinopipe.com/ffmpeg/split-video - Turn an image into a video with FFmpeg (ffmpeg image to video): https://kinopipe.com/ffmpeg/image-to-video - Picture-in-picture with FFmpeg overlay (ffmpeg picture in picture): https://kinopipe.com/ffmpeg/picture-in-picture - Remove metadata from a video with FFmpeg (ffmpeg remove metadata): https://kinopipe.com/ffmpeg/strip-metadata - Generate a waveform image with FFmpeg (ffmpeg waveform image): https://kinopipe.com/ffmpeg/audio-waveform - Reverse a video with FFmpeg (ffmpeg reverse video): https://kinopipe.com/ffmpeg/reverse-video API catalog (RFC 9727): https://kinopipe.com/.well-known/api-catalog Product comparisons: - RenderIO: https://kinopipe.com/compare/renderio - Rendi: https://kinopipe.com/compare/rendi - Shotstack: https://kinopipe.com/compare/shotstack - Creatomate: https://kinopipe.com/compare/creatomate - Self-hosted FFmpeg: https://kinopipe.com/compare/self-hosted-ffmpeg ## Pricing Credits cover worker time and output delivery, not seats. One credit equals one worker second or 6 MiB of output, whichever rounded-up total is higher. Reading tools (transcribe_video, describe_video, find_highlights and the detectors) are billed per started minute of the media they read instead, however long the analysis takes. Failed jobs are refunded automatically, and jobs pause at zero credits (no overage billing). - Free: 100 credits once at sign-up (about 10 edits), no credit card required — a trial, not a tier. - Credit pack: $9 once for 1,000 credits (about 100 edits), no subscription, credits never expire. - Starter: $12/month for 1,500 credits (about 150 edits). - Developer: $29/month for 5,000 credits (about 500 edits). - Pro: $99/month for 25,000 credits (about 2,500 edits). Pricing page: https://kinopipe.com/pricing ## Authentication Send a KinoPipe API key in the Authorization header: Authorization: Bearer kp_live_... ## Remote MCP Connect an OAuth-capable MCP client to https://kinopipe.com/mcp using Streamable HTTP. KinoPipe supports automatic OAuth 2.1 discovery, sign-in and consent. API-key Bearer headers remain supported for manual and server-side clients. The server exposes typed focused tools such as trim_video, resize_video, add_music_to_video and split_video, plus get_video_metadata to read a source before editing, create_upload for local files (returns a signed upload command and a media_url to use as input_url), create_video_job for custom recipes and get_job for asynchronous result retrieval. Video tool calls return a jobId. Call get_job until status is succeeded or failed. Successful jobs include temporary downloadable URLs in result.output and result.outputs. ## Fastest path Use POST /api/v1/tools/{slug} with one to six named public media inputs and optional tool-specific options. The first input must use the ID main. For local files, call POST /api/v1/uploads with filename, contentType and byteSize. Submit the returned fields and file as multipart form data to upload.uploadUrl, then use upload.mediaUrl as inputs[].url within 24 hours. Storage enforces the declared byte size with a 300 MB maximum. KinoPipe deletes direct uploads after one day. Executable tools: - video-metadata (read duration, dimensions, rotation, codecs and audio tracks — no encode) - detect-scenes (scene-change timestamps as JSON — pick real cut points before trimming) - split-by-scenes (detect the cuts and return one MP4 segment per scene in a single job) - detect-silence (silent passages with start/end/duration as JSON, nothing edited) - detect-visual-issues (blurry, black and frozen passages with start/end/duration plus a per-second sharpness score as JSON — find what to trim before editing) - describe-video (the video as text: summary, retrieval tags, source hash, timestamped scene descriptions from one frame per detected scene with on-screen text and shot type, plus a timestamped speech transcript, as JSON — read it once instead of sending frames to a model on every call) - transcribe-video (speech to timestamped text with a self-hosted Parakeet model, 25 European languages auto-detected; JSON segments in result.analysis plus captions.srt as the second output, ready for add-subtitles-to-video) - find-highlights (long recording → ranked clip candidates with start, end, score, hook, title, reason and clip transcript as JSON; inputs up to 2 GB — pick the moments, then cut them with trim-video or create-social-video-clip) - analyze-audio (mean/max volume, integrated LUFS, loudness range, true peak as JSON) - video-to-vertical (9:16 pad with blurred background, no cropping) - smart-crop-video (reframe to 9:16, 1:1 or 4:5 by following the people: faces tracked, active speaker detected from lips and audio, still window per shot, hard cuts between speakers, stacked layout for two speakers, blurred fit for shots without a face) - instagram-reel, tiktok-video, youtube-short (platform-ready 9:16: 1080x1920, H.264 High@4.1, capped bitrate, constant 30 fps; also exposed to agents as format-for-platform) - change-video-speed (0.25x to 4x, pitch-corrected audio; or target_duration to fit an exact length) - normalize-audio (loudness targets: -14, -16 or -23 LUFS) - remove-silence-from-audio (tightened MP3 or WAV) - compress-video - video-to-mp4 - resize-video - extract-audio - video-thumbnail-generator - video-filmstrip (one image strip of evenly spaced frames) - audio-waveform (waveform image of any audio or video soundtrack, transparent PNG) - audiogram (audio + optional background image -> MP4 with an animated waveform) - add-progress-bar (TikTok-style bar that fills over the duration) - boomerang-video (forward then reverse, one loop-ready MP4, sources up to 30s) - auto-orient-video (bake rotation metadata so phone footage plays upright) - strip-video-metadata (remove GPS, device and encoder tags without re-encoding) - add-subtitles-to-video - trim-video - optimize-video-for-web - merge-videos (optional crossfade transitions between clips) - merge-audio (join 2 to 6 audio files into one MP3 or WAV) - image-to-video (turn a still image into an MP4 of a chosen duration) - add-watermark-to-video - picture-in-picture-video - create-social-video-clip - add-music-to-video (optional ducking: music auto-lowers under the source voice) - convert-video-to-gif - crop-video - remove-audio-from-video - split-video Example: POST /api/v1/tools/trim-video Authorization: Bearer kp_live_... Content-Type: application/json Idempotency-Key: trim-example-1 {"inputs":[{"id":"main","url":"https://example.com/video.mp4"}],"options":{"start":2.5,"end":17}} ## Custom edits Use POST /api/v1/jobs to combine bounded trim, resize, crop, thumbnail, subtitle, GIF and audio operations or run one composition/split operation. Supported outputs are MP4, WebM, MP3, WAV, JPEG, WebP, PNG and GIF. Use an Idempotency-Key when retrying the same request. A new request returns HTTP 202 with a queued job and statusUrl. Poll GET /api/v1/jobs/{jobId} with the same API key until the job succeeds or fails. GET /api/v1/jobs?limit=20 lists the account's most recent jobs (newest first) and doubles as a side-effect-free API key check. Successful terminal responses include output for the first result and outputs for every downloadable result; signed URLs are temporary. ## Signed webhooks Add a webhook object with a public HTTPS url, a secret of at least 16 characters and optional events. Supported events are job.succeeded and job.failed. KinoPipe signs the raw body with HMAC-SHA256 in X-KinoPipe-Signature and includes X-KinoPipe-Delivery for deduplication.