Quick answer: Pygame.transform.rotate on a multi-frame sprite cropping the rotated result? Rotation expands bounds; clip the result to fit a known box.

Sprite 32x32; rotated 45 deg; result is 46x46; renders at 32x32 destination crops.

Use rotate_and_crop

Helper that rotates and crops to original bounds. Loses corners but stays consistent.

Or expand destination

Destination rect grows with rotation. No crop; offset adjusted to keep center.

Pre-render per angle

Discrete rotation steps; pre-render each. No runtime rotation cost.

“Rotation changes bounds. The output isn't the same size.”

If you rotate frequently, pre-rendering is usually the right answer. Trade memory for predictable rendering.

Related reading