Discovered that Active Storage variants by default will strip the animation from any GIF.
The solution is to pass loader: { page: nil } to variant, and also to preprocess the image with a call to convert --coalesce.
The solution is to pass loader: { page: nil } to variant, and also to preprocess the image with a call to convert --coalesce.