Skip to content
AI Sprite Maker

Making better sprites

Fixing jitter, sliding feet and flicker

Updated November 6, 2026
On this page
  1. First, find out where it jitters
  2. In your engine
  3. The pivot isn’t at the feet
  4. Non-integer scaling
  5. Texture filtering
  6. Sub-pixel positions
  7. The wrong frame rate
  8. In the frames
  9. Sliding feet
  10. One frame pops
  11. The whole character wobbles sideways
  12. Colour flicker
  13. GIF previews look worse than the sheet
  14. Still jittering?

Most “jittery” animations aren’t badly drawn. They’re drawn fine and displayed wrong. Work through these causes in order; the first three fix nine out of ten cases.

First, find out where it jitters

Open the sheet in the free Animation Previewer at 1× or an integer zoom, at the job’s fps.

  • Smooth in the previewer, jittery in your game: it’s an engine setting. Jump to In your engine.
  • Jittery in the previewer too: it’s in the frames. See In the frames.

In your engine

The pivot isn’t at the feet

If the sprite’s origin is the centre of the frame, any change in frame height between animations (say idle vs attack) moves the character up or down. Set the pivot or origin to bottom centre for every frame and every animation of a character. Our sheets put the feet on the same baseline in every frame, so a bottom-centre pivot keeps them planted.

  • Godot: AnimatedSprite2D → Offset (0, -frame_height / 2) with Centered on.
  • Unity: Sprite Editor → slice with pivot Bottom Center.
  • Phaser: sprite.setOrigin(0.5, 1).
  • GameMaker: sprite origin Bottom Centre.

Non-integer scaling

At 2.5× zoom, some source pixels become 2 screen pixels wide and others 3. As the sprite moves, which pixels get the extra width changes every frame, so it shimmers. Scale your game by whole numbers only (2×, 3×, 4×): Godot’s Stretch Scale Mode integer, Unity’s Pixel Perfect Camera, Phaser’s zoom with an integer.

Texture filtering

Linear filtering blends neighbouring pixels and makes edges crawl. Use nearest/point filtering: Godot default texture filter Nearest, Unity Filter Mode: Point, Phaser pixelArt: true.

Sub-pixel positions

A character at x = 100.4 gets rounded differently each frame. Snap positions to whole pixels when rendering: Godot Snap 2D Transforms to Pixel, Unity Pixel Perfect Camera Grid Snapping, Phaser roundPixels: true. Keep the physics position precise and only round what you draw.

The wrong frame rate

An 8-frame walk at 30 fps looks like a frantic shuffle. Use the fps in the export’s JSON (usually 8–12 for walks). In Godot that’s the SpriteFrames speed; in Unity the clip’s Sample Rate; in Phaser the animation’s frameRate.

In the frames

Sliding feet

The body moves forward relative to the ground more or less than the walk cycle suggests. For walk-in-place sheets this is mostly a movement-speed problem in your game: match the character’s move speed to the stride. Roughly, speed (px/s) ≈ stride length (px) × fps ÷ frames per stride. Adjust speed until the planted foot appears to stay still.

One frame pops

A single frame with a shifted silhouette or a missing limb. Step through the frames in the player (arrow keys) or with onion skin on to find it. Small fixes, like a stray pixel or a hand in the wrong place, are quickest in the free Pixel Art Editor. If a frame is badly broken, you can usually drop it in your engine (most loops still read fine with 7 frames instead of 8), or send us the job ID and we’ll restore the credits so you can run it again.

The whole character wobbles sideways

The bounding box differs between frames, so the character’s centre drifts. Our pipeline aligns every frame to a shared box with the feet on one baseline, so this usually comes from sheets edited or packed elsewhere with trimming turned on. Re-pack without trimming, or set a pivot per frame in the free Sprite Pivot Editor.

Colour flicker

Colours that shift slightly from frame to frame (a cape in three nearly identical reds) look like flicker when played. Our pipeline locks every frame of a job to one shared palette, so this mostly happens after resizing or recompressing the sheet elsewhere. Regenerate with a lower Max colors, or map the sheet onto one palette with the Palette Swapper or Color Reducer. See Palettes and colour limits.

GIF previews look worse than the sheet

GIFs are limited to 256 colours per frame and some viewers blend frames. Our GIF export uses one global palette to avoid flicker, but judge the animation from the PNG sheet in your engine, not from a GIF.

Still jittering?

Send the job ID to hello@aispritemaker.com with a short screen recording of the problem. If the frames are at fault we’ll fix or refund the job.

Related: Exporting sprites to your engine · How to make a walk cycle sprite sheet

Still stuck? Email hello@aispritemaker.com. A developer reads every message.