curl --request POST \
--url https://api.framelane.io/v1/projects \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"render_request": {
"width": 1920,
"height": 1080,
"duration": 15,
"frame_rate": 30,
"output_format": "mp4",
"output_filename": "my-render",
"background_color": "#000000ff",
"background_image_url": "https://cdn.example.com/bg.jpg",
"alpha": false,
"elements": [
{
"source_url": "https://cdn.example.com/clip.mp4",
"lut_url": "<string>",
"lut_intensity": 100,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"exposure": 0,
"sharpness": 0,
"blur": 0,
"noise": 0,
"vignette": 0,
"hue_rotate": 0,
"temperature": 0,
"tint": 0,
"vibrance": 0,
"highlights": 0,
"shadows": 0,
"crop_top": 0,
"crop_bottom": 0,
"crop_left": 0,
"crop_right": 0,
"border_radius": 0,
"border_color": "<string>",
"border_width": 0,
"shadow_color": "<string>",
"shadow_blur": 0,
"shadow_x": 0,
"shadow_y": 0,
"blend_mode": "none",
"mask": {
"feather": 0,
"scale": 1,
"center": {
"x": 0.5,
"y": 0.5
}
},
"mask_keyframes": [
{
"time": 1,
"feather": 123,
"scale": 123,
"center": {
"x": 0.5,
"y": 0.5
},
"easing": "<string>",
"spring": {
"stiffness": 100,
"damping": 10,
"mass": 1
},
"back": {
"overshoot": 1.70158,
"dir": "out"
},
"elastic": {
"amplitude": 1,
"period": 0.3,
"dir": "out"
},
"bezier": {
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1
}
}
],
"matte": {
"source": "<string>",
"mode": "alpha",
"invert": false
},
"backdrop_blur": 0,
"x": "50%",
"y": "50%",
"width": "40%",
"height": "80%",
"aspect_ratio": 123,
"x_anchor": "0%",
"y_anchor": "100%",
"x_rotation": "0°",
"y_rotation": "0°",
"z_rotation": "0°",
"x_scale": "100%",
"y_scale": "100%",
"flip_horizontal": false,
"flip_vertical": false,
"opacity": 100,
"z_index": 123,
"clip": false,
"color_overlay": "<string>",
"type": "video",
"id": "clip_01",
"name": "<string>",
"track": 127,
"time": 0,
"visible": true,
"in_point": 0,
"out_point": 6,
"speed": 1,
"playback_rate_keyframes": [
{
"time": 1,
"rate": 1
}
],
"volume": 100,
"fade_in_duration": 0,
"fade_out_duration": 0,
"effects": [],
"motion": []
}
],
"transitions": [
{
"type": "cross_dissolve",
"duration": 0.5,
"from_id": "video_01",
"to_id": "video_02",
"z_index": 1
}
],
"groups": [
{
"id": "hero",
"parent": "<string>",
"pivot": {
"x": 0.5,
"y": 0.5
},
"translate": {
"x": 0.5,
"y": 0.5
},
"scale": 1,
"rotation_degrees": 0,
"x_rotation": "0°",
"y_rotation": "0°",
"opacity": 1,
"members": [
"<string>"
],
"animations": [
{
"time": 1,
"duration": 123,
"custom": "<string>",
"easing": "ease_in_out",
"reversed": false,
"scope": "element",
"delay": 0,
"spacing": 1,
"loop": false,
"audio": {
"feature": "amplitude",
"scale": 0,
"opacity": 0,
"translate": {
"x": 0.5,
"y": 0.5
},
"rotate": 0
}
}
],
"layout": {
"type": "stack",
"direction": "row",
"gap": 0,
"align": "center",
"origin": {
"x": 0.5,
"y": 0.5
}
}
}
],
"motion_blur": {
"samples": 17,
"shutter": 0.5
},
"background_gradient": "linear-gradient(90deg, #ff0000 0%, #0000ff 100%)",
"watermark_url": "<string>",
"custom_animations": {
"element": [],
"text": []
},
"metadata": {
"project_id": "proj_123"
},
"webhook_url": "https://app.example.com/hooks/framelane",
"ingest_external": true
},
"author": "user"
}
'import requests
url = "https://api.framelane.io/v1/projects"
payload = {
"name": "<string>",
"render_request": {
"width": 1920,
"height": 1080,
"duration": 15,
"frame_rate": 30,
"output_format": "mp4",
"output_filename": "my-render",
"background_color": "#000000ff",
"background_image_url": "https://cdn.example.com/bg.jpg",
"alpha": False,
"elements": [
{
"source_url": "https://cdn.example.com/clip.mp4",
"lut_url": "<string>",
"lut_intensity": 100,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"exposure": 0,
"sharpness": 0,
"blur": 0,
"noise": 0,
"vignette": 0,
"hue_rotate": 0,
"temperature": 0,
"tint": 0,
"vibrance": 0,
"highlights": 0,
"shadows": 0,
"crop_top": 0,
"crop_bottom": 0,
"crop_left": 0,
"crop_right": 0,
"border_radius": 0,
"border_color": "<string>",
"border_width": 0,
"shadow_color": "<string>",
"shadow_blur": 0,
"shadow_x": 0,
"shadow_y": 0,
"blend_mode": "none",
"mask": {
"feather": 0,
"scale": 1,
"center": {
"x": 0.5,
"y": 0.5
}
},
"mask_keyframes": [
{
"time": 1,
"feather": 123,
"scale": 123,
"center": {
"x": 0.5,
"y": 0.5
},
"easing": "<string>",
"spring": {
"stiffness": 100,
"damping": 10,
"mass": 1
},
"back": {
"overshoot": 1.70158,
"dir": "out"
},
"elastic": {
"amplitude": 1,
"period": 0.3,
"dir": "out"
},
"bezier": {
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1
}
}
],
"matte": {
"source": "<string>",
"mode": "alpha",
"invert": False
},
"backdrop_blur": 0,
"x": "50%",
"y": "50%",
"width": "40%",
"height": "80%",
"aspect_ratio": 123,
"x_anchor": "0%",
"y_anchor": "100%",
"x_rotation": "0°",
"y_rotation": "0°",
"z_rotation": "0°",
"x_scale": "100%",
"y_scale": "100%",
"flip_horizontal": False,
"flip_vertical": False,
"opacity": 100,
"z_index": 123,
"clip": False,
"color_overlay": "<string>",
"type": "video",
"id": "clip_01",
"name": "<string>",
"track": 127,
"time": 0,
"visible": True,
"in_point": 0,
"out_point": 6,
"speed": 1,
"playback_rate_keyframes": [
{
"time": 1,
"rate": 1
}
],
"volume": 100,
"fade_in_duration": 0,
"fade_out_duration": 0,
"effects": [],
"motion": []
}
],
"transitions": [
{
"type": "cross_dissolve",
"duration": 0.5,
"from_id": "video_01",
"to_id": "video_02",
"z_index": 1
}
],
"groups": [
{
"id": "hero",
"parent": "<string>",
"pivot": {
"x": 0.5,
"y": 0.5
},
"translate": {
"x": 0.5,
"y": 0.5
},
"scale": 1,
"rotation_degrees": 0,
"x_rotation": "0°",
"y_rotation": "0°",
"opacity": 1,
"members": ["<string>"],
"animations": [
{
"time": 1,
"duration": 123,
"custom": "<string>",
"easing": "ease_in_out",
"reversed": False,
"scope": "element",
"delay": 0,
"spacing": 1,
"loop": False,
"audio": {
"feature": "amplitude",
"scale": 0,
"opacity": 0,
"translate": {
"x": 0.5,
"y": 0.5
},
"rotate": 0
}
}
],
"layout": {
"type": "stack",
"direction": "row",
"gap": 0,
"align": "center",
"origin": {
"x": 0.5,
"y": 0.5
}
}
}
],
"motion_blur": {
"samples": 17,
"shutter": 0.5
},
"background_gradient": "linear-gradient(90deg, #ff0000 0%, #0000ff 100%)",
"watermark_url": "<string>",
"custom_animations": {
"element": [],
"text": []
},
"metadata": { "project_id": "proj_123" },
"webhook_url": "https://app.example.com/hooks/framelane",
"ingest_external": True
},
"author": "user"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
render_request: {
width: 1920,
height: 1080,
duration: 15,
frame_rate: 30,
output_format: 'mp4',
output_filename: 'my-render',
background_color: '#000000ff',
background_image_url: 'https://cdn.example.com/bg.jpg',
alpha: false,
elements: [
{
source_url: 'https://cdn.example.com/clip.mp4',
lut_url: '<string>',
lut_intensity: 100,
brightness: 0,
contrast: 0,
saturation: 0,
exposure: 0,
sharpness: 0,
blur: 0,
noise: 0,
vignette: 0,
hue_rotate: 0,
temperature: 0,
tint: 0,
vibrance: 0,
highlights: 0,
shadows: 0,
crop_top: 0,
crop_bottom: 0,
crop_left: 0,
crop_right: 0,
border_radius: 0,
border_color: '<string>',
border_width: 0,
shadow_color: '<string>',
shadow_blur: 0,
shadow_x: 0,
shadow_y: 0,
blend_mode: 'none',
mask: {feather: 0, scale: 1, center: {x: 0.5, y: 0.5}},
mask_keyframes: [
{
time: 1,
feather: 123,
scale: 123,
center: {x: 0.5, y: 0.5},
easing: '<string>',
spring: {stiffness: 100, damping: 10, mass: 1},
back: {overshoot: 1.70158, dir: 'out'},
elastic: {amplitude: 1, period: 0.3, dir: 'out'},
bezier: {x1: 0, y1: 0, x2: 1, y2: 1}
}
],
matte: {source: '<string>', mode: 'alpha', invert: false},
backdrop_blur: 0,
x: '50%',
y: '50%',
width: '40%',
height: '80%',
aspect_ratio: 123,
x_anchor: '0%',
y_anchor: '100%',
x_rotation: '0°',
y_rotation: '0°',
z_rotation: '0°',
x_scale: '100%',
y_scale: '100%',
flip_horizontal: false,
flip_vertical: false,
opacity: 100,
z_index: 123,
clip: false,
color_overlay: '<string>',
type: 'video',
id: 'clip_01',
name: '<string>',
track: 127,
time: 0,
visible: true,
in_point: 0,
out_point: 6,
speed: 1,
playback_rate_keyframes: [{time: 1, rate: 1}],
volume: 100,
fade_in_duration: 0,
fade_out_duration: 0,
effects: [],
motion: []
}
],
transitions: [
{
type: 'cross_dissolve',
duration: 0.5,
from_id: 'video_01',
to_id: 'video_02',
z_index: 1
}
],
groups: [
{
id: 'hero',
parent: '<string>',
pivot: {x: 0.5, y: 0.5},
translate: {x: 0.5, y: 0.5},
scale: 1,
rotation_degrees: 0,
x_rotation: '0°',
y_rotation: '0°',
opacity: 1,
members: ['<string>'],
animations: [
{
time: 1,
duration: 123,
custom: '<string>',
easing: 'ease_in_out',
reversed: false,
scope: 'element',
delay: 0,
spacing: 1,
loop: false,
audio: {
feature: 'amplitude',
scale: 0,
opacity: 0,
translate: {x: 0.5, y: 0.5},
rotate: 0
}
}
],
layout: {
type: 'stack',
direction: 'row',
gap: 0,
align: 'center',
origin: {x: 0.5, y: 0.5}
}
}
],
motion_blur: {samples: 17, shutter: 0.5},
background_gradient: 'linear-gradient(90deg, #ff0000 0%, #0000ff 100%)',
watermark_url: '<string>',
custom_animations: {element: [], text: []},
metadata: {project_id: 'proj_123'},
webhook_url: 'https://app.example.com/hooks/framelane',
ingest_external: true
},
author: 'user'
})
};
fetch('https://api.framelane.io/v1/projects', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.framelane.io/v1/projects",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'render_request' => [
'width' => 1920,
'height' => 1080,
'duration' => 15,
'frame_rate' => 30,
'output_format' => 'mp4',
'output_filename' => 'my-render',
'background_color' => '#000000ff',
'background_image_url' => 'https://cdn.example.com/bg.jpg',
'alpha' => false,
'elements' => [
[
'source_url' => 'https://cdn.example.com/clip.mp4',
'lut_url' => '<string>',
'lut_intensity' => 100,
'brightness' => 0,
'contrast' => 0,
'saturation' => 0,
'exposure' => 0,
'sharpness' => 0,
'blur' => 0,
'noise' => 0,
'vignette' => 0,
'hue_rotate' => 0,
'temperature' => 0,
'tint' => 0,
'vibrance' => 0,
'highlights' => 0,
'shadows' => 0,
'crop_top' => 0,
'crop_bottom' => 0,
'crop_left' => 0,
'crop_right' => 0,
'border_radius' => 0,
'border_color' => '<string>',
'border_width' => 0,
'shadow_color' => '<string>',
'shadow_blur' => 0,
'shadow_x' => 0,
'shadow_y' => 0,
'blend_mode' => 'none',
'mask' => [
'feather' => 0,
'scale' => 1,
'center' => [
'x' => 0.5,
'y' => 0.5
]
],
'mask_keyframes' => [
[
'time' => 1,
'feather' => 123,
'scale' => 123,
'center' => [
'x' => 0.5,
'y' => 0.5
],
'easing' => '<string>',
'spring' => [
'stiffness' => 100,
'damping' => 10,
'mass' => 1
],
'back' => [
'overshoot' => 1.70158,
'dir' => 'out'
],
'elastic' => [
'amplitude' => 1,
'period' => 0.3,
'dir' => 'out'
],
'bezier' => [
'x1' => 0,
'y1' => 0,
'x2' => 1,
'y2' => 1
]
]
],
'matte' => [
'source' => '<string>',
'mode' => 'alpha',
'invert' => false
],
'backdrop_blur' => 0,
'x' => '50%',
'y' => '50%',
'width' => '40%',
'height' => '80%',
'aspect_ratio' => 123,
'x_anchor' => '0%',
'y_anchor' => '100%',
'x_rotation' => '0°',
'y_rotation' => '0°',
'z_rotation' => '0°',
'x_scale' => '100%',
'y_scale' => '100%',
'flip_horizontal' => false,
'flip_vertical' => false,
'opacity' => 100,
'z_index' => 123,
'clip' => false,
'color_overlay' => '<string>',
'type' => 'video',
'id' => 'clip_01',
'name' => '<string>',
'track' => 127,
'time' => 0,
'visible' => true,
'in_point' => 0,
'out_point' => 6,
'speed' => 1,
'playback_rate_keyframes' => [
[
'time' => 1,
'rate' => 1
]
],
'volume' => 100,
'fade_in_duration' => 0,
'fade_out_duration' => 0,
'effects' => [
],
'motion' => [
]
]
],
'transitions' => [
[
'type' => 'cross_dissolve',
'duration' => 0.5,
'from_id' => 'video_01',
'to_id' => 'video_02',
'z_index' => 1
]
],
'groups' => [
[
'id' => 'hero',
'parent' => '<string>',
'pivot' => [
'x' => 0.5,
'y' => 0.5
],
'translate' => [
'x' => 0.5,
'y' => 0.5
],
'scale' => 1,
'rotation_degrees' => 0,
'x_rotation' => '0°',
'y_rotation' => '0°',
'opacity' => 1,
'members' => [
'<string>'
],
'animations' => [
[
'time' => 1,
'duration' => 123,
'custom' => '<string>',
'easing' => 'ease_in_out',
'reversed' => false,
'scope' => 'element',
'delay' => 0,
'spacing' => 1,
'loop' => false,
'audio' => [
'feature' => 'amplitude',
'scale' => 0,
'opacity' => 0,
'translate' => [
'x' => 0.5,
'y' => 0.5
],
'rotate' => 0
]
]
],
'layout' => [
'type' => 'stack',
'direction' => 'row',
'gap' => 0,
'align' => 'center',
'origin' => [
'x' => 0.5,
'y' => 0.5
]
]
]
],
'motion_blur' => [
'samples' => 17,
'shutter' => 0.5
],
'background_gradient' => 'linear-gradient(90deg, #ff0000 0%, #0000ff 100%)',
'watermark_url' => '<string>',
'custom_animations' => [
'element' => [
],
'text' => [
]
],
'metadata' => [
'project_id' => 'proj_123'
],
'webhook_url' => 'https://app.example.com/hooks/framelane',
'ingest_external' => true
],
'author' => 'user'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.framelane.io/v1/projects"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"render_request\": {\n \"width\": 1920,\n \"height\": 1080,\n \"duration\": 15,\n \"frame_rate\": 30,\n \"output_format\": \"mp4\",\n \"output_filename\": \"my-render\",\n \"background_color\": \"#000000ff\",\n \"background_image_url\": \"https://cdn.example.com/bg.jpg\",\n \"alpha\": false,\n \"elements\": [\n {\n \"source_url\": \"https://cdn.example.com/clip.mp4\",\n \"lut_url\": \"<string>\",\n \"lut_intensity\": 100,\n \"brightness\": 0,\n \"contrast\": 0,\n \"saturation\": 0,\n \"exposure\": 0,\n \"sharpness\": 0,\n \"blur\": 0,\n \"noise\": 0,\n \"vignette\": 0,\n \"hue_rotate\": 0,\n \"temperature\": 0,\n \"tint\": 0,\n \"vibrance\": 0,\n \"highlights\": 0,\n \"shadows\": 0,\n \"crop_top\": 0,\n \"crop_bottom\": 0,\n \"crop_left\": 0,\n \"crop_right\": 0,\n \"border_radius\": 0,\n \"border_color\": \"<string>\",\n \"border_width\": 0,\n \"shadow_color\": \"<string>\",\n \"shadow_blur\": 0,\n \"shadow_x\": 0,\n \"shadow_y\": 0,\n \"blend_mode\": \"none\",\n \"mask\": {\n \"feather\": 0,\n \"scale\": 1,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n },\n \"mask_keyframes\": [\n {\n \"time\": 1,\n \"feather\": 123,\n \"scale\": 123,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"easing\": \"<string>\",\n \"spring\": {\n \"stiffness\": 100,\n \"damping\": 10,\n \"mass\": 1\n },\n \"back\": {\n \"overshoot\": 1.70158,\n \"dir\": \"out\"\n },\n \"elastic\": {\n \"amplitude\": 1,\n \"period\": 0.3,\n \"dir\": \"out\"\n },\n \"bezier\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": 1,\n \"y2\": 1\n }\n }\n ],\n \"matte\": {\n \"source\": \"<string>\",\n \"mode\": \"alpha\",\n \"invert\": false\n },\n \"backdrop_blur\": 0,\n \"x\": \"50%\",\n \"y\": \"50%\",\n \"width\": \"40%\",\n \"height\": \"80%\",\n \"aspect_ratio\": 123,\n \"x_anchor\": \"0%\",\n \"y_anchor\": \"100%\",\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"z_rotation\": \"0°\",\n \"x_scale\": \"100%\",\n \"y_scale\": \"100%\",\n \"flip_horizontal\": false,\n \"flip_vertical\": false,\n \"opacity\": 100,\n \"z_index\": 123,\n \"clip\": false,\n \"color_overlay\": \"<string>\",\n \"type\": \"video\",\n \"id\": \"clip_01\",\n \"name\": \"<string>\",\n \"track\": 127,\n \"time\": 0,\n \"visible\": true,\n \"in_point\": 0,\n \"out_point\": 6,\n \"speed\": 1,\n \"playback_rate_keyframes\": [\n {\n \"time\": 1,\n \"rate\": 1\n }\n ],\n \"volume\": 100,\n \"fade_in_duration\": 0,\n \"fade_out_duration\": 0,\n \"effects\": [],\n \"motion\": []\n }\n ],\n \"transitions\": [\n {\n \"type\": \"cross_dissolve\",\n \"duration\": 0.5,\n \"from_id\": \"video_01\",\n \"to_id\": \"video_02\",\n \"z_index\": 1\n }\n ],\n \"groups\": [\n {\n \"id\": \"hero\",\n \"parent\": \"<string>\",\n \"pivot\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"scale\": 1,\n \"rotation_degrees\": 0,\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"opacity\": 1,\n \"members\": [\n \"<string>\"\n ],\n \"animations\": [\n {\n \"time\": 1,\n \"duration\": 123,\n \"custom\": \"<string>\",\n \"easing\": \"ease_in_out\",\n \"reversed\": false,\n \"scope\": \"element\",\n \"delay\": 0,\n \"spacing\": 1,\n \"loop\": false,\n \"audio\": {\n \"feature\": \"amplitude\",\n \"scale\": 0,\n \"opacity\": 0,\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"rotate\": 0\n }\n }\n ],\n \"layout\": {\n \"type\": \"stack\",\n \"direction\": \"row\",\n \"gap\": 0,\n \"align\": \"center\",\n \"origin\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n }\n }\n ],\n \"motion_blur\": {\n \"samples\": 17,\n \"shutter\": 0.5\n },\n \"background_gradient\": \"linear-gradient(90deg, #ff0000 0%, #0000ff 100%)\",\n \"watermark_url\": \"<string>\",\n \"custom_animations\": {\n \"element\": [],\n \"text\": []\n },\n \"metadata\": {\n \"project_id\": \"proj_123\"\n },\n \"webhook_url\": \"https://app.example.com/hooks/framelane\",\n \"ingest_external\": true\n },\n \"author\": \"user\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.framelane.io/v1/projects")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"render_request\": {\n \"width\": 1920,\n \"height\": 1080,\n \"duration\": 15,\n \"frame_rate\": 30,\n \"output_format\": \"mp4\",\n \"output_filename\": \"my-render\",\n \"background_color\": \"#000000ff\",\n \"background_image_url\": \"https://cdn.example.com/bg.jpg\",\n \"alpha\": false,\n \"elements\": [\n {\n \"source_url\": \"https://cdn.example.com/clip.mp4\",\n \"lut_url\": \"<string>\",\n \"lut_intensity\": 100,\n \"brightness\": 0,\n \"contrast\": 0,\n \"saturation\": 0,\n \"exposure\": 0,\n \"sharpness\": 0,\n \"blur\": 0,\n \"noise\": 0,\n \"vignette\": 0,\n \"hue_rotate\": 0,\n \"temperature\": 0,\n \"tint\": 0,\n \"vibrance\": 0,\n \"highlights\": 0,\n \"shadows\": 0,\n \"crop_top\": 0,\n \"crop_bottom\": 0,\n \"crop_left\": 0,\n \"crop_right\": 0,\n \"border_radius\": 0,\n \"border_color\": \"<string>\",\n \"border_width\": 0,\n \"shadow_color\": \"<string>\",\n \"shadow_blur\": 0,\n \"shadow_x\": 0,\n \"shadow_y\": 0,\n \"blend_mode\": \"none\",\n \"mask\": {\n \"feather\": 0,\n \"scale\": 1,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n },\n \"mask_keyframes\": [\n {\n \"time\": 1,\n \"feather\": 123,\n \"scale\": 123,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"easing\": \"<string>\",\n \"spring\": {\n \"stiffness\": 100,\n \"damping\": 10,\n \"mass\": 1\n },\n \"back\": {\n \"overshoot\": 1.70158,\n \"dir\": \"out\"\n },\n \"elastic\": {\n \"amplitude\": 1,\n \"period\": 0.3,\n \"dir\": \"out\"\n },\n \"bezier\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": 1,\n \"y2\": 1\n }\n }\n ],\n \"matte\": {\n \"source\": \"<string>\",\n \"mode\": \"alpha\",\n \"invert\": false\n },\n \"backdrop_blur\": 0,\n \"x\": \"50%\",\n \"y\": \"50%\",\n \"width\": \"40%\",\n \"height\": \"80%\",\n \"aspect_ratio\": 123,\n \"x_anchor\": \"0%\",\n \"y_anchor\": \"100%\",\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"z_rotation\": \"0°\",\n \"x_scale\": \"100%\",\n \"y_scale\": \"100%\",\n \"flip_horizontal\": false,\n \"flip_vertical\": false,\n \"opacity\": 100,\n \"z_index\": 123,\n \"clip\": false,\n \"color_overlay\": \"<string>\",\n \"type\": \"video\",\n \"id\": \"clip_01\",\n \"name\": \"<string>\",\n \"track\": 127,\n \"time\": 0,\n \"visible\": true,\n \"in_point\": 0,\n \"out_point\": 6,\n \"speed\": 1,\n \"playback_rate_keyframes\": [\n {\n \"time\": 1,\n \"rate\": 1\n }\n ],\n \"volume\": 100,\n \"fade_in_duration\": 0,\n \"fade_out_duration\": 0,\n \"effects\": [],\n \"motion\": []\n }\n ],\n \"transitions\": [\n {\n \"type\": \"cross_dissolve\",\n \"duration\": 0.5,\n \"from_id\": \"video_01\",\n \"to_id\": \"video_02\",\n \"z_index\": 1\n }\n ],\n \"groups\": [\n {\n \"id\": \"hero\",\n \"parent\": \"<string>\",\n \"pivot\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"scale\": 1,\n \"rotation_degrees\": 0,\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"opacity\": 1,\n \"members\": [\n \"<string>\"\n ],\n \"animations\": [\n {\n \"time\": 1,\n \"duration\": 123,\n \"custom\": \"<string>\",\n \"easing\": \"ease_in_out\",\n \"reversed\": false,\n \"scope\": \"element\",\n \"delay\": 0,\n \"spacing\": 1,\n \"loop\": false,\n \"audio\": {\n \"feature\": \"amplitude\",\n \"scale\": 0,\n \"opacity\": 0,\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"rotate\": 0\n }\n }\n ],\n \"layout\": {\n \"type\": \"stack\",\n \"direction\": \"row\",\n \"gap\": 0,\n \"align\": \"center\",\n \"origin\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n }\n }\n ],\n \"motion_blur\": {\n \"samples\": 17,\n \"shutter\": 0.5\n },\n \"background_gradient\": \"linear-gradient(90deg, #ff0000 0%, #0000ff 100%)\",\n \"watermark_url\": \"<string>\",\n \"custom_animations\": {\n \"element\": [],\n \"text\": []\n },\n \"metadata\": {\n \"project_id\": \"proj_123\"\n },\n \"webhook_url\": \"https://app.example.com/hooks/framelane\",\n \"ingest_external\": true\n },\n \"author\": \"user\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.framelane.io/v1/projects")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"render_request\": {\n \"width\": 1920,\n \"height\": 1080,\n \"duration\": 15,\n \"frame_rate\": 30,\n \"output_format\": \"mp4\",\n \"output_filename\": \"my-render\",\n \"background_color\": \"#000000ff\",\n \"background_image_url\": \"https://cdn.example.com/bg.jpg\",\n \"alpha\": false,\n \"elements\": [\n {\n \"source_url\": \"https://cdn.example.com/clip.mp4\",\n \"lut_url\": \"<string>\",\n \"lut_intensity\": 100,\n \"brightness\": 0,\n \"contrast\": 0,\n \"saturation\": 0,\n \"exposure\": 0,\n \"sharpness\": 0,\n \"blur\": 0,\n \"noise\": 0,\n \"vignette\": 0,\n \"hue_rotate\": 0,\n \"temperature\": 0,\n \"tint\": 0,\n \"vibrance\": 0,\n \"highlights\": 0,\n \"shadows\": 0,\n \"crop_top\": 0,\n \"crop_bottom\": 0,\n \"crop_left\": 0,\n \"crop_right\": 0,\n \"border_radius\": 0,\n \"border_color\": \"<string>\",\n \"border_width\": 0,\n \"shadow_color\": \"<string>\",\n \"shadow_blur\": 0,\n \"shadow_x\": 0,\n \"shadow_y\": 0,\n \"blend_mode\": \"none\",\n \"mask\": {\n \"feather\": 0,\n \"scale\": 1,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n },\n \"mask_keyframes\": [\n {\n \"time\": 1,\n \"feather\": 123,\n \"scale\": 123,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"easing\": \"<string>\",\n \"spring\": {\n \"stiffness\": 100,\n \"damping\": 10,\n \"mass\": 1\n },\n \"back\": {\n \"overshoot\": 1.70158,\n \"dir\": \"out\"\n },\n \"elastic\": {\n \"amplitude\": 1,\n \"period\": 0.3,\n \"dir\": \"out\"\n },\n \"bezier\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": 1,\n \"y2\": 1\n }\n }\n ],\n \"matte\": {\n \"source\": \"<string>\",\n \"mode\": \"alpha\",\n \"invert\": false\n },\n \"backdrop_blur\": 0,\n \"x\": \"50%\",\n \"y\": \"50%\",\n \"width\": \"40%\",\n \"height\": \"80%\",\n \"aspect_ratio\": 123,\n \"x_anchor\": \"0%\",\n \"y_anchor\": \"100%\",\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"z_rotation\": \"0°\",\n \"x_scale\": \"100%\",\n \"y_scale\": \"100%\",\n \"flip_horizontal\": false,\n \"flip_vertical\": false,\n \"opacity\": 100,\n \"z_index\": 123,\n \"clip\": false,\n \"color_overlay\": \"<string>\",\n \"type\": \"video\",\n \"id\": \"clip_01\",\n \"name\": \"<string>\",\n \"track\": 127,\n \"time\": 0,\n \"visible\": true,\n \"in_point\": 0,\n \"out_point\": 6,\n \"speed\": 1,\n \"playback_rate_keyframes\": [\n {\n \"time\": 1,\n \"rate\": 1\n }\n ],\n \"volume\": 100,\n \"fade_in_duration\": 0,\n \"fade_out_duration\": 0,\n \"effects\": [],\n \"motion\": []\n }\n ],\n \"transitions\": [\n {\n \"type\": \"cross_dissolve\",\n \"duration\": 0.5,\n \"from_id\": \"video_01\",\n \"to_id\": \"video_02\",\n \"z_index\": 1\n }\n ],\n \"groups\": [\n {\n \"id\": \"hero\",\n \"parent\": \"<string>\",\n \"pivot\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"scale\": 1,\n \"rotation_degrees\": 0,\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"opacity\": 1,\n \"members\": [\n \"<string>\"\n ],\n \"animations\": [\n {\n \"time\": 1,\n \"duration\": 123,\n \"custom\": \"<string>\",\n \"easing\": \"ease_in_out\",\n \"reversed\": false,\n \"scope\": \"element\",\n \"delay\": 0,\n \"spacing\": 1,\n \"loop\": false,\n \"audio\": {\n \"feature\": \"amplitude\",\n \"scale\": 0,\n \"opacity\": 0,\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"rotate\": 0\n }\n }\n ],\n \"layout\": {\n \"type\": \"stack\",\n \"direction\": \"row\",\n \"gap\": 0,\n \"align\": \"center\",\n \"origin\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n }\n }\n ],\n \"motion_blur\": {\n \"samples\": 17,\n \"shutter\": 0.5\n },\n \"background_gradient\": \"linear-gradient(90deg, #ff0000 0%, #0000ff 100%)\",\n \"watermark_url\": \"<string>\",\n \"custom_animations\": {\n \"element\": [],\n \"text\": []\n },\n \"metadata\": {\n \"project_id\": \"proj_123\"\n },\n \"webhook_url\": \"https://app.example.com/hooks/framelane\",\n \"ingest_external\": true\n },\n \"author\": \"user\"\n}"
response = http.request(request)
puts response.read_body{
"id": "proj_01J8QR2K5VKDGN2T4FBM3CZYX7",
"name": "Launch teaser",
"version": 3,
"workspace_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"summary": {
"width": 123,
"height": 123,
"duration": 123,
"frame_rate": 123,
"output_format": "<string>",
"element_count": 0,
"transition_count": 0,
"renders_count": 123,
"elements": [
{
"type": "<string>",
"id": "<string>",
"time": 123,
"duration": 123,
"label": "<string>",
"source": "<string>"
}
]
},
"ok": true,
"render_request": {
"width": 1920,
"height": 1080,
"duration": 15,
"frame_rate": 30,
"output_format": "mp4",
"output_filename": "my-render",
"background_color": "#000000ff",
"background_image_url": "https://cdn.example.com/bg.jpg",
"alpha": false,
"elements": [
{
"source_url": "https://cdn.example.com/clip.mp4",
"lut_url": "<string>",
"lut_intensity": 100,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"exposure": 0,
"sharpness": 0,
"blur": 0,
"noise": 0,
"vignette": 0,
"hue_rotate": 0,
"temperature": 0,
"tint": 0,
"vibrance": 0,
"highlights": 0,
"shadows": 0,
"crop_top": 0,
"crop_bottom": 0,
"crop_left": 0,
"crop_right": 0,
"border_radius": 0,
"border_color": "<string>",
"border_width": 0,
"shadow_color": "<string>",
"shadow_blur": 0,
"shadow_x": 0,
"shadow_y": 0,
"blend_mode": "none",
"mask_shape": "circle",
"mask": {
"feather": 0,
"scale": 1,
"center": {
"x": 0.5,
"y": 0.5
}
},
"mask_keyframes": [
{
"time": 1,
"feather": 123,
"scale": 123,
"center": {
"x": 0.5,
"y": 0.5
},
"easing": "<string>",
"spring": {
"stiffness": 100,
"damping": 10,
"mass": 1
},
"back": {
"overshoot": 1.70158,
"dir": "out"
},
"elastic": {
"amplitude": 1,
"period": 0.3,
"dir": "out"
},
"bezier": {
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1
}
}
],
"matte": {
"source": "<string>",
"mode": "alpha",
"invert": false
},
"backdrop_blur": 0,
"x": "50%",
"y": "50%",
"width": "40%",
"height": "80%",
"aspect_ratio": 123,
"x_anchor": "0%",
"y_anchor": "100%",
"x_rotation": "0°",
"y_rotation": "0°",
"z_rotation": "0°",
"x_scale": "100%",
"y_scale": "100%",
"flip_horizontal": false,
"flip_vertical": false,
"opacity": 100,
"z_index": 123,
"clip": false,
"color_overlay": "<string>",
"type": "video",
"id": "clip_01",
"name": "<string>",
"track": 127,
"time": 0,
"visible": true,
"in_point": 0,
"out_point": 6,
"speed": 1,
"playback_rate_keyframes": [
{
"time": 1,
"rate": 1
}
],
"volume": 100,
"fade_in_duration": 0,
"fade_out_duration": 0,
"effects": [],
"motion": []
}
],
"transitions": [
{
"type": "cross_dissolve",
"duration": 0.5,
"from_id": "video_01",
"to_id": "video_02",
"z_index": 1
}
],
"groups": [
{
"id": "hero",
"parent": "<string>",
"pivot": {
"x": 0.5,
"y": 0.5
},
"translate": {
"x": 0.5,
"y": 0.5
},
"scale": 1,
"rotation_degrees": 0,
"x_rotation": "0°",
"y_rotation": "0°",
"opacity": 1,
"members": [
"<string>"
],
"animations": [
{
"time": 1,
"duration": 123,
"type": "identity",
"custom": "<string>",
"easing": "ease_in_out",
"reversed": false,
"scope": "element",
"delay": 0,
"spacing": 1,
"loop": false,
"audio": {
"feature": "amplitude",
"scale": 0,
"opacity": 0,
"translate": {
"x": 0.5,
"y": 0.5
},
"rotate": 0
}
}
],
"layout": {
"type": "stack",
"direction": "row",
"gap": 0,
"align": "center",
"origin": {
"x": 0.5,
"y": 0.5
}
}
}
],
"motion_blur": {
"samples": 17,
"shutter": 0.5
},
"background_gradient": "linear-gradient(90deg, #ff0000 0%, #0000ff 100%)",
"watermark_url": "<string>",
"custom_animations": {
"element": [],
"text": []
},
"metadata": {
"project_id": "proj_123"
},
"webhook_url": "https://app.example.com/hooks/framelane",
"ingest_external": true
},
"violations": [
{
"code": "<string>",
"message": "<string>",
"severity": "error",
"path": "<string>",
"bbox": [
123
],
"time": 123
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Create a project
Create a stateful editing project from a RenderRequest, or empty. Elements without an id are assigned one so ops can address them. Returns the full project at version 1, plus an ADVISORY ok + violations[] lint of the seed composition — a project is allowed to hold an invalid head while you repair it with ops, so findings never block the 201.
curl --request POST \
--url https://api.framelane.io/v1/projects \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"render_request": {
"width": 1920,
"height": 1080,
"duration": 15,
"frame_rate": 30,
"output_format": "mp4",
"output_filename": "my-render",
"background_color": "#000000ff",
"background_image_url": "https://cdn.example.com/bg.jpg",
"alpha": false,
"elements": [
{
"source_url": "https://cdn.example.com/clip.mp4",
"lut_url": "<string>",
"lut_intensity": 100,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"exposure": 0,
"sharpness": 0,
"blur": 0,
"noise": 0,
"vignette": 0,
"hue_rotate": 0,
"temperature": 0,
"tint": 0,
"vibrance": 0,
"highlights": 0,
"shadows": 0,
"crop_top": 0,
"crop_bottom": 0,
"crop_left": 0,
"crop_right": 0,
"border_radius": 0,
"border_color": "<string>",
"border_width": 0,
"shadow_color": "<string>",
"shadow_blur": 0,
"shadow_x": 0,
"shadow_y": 0,
"blend_mode": "none",
"mask": {
"feather": 0,
"scale": 1,
"center": {
"x": 0.5,
"y": 0.5
}
},
"mask_keyframes": [
{
"time": 1,
"feather": 123,
"scale": 123,
"center": {
"x": 0.5,
"y": 0.5
},
"easing": "<string>",
"spring": {
"stiffness": 100,
"damping": 10,
"mass": 1
},
"back": {
"overshoot": 1.70158,
"dir": "out"
},
"elastic": {
"amplitude": 1,
"period": 0.3,
"dir": "out"
},
"bezier": {
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1
}
}
],
"matte": {
"source": "<string>",
"mode": "alpha",
"invert": false
},
"backdrop_blur": 0,
"x": "50%",
"y": "50%",
"width": "40%",
"height": "80%",
"aspect_ratio": 123,
"x_anchor": "0%",
"y_anchor": "100%",
"x_rotation": "0°",
"y_rotation": "0°",
"z_rotation": "0°",
"x_scale": "100%",
"y_scale": "100%",
"flip_horizontal": false,
"flip_vertical": false,
"opacity": 100,
"z_index": 123,
"clip": false,
"color_overlay": "<string>",
"type": "video",
"id": "clip_01",
"name": "<string>",
"track": 127,
"time": 0,
"visible": true,
"in_point": 0,
"out_point": 6,
"speed": 1,
"playback_rate_keyframes": [
{
"time": 1,
"rate": 1
}
],
"volume": 100,
"fade_in_duration": 0,
"fade_out_duration": 0,
"effects": [],
"motion": []
}
],
"transitions": [
{
"type": "cross_dissolve",
"duration": 0.5,
"from_id": "video_01",
"to_id": "video_02",
"z_index": 1
}
],
"groups": [
{
"id": "hero",
"parent": "<string>",
"pivot": {
"x": 0.5,
"y": 0.5
},
"translate": {
"x": 0.5,
"y": 0.5
},
"scale": 1,
"rotation_degrees": 0,
"x_rotation": "0°",
"y_rotation": "0°",
"opacity": 1,
"members": [
"<string>"
],
"animations": [
{
"time": 1,
"duration": 123,
"custom": "<string>",
"easing": "ease_in_out",
"reversed": false,
"scope": "element",
"delay": 0,
"spacing": 1,
"loop": false,
"audio": {
"feature": "amplitude",
"scale": 0,
"opacity": 0,
"translate": {
"x": 0.5,
"y": 0.5
},
"rotate": 0
}
}
],
"layout": {
"type": "stack",
"direction": "row",
"gap": 0,
"align": "center",
"origin": {
"x": 0.5,
"y": 0.5
}
}
}
],
"motion_blur": {
"samples": 17,
"shutter": 0.5
},
"background_gradient": "linear-gradient(90deg, #ff0000 0%, #0000ff 100%)",
"watermark_url": "<string>",
"custom_animations": {
"element": [],
"text": []
},
"metadata": {
"project_id": "proj_123"
},
"webhook_url": "https://app.example.com/hooks/framelane",
"ingest_external": true
},
"author": "user"
}
'import requests
url = "https://api.framelane.io/v1/projects"
payload = {
"name": "<string>",
"render_request": {
"width": 1920,
"height": 1080,
"duration": 15,
"frame_rate": 30,
"output_format": "mp4",
"output_filename": "my-render",
"background_color": "#000000ff",
"background_image_url": "https://cdn.example.com/bg.jpg",
"alpha": False,
"elements": [
{
"source_url": "https://cdn.example.com/clip.mp4",
"lut_url": "<string>",
"lut_intensity": 100,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"exposure": 0,
"sharpness": 0,
"blur": 0,
"noise": 0,
"vignette": 0,
"hue_rotate": 0,
"temperature": 0,
"tint": 0,
"vibrance": 0,
"highlights": 0,
"shadows": 0,
"crop_top": 0,
"crop_bottom": 0,
"crop_left": 0,
"crop_right": 0,
"border_radius": 0,
"border_color": "<string>",
"border_width": 0,
"shadow_color": "<string>",
"shadow_blur": 0,
"shadow_x": 0,
"shadow_y": 0,
"blend_mode": "none",
"mask": {
"feather": 0,
"scale": 1,
"center": {
"x": 0.5,
"y": 0.5
}
},
"mask_keyframes": [
{
"time": 1,
"feather": 123,
"scale": 123,
"center": {
"x": 0.5,
"y": 0.5
},
"easing": "<string>",
"spring": {
"stiffness": 100,
"damping": 10,
"mass": 1
},
"back": {
"overshoot": 1.70158,
"dir": "out"
},
"elastic": {
"amplitude": 1,
"period": 0.3,
"dir": "out"
},
"bezier": {
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1
}
}
],
"matte": {
"source": "<string>",
"mode": "alpha",
"invert": False
},
"backdrop_blur": 0,
"x": "50%",
"y": "50%",
"width": "40%",
"height": "80%",
"aspect_ratio": 123,
"x_anchor": "0%",
"y_anchor": "100%",
"x_rotation": "0°",
"y_rotation": "0°",
"z_rotation": "0°",
"x_scale": "100%",
"y_scale": "100%",
"flip_horizontal": False,
"flip_vertical": False,
"opacity": 100,
"z_index": 123,
"clip": False,
"color_overlay": "<string>",
"type": "video",
"id": "clip_01",
"name": "<string>",
"track": 127,
"time": 0,
"visible": True,
"in_point": 0,
"out_point": 6,
"speed": 1,
"playback_rate_keyframes": [
{
"time": 1,
"rate": 1
}
],
"volume": 100,
"fade_in_duration": 0,
"fade_out_duration": 0,
"effects": [],
"motion": []
}
],
"transitions": [
{
"type": "cross_dissolve",
"duration": 0.5,
"from_id": "video_01",
"to_id": "video_02",
"z_index": 1
}
],
"groups": [
{
"id": "hero",
"parent": "<string>",
"pivot": {
"x": 0.5,
"y": 0.5
},
"translate": {
"x": 0.5,
"y": 0.5
},
"scale": 1,
"rotation_degrees": 0,
"x_rotation": "0°",
"y_rotation": "0°",
"opacity": 1,
"members": ["<string>"],
"animations": [
{
"time": 1,
"duration": 123,
"custom": "<string>",
"easing": "ease_in_out",
"reversed": False,
"scope": "element",
"delay": 0,
"spacing": 1,
"loop": False,
"audio": {
"feature": "amplitude",
"scale": 0,
"opacity": 0,
"translate": {
"x": 0.5,
"y": 0.5
},
"rotate": 0
}
}
],
"layout": {
"type": "stack",
"direction": "row",
"gap": 0,
"align": "center",
"origin": {
"x": 0.5,
"y": 0.5
}
}
}
],
"motion_blur": {
"samples": 17,
"shutter": 0.5
},
"background_gradient": "linear-gradient(90deg, #ff0000 0%, #0000ff 100%)",
"watermark_url": "<string>",
"custom_animations": {
"element": [],
"text": []
},
"metadata": { "project_id": "proj_123" },
"webhook_url": "https://app.example.com/hooks/framelane",
"ingest_external": True
},
"author": "user"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
render_request: {
width: 1920,
height: 1080,
duration: 15,
frame_rate: 30,
output_format: 'mp4',
output_filename: 'my-render',
background_color: '#000000ff',
background_image_url: 'https://cdn.example.com/bg.jpg',
alpha: false,
elements: [
{
source_url: 'https://cdn.example.com/clip.mp4',
lut_url: '<string>',
lut_intensity: 100,
brightness: 0,
contrast: 0,
saturation: 0,
exposure: 0,
sharpness: 0,
blur: 0,
noise: 0,
vignette: 0,
hue_rotate: 0,
temperature: 0,
tint: 0,
vibrance: 0,
highlights: 0,
shadows: 0,
crop_top: 0,
crop_bottom: 0,
crop_left: 0,
crop_right: 0,
border_radius: 0,
border_color: '<string>',
border_width: 0,
shadow_color: '<string>',
shadow_blur: 0,
shadow_x: 0,
shadow_y: 0,
blend_mode: 'none',
mask: {feather: 0, scale: 1, center: {x: 0.5, y: 0.5}},
mask_keyframes: [
{
time: 1,
feather: 123,
scale: 123,
center: {x: 0.5, y: 0.5},
easing: '<string>',
spring: {stiffness: 100, damping: 10, mass: 1},
back: {overshoot: 1.70158, dir: 'out'},
elastic: {amplitude: 1, period: 0.3, dir: 'out'},
bezier: {x1: 0, y1: 0, x2: 1, y2: 1}
}
],
matte: {source: '<string>', mode: 'alpha', invert: false},
backdrop_blur: 0,
x: '50%',
y: '50%',
width: '40%',
height: '80%',
aspect_ratio: 123,
x_anchor: '0%',
y_anchor: '100%',
x_rotation: '0°',
y_rotation: '0°',
z_rotation: '0°',
x_scale: '100%',
y_scale: '100%',
flip_horizontal: false,
flip_vertical: false,
opacity: 100,
z_index: 123,
clip: false,
color_overlay: '<string>',
type: 'video',
id: 'clip_01',
name: '<string>',
track: 127,
time: 0,
visible: true,
in_point: 0,
out_point: 6,
speed: 1,
playback_rate_keyframes: [{time: 1, rate: 1}],
volume: 100,
fade_in_duration: 0,
fade_out_duration: 0,
effects: [],
motion: []
}
],
transitions: [
{
type: 'cross_dissolve',
duration: 0.5,
from_id: 'video_01',
to_id: 'video_02',
z_index: 1
}
],
groups: [
{
id: 'hero',
parent: '<string>',
pivot: {x: 0.5, y: 0.5},
translate: {x: 0.5, y: 0.5},
scale: 1,
rotation_degrees: 0,
x_rotation: '0°',
y_rotation: '0°',
opacity: 1,
members: ['<string>'],
animations: [
{
time: 1,
duration: 123,
custom: '<string>',
easing: 'ease_in_out',
reversed: false,
scope: 'element',
delay: 0,
spacing: 1,
loop: false,
audio: {
feature: 'amplitude',
scale: 0,
opacity: 0,
translate: {x: 0.5, y: 0.5},
rotate: 0
}
}
],
layout: {
type: 'stack',
direction: 'row',
gap: 0,
align: 'center',
origin: {x: 0.5, y: 0.5}
}
}
],
motion_blur: {samples: 17, shutter: 0.5},
background_gradient: 'linear-gradient(90deg, #ff0000 0%, #0000ff 100%)',
watermark_url: '<string>',
custom_animations: {element: [], text: []},
metadata: {project_id: 'proj_123'},
webhook_url: 'https://app.example.com/hooks/framelane',
ingest_external: true
},
author: 'user'
})
};
fetch('https://api.framelane.io/v1/projects', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.framelane.io/v1/projects",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'render_request' => [
'width' => 1920,
'height' => 1080,
'duration' => 15,
'frame_rate' => 30,
'output_format' => 'mp4',
'output_filename' => 'my-render',
'background_color' => '#000000ff',
'background_image_url' => 'https://cdn.example.com/bg.jpg',
'alpha' => false,
'elements' => [
[
'source_url' => 'https://cdn.example.com/clip.mp4',
'lut_url' => '<string>',
'lut_intensity' => 100,
'brightness' => 0,
'contrast' => 0,
'saturation' => 0,
'exposure' => 0,
'sharpness' => 0,
'blur' => 0,
'noise' => 0,
'vignette' => 0,
'hue_rotate' => 0,
'temperature' => 0,
'tint' => 0,
'vibrance' => 0,
'highlights' => 0,
'shadows' => 0,
'crop_top' => 0,
'crop_bottom' => 0,
'crop_left' => 0,
'crop_right' => 0,
'border_radius' => 0,
'border_color' => '<string>',
'border_width' => 0,
'shadow_color' => '<string>',
'shadow_blur' => 0,
'shadow_x' => 0,
'shadow_y' => 0,
'blend_mode' => 'none',
'mask' => [
'feather' => 0,
'scale' => 1,
'center' => [
'x' => 0.5,
'y' => 0.5
]
],
'mask_keyframes' => [
[
'time' => 1,
'feather' => 123,
'scale' => 123,
'center' => [
'x' => 0.5,
'y' => 0.5
],
'easing' => '<string>',
'spring' => [
'stiffness' => 100,
'damping' => 10,
'mass' => 1
],
'back' => [
'overshoot' => 1.70158,
'dir' => 'out'
],
'elastic' => [
'amplitude' => 1,
'period' => 0.3,
'dir' => 'out'
],
'bezier' => [
'x1' => 0,
'y1' => 0,
'x2' => 1,
'y2' => 1
]
]
],
'matte' => [
'source' => '<string>',
'mode' => 'alpha',
'invert' => false
],
'backdrop_blur' => 0,
'x' => '50%',
'y' => '50%',
'width' => '40%',
'height' => '80%',
'aspect_ratio' => 123,
'x_anchor' => '0%',
'y_anchor' => '100%',
'x_rotation' => '0°',
'y_rotation' => '0°',
'z_rotation' => '0°',
'x_scale' => '100%',
'y_scale' => '100%',
'flip_horizontal' => false,
'flip_vertical' => false,
'opacity' => 100,
'z_index' => 123,
'clip' => false,
'color_overlay' => '<string>',
'type' => 'video',
'id' => 'clip_01',
'name' => '<string>',
'track' => 127,
'time' => 0,
'visible' => true,
'in_point' => 0,
'out_point' => 6,
'speed' => 1,
'playback_rate_keyframes' => [
[
'time' => 1,
'rate' => 1
]
],
'volume' => 100,
'fade_in_duration' => 0,
'fade_out_duration' => 0,
'effects' => [
],
'motion' => [
]
]
],
'transitions' => [
[
'type' => 'cross_dissolve',
'duration' => 0.5,
'from_id' => 'video_01',
'to_id' => 'video_02',
'z_index' => 1
]
],
'groups' => [
[
'id' => 'hero',
'parent' => '<string>',
'pivot' => [
'x' => 0.5,
'y' => 0.5
],
'translate' => [
'x' => 0.5,
'y' => 0.5
],
'scale' => 1,
'rotation_degrees' => 0,
'x_rotation' => '0°',
'y_rotation' => '0°',
'opacity' => 1,
'members' => [
'<string>'
],
'animations' => [
[
'time' => 1,
'duration' => 123,
'custom' => '<string>',
'easing' => 'ease_in_out',
'reversed' => false,
'scope' => 'element',
'delay' => 0,
'spacing' => 1,
'loop' => false,
'audio' => [
'feature' => 'amplitude',
'scale' => 0,
'opacity' => 0,
'translate' => [
'x' => 0.5,
'y' => 0.5
],
'rotate' => 0
]
]
],
'layout' => [
'type' => 'stack',
'direction' => 'row',
'gap' => 0,
'align' => 'center',
'origin' => [
'x' => 0.5,
'y' => 0.5
]
]
]
],
'motion_blur' => [
'samples' => 17,
'shutter' => 0.5
],
'background_gradient' => 'linear-gradient(90deg, #ff0000 0%, #0000ff 100%)',
'watermark_url' => '<string>',
'custom_animations' => [
'element' => [
],
'text' => [
]
],
'metadata' => [
'project_id' => 'proj_123'
],
'webhook_url' => 'https://app.example.com/hooks/framelane',
'ingest_external' => true
],
'author' => 'user'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.framelane.io/v1/projects"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"render_request\": {\n \"width\": 1920,\n \"height\": 1080,\n \"duration\": 15,\n \"frame_rate\": 30,\n \"output_format\": \"mp4\",\n \"output_filename\": \"my-render\",\n \"background_color\": \"#000000ff\",\n \"background_image_url\": \"https://cdn.example.com/bg.jpg\",\n \"alpha\": false,\n \"elements\": [\n {\n \"source_url\": \"https://cdn.example.com/clip.mp4\",\n \"lut_url\": \"<string>\",\n \"lut_intensity\": 100,\n \"brightness\": 0,\n \"contrast\": 0,\n \"saturation\": 0,\n \"exposure\": 0,\n \"sharpness\": 0,\n \"blur\": 0,\n \"noise\": 0,\n \"vignette\": 0,\n \"hue_rotate\": 0,\n \"temperature\": 0,\n \"tint\": 0,\n \"vibrance\": 0,\n \"highlights\": 0,\n \"shadows\": 0,\n \"crop_top\": 0,\n \"crop_bottom\": 0,\n \"crop_left\": 0,\n \"crop_right\": 0,\n \"border_radius\": 0,\n \"border_color\": \"<string>\",\n \"border_width\": 0,\n \"shadow_color\": \"<string>\",\n \"shadow_blur\": 0,\n \"shadow_x\": 0,\n \"shadow_y\": 0,\n \"blend_mode\": \"none\",\n \"mask\": {\n \"feather\": 0,\n \"scale\": 1,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n },\n \"mask_keyframes\": [\n {\n \"time\": 1,\n \"feather\": 123,\n \"scale\": 123,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"easing\": \"<string>\",\n \"spring\": {\n \"stiffness\": 100,\n \"damping\": 10,\n \"mass\": 1\n },\n \"back\": {\n \"overshoot\": 1.70158,\n \"dir\": \"out\"\n },\n \"elastic\": {\n \"amplitude\": 1,\n \"period\": 0.3,\n \"dir\": \"out\"\n },\n \"bezier\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": 1,\n \"y2\": 1\n }\n }\n ],\n \"matte\": {\n \"source\": \"<string>\",\n \"mode\": \"alpha\",\n \"invert\": false\n },\n \"backdrop_blur\": 0,\n \"x\": \"50%\",\n \"y\": \"50%\",\n \"width\": \"40%\",\n \"height\": \"80%\",\n \"aspect_ratio\": 123,\n \"x_anchor\": \"0%\",\n \"y_anchor\": \"100%\",\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"z_rotation\": \"0°\",\n \"x_scale\": \"100%\",\n \"y_scale\": \"100%\",\n \"flip_horizontal\": false,\n \"flip_vertical\": false,\n \"opacity\": 100,\n \"z_index\": 123,\n \"clip\": false,\n \"color_overlay\": \"<string>\",\n \"type\": \"video\",\n \"id\": \"clip_01\",\n \"name\": \"<string>\",\n \"track\": 127,\n \"time\": 0,\n \"visible\": true,\n \"in_point\": 0,\n \"out_point\": 6,\n \"speed\": 1,\n \"playback_rate_keyframes\": [\n {\n \"time\": 1,\n \"rate\": 1\n }\n ],\n \"volume\": 100,\n \"fade_in_duration\": 0,\n \"fade_out_duration\": 0,\n \"effects\": [],\n \"motion\": []\n }\n ],\n \"transitions\": [\n {\n \"type\": \"cross_dissolve\",\n \"duration\": 0.5,\n \"from_id\": \"video_01\",\n \"to_id\": \"video_02\",\n \"z_index\": 1\n }\n ],\n \"groups\": [\n {\n \"id\": \"hero\",\n \"parent\": \"<string>\",\n \"pivot\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"scale\": 1,\n \"rotation_degrees\": 0,\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"opacity\": 1,\n \"members\": [\n \"<string>\"\n ],\n \"animations\": [\n {\n \"time\": 1,\n \"duration\": 123,\n \"custom\": \"<string>\",\n \"easing\": \"ease_in_out\",\n \"reversed\": false,\n \"scope\": \"element\",\n \"delay\": 0,\n \"spacing\": 1,\n \"loop\": false,\n \"audio\": {\n \"feature\": \"amplitude\",\n \"scale\": 0,\n \"opacity\": 0,\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"rotate\": 0\n }\n }\n ],\n \"layout\": {\n \"type\": \"stack\",\n \"direction\": \"row\",\n \"gap\": 0,\n \"align\": \"center\",\n \"origin\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n }\n }\n ],\n \"motion_blur\": {\n \"samples\": 17,\n \"shutter\": 0.5\n },\n \"background_gradient\": \"linear-gradient(90deg, #ff0000 0%, #0000ff 100%)\",\n \"watermark_url\": \"<string>\",\n \"custom_animations\": {\n \"element\": [],\n \"text\": []\n },\n \"metadata\": {\n \"project_id\": \"proj_123\"\n },\n \"webhook_url\": \"https://app.example.com/hooks/framelane\",\n \"ingest_external\": true\n },\n \"author\": \"user\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.framelane.io/v1/projects")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"render_request\": {\n \"width\": 1920,\n \"height\": 1080,\n \"duration\": 15,\n \"frame_rate\": 30,\n \"output_format\": \"mp4\",\n \"output_filename\": \"my-render\",\n \"background_color\": \"#000000ff\",\n \"background_image_url\": \"https://cdn.example.com/bg.jpg\",\n \"alpha\": false,\n \"elements\": [\n {\n \"source_url\": \"https://cdn.example.com/clip.mp4\",\n \"lut_url\": \"<string>\",\n \"lut_intensity\": 100,\n \"brightness\": 0,\n \"contrast\": 0,\n \"saturation\": 0,\n \"exposure\": 0,\n \"sharpness\": 0,\n \"blur\": 0,\n \"noise\": 0,\n \"vignette\": 0,\n \"hue_rotate\": 0,\n \"temperature\": 0,\n \"tint\": 0,\n \"vibrance\": 0,\n \"highlights\": 0,\n \"shadows\": 0,\n \"crop_top\": 0,\n \"crop_bottom\": 0,\n \"crop_left\": 0,\n \"crop_right\": 0,\n \"border_radius\": 0,\n \"border_color\": \"<string>\",\n \"border_width\": 0,\n \"shadow_color\": \"<string>\",\n \"shadow_blur\": 0,\n \"shadow_x\": 0,\n \"shadow_y\": 0,\n \"blend_mode\": \"none\",\n \"mask\": {\n \"feather\": 0,\n \"scale\": 1,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n },\n \"mask_keyframes\": [\n {\n \"time\": 1,\n \"feather\": 123,\n \"scale\": 123,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"easing\": \"<string>\",\n \"spring\": {\n \"stiffness\": 100,\n \"damping\": 10,\n \"mass\": 1\n },\n \"back\": {\n \"overshoot\": 1.70158,\n \"dir\": \"out\"\n },\n \"elastic\": {\n \"amplitude\": 1,\n \"period\": 0.3,\n \"dir\": \"out\"\n },\n \"bezier\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": 1,\n \"y2\": 1\n }\n }\n ],\n \"matte\": {\n \"source\": \"<string>\",\n \"mode\": \"alpha\",\n \"invert\": false\n },\n \"backdrop_blur\": 0,\n \"x\": \"50%\",\n \"y\": \"50%\",\n \"width\": \"40%\",\n \"height\": \"80%\",\n \"aspect_ratio\": 123,\n \"x_anchor\": \"0%\",\n \"y_anchor\": \"100%\",\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"z_rotation\": \"0°\",\n \"x_scale\": \"100%\",\n \"y_scale\": \"100%\",\n \"flip_horizontal\": false,\n \"flip_vertical\": false,\n \"opacity\": 100,\n \"z_index\": 123,\n \"clip\": false,\n \"color_overlay\": \"<string>\",\n \"type\": \"video\",\n \"id\": \"clip_01\",\n \"name\": \"<string>\",\n \"track\": 127,\n \"time\": 0,\n \"visible\": true,\n \"in_point\": 0,\n \"out_point\": 6,\n \"speed\": 1,\n \"playback_rate_keyframes\": [\n {\n \"time\": 1,\n \"rate\": 1\n }\n ],\n \"volume\": 100,\n \"fade_in_duration\": 0,\n \"fade_out_duration\": 0,\n \"effects\": [],\n \"motion\": []\n }\n ],\n \"transitions\": [\n {\n \"type\": \"cross_dissolve\",\n \"duration\": 0.5,\n \"from_id\": \"video_01\",\n \"to_id\": \"video_02\",\n \"z_index\": 1\n }\n ],\n \"groups\": [\n {\n \"id\": \"hero\",\n \"parent\": \"<string>\",\n \"pivot\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"scale\": 1,\n \"rotation_degrees\": 0,\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"opacity\": 1,\n \"members\": [\n \"<string>\"\n ],\n \"animations\": [\n {\n \"time\": 1,\n \"duration\": 123,\n \"custom\": \"<string>\",\n \"easing\": \"ease_in_out\",\n \"reversed\": false,\n \"scope\": \"element\",\n \"delay\": 0,\n \"spacing\": 1,\n \"loop\": false,\n \"audio\": {\n \"feature\": \"amplitude\",\n \"scale\": 0,\n \"opacity\": 0,\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"rotate\": 0\n }\n }\n ],\n \"layout\": {\n \"type\": \"stack\",\n \"direction\": \"row\",\n \"gap\": 0,\n \"align\": \"center\",\n \"origin\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n }\n }\n ],\n \"motion_blur\": {\n \"samples\": 17,\n \"shutter\": 0.5\n },\n \"background_gradient\": \"linear-gradient(90deg, #ff0000 0%, #0000ff 100%)\",\n \"watermark_url\": \"<string>\",\n \"custom_animations\": {\n \"element\": [],\n \"text\": []\n },\n \"metadata\": {\n \"project_id\": \"proj_123\"\n },\n \"webhook_url\": \"https://app.example.com/hooks/framelane\",\n \"ingest_external\": true\n },\n \"author\": \"user\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.framelane.io/v1/projects")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"render_request\": {\n \"width\": 1920,\n \"height\": 1080,\n \"duration\": 15,\n \"frame_rate\": 30,\n \"output_format\": \"mp4\",\n \"output_filename\": \"my-render\",\n \"background_color\": \"#000000ff\",\n \"background_image_url\": \"https://cdn.example.com/bg.jpg\",\n \"alpha\": false,\n \"elements\": [\n {\n \"source_url\": \"https://cdn.example.com/clip.mp4\",\n \"lut_url\": \"<string>\",\n \"lut_intensity\": 100,\n \"brightness\": 0,\n \"contrast\": 0,\n \"saturation\": 0,\n \"exposure\": 0,\n \"sharpness\": 0,\n \"blur\": 0,\n \"noise\": 0,\n \"vignette\": 0,\n \"hue_rotate\": 0,\n \"temperature\": 0,\n \"tint\": 0,\n \"vibrance\": 0,\n \"highlights\": 0,\n \"shadows\": 0,\n \"crop_top\": 0,\n \"crop_bottom\": 0,\n \"crop_left\": 0,\n \"crop_right\": 0,\n \"border_radius\": 0,\n \"border_color\": \"<string>\",\n \"border_width\": 0,\n \"shadow_color\": \"<string>\",\n \"shadow_blur\": 0,\n \"shadow_x\": 0,\n \"shadow_y\": 0,\n \"blend_mode\": \"none\",\n \"mask\": {\n \"feather\": 0,\n \"scale\": 1,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n },\n \"mask_keyframes\": [\n {\n \"time\": 1,\n \"feather\": 123,\n \"scale\": 123,\n \"center\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"easing\": \"<string>\",\n \"spring\": {\n \"stiffness\": 100,\n \"damping\": 10,\n \"mass\": 1\n },\n \"back\": {\n \"overshoot\": 1.70158,\n \"dir\": \"out\"\n },\n \"elastic\": {\n \"amplitude\": 1,\n \"period\": 0.3,\n \"dir\": \"out\"\n },\n \"bezier\": {\n \"x1\": 0,\n \"y1\": 0,\n \"x2\": 1,\n \"y2\": 1\n }\n }\n ],\n \"matte\": {\n \"source\": \"<string>\",\n \"mode\": \"alpha\",\n \"invert\": false\n },\n \"backdrop_blur\": 0,\n \"x\": \"50%\",\n \"y\": \"50%\",\n \"width\": \"40%\",\n \"height\": \"80%\",\n \"aspect_ratio\": 123,\n \"x_anchor\": \"0%\",\n \"y_anchor\": \"100%\",\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"z_rotation\": \"0°\",\n \"x_scale\": \"100%\",\n \"y_scale\": \"100%\",\n \"flip_horizontal\": false,\n \"flip_vertical\": false,\n \"opacity\": 100,\n \"z_index\": 123,\n \"clip\": false,\n \"color_overlay\": \"<string>\",\n \"type\": \"video\",\n \"id\": \"clip_01\",\n \"name\": \"<string>\",\n \"track\": 127,\n \"time\": 0,\n \"visible\": true,\n \"in_point\": 0,\n \"out_point\": 6,\n \"speed\": 1,\n \"playback_rate_keyframes\": [\n {\n \"time\": 1,\n \"rate\": 1\n }\n ],\n \"volume\": 100,\n \"fade_in_duration\": 0,\n \"fade_out_duration\": 0,\n \"effects\": [],\n \"motion\": []\n }\n ],\n \"transitions\": [\n {\n \"type\": \"cross_dissolve\",\n \"duration\": 0.5,\n \"from_id\": \"video_01\",\n \"to_id\": \"video_02\",\n \"z_index\": 1\n }\n ],\n \"groups\": [\n {\n \"id\": \"hero\",\n \"parent\": \"<string>\",\n \"pivot\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"scale\": 1,\n \"rotation_degrees\": 0,\n \"x_rotation\": \"0°\",\n \"y_rotation\": \"0°\",\n \"opacity\": 1,\n \"members\": [\n \"<string>\"\n ],\n \"animations\": [\n {\n \"time\": 1,\n \"duration\": 123,\n \"custom\": \"<string>\",\n \"easing\": \"ease_in_out\",\n \"reversed\": false,\n \"scope\": \"element\",\n \"delay\": 0,\n \"spacing\": 1,\n \"loop\": false,\n \"audio\": {\n \"feature\": \"amplitude\",\n \"scale\": 0,\n \"opacity\": 0,\n \"translate\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"rotate\": 0\n }\n }\n ],\n \"layout\": {\n \"type\": \"stack\",\n \"direction\": \"row\",\n \"gap\": 0,\n \"align\": \"center\",\n \"origin\": {\n \"x\": 0.5,\n \"y\": 0.5\n }\n }\n }\n ],\n \"motion_blur\": {\n \"samples\": 17,\n \"shutter\": 0.5\n },\n \"background_gradient\": \"linear-gradient(90deg, #ff0000 0%, #0000ff 100%)\",\n \"watermark_url\": \"<string>\",\n \"custom_animations\": {\n \"element\": [],\n \"text\": []\n },\n \"metadata\": {\n \"project_id\": \"proj_123\"\n },\n \"webhook_url\": \"https://app.example.com/hooks/framelane\",\n \"ingest_external\": true\n },\n \"author\": \"user\"\n}"
response = http.request(request)
puts response.read_body{
"id": "proj_01J8QR2K5VKDGN2T4FBM3CZYX7",
"name": "Launch teaser",
"version": 3,
"workspace_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"summary": {
"width": 123,
"height": 123,
"duration": 123,
"frame_rate": 123,
"output_format": "<string>",
"element_count": 0,
"transition_count": 0,
"renders_count": 123,
"elements": [
{
"type": "<string>",
"id": "<string>",
"time": 123,
"duration": 123,
"label": "<string>",
"source": "<string>"
}
]
},
"ok": true,
"render_request": {
"width": 1920,
"height": 1080,
"duration": 15,
"frame_rate": 30,
"output_format": "mp4",
"output_filename": "my-render",
"background_color": "#000000ff",
"background_image_url": "https://cdn.example.com/bg.jpg",
"alpha": false,
"elements": [
{
"source_url": "https://cdn.example.com/clip.mp4",
"lut_url": "<string>",
"lut_intensity": 100,
"brightness": 0,
"contrast": 0,
"saturation": 0,
"exposure": 0,
"sharpness": 0,
"blur": 0,
"noise": 0,
"vignette": 0,
"hue_rotate": 0,
"temperature": 0,
"tint": 0,
"vibrance": 0,
"highlights": 0,
"shadows": 0,
"crop_top": 0,
"crop_bottom": 0,
"crop_left": 0,
"crop_right": 0,
"border_radius": 0,
"border_color": "<string>",
"border_width": 0,
"shadow_color": "<string>",
"shadow_blur": 0,
"shadow_x": 0,
"shadow_y": 0,
"blend_mode": "none",
"mask_shape": "circle",
"mask": {
"feather": 0,
"scale": 1,
"center": {
"x": 0.5,
"y": 0.5
}
},
"mask_keyframes": [
{
"time": 1,
"feather": 123,
"scale": 123,
"center": {
"x": 0.5,
"y": 0.5
},
"easing": "<string>",
"spring": {
"stiffness": 100,
"damping": 10,
"mass": 1
},
"back": {
"overshoot": 1.70158,
"dir": "out"
},
"elastic": {
"amplitude": 1,
"period": 0.3,
"dir": "out"
},
"bezier": {
"x1": 0,
"y1": 0,
"x2": 1,
"y2": 1
}
}
],
"matte": {
"source": "<string>",
"mode": "alpha",
"invert": false
},
"backdrop_blur": 0,
"x": "50%",
"y": "50%",
"width": "40%",
"height": "80%",
"aspect_ratio": 123,
"x_anchor": "0%",
"y_anchor": "100%",
"x_rotation": "0°",
"y_rotation": "0°",
"z_rotation": "0°",
"x_scale": "100%",
"y_scale": "100%",
"flip_horizontal": false,
"flip_vertical": false,
"opacity": 100,
"z_index": 123,
"clip": false,
"color_overlay": "<string>",
"type": "video",
"id": "clip_01",
"name": "<string>",
"track": 127,
"time": 0,
"visible": true,
"in_point": 0,
"out_point": 6,
"speed": 1,
"playback_rate_keyframes": [
{
"time": 1,
"rate": 1
}
],
"volume": 100,
"fade_in_duration": 0,
"fade_out_duration": 0,
"effects": [],
"motion": []
}
],
"transitions": [
{
"type": "cross_dissolve",
"duration": 0.5,
"from_id": "video_01",
"to_id": "video_02",
"z_index": 1
}
],
"groups": [
{
"id": "hero",
"parent": "<string>",
"pivot": {
"x": 0.5,
"y": 0.5
},
"translate": {
"x": 0.5,
"y": 0.5
},
"scale": 1,
"rotation_degrees": 0,
"x_rotation": "0°",
"y_rotation": "0°",
"opacity": 1,
"members": [
"<string>"
],
"animations": [
{
"time": 1,
"duration": 123,
"type": "identity",
"custom": "<string>",
"easing": "ease_in_out",
"reversed": false,
"scope": "element",
"delay": 0,
"spacing": 1,
"loop": false,
"audio": {
"feature": "amplitude",
"scale": 0,
"opacity": 0,
"translate": {
"x": 0.5,
"y": 0.5
},
"rotate": 0
}
}
],
"layout": {
"type": "stack",
"direction": "row",
"gap": 0,
"align": "center",
"origin": {
"x": 0.5,
"y": 0.5
}
}
}
],
"motion_blur": {
"samples": 17,
"shutter": 0.5
},
"background_gradient": "linear-gradient(90deg, #ff0000 0%, #0000ff 100%)",
"watermark_url": "<string>",
"custom_animations": {
"element": [],
"text": []
},
"metadata": {
"project_id": "proj_123"
},
"webhook_url": "https://app.example.com/hooks/framelane",
"ingest_external": true
},
"violations": [
{
"code": "<string>",
"message": "<string>",
"severity": "error",
"path": "<string>",
"bbox": [
123
],
"time": 123
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Display name. Defaults to 'Untitled project'.
255Seed composition. An empty project is created when omitted.
Show child attributes
Show child attributes
Who is creating this project, for version provenance — user or agent. Name the values here because MCP advertises this body as an opaque object: a caller sees the key but not its enum, so anything else is learned only from the 422.
user, agent Response
Successful Response
A freshly created project, plus the advisory lint of its seed composition.
Returned only by POST /v1/projects. A subclass rather than two more fields
on :class:ProjectOut, because ProjectOut also backs GET /v1/projects,
which would then have to either carry permanently-null fields or lint every
project on the page.
Unique project id.
"proj_01J8QR2K5VKDGN2T4FBM3CZYX7"
Display name.
"Launch teaser"
Head version. Bumped on every applied ops batch.
3
Owning workspace id.
Compact, always-present view of the head composition.
Show child attributes
Show child attributes
Advisory — the project was still created and stored at version 1. False means the seed composition has error-severity findings; a project is allowed to hold an invalid head while you repair it with ops.
true
The full head composition. Present only when requested with view=full.
Show child attributes
Show child attributes
Advisory — the project was still created and stored at version 1. The same findings POST /v1/projects/{id}/ops returns after an edit, so you can see what needs repairing without a round trip.Truncated to the first 40 findings (errors first) on very large compositions, with a VIOLATIONS_TRUNCATED marker carrying the full count; the free dry run is never truncated.
Show child attributes
Show child attributes

