Sprite Sheet to GIF Converter — Turn a Spritesheet Into an Animated GIF
Make your own spritesheet to gif
Turn any sprite sheet into an animated GIF in your browser. Handles partial last rows, uneven grids and transparency, with a live FPS preview.
A GIF is frames in time. A sprite sheet is frames in space. Converting a spritesheet to GIF means cutting the sheet into cells in the right order, then assigning each cell a delay so the browser plays them back as motion. This converter runs entirely in the browser and handles the parts that usually break: partial last rows, uneven grids, and transparent backgrounds.
Drop a sprite sheet, set the frame size, columns, rows, and FPS, then download the GIF. You can preview the loop before exporting, which matters when the last row is short or the delay is not an even number of frames.
Drop a sprite sheet
The tool is the first screen. There is no signup step and no queue. You drop a PNG or GIF onto the page, and the decoder reads the sheet dimensions immediately.
You set four things: frame width and height, columns, rows, and FPS. Frame size is the cell size in pixels. Columns times rows is the capacity of the grid. If the sheet is 512 by 256 with 64 by 64 cells, that is 8 columns and 4 rows, capacity 32. FPS sets the delay per frame. Then you download the GIF.
The preview runs the loop in place. If a frame looks sliced — half a character offset into the next cell — the frame size is wrong by a few pixels. If the animation drifts, the column count is wrong. Fix the numbers and the preview updates.
01
Drop the sprite sheet onto the page.
02
Set frame width and height in pixels.
03
Set columns and rows to match the grid.
04
Set FPS, or set an explicit frame count if the last row is partial.
05
Preview the loop, then download the GIF.
How it works
The file never leaves the browser. The image is decoded locally with the browser's own image decoder, drawn to an offscreen canvas, and read back as pixel data. No upload step exists because none is needed.
The converter measures the sheet: it checks whether width divides evenly by the declared frame width, and whether height divides evenly by the declared frame height. If both divide cleanly, the grid is uniform. If they do not, the remainder tells you either the frame size is wrong or there is padding and spacing to account for.
It then walks the grid left to right, top to bottom. Each cell is copied into a frame buffer. Transparent pixels are kept as transparent. The encoder writes the GIF with a per-frame delay, so the timing lives in the file and not in the player.
For a 32-frame sheet exported at 12 FPS, that is a delay of about 8 hundredths of a second per frame, or 8 centiseconds in GIF terms. The total loop is 32 divided by 12, about 2.67 seconds.
Sheets with a partial last row
Many sheets are exported as a fixed grid with unused cells at the end. A 4 by 4 sheet may only contain 13 frames. The last row has three empty cells. If you leave the frame count at the grid capacity, those empty cells become three blank frames in the GIF, and the loop flashes or pauses.
Set the true frame count. If the animation has 13 frames, set 13. The converter stops at frame 13 and ignores the empty cells. The same applies when the last row is a shorter row with a different cell width.
If you cannot tell whether the sheet has trailing blank frames, set the count one frame above the last frame you can see. Export, watch the preview, then reduce by one if you see a blank. It is faster to check in the preview than to inspect the sheet by hand.
| Grid | Frames used | Effect if frame count is wrong |
|---|---|---|
| 4 x 4, 13 frames | 13 | Three blank frames at the end of the loop |
| 8 x 2, 15 frames | 15 | One blank frame, visible as a hold |
| 6 x 6, 36 frames | 36 | Full grid, no blanks |
| 4 x 4, 13 frames, gap 2px | 13 | Cells read two pixels into the gap |
Transparent backgrounds stay transparent
GIF has one transparent colour, not an alpha channel. That is 1-bit alpha: a pixel is either fully transparent or fully opaque. There is no partial transparency in the format. Sheets with soft edges will show a hard edge after export unless you handle it.
The converter keeps the source transparency. It writes the transparent colour into the GIF palette and marks those pixels as transparent. A pixel with any alpha below the threshold becomes transparent; anything above becomes opaque.
The failure mode to avoid is flattening. If the sheet is drawn onto an opaque canvas before encoding, transparent pixels become whatever colour the canvas had. That is usually white or black, and against a new background it shows as a solid block. Keep the source PNG with its alpha and do not composite before export.
For soft edges, matte the edge against a known colour the frame is displayed on. If the GIF will sit on a white page, matte the edge against white so the anti-aliased halo matches. If it will sit on a dark background, matte against that colour instead. A single matte colour cannot be correct for both.
Sheets that are not a uniform grid
Packed sheets often have a gap between cells and padding around the sheet. A 64 by 64 cell with a 2-pixel gap is a 66-pixel stride. If you enter 64 as the frame width, every cell after the first is offset by an accumulating 2 pixels, and the animation drifts.
Enter the cell size plus the gap as the stride, and the padding as an offset. Some exporters write the full sheet as cells plus gaps with no padding; others add a margin. Read the file's metadata or measure the first cell to find both numbers.
When the last cell is a different size — a sheet where the final frame is wider for a smear or an effect frame — the uniform grid cannot describe it in one pass. Split the sheet: run the uniform frames through the converter as one range, then add the odd frame separately, or trim it to the common cell size before conversion.
If the sheet is packed rather than gridded, there is no simple stride. Export it as a grid from the source tool, or cut the cells with a per-frame rectangle and feed those frames in individually.
Picking an FPS
GIF stores frame delay in centiseconds. At 10 FPS that is 10 centiseconds per frame. At 30 FPS it is 3.33, which rounds to 3, giving about 33 FPS. The format cannot express arbitrary sub-centisecond delays, so pick an FPS that divides cleanly into 100: 10, 20, 25, or 50 FPS.
Uneven delays cause stutter. If you set 24 FPS, the delay is 4.17 centiseconds and it rounds inconsistently, so some frames hold longer than others. On a short loop this is visible as a hitch once per cycle. Use 20 or 25 instead.
Match the loop length to the animation's intended duration. A walk cycle authored as 0.8 seconds should produce a GIF that loops in 0.8 seconds. At 16 frames, that is 20 FPS exactly. Change the frame count and the intended FPS changes with it.
Most browsers also enforce a minimum delay. Delays below 2 centiseconds are frequently clamped to roughly 10 centiseconds by the viewer, so a 50 FPS export may play at 10 FPS in some contexts regardless of the file contents. Test the exported GIF in the browser you are targeting.
- Centisecond delaysEnter FPS and the converter computes the delay per frame. Values that do not divide into 100 cleanly are flagged before export.
- Loop length readoutShows total loop duration from frame count and FPS, so you can compare it against the intended animation length.
- Live previewPlays the loop at the exported timing before you download, so uneven delays are visible.
Going the other way
The reverse direction is common. You have an animated GIF, and you want a sprite sheet: one image with all frames laid out on a grid, so a game engine can slice it into an animation. A GIF to sprite sheet converter does that: it decodes the GIF frames, packs them into a uniform grid, and exports a PNG with the frame size and count.
The tricky part of the reverse path is the same transparency problem. A GIF has one transparent colour. When you unpack it to a sheet, that colour becomes the sheet's transparent pixels, and any anti-aliased edge that was flattened in the GIF stays flattened. The sheet inherits whatever the GIF lost.
Frame delay is also dropped on the way out. A sprite sheet has no timing; the engine or the animator assigns it. If you need the timing, note the GIF's FPS before converting and set it in the target animation.
See the GIF play in 3D
A GIF loop is a flat animation. The Cyclops' Island is a playable 3D world built in Neta Studio where the sprite is the character and the world is where it lives. You can load a converted animation onto a character and move it through the scene.
That changes what you check. A GIF that reads well on a page can read wrong in a world: the frame rate that looked smooth against a white background can look slow against moving geometry, and the matte colour you chose for transparency may not match the environment.
Mini World and the 3D game builder are the two other places to put the result. Mini World is a small world with the same builder surface. Agent Sprite Forge generates sprite characters you can export and animate. All of them run in the browser.
More free tools
If you are working with sprites, the converter is one step in a chain. These are the others.
Sprite animator: plays a sheet at a set FPS with onion skinning and frame stepping, so you can check a loop before exporting it. Useful for finding a bad frame without exporting a GIF first.
Sprite sheet maker: packs individual frame images into a grid with a chosen cell size, columns, and padding. This is what you use when frames arrive as separate files rather than one sheet.
Sprite resource library: a set of ready-made sprites and sheets to test the converter against, including sheets with partial last rows and transparent backgrounds.
None of these require an upload. They run in the browser like the converter does.
Walk into the world it belongs to
A sprite is a character with nowhere to stand. The last step is the one nobody else offers: take the sheet you just built and put it in a world someone can walk around in — a small island, a planet, a rainy street corner. Every world on this site was made from one written description and published as a page you can play.
FAQ
Why does my GIF show blank frames at the end? +
The frame count is set to the grid capacity instead of the real number of frames. If the sheet has 13 frames in a 4 by 4 grid, set 13, not 16. The empty cells would otherwise encode as blank frames.
Why is my animation drifting or sliced? +
The frame size or column count is wrong. Drift that accumulates across a row usually means there is a gap between cells that is not included in the frame width. Enter the stride, cell size plus gap, and check the padding offset.
Can a GIF keep partial transparency? +
No. GIF supports 1-bit alpha, so a pixel is either transparent or opaque. Soft anti-aliased edges become hard edges. Matte the edge against the colour the GIF will be displayed on to reduce the visible halo.
Why does my GIF have a black background? +
The sheet was flattened onto an opaque canvas before encoding, and the transparent pixels took the canvas colour. Decode the source PNG with its alpha intact and do not composite it before export.
What FPS should I use? +
Use a value that divides 100 cleanly: 10, 20, 25, or 50 FPS. GIF delays are in centiseconds, so other rates round unevenly and produce visible stutter. Also check the browser, since delays under 2 centiseconds are often clamped upward.
Can I convert a GIF back to a sprite sheet? +
Yes. A GIF to sprite sheet converter decodes each frame and packs it into a uniform grid as a PNG. Timing is lost in that direction, and transparency is limited to the single transparent colour the GIF already had.
Back to the 3D Game Builder
All 31 finished 3D worlds, games and scenes live on one page — every one of them playable.
See more animation strips
Every asset in this library is a transparent, game-ready PNG with a recorded prompt — Sprite sheet resources and Free sprite sheets, tagged by action, style and subject. Free to browse and download.