Animating .cur and .ani Cursor Files: A Practical Guide

Build a looping pixel-art .ani cursor with frame timing that does not give your users motion sickness. Tooling, framerates, and gotchas. · 9 min read

Animated .ani cursors are great for busy and working states and an active liability everywhere else. A pointer that wiggles when you are trying to read is a usability bug. The rules below keep your animation tasteful.

Frame count

Stay under twelve frames per loop. Eight is ideal. More than twelve and the file size balloons and the loop point becomes obvious.

Frame rate

Encode timing in JIFFIES (1/60s). Two to four jiffies per frame works for spinners; six to eight jiffies per frame works for breathing-style ambient motion. Anything faster than two jiffies per frame is a strobe.

Loop point

The first and last frame must be visually identical, or you will see a hard “snap” every loop. The cleanest trick is to design the animation as a true cycle (a wheel rotating, a flame breathing) so the loop point falls naturally.

Tooling

RealWorld Cursor Editor is the de facto standard on Windows for assembling .ani files from a folder of frames. On Linux, the xcursorgen command-line tool reads a config file describing each frame’s offset, hotspot, and timing, then emits the final theme.

Animation only where it makes sense

Animate: busy, working, progress. Do not animate: pointer, hand, text, crosshair, move. Resist the urge to add sparkles to your default arrow — your future self will thank you.

More guides