LivePortrait

gif

This is Sieve's optimized implementation of LivePortrait.

LivePortrait is a video-driven portrait animation model. Upload a source image or video, and use a driving video to synthesize a lifelike animation of the source with motion derived from the driving video.

Sieve's implementation is based on the original repository but includes some optimizations and additional useful features.

Input Options

Set the source_file to either an image or a video file.

Set the driving_file to a video file. For retargeting, leave this blank or set it to None.

Use Cases

Photo Animation

First GIF

Combine a still image with a driving video to animate the image. This is the most common use case and is what LivePortrait works best at!

We recommend setting crop_driving_video and flag_relative_motion to True -- this ensures that the driving video will be cropped to the facial region which tends to improve performance.

Example

An example photo animation configuration might look like this:

import sieve

liveportrait_fn = sieve.function.get("sieve/liveportrait")

output = liveportrait_fn.run(
    source_file=sieve.File(path="path/to/source/file.png"),
    driving_file=sieve.File(path="path/to/driving/file.mp4"),
    flag_crop_driving_video=True,
    flag_relative_motion=False
)

Video Animation

First GIF

Extract expression and pose from a driving video to modify a source video.

It's important to use the proper configuration options for this use case.

In particular, set flag_eye_retargeting and flag_lip_retargeting to True. This ensures that the source video's facial expression is neutralized before animation, which can lead to better results. We also recommend setting crop_driving_video and flag_relative_motion to True. Video-to-video animation works best when the source and driving videos are stable headshots, but these settings can help mitigate any issues caused by motion.

Example

An example video animation configuration might look like this:

import sieve

liveportrait_fn = sieve.function.get("sieve/liveportrait")

output = liveportrait_fn.run(
    source_file=sieve.File(path="path/to/source/file.mp4"),
    driving_file=sieve.File(path="path/to/driving/file.mp4"),
    flag_crop_driving_video=True,
    flag_relative_motion=True,
    flag_eye_retargeting=True,
    flag_lip_retargeting=True,
)

Manual Retargeting

First GIF Second GIF

Manual Retargeting is a special option to set the eyes and/or mouth of a video to a fixed opening amount. This can be useful as a neutralizing preprocessing step for video pipelines. We use this in our lipsync app! You can read more about it here.

To use manual retargeting, set one or both of input_eye_ratio and input_lip_ratio to a value between 0 and 1, which adjusts the opening amount of the eyes and the mouth (0 is closed, 1 is fully open).

Example

An example manual retargeting configuration might look like this:

import sieve

liveportrait_fn = sieve.function.get("sieve/liveportrait")

output_closed_eyes_and_mouth = liveportrait_fn.run(
    source_file=sieve.File(path="path/to/source/file.mp4"),
    driving_file=None,
    neutralize_first_frame=False,
    input_eye_ratio=0.0, # closed eyes
    input_lip_ratio=0.0, # closed mouth
)cl

output_closed_eyes_only = liveportrait_fn.run(
    source_file=sieve.File(path="path/to/source/file.mp4"),
    driving_file=None,
    neutralize_first_frame=False,
    input_eye_ratio=0.0, # closed eyes
)

Pricing

We price differently depending on the use case (animation or retargeting).

Animation Pricing

For LivePortrait animation, we charge based on the duration of the driving video and the highest resolution amongst either the source or driving inputs.

  • For resolutions up to 720p, we charge $0.12 per minute of driving video.
  • For higher resolutions, we charge $0.16 per minute of driving video.

Retargeting Pricing

For retargeting, we charge based on duration of the source video.

  • For resolutions up to 720p, we charge $0.15 per minute of source video.
  • For higher resolutions, we charge $0.25 per minute of source video.

License

Please view LivePortrait's license here: https://github.com/KwaiVGI/LivePortrait/blob/main/LICENSE