OpusClip - Clips From Video Serverless API
Turn long videos into captioned vertical shorts.
POST /v2/opus-clips-from-video · submit + poll 1# pip install "segmind>=1.1.0"
2# export SEGMIND_API_KEY="YOUR_API_KEY"
3from segmind import SegmindClient, InferenceFailed, InferenceTimeout
4
5# Async (v2) — recommended for long-running / video models.
6# run() blocks up to 600s; submit_async + job.wait(timeout=...) sets a longer
7# deadline and keeps the request_id so you can re-poll later.
8client = SegmindClient() # reads SEGMIND_API_KEY
9payload = {
10 "video_url": "https://segmind-resources.s3.amazonaws.com/input/opus-clips-from-video-input.mp4",
11 "clip_type": "talking-heads",
12 "custom_prompt": "",
13 "clip_duration_min": 15,
14 "clip_duration_max": 60,
15 "genre": "Auto",
16 "topic_keywords": [],
17 "aspect_ratio": "portrait",
18 "remove_filler_words": False,
19 "skip_curate": False,
20 "video_title": "",
21}
22job = client.submit_async("opus-clips-from-video", **payload)
23print(job.request_id) # available immediately
24try:
25 result = job.wait(timeout=900, interval=2.0)
26 print(result["status"]) # COMPLETED
27 print(result.get("output")) # model output (e.g. video URL)
28except InferenceTimeout as e:
29 print("still running:", e.request_id) # re-poll later with this id
30except InferenceFailed as e:
31 print("failed:", e.detail)
32
33# Fast models (<=600s) can use the one-liner instead:
34# result = segmind.run("opus-clips-from-video", **payload) 1# pip install "segmind>=1.1.0"
2# export SEGMIND_API_KEY="YOUR_API_KEY"
3from segmind import SegmindClient, InferenceFailed, InferenceTimeout
4
5# Async (v2) — recommended for long-running / video models.
6# run() blocks up to 600s; submit_async + job.wait(timeout=...) sets a longer
7# deadline and keeps the request_id so you can re-poll later.
8client = SegmindClient() # reads SEGMIND_API_KEY
9payload = {
10 "video_url": "https://segmind-resources.s3.amazonaws.com/input/opus-clips-from-video-input.mp4",
11 "clip_type": "talking-heads",
12 "custom_prompt": "",
13 "clip_duration_min": 15,
14 "clip_duration_max": 60,
15 "genre": "Auto",
16 "topic_keywords": [],
17 "aspect_ratio": "portrait",
18 "remove_filler_words": False,
19 "skip_curate": False,
20 "video_title": "",
21}
22job = client.submit_async("opus-clips-from-video", **payload)
23print(job.request_id) # available immediately
24try:
25 result = job.wait(timeout=900, interval=2.0)
26 print(result["status"]) # COMPLETED
27 print(result.get("output")) # model output (e.g. video URL)
28except InferenceTimeout as e:
29 print("still running:", e.request_id) # re-poll later with this id
30except InferenceFailed as e:
31 print("failed:", e.detail)
32
33# Fast models (<=600s) can use the one-liner instead:
34# result = segmind.run("opus-clips-from-video", **payload)API Endpoint
https://api.segmind.com/v1/opus-clips-from-videoParameters
video_urlrequiredstring (uri)Public long-form video URL, up to 90 minutes. Supports YouTube, Vimeo, Zoom, MP4.
aspect_ratiooptionalstringOutput framing. Use portrait for TikTok, Reels, Shorts; landscape for YouTube; square for feeds.
"portrait""portrait""landscape""square"brand_template_idoptionalstringOptional OpusClip style preset for captions and layout. Choose a template to brand clips.
"preset-fancy-Karaoke""preset-fancy-Gameplay""preset-fancy-Beasty""preset-fancy-Deep_Diver""preset-fancy-Youshaei""preset-fancy-Pod_P""preset-fancy-Mozi""preset-fancy-Popline""preset-fancy-Simple""preset-fancy-Think_Media"clip_duration_maxoptionalintegerMaximum clip length in seconds (5-300). Keep 60 or below for shorts.
60Range: 5 - 300clip_duration_minoptionalintegerMinimum clip length in seconds (5-300). Set 15-30 for Shorts and Reels.
15Range: 5 - 300clip_typeoptionalstringCuration mode. Use talking-heads for podcasts and interviews; generic for prompt-driven clipping.
"talking-heads""talking-heads""generic"custom_promptoptionalstringDescribes what to extract; required when clip_type is generic. Example: compile funniest moments.
""genreoptionalstringContent genre guiding curation. Use Auto to detect, or set Podcast, Interview, Educational.
"Auto""Auto""Podcast""Interview""Educational""Comedy""Vlog"remove_filler_wordsoptionalbooleanRemoves ums and uhs from clips. Enable for tighter, more polished talking-head cuts.
falseskip_curateoptionalbooleanSkips highlight selection and reframes and captions the whole video. Enable to bypass curation.
falsesource_languageoptionalstringSpoken language as an ISO code like en. Leave blank to auto-detect.
topic_keywordsoptionalstring[]Keywords to prioritize during talking-heads curation. Add topics you want clips focused on.
video_titleoptionalstringOptional title giving context to improve curation. Add your video title for relevance.
""Response Type
Returns: Video
Asynchronous requests (v2)
Use Async for video, long-running (>~60s), or high-concurrency workloads; Sync is simplest for fast image & LLM calls. Async submits a request and you poll it to completion.
- 1
POST /v2/opus-clips-from-videoSubmit — returns request_id, status_url, response_url
- 2
GET /v2/requests/{id}/statusPoll — until COMPLETED or FAILED
- 3
GET /v2/requests/{id}Result — final response body
Status states
- A FAILED request is served as HTTP 422 — the body still carries the error detail.
- An unknown or expired request_id returns HTTP 404.
- Results are retained for 1 hour, then expire.
- Content / RAI blocks surface as FAILED, not a separate state.
- Track completion by polling the status endpoint.
Common Error Codes
The API returns standard HTTP status codes. Detailed error messages are provided in the response body.
Bad Request
Invalid parameters or request format
Unauthorized
Missing or invalid API key
Forbidden
Insufficient permissions
Not Found
Model or endpoint not found
Insufficient Credits
Not enough credits to process request
Rate Limited
Too many requests
Server Error
Internal server error
Bad Gateway
Service temporarily unavailable
Timeout
Request timed out