Thank you!
The characters are animated with a simple change in object scale over time. But the trick is separating away different parts that don't scale - the visible parts aren't children to the scaled object and only inherit position of invisible children (Position Constraint component in Unity, RemoteTransform node in Godot)