Get started with Decart’s video transformation API in just a few steps.
Prerequisites
Set your API key as an environment variable to keep it secure:export DECART_API_KEY="your-api-key-here"
Or add it to your .env file and use a package like dotenv to load it.
Quick test with our example video
Download and transform a sample video in one command:
# Download our example video
curl -o example-video.mp4 -L "https://docs.platform.decart.ai/assets/example-video.mp4"
# Submit job
JOB_ID=$(curl -s -X POST https://api.decart.ai/v1/jobs/lucy-pro-v2v \
-H "X-API-KEY: $DECART_API_KEY" \
-F "[email protected]" \
-F "prompt=Turn this into anime style" | jq -r '.job_id')
# Poll until completed
while true; do
STATUS=$(curl -s -H "X-API-KEY: $DECART_API_KEY" \
https://api.decart.ai/v1/jobs/$JOB_ID | jq -r '.status')
echo "Status: $STATUS"
[ "$STATUS" = "completed" ] && break
[ "$STATUS" = "failed" ] && exit 1
sleep 2
done
# Download result
curl -H "X-API-KEY: $DECART_API_KEY" \
https://api.decart.ai/v1/jobs/$JOB_ID/content --output transformed.mp4
Install an SDK
npm install @decartai/sdk
The Python SDK is currently private. Contact us for access.
Using the SDKs
Transform videos programmatically with our SDKs:
import { createDecartClient, models } from "@decartai/sdk";
import { readFileSync, writeFileSync } from "fs";
const client = createDecartClient({
apiKey: process.env.DECART_API_KEY,
});
// Read video from file system
const videoBuffer = readFileSync("input_video.mp4");
const videoBlob = new Blob([videoBuffer], { type: "video/mp4" });
const result = await client.queue.submitAndPoll({
model: models.video("lucy-pro-v2v"),
prompt: "Transform into Studio Ghibli animation style",
data: videoBlob,
enhance_prompt: true,
onStatusChange: (job) => console.log(`Status: ${job.status}`),
});
if (result.status === "completed") {
const buffer = Buffer.from(await result.data.arrayBuffer());
writeFileSync("transformed_video.mp4", buffer);
console.log("Video saved!");
}
import asyncio
from decart import DecartClient, models
import os
async def transform_video():
async with DecartClient(api_key=os.getenv("DECART_API_KEY")) as client:
with open("input_video.mp4", "rb") as file:
result = await client.queue.submit_and_poll({
"model": models.video("lucy-pro-v2v"),
"prompt": "Transform into Studio Ghibli animation style",
"data": file,
"enhance_prompt": True,
"on_status_change": lambda job: print(f"Status: {job.status}"),
})
if result.status == "completed":
with open("transformed_video.mp4", "wb") as f:
f.write(result.data)
print("Video saved!")
asyncio.run(transform_video())
# Submit job
JOB_ID=$(curl -s -X POST https://api.decart.ai/v1/jobs/lucy-pro-v2v \
-H "X-API-KEY: $DECART_API_KEY" \
-F "data=@input_video.mp4" \
-F "prompt=Transform into Studio Ghibli animation style" | jq -r '.job_id')
# Poll until completed
while true; do
STATUS=$(curl -s -H "X-API-KEY: $DECART_API_KEY" \
https://api.decart.ai/v1/jobs/$JOB_ID | jq -r '.status')
echo "Status: $STATUS"
[ "$STATUS" = "completed" ] && break
[ "$STATUS" = "failed" ] && exit 1
sleep 2
done
# Download result
curl -H "X-API-KEY: $DECART_API_KEY" \
https://api.decart.ai/v1/jobs/$JOB_ID/content --output transformed_video.mp4
The enhance_prompt: true option tells Decart to enhance your simple prompt into a more detailed description for better results.
| Prompt | Result Style |
|---|
| ”Anime cartoon style” | Japanese animation aesthetic |
| ”Oil painting” | Classical painted artwork |
| ”Cyberpunk with neon lights” | Futuristic sci-fi atmosphere |
| ”Watercolor painting” | Soft, flowing painted look |
| ”Lego brick world” | Everything made of building blocks |
| ”Studio Ghibli animation” | Miyazaki film style |
Next steps