Skip to content
Voro
  1. Image
  2. Generate

Portrait Rig

Portrait Rig animates a source portrait using a motion vector. Relative mode measures changes from a captured baseline. Absolute mode accepts directly authored motion for a puppet controlled by your own patch.

Place Portrait Rig under Generate in the Image view. Connect a portrait to source and Face Track’s motion output to motion.

Begin with Driving Mode set to Relative and Auto Baseline on. Hold the driving face in a neutral pose, then use Capture Baseline when you want that pose to become the new reference.

  • source supplies the portrait.
  • motion supplies the 74-value motion vector from Face Track or a compatible authored source.
  • out shows the animated crop or the crop composited into the source frame.
  • Driving Mode selects Relative or Absolute.
  • Auto Baseline captures the first valid motion. Capture Baseline replaces the reference with the current valid pose.
  • Expression Scale, Pose Scale and Translation Scale adjust the corresponding movement.
  • Eye Retarget and Lip Retarget act when the driving eye or lip ratios are greater than zero.
  • Output selects Crop or Pasteback.
  • Source Detector, Source Crop Scale and Source Crop V Offset control acquisition from the portrait. MediaPipe is the default detector; InsightFace requires user-supplied models marked for non-commercial use.
  • Reset clears the cached source processing and motion state.

Keep the source portrait stable while driving it. Changing the source requires new face and appearance processing.

For authored Absolute motion, set the first value, valid, to 1. With the motion deltas at zero, the portrait rests at its source pose. An invalid motion vector holds the last accepted motion.

Inputs

  • source image required
    RGBA
  • motion image required
    74 x 1

Outputs

  • out image
    RGBA

Rig

Driving Mode (Drivingmode) Menu op('portrait_rig').par.Drivingmode

relative: animate by delta from a captured baseline. absolute: the vector IS the delta; feed a tracker's motion through your own logic or author it directly (CHOP puppet). Zero vector = source at rest.

Default:
relative
Options:
relative, absolute
Auto Baseline (Autobaseline) Toggle op('portrait_rig').par.Autobaseline
Default:
On
Options:
Off, On
Capture Baseline (Capturebaseline) Pulse op('portrait_rig').par.Capturebaseline
Default:
None
Expression Scale (Expscale) Float op('portrait_rig').par.Expscale
Default:
1
Range:
0 to 2.5
Pose Scale (Posescale) Float op('portrait_rig').par.Posescale
Default:
1
Range:
0 to 2
Translation Scale (Transscale) Float op('portrait_rig').par.Transscale
Default:
1
Range:
0 to 2
Eye Retarget (Eyeretarget) Float op('portrait_rig').par.Eyeretarget

Scales eye retargeting when the driving eye channels are greater than zero.

Default:
0
Range:
0 to 1
Lip Retarget (Lipretarget) Float op('portrait_rig').par.Lipretarget

Scales lip retargeting when the driving lip channel is greater than zero.

Default:
0
Range:
0 to 1
Stitching (Stitching) Toggle op('portrait_rig').par.Stitching
Default:
On
Options:
Off, On
Output (Output) Menu op('portrait_rig').par.Output

crop: the animated 512 face crop fitted into the output. pasteback: the animated crop composited back into the full source frame.

Default:
crop
Options:
crop, pasteback
Reset (Reset) Pulse op('portrait_rig').par.Reset
Default:
None

Model

Model (Modelpath) Str op('portrait_rig').par.Modelpath
Default:
appearance_feature_extractor.safetensors
Source Detector (Detector) Menu op('portrait_rig').par.Detector

Used once per source change. mediapipe works out of box and is Apache-2.0. insightface is best quality but NON-COMMERCIAL and user-supplied.

Default:
mediapipe
Options:
mediapipe, insightface
Source Detection Threshold (Detthreshold) Float op('portrait_rig').par.Detthreshold
Default:
0.5
Range:
0.05 to 0.95
Source Crop Scale (Cropscale) Float op('portrait_rig').par.Cropscale
Default:
2.3
Range:
1.5 to 4
Source Crop V Offset (Cropvy) Float op('portrait_rig').par.Cropvy
Default:
-0.125
Range:
-0.5 to 0.5