BytePlus Video Enhancement Pro

BytePlus Video Enhancement Pro is the higher-tier variant in BytePlus AI MediaKit's video enhancement family. It targets more demanding restoration and output-quality workflows, combining video enhancement and upscaling-oriented processing for cases where cleaner detail recovery, stronger visual refinement, and higher presentation quality matter more than basic throughput.

Complete technical specification for integration
Step-by-step tutorials for advanced use cases
← All GuidesRestoring and upscaling video
How to clean up and upscale soft, compressed, AI-generated, or archival footage to 4K with BytePlus Video Enhancement Pro, and when to reach for it.
Introduction
BytePlus Video Enhancement Pro rebuilds a clip shot by shot rather than just resizing it. In one pass it runs a thirty-plus operator restoration that denoises, deblocks, deblurs, sharpens, corrects color, and upscales to 4K, reconstructing fine detail a lighter pass averages away.
Reach for it when a clip has to look sharp but the source doesn't: soft AI-generated output, a compressed social or interview clip, aging archival footage, or a product shot that needs to read crisp at 4K.
The sections below walk through the jobs it does, then the settings that control the output.
Pro reconstructs detail by synthesizing it, so it makes footage look sharp and clean rather than producing a forensically faithful copy. On very low-quality input it will confidently invent texture that reads right but may not match the original.
The request
Each call takes one video and a few optional controls. Like every video task, delivery is always async: the immediate response acknowledges the task, and the finished clip arrives by polling or a webhook.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'bytedance:video-enhancement@pro',
deliveryMethod: 'async',
inputs: {
video: 'https://example.com/source.mp4'
},
resolution: '1080p'
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "bytedance:video-enhancement@pro",
"deliveryMethod": "async",
"inputs": {
"video": "https://example.com/source.mp4"
},
"resolution": "1080p"
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "upscale",
"taskUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"model": "bytedance:video-enhancement@pro",
"deliveryMethod": "async",
"inputs": {
"video": "https://example.com/source.mp4"
},
"resolution": "1080p"
}
]'runware run bytedance:video-enhancement@pro \
deliveryMethod=async \
inputs.video=https://example.com/source.mp4 \
resolution=1080p{
"taskType": "upscale",
"taskUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"model": "bytedance:video-enhancement@pro",
"deliveryMethod": "async",
"inputs": {
"video": "https://example.com/source.mp4"
},
"resolution": "1080p"
}[
{
"taskType": "upscale",
"taskUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"videoUUID": "f1e2d3c4-b5a6-7890-1234-567890abcdef",
"videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/f1e2d3c4-b5a6-7890-1234-567890abcdef.mp4"
}
]inputs.videotakes a URL or a UUID from a previous task. The source can be up to 2K and 10 GB, you feed it a lower-quality clip to lift, not a finished master.resolutionsets the output size, from240pto4k.fpsraises the frame rate.settings.resolutionLimitandsettings.bitratetune output size and file weight.
Finishing AI-generated video
AI video models often output soft, sub-1080 clips with limited fine detail and some frame-to-frame flicker. Pro rebuilds that soft detail and steadies motion as it upscales, turning a rough generation into a clean deliverable.
It slots in as a second pass on a generation pipeline: render at the model's native size, then lift here instead of asking the generator for a resolution it handles poorly. AI clips carry limited real detail, so a 2× lift usually reads cleaner than forcing 4K, and watch the faces, where Pro's sharpening can tip into over-processed.
Remastering old and archival footage
Aging footage carries heavy grain, softness, and faded color. Pro's shot-level restoration denoises and rebuilds facial and fabric detail while keeping the period character of the clip, so an old scan or export comes back watchable without looking artificially modern.
Feed it the raw degraded scan rather than a pre-cleaned copy, denoising it yourself first strips the signal Pro works from. It holds the period look and will not fully lift faded color, so run a separate color grade if you want it richer.
Choosing the output resolution
resolution sets the output, anywhere from 240p to 4k. Pro reconstructs detail as it scales, so a soft 480p clip comes back as genuine 1080p rather than a blurry stretch.
When clips arrive at different sizes, settings.resolutionLimit is easier than a fixed target. It caps the short side in pixels and scales proportionally, so a mixed batch all lands under one ceiling. The two are mutually exclusive, set resolution or resolutionLimit, never both.
Input is capped at 2K. Pro lifts quality from a lower-resolution source, so a clip that is already at its target size, a finished 4K master, will not be accepted.
Smoothing motion
fps interpolates new frames for smoother motion, up to 120. The trail clip below runs at 15 fps, choppy on fast movement; resampled to 60 it reads fluid.
Keep the target to about four times the source rate. Past that, the model invents more motion than it measures and artifacts creep in.
Setting fps makes the model recompute the output bitrate from the target frame rate and resolution, so a settings.bitrate you pass alongside it is ignored.
Tips
-
Feed it recoverable input. Pro lifts soft and moderately compressed footage well, but it cannot rebuild detail that was already destroyed. Enhance before quality is crushed, not after.
-
Cap the short side for mixed batches. Use
settings.resolutionLimitinstead of a fixedresolutionwhen clips arrive at different sizes, and you avoid choosing a preset per file. -
Don't over-upscale. The source tops out at 2K, and pushing a tiny clip to 4K spends runtime without adding detail the model can recover. Match the target to what the source can support.
-
Raise frame rate within reason. Stay near four times the source rate, and remember that setting
fpsoverridessettings.bitrate. -
Drop the bitrate after cleanup. Enhanced footage compresses better than a noisy source, so
settings.bitrateset tomediumon a cleaned clip often matcheshighon the original at a smaller file. -
Reserve Pro for where quality is the point. It runs a slow, thirty-plus operator pass, so lean on a lighter enhancement tier for high-volume or latency-sensitive work.