function outputFrame(leftLeg, rightLeg, leftArm, rightArm, head) {
// Get the current time of the composition
var comp = app.project.activeItem;
var currentTime = comp.time;
// Loop through each layer in the composition
for (var i = 1; i <= comp.numLayers; i++) {
var layer = comp.layer(i);
// Check if the layer is a puppet pin group
if (layer instanceof AVLayer && layer.hasVideo && layer.property("ADBE Effect Parade") != null) {
var puppetEffect = layer.property("ADBE Effect Parade").property("ADBE Puppet");
if (puppetEffect != null) {
// Loop through each puppet pin in the group
for (var j = 1; j <= puppetEffect.numProperties; j++) {
var pin = puppetEffect.property(j);
// Check if the puppet pin has a position and rotation property
if (pin.property("ADBE FreePin Position") != null && pin.property("ADBE FreePin Rotation") != null) {
var pinPosition = pin.property("ADBE FreePin Position");
var pinRotation = pin.property("ADBE FreePin Rotation");
// Update the position and rotation of the puppet pin based on the new values
if (pin.name == "Left Leg") {
pinPosition.setValue([leftLeg.x, leftLeg.y]);
pinRotation.setValue(leftLeg.rotation);
} else if (pin.name == "Right Leg") {
pinPosition.setValue([rightLeg.x, rightLeg.y]);
pinRotation.setValue(rightLeg.rotation);
} else if (pin.name == "Left Arm") {
pinPosition.setValue([leftArm.x, leftArm.y]);
pinRotation.setValue(leftArm.rotation);
} else if (pin.name == "Right Arm") {
pinPosition.setValue([rightArm.x, rightArm.y]);
pinRotation.setValue(rightArm.rotation);
} else if (pin.name == "Head") {
pinPosition.setValue([head.x, head.y]);
pinRotation.setValue(0);
}
// Add a keyframe for the position and rotation properties at the current time
pinPosition.addKey(currentTime);
pinRotation.addKey(currentTime);
}
}
}
}
}
}