Previously, the animation loop would exit before rendering the final frame at progress=1.0. The loop checked is_complete() before rendering, so the last visible frame was at (total_frames-1)/total_frames progress (~96-97%). Changed the loop to: 1. Render the current frame 2. Check if complete and break 3. Advance to next frame This ensures the final frame at progress=1.0 is rendered before exiting, completing the animation properly. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>