Your agent can clone viral videos now
Cloning takes a public TikTok or Instagram video, evaluates whether its motion and framing will transfer cleanly, and generates a new video with your character performing the same motion. Create your character once, then reuse its id on every clone.Need an API key? Follow Get your API key first.
Before you start
- All URLs passed between steps must be
https://. Plainhttp://is rejected. - TikTok and Instagram links are not directly fetchable by the generation providers. Stage the source first with
POST /v1/videos/download/tiktokorPOST /v1/videos/download/instagram— every later step takes the staged VidJutsu URL, not the original platform link. - Source clips are capped at 15 seconds. A longer
sourceVideoUrlpassed toPOST /v1/clones/videois rejected with a 422 anderror: "video_too_long". POST /v1/clones/checkaccepts source videos up to about 2 minutes for the cloneability read, but the actual clone call is still capped at 15 seconds, so trim or pick a short segment before generating.- Starting images returned by
POST /v1/clones/starting-imageare guaranteed clean: no captions, watermarks, or platform UI, regardless of what the source frame or your prompt asked for. modeldefaults to"kling"(Kling motion control, keeps the original sound). Passmodel: "seedance"for the alternate model, which renders 9:16 at 480p through video-edit.- Characters are a persisted, reusable resource. Create one once, keep its
id, and pass thatidinto every clone from then on instead of regenerating a character each time.
Create your character first
Before you clone anything, create the character you want to appear in your clones. This only needs to happen once.referenceImageUrl is optional if you already have a face or identity image to guide the generation; without it, the character comes purely from prompt. The call is synchronous and shares the daily clone admission limit. Save id: it is what you pass to every clone that should use this character, so you only create it once.
To see the characters you’ve already created, list them:
403 subscription_required, 429 on the shared clone admission limit. 404 if the character id doesn’t exist or belongs to another tenant.
The clone calls
1. Stage the source video
reused: true), so restaging is cheap. Use url from the response as the videoUrl / sourceVideoUrl for every step below.
Errors: 403 subscription_required if the key has no active subscription. 429 with a Retry-After header if the daily import limit for the endpoint is hit; the window resets at 00:00 UTC.
2. Check whether it will clone well
verdict is strong, possible, or weak, backed by a 0-100 score and the evidence behind it. Branch on the result: a strong or possible verdict is worth continuing, weak usually is not. This call is synchronous and shares the same daily clone admission limit as the character, starting-image, and video steps.
Errors: 403 subscription_required, 429 with Retry-After on the shared clone admission limit.
3. Compose the starting frame
Pass theid from Create your character first as characterId. POST /v1/clones/starting-image accepts either characterId (reuse the character you already created) or characterImageUrl (a one-off image), but exactly one of the two.
sourceVideoUrl is optional; passing it grounds the composition in the source clip’s opening frame so the pose and framing line up with the motion you’re about to clone. The returned frame is always clean, no overlays or platform UI, no matter what the source or prompt included. Synchronous and shares the clone admission limit.
Errors: 403 subscription_required, 429 on the shared clone admission limit. 422 if both or neither of characterId / characterImageUrl are provided, or if characterId doesn’t resolve to a character you own.
4. Submit the clone
model defaults to "kling"; pass "seedance" for the 480p 9:16 alternate. prompt is an optional override of the default identity-swap prompt and only applies to seedance. This call is asynchronous: it returns 202 immediately with a task id to poll.
Errors: 403 subscription_required. 422 video_too_long if sourceVideoUrl runs past 15 seconds. 429 with Retry-After on the shared clone admission limit.
5. Poll for the result
status is "processing". On "completed", videoUrl carries the finished clip. On "failed", error explains why. Status reads are not billed and not rate-limited. Unknown ids, or ids owned by another tenant, return 404.
SDK and CLI
The
vidjutsu clone run CLI command requires the CLI’s clone release. If you’re on an older CLI version, run the calls directly against the API or the TypeScript SDK below until you upgrade.id. Reuse that id on every clone:
Continue the workflow
Scrape guide
Preview a TikTok or Instagram post’s engagement before you decide what to clone.
API reference
Full request and response schemas for every clone endpoint.
Overlay and disclaimer
Add a text overlay or disclaimer card to the finished clone before you publish.
Authentication
Get an API key and pass it as a bearer token.