Introduction
Video Face Enhancer restores and sharpens the faces in every frame of a clip. You send video_url; the tool finds up to three faces per frame, largest first, and rebuilds the detail that heavy compression or softness took away, keeping the result steady from one frame to the next. Motion, framing, length and the original audio track stay as they were, and the clip comes back at the resolution you sent. Accepted clips are MP4 files from 3 seconds to 5 minutes long, and there is no prompt.
Key features & highlights
Faces cleaned in every frame
The restoration runs on the whole clip, not on a single still. In our test we took a 5-second 640×360 clip of a podcast host and degraded it with heavy H.264 compression. It came back at 640×360 and 24 fps, still 5.0 seconds long, after about 21 seconds of processing. Eyes, teeth and the hairline were sharper in every frame and did not flicker, and the host was still recognisably the same person.
Everything else stays as it was
Audio, motion, framing and length are kept, and the area around the faces is left alone: the room behind the host was unchanged. The tool does not enlarge the video. If you need more pixels as well, use Video Upscaler (/models/video-upscaler-v1).
Billing follows the clip length
Billing is per second of the input clip, rounded up to the next whole second, with a 3-second minimum. Clips shorter than 3 seconds or longer than 5 minutes are refused before anything is charged. When the clip is an upload whose length can be read, the hold is that length; for a URL the quote holds the 5-minute maximum until delivery and the difference is released. Failed requests are not charged.
Request parameters
| Parameter | Required | Description |
|---|---|---|
video_url | Yes | The clip to restore: an MP4 upload or a public link, 3 seconds to 5 minutes long. Clips outside that range are refused before anything is charged. at least 1 characters |
Pricing
$0.012 / output second
Billed per second of the input clip, rounded up to the next whole second, with a 3-second minimum. An upload is held at its own length and a URL at the 5-minute maximum until delivery, the difference is released, and failed requests are not charged.
Use cases
Podcast and interview clips
Talking-head footage that has been compressed hard for upload loses detail in the face first. Run the clip through once to bring back eyes, teeth and hairline while the room, the camera framing and the sound stay the same.
Old or over-compressed footage
Clips that were saved, shared and re-encoded several times look soft and blocky around the face. Up to three faces per frame are restored, largest first, so a clip with one or two clear speakers is the best fit.
Footage you plan to enlarge later
Clean the faces first, then use Video Upscaler (/models/video-upscaler-v1) if the clip also needs more pixels for a larger screen.
Prompt guide & pro tips
There is no prompt: choose the clip
The single input is video_url, an MP4 upload or a public link, 3 seconds to 5 minutes long. Trim the clip to the part you need before you send it, because billing follows the length of what you send.
Pick faces that can be recovered
Choose a real, clearly visible face that occupies enough of the source image for Video Face Enhancer to work on; frame-by-frame facial restoration with Video Face Enhancer benefits more from that detail than from a distant or hidden face. Video Face Enhancer has less facial information to restore when the source is an illustration or anime, or the face is tiny, covered or severely blurred; this limits frame-by-frame facial restoration with Video Face Enhancer. If a clip shows more than three faces at once, the three largest are restored and the rest are left as they were.
Check the result against the source
Watch the output at normal speed and on a paused frame, and check the audio, the length and the frame rate as well as the faces. The image version of this tool left skin a little smoother than a real photo would be, so look for the same softening on faces in motion. The background is not touched, so any compression blocks there remain. Keep the source file.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "spicyapi/face-enhancer-video-v1/video-edit",
"input": {
"video_url": "https://example.com/reference.mp4"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.

