Framing

Corner pin video onto a surface

Pin the clip's four corners to four points, so footage sits on a surface in the shot. Here the river plays on the laptop screen.

Shown on River footage pinned to a laptop screen

Before · the same request without it
After · rendered from the request below

The entry

Put it on the clip itself, beside its asset.

{
"transform": {
"corners": {
"topLeft": {
"x": "45.0%",
"y": "33.6%"
},
"topRight": {
"x": "62.6%",
"y": "32.4%"
},
"bottomRight": {
"x": "61.0%",
"y": "54.6%"
},
"bottomLeft": {
"x": "43.4%",
"y": "54.0%"
}
}
}
}

Run it

The whole request behind the render above. Paste it as it is, or swap the file for your own.

job.ts
import { createClient, outputUrl } from "@rendobar/sdk";
const rb = createClient({ apiKey: process.env.RENDOBAR_API_KEY });
const job = await rb.jobs.run({
type: "compose",
params: {
schemaVersion: 1,
output: {
format: "mp4",
resolution: {
width: 960,
height: 540
}
},
timeline: {
tracks: [
{
clips: [
{
asset: {
type: "image",
src: "https://cdn.rendobar.com/compose/showcase/media/laptop.jpg"
},
start: 0,
length: 5
}
]
},
{
clips: [
{
asset: {
type: "video",
src: "https://cdn.rendobar.com/compose/showcase/media/river.mp4"
},
start: 0,
transform: {
corners: {
topLeft: {
x: "45.0%",
y: "33.6%"
},
topRight: {
x: "62.6%",
y: "32.4%"
},
bottomRight: {
x: "61.0%",
y: "54.6%"
},
bottomLeft: {
x: "43.4%",
y: "54.0%"
}
}
}
}
]
}
]
}
},
});
console.log(outputUrl(job));

Install with npm i @rendobar/sdk. jobs.run() submits and waits, so it returns the finished job in one call.

terminal
curl https://api.rendobar.com/jobs \
-H "Authorization: Bearer $RENDOBAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"compose","params":{"schemaVersion":1,"output":{"format":"mp4","resolution":{"width":960,"height":540}},"timeline":{"tracks":[{"clips":[{"asset":{"type":"image","src":"https://cdn.rendobar.com/compose/showcase/media/laptop.jpg"},"start":0,"length":5}]},{"clips":[{"asset":{"type":"video","src":"https://cdn.rendobar.com/compose/showcase/media/river.mp4"},"start":0,"transform":{"corners":{"topLeft":{"x":"45.0%","y":"33.6%"},"topRight":{"x":"62.6%","y":"32.4%"},"bottomRight":{"x":"61.0%","y":"54.6%"},"bottomLeft":{"x":"43.4%","y":"54.0%"}}}}]}]}}}'

Returns immediately with a job id. Poll GET /jobs/{id} or register a webhook rather than blocking on the request.

Questions

What does the corners effect do in compose?

Pin the clip's four corners to four points, so footage sits on a surface in the shot. Here the river plays on the laptop screen.

How do I add corner pin to a video with an API?

Send a compose job to the Rendobar API with this entry in the timeline: {"transform":{"corners":{"topLeft":{"x":"45.0%","y":"33.6%"},"topRight":{"x":"62.6%","y":"32.4%"},"bottomRight":{"x":"61.0%","y":"54.6%"},"bottomLeft":{"x":"43.4%","y":"54.0%"}}}}. Put it on the clip itself, beside its asset. The request on this page is complete and renders as shown.

Footage and sound