AI Motion Transfer API

Transfer movement from a source video to a character image.

Upload one character image and one motion video. Ruwana derives the motion duration server-side, submits the production job once and exposes a durable request until the final video is ready.

720p · $0.18/sec1080p · $0.22/sec3–30 secondsServer-derived duration7-day result delivery

A simple two-file input contract

The Motion endpoint requires the character and the movement reference explicitly. Client-supplied duration is not accepted as billing truth.

Character image

Supply the visual identity that should perform the motion.

character_image
  • PNG, JPEG or WebP
  • Required exactly once
  • Character orientation can follow the source video or supplied image

Motion video

Supply the source movement Ruwana should transfer.

motion_video
  • MP4 or MOV
  • Required exactly once
  • Billable duration is parsed from the uploaded video
  • Accepted motion duration: 3–30 seconds

Resolution pricing

Billing is per server-derived second. The customer-facing output contract is the requested resolution tier.

ResolutionPriceBilling unitMedia retention
720p$0.18per second7 days
1080p$0.22per second7 days

Durable asynchronous delivery

Motion generation may take longer than a normal HTTP request. Platform returns a durable request ID instead of requiring your client to keep a connection open for the full render.

Submit Motion

POST /v1/motion/generate validates both files, derives duration and creates the production request.

Poll the same request

Call GET /v1/requests/{request_id}. Status checks never create a second generation.

Receive the retained MP4

A successful request returns a Platform media URL and fixed expiry. Download or archive it within 7 days.

Example request

Keep original sound is enabled by default; set it explicitly when your application needs a stable declared value.

curl https://platform.ruwana.studio/v1/motion/generate \
  -H "Authorization: Bearer $RUWANA_API_KEY" \
  -H "Idempotency-Key: motion-001" \
  -F "character_image=@character.png" \
  -F "motion_video=@movement.mp4" \
  -F "resolution=720p" \
  -F "character_orientation=video" \
  -F "keep_original_sound=true"

Motion Transfer capability

See how character identity, motion reference, orientation and server-derived duration fit together.

Explore Motion Transfer →

Implementation guide

Multipart fields, Node.js/Python examples and durable status handling.

Open Motion docs →

Add motion transfer to your product.

Use one API key, one durable request and the same Platform billing foundation as the rest of the Ruwana production API.