Skip to content

ezgif Sprite Cutter Alternative — Cut Sheets Without Uploading

ezgif's sprite cutter is the quick fix many people know: upload a sheet, type a tile size, cut, and send the frames to its GIF maker. It runs on ezgif's server and is part of a large GIF toolbox. The Studio's Sprite workspace does the cutting in your browser tab, measures the grid itself and keeps the frames as an animation you can export to a GIF or straight to a game engine.

Drop a sprite sheet, numbered frames, a GIF / APNG or an .aseprite file
Runs in your browser. Files are not uploaded.
Studio Sprite workspace: a 48 px samurai sheet with the detected grid, 60 frames in 10 animations, before Apply
The real Studio with a CC0 asset (OpenGameArt).
Exports to
  • GIF / APNGDecoded· Pillow
  • Godot 4Verified· Godot 4.7.2
  • Unity 6Verified· Unity 6000.5.3f1
  • Phaser 3 / 4Verified· Phaser 3.90 + 4.2
  • PixiJS 8Verified· PixiJS 8.21
  • Aseprite JSONVerified· Phaser load.aseprite · PixiJS 8.21
  • .asepriteVerified· Aseprite 1.3.18
  • Spine / libGDXVerified· spine-canvas 4.2
  • Starling / Sparrow XMLVerified· Phaser 4.2
  • LÖVEVerified· LÖVE 11.5
  • DefoldBuilt· Defold bob.jar 1.13.1
  • GameMakerUNVERIFIED
  • CSS spritesVerified· Chromium

What it does

  • The grid is measured from the pixels — cell size, margin and spacing — with a confidence and alternatives, so you do not start from a guessed 100 × 100.
  • Sheets where frames are not on a grid are cut as "islands", one sprite per shape, with small effect pieces kept attached.
  • Every GIF frame is written whole with disposal "restore to background", so frames of a transparent sprite never pile up on each other.
  • The same frames go on to engine files (Godot, Unity, Phaser, PixiJS, Aseprite JSON) — the tags, timings and pivots come along.

Nerulio Studio and the ezgif sprite cutter

ezgif was tested on its live site with a 128×64 sheet of 8 frames of 32 px (2026-09-23).

Nerulio Studioezgif sprite cutter
Where the file is processedIn your browser tab; nothing uploadedOn ezgif's server; the file is removed after 1 hour
Frame sizeMeasured from the pixels (cell, margin, spacing) with a confidenceTyped in; starts at 100 × 100, no detection
Cutting methodsMeasured grid, a custom grid, or islands for irregular sheetsBy tile size or by columns and rows, with offsets and spacing
Transparent GIFsEach frame written whole, restored to background — frames never stackTick "don't stack frames" in the GIF maker or frames pile up
Delays1/100 s per frame, at least 2; rounding is reported1/100 s per frame, loop count
Colours in the GIFExact palette up to 255 colours; above that median cut without dithering; APNG keeps soft alphaGlobal colour map option
OutputsGIF, APNG, WebM, and a packed sheet with engine dataPNG, GIF, JPG, BMP or WebP frames, a ZIP, or GIF, APNG, WebP, AVIF, MNG, JXL and video
Engine data filesGodot, Unity, Phaser, PixiJS, Aseprite JSON and moreNone
.aseprite filesRead with tags, durations and slicesAccepted as an upload

Source of these numbers: docs/SEO-KEYWORDS.md §4 (hands-on, 2026-09-23)

Where ezgif is the better choice

  • A whole GIF toolbox around the cutter: optimise, resize, effects, and video to GIF in the same site.
  • More output formats: single frames as JPG, BMP or WebP, animations as WebP, AVIF, MNG or JXL.
  • Nothing to learn: upload, type a tile size, press Cut. For a one-off sheet that is often all you need.

How to do it

  1. Drop the sheet on this page; it opens in the Sprite workspace with the measured grid drawn as a dashed preview.
  2. Check the confidence, pick an alternative or type cell size, offset and spacing, then Apply.
  3. Drag in the tag lane of the Timeline to name each animation, set the ms per frame, and play it with Enter.
  4. Export (Ctrl+E) one GIF per animation, an APNG, or the sheet and data file for your engine.

Engine exports and how each was checked

"Verified" means the exported files were loaded by the real engine or tool on real CC0 assets and the result was compared with the source. Anything that was not loaded is labelled as such.

TargetFilesCheck
Godot 4.tres SpriteFrames · .tscn AnimatedSprite2D · .png.importVerified Godot 4.7.2Loaded by Godot; every animation frame drawn and compared with the source file. The scene uses Nearest filtering; rotation is never used.
Unity 6.unity.json · Editor/NerulioSpriteImporter.cs · AnimationClipVerified Unity 6000.5.3f1Batch mode: sprite rects, pivots, pixels, clip keys and durations checked.
Phaser 3 / 4atlas JSON (multiatlas) · .anims.jsonVerified Phaser 3.90 + 4.2Frames and animations drawn by both versions.
PixiJS 8spritesheet JSON · animations · anchor · meta.scaleVerified PixiJS 8.21Rotated and multi-page atlases included.
Aseprite JSONhash / array · frameTags · slicesVerified Phaser load.aseprite · PixiJS 8.21Tags keep their direction and repeat count.
.asepritelayers · tags · durations · slicesVerified Aseprite 1.3.18Opened and rendered by the Aseprite command line.
Spine / libGDX.atlasVerified spine-canvas 4.2Every region drawn by the Spine runtime, rotated and trimmed; libGDX itself was not run.
Starling / Sparrow XMLXML per pageVerified Phaser 4.2Phaser 3.90 draws trimmed XML frames wrongly (its own bug); the "Sparrow XML (Phaser 3)" preset turns trim off and passes in 3.90 and 4.2.
LÖVELua quads · nerulio_atlas.lua · main.luaVerified LÖVE 11.5Every frame drawn and every animation stepped through the shipped helper.
Defold.atlas · .tilesourceBuilt Defold bob.jar 1.13.1Built by Defold's command-line builder; the built texture's UVs were read back.
GameMakerspr_<name>_stripN.png · gamemaker.jsonUNVERIFIEDNot loaded in GameMaker (no headless GameMaker). The strips are cut the way its strip importer cuts them.
CSS sprites.css · preview .htmlVerified ChromiumEvery class drawn from the shipped stylesheet.
GIF / APNGone file per animationDecoded PillowEvery frame and delay decoded again after export; APNG is exact.

Evidence

GIF decoder: 408 of 408 frames identical to Pillow on 29 real GIFs; APNG 132 of 132 on 16 files. .aseprite: 231 corpus files imported, re-written and reopened in Aseprite 1.3.18 with the same tags, durations and pixels (231/231). Exports: 49 runs in the real engines on real CC0 assets, 47 pass — the 2 failures are Phaser 3.90's trimmed-XML bug, which the Phaser 3 preset avoids.

Limits

  • A grid or island guess is a preview with a confidence; nothing is cut until you press Apply, and every choice has one-click alternatives.
  • .aseprite files whose layers do not compose exactly (e.g. group opacity) are imported flattened, and the Import panel says why.
  • Rotated frames in an imported atlas stay rotated; their export is UNVERIFIED.
  • Images up to 32,768 px per side (268 million pixels), subject to your browser's memory.

Questions

Why do my transparent sprites pile up in the GIF?

GIF frames can be drawn on top of the previous one. In ezgif's GIF maker the "don't stack frames" box has to be ticked to prevent it. The Studio writes every frame whole and clears it before the next one, so there is no box to forget.

Is there an ezgif alternative that does not upload my files?

The Studio runs in your browser tab: the sheet is read and cut on your machine and nothing is sent to a server. Projects autosave in the browser and can be saved as a .nerulio file.

Why is my GIF faster than the delays I typed?

GIF delays are in hundredths of a second, and browsers and Discord play 0 or 1 as 10. The Studio never writes less than 2 and tells you when a delay had to be rounded.

Is it free, and do I need an account?

Everything on these pages is free and works without an account. There is no watermark and no export that is held back.

Are my sprites uploaded?

No. The Studio decodes, packs and exports in this browser tab. Projects are autosaved in the browser (IndexedDB) and can be saved as a .nerulio file.

Does it need Aseprite or an engine plugin installed?

No. .aseprite files are read and written in the browser, and each engine bundle carries what that engine needs (for Godot, the import settings and scene; for Unity and the Godot TileSet, a small editor script).