Fix the look. Hide what should not be seen.
Small corrections that make footage from phones and webcams look right, and blur for the parts that must stay private.
Who uses it: User-generated video platforms, support and research teams sharing recordings, media teams.
01
Colour correction
Adjusts brightness, contrast, saturation and gamma, or shifts and removes hue.
- What it is for
- Lift dark phone footage and make clips from different cameras match.
- Endpoint and fields
POST /v1/transcodecolor- In ffmpeg
eqhue
curl "$VIDEXO_API_URL/v1/transcode" \
-H "Authorization: Bearer $VIDEXO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "https://example.com/talk.mp4",
"filename": "talk-graded.mp4",
"color": {
"brightness": 0.05,
"contrast": 1.1,
"saturation": 1.2
}
}' import { Videxo } from '@videxo/sdk';
const videxo = new Videxo({ apiKey: process.env.VIDEXO_API_KEY, baseUrl: process.env.VIDEXO_API_URL });
const job = await videxo.transcode({
"input": "https://example.com/talk.mp4",
"filename": "talk-graded.mp4",
"color": {
"brightness": 0.05,
"contrast": 1.1,
"saturation": 1.2
}
});
const done = await videxo.jobs.wait(job.id); Install with npm i @videxo/sdk, or send the same request with curl or JavaScript. About the SDK
const response = await fetch(`${process.env.VIDEXO_API_URL}/v1/transcode`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VIDEXO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input": "https://example.com/talk.mp4",
"filename": "talk-graded.mp4",
"color": {
"brightness": 0.05,
"contrast": 1.1,
"saturation": 1.2
}
}),
});
const job = await response.json(); ffmpeg \
-i https://example.com/talk.mp4 \
-map 0:v:0 \
-vf "scale='min(trunc(iw/2)*2,min(7680,min(trunc(7680*iw/ih/2)*2,trunc(sqrt(33554432*iw/ih)/2)*2)))':-2,eq=brightness=0.05:contrast=1.1:saturation=1.2" \
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
-map "0:a:0?" \
-c:a aac -b:a 128k -movflags +faststart \
talk-graded.mp4 Output. talk-graded.mp4: slightly brighter, with more contrast and colour. A saturation of 0 makes it black and white.
02
Blur a region
Blurs a rectangle of the picture and leaves the rest sharp.
- What it is for
- Hide a face, a licence plate or a screen with private data before a video is shared.
- Endpoint and fields
POST /v1/transcodeblur- In ffmpeg
splitcropboxbluroverlay
curl "$VIDEXO_API_URL/v1/transcode" \
-H "Authorization: Bearer $VIDEXO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "https://example.com/talk.mp4",
"filename": "talk-private.mp4",
"blur": {
"strength": 20,
"regions": [
{
"x": 100,
"y": 600,
"width": 400,
"height": 200
}
]
}
}' import { Videxo } from '@videxo/sdk';
const videxo = new Videxo({ apiKey: process.env.VIDEXO_API_KEY, baseUrl: process.env.VIDEXO_API_URL });
const job = await videxo.transcode({
"input": "https://example.com/talk.mp4",
"filename": "talk-private.mp4",
"blur": {
"strength": 20,
"regions": [
{
"x": 100,
"y": 600,
"width": 400,
"height": 200
}
]
}
});
const done = await videxo.jobs.wait(job.id); Install with npm i @videxo/sdk, or send the same request with curl or JavaScript. About the SDK
const response = await fetch(`${process.env.VIDEXO_API_URL}/v1/transcode`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VIDEXO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input": "https://example.com/talk.mp4",
"filename": "talk-private.mp4",
"blur": {
"strength": 20,
"regions": [
{
"x": 100,
"y": 600,
"width": 400,
"height": 200
}
]
}
}),
});
const job = await response.json(); ffmpeg \
-i https://example.com/talk.mp4 \
-filter_complex "[0:v:0]scale='min(trunc(iw/2)*2,min(7680,min(trunc(7680*iw/ih/2)*2,trunc(sqrt(33554432*iw/ih)/2)*2)))':-2[o0s0];[o0s0]split[o0r0a][o0r0b];[o0r0b]crop=400:200:100:600,boxblur=lr='min(20,min(w,h)/2-1)':cr='min(20,min(cw,ch)/2-1)'[o0r0c];[o0r0a][o0r0c]overlay=x=100:y=600[o0s1]" \
-map "[o0s1]" \
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
-map "0:a:0?" \
-c:a aac -b:a 128k -movflags +faststart \
talk-private.mp4 Output. talk-private.mp4: a 400 by 200 pixel area, 100 pixels from the left and 600 from the top, blurred in every frame.
Limits. Set by your plan.
- Blur covers the whole frame or the rectangles you place, in every frame.
- Inputs are public http or https URLs, or completed private uploads up to 100 MB and your plan’s input limit. Outputs have signed download links. A job names up to 16 input and 16 output files.
| Limit | Pay as you go | Starter | Pro | Scale |
|---|---|---|---|---|
| Longest job | 10 min | 10 min | 30 min | 60 min |
| Inputs per job | 1 GB | 1 GB | 5 GB | 10 GB |
| Outputs per job | 1 GB | 1 GB | 5 GB | 8 GB |
| Outputs expire after | 7 days | 7 days | 30 days | 30 days |
Pay as you go
- Longest job
- 10 min
- Inputs per job
- 1 GB
- Outputs per job
- 1 GB
- Outputs expire after
- 7 days
Starter
- Longest job
- 10 min
- Inputs per job
- 1 GB
- Outputs per job
- 1 GB
- Outputs expire after
- 7 days
Pro
- Longest job
- 30 min
- Inputs per job
- 5 GB
- Outputs per job
- 5 GB
- Outputs expire after
- 30 days
Scale
- Longest job
- 60 min
- Inputs per job
- 10 GB
- Outputs per job
- 8 GB
- Outputs expire after
- 30 days
Soon. Planned, not available yet.
AI edit Soon
Change the look of a clip with curated AI presets (colour grading, film looks, colourisation, restoration, weather, seasons, styles), or replace an object by category, with an optional reference photo.
Background removal for people Soon
Cut a person out of their background in video, as an add-on.