Animating TrackballControls to reset

Like the subject says, I’m able to smoothly animate TrackballControls back to their reset value using gsap by updating the camera.up, camera.position, and controls.target, along with lerping the camera.quaternion. However, this approach causes a weird behavior where the camera appears to fly around the screen before finishing in the correct position. Wondering what I’m missing to have the reset animation happen “in place”, essentially keeping everything center screen while the camera resets to the original position?

Here is the main code of my reset function:

function reset() {
  const quat = new Quaternion().copy(camera.quaternion)

  resetTl = new gsap.timeline({ onComplete: onResetComplete })
  resetTl.to(controls.object.up, { duration: 1, ...controls.up0 }, 0)
  resetTl.to(controls.object.position, { duration: 1, ...controls.position0 }, 0)
  resetTl.to(controls.target, { duration: 1, ...controls.target0 }, 0)
  resetTl.to({}, {
    duration: 1,
    onUpdate: function() {
      camera.quaternion.slerpQuaternions(quat, initQ, this.progress());
    },
  }, 0)
}