Long video to short clips
create_clipsPREFER THIS for 'turn this long video/podcast/stream into shorts/clips/highlights'. One call: transcribes the video (or reuses transcriptionJobId/subtitles), an LLM reads the word-timed transcript and picks the count (default 3, max 10) best self-contained moments of minSeconds-maxSeconds (default 15-60, range 5-90), cuts start on a sentence start and end on a sentence or word end, then renders each as MP4: reframe face (default: 720x1280 9:16 crop that follows the speaker, falls back to center), center (plain center crop), or none (keep the source shape). captions (default true) burns captions with any preset (list_presets or custom:cp_...); platform keeps them inside the app's safe zone. Returns clips [{name, rank, start, end, seconds, title, hook, reason, score 0-100, text, url}] sorted by time (rank 1 = best) plus the transcript files. Source: sourceUrl (public https link, Drive, Dropbox; YouTube, TikTok and Instagram links are refused with 422) or fileId. Price (1 credit = 1 cent): transcribe 1/source min (0 with a transcript) + highlights 1 per started 10 source min + render 3 per output min, reserved for count x maxSeconds and the unused part refunded when the clips are shorter; e.g. a 30-min video, 3 clips up to 60 s: 42 credits reserved. quoteOnly:true with durationSeconds returns the price without a key-charge or media. Failed jobs refund automatically. wait (default true) blocks up to waitSeconds (max 50); long videos keep running: poll get_job or pass webhookUrl / notifyEmail.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until done, up to waitSeconds. Default true. | |
| count | No | Clips to return, 1-10. Default 3. Out of range: 422 limit_exceeded before any charge. | |
| fileId | No | Id from create_upload, import_url, or upload_base64. | |
| preset | No | Caption preset id or name, or custom:cp_.... Default Clarity. | |
| autoFit | No | Default true. Same rule as caption_video. | |
| reframe | No | face (default): 9:16 crop that follows the speaker, center fallback. center: plain center crop. none: keep the source aspect. Same price. | |
| captions | No | Burn captions into each clip. Default true. Same price. | |
| glossary | No | ||
| language | No | Spoken language (BCP-47). Omit for auto-detect. | |
| platform | No | tiktok, instagram_reels, youtube_shorts, ... (see list_platforms). Keeps captions clear of the app UI. Same price. | |
| faceAvoid | No | true = move captions off faces (samples faces at 2 fps, same price; result.faceAvoid.faceLayout). Shortcut for styleOverrides.faceAvoid. | |
| quoteOnly | No | Return the price for durationSeconds (and count/maxSeconds) without starting a job. | |
| sourceUrl | No | Public link to the video. Not YouTube, TikTok or Instagram. | |
| subtitles | No | Reuse an SRT, VTT, or JSON transcript (JSON keeps word timing for tighter cuts). | |
| maxCredits | No | Refuse the job if it would cost more than this many credits. | |
| maxSeconds | No | Longest clip, minSeconds-90 s. Default 60. | |
| minSeconds | No | Shortest clip, 5-90 s. Default 15. | |
| webhookUrl | No | ||
| notifyEmail | No | ||
| waitSeconds | No | Default 45, max 50. | |
| brandPresetId | No | ||
| highlightColor | No | #RRGGBB for highlightWords. Default #FACC15. | |
| highlightWords | No | Shortcut: words or phrases to color in every caption (accent/case-insensitive), e.g. ["AwesomeVideo", "gratis"]. Maps to styleOverrides.wordHighlights rule {id:"custom", words, color}. Same price. | |
| idempotencyKey | No | ||
| styleOverrides | No | Per-call style changes deep-merged onto the preset (same fields as list_presets style; null removes a field), validated with the renderer schema and bundled fonts. Example {"fontSize":72,"maxWordsPerCaption":2,"wordEntrance":"bounce"}. Same price. No need to save_custom_preset. Every field with examples: get_style_reference. | |
| durationSeconds | No | ||
| transcriptionJobId | No | Reuse a finished transcription: no transcription charge. |