Step 1
Upload the sprite sheet
Choose a PNG, WebP, JPEG, or other browser-readable sheet. The page draws it to a local canvas and reads RGBA pixels; the source file is never uploaded.
The upload controls, canvas preview, grid settings, PNG or GIF encoder, metadata, and download actions hydrate in the browser. Large files stay on this device: nothing leaves your browser.
Sprite sheet in · animated GIF out · choose your FPS
Upload a regular sprite sheet, enter its columns and rows, choose an animation speed, and encode a looping GIF locally. Preview the frame sequence before you download it.
Step 1
Choose a PNG, WebP, JPEG, or other browser-readable sheet. The page draws it to a local canvas and reads RGBA pixels; the source file is never uploaded.
Step 2
The grid must divide evenly into the image dimensions. Frames are read left to right and top to bottom. FPS controls the requested delay between frames.
Step 3
gifenc reduces each RGBA frame to at most 256 palette colors, maps pixels to palette indexes, writes a looping GIF89a stream, and returns a downloadable Blob.
GIF is compact and widely supported, but it has stricter color and timing limits than a modern RGBA sprite sheet.
A C-column by R-row sheet creates C×R frames. The converter reads the top-left cell first, moves across the row, then continues on the next row.
The source width must be divisible by C and height by R. This produces one exact integer frame size and avoids half-pixel sampling or accidental interpolation.
Requested frame delay is 1000 divided by FPS. GIF stores delay in hundredths of a second, so the encoder rounds to 10 ms units. For example, 8 FPS requests 125 ms and is stored as 130 ms.
Browsers and chat apps may impose their own minimum delay for extremely fast GIFs. A moderate 8–20 FPS is usually stable for pixel-art previews.
GIF frames use indexed color with a maximum of 256 palette entries. The encoder quantizes RGBA colors for each frame, which is well suited to flat pixel art but can reduce gradients or photographic detail.
GIF supports one fully transparent palette index, not smooth partial alpha. Semi-transparent edges from the sheet may become opaque or transparent after quantization.
The test fixture slices four 4×4 RGBA frames and encodes them at 8 FPS. The resulting file is a real 197-byte GIF89a with four frames and a 4×4 logical screen.
Because 8 FPS requests 125 ms while GIF timing uses 10 ms steps, decoding the output reports 130 ms for each frame. The regression test verifies the signature, byte size, dimensions, frame count, and rounded delays.
Upload the sheet, enter its columns and rows, select an FPS value, and click the GIF download button. The converter slices and encodes the frames locally.
No. Canvas extraction, palette quantization, GIF encoding, preview, and download all happen in your browser. Nothing leaves your browser.
Frames are read from left to right across the first row, then left to right across each following row. Remove unused trailing cells before encoding.
GIF stores time in 10 ms units. The encoder rounds 1000/FPS to that unit, so 8 FPS becomes 130 ms per frame instead of exactly 125 ms.
Yes, with one-bit transparency. Fully transparent pixels can remain transparent, but partial alpha is not part of the GIF format and must be reduced during encoding.
Each GIF frame can use no more than 256 palette colors. Pixel art with a limited palette usually converts cleanly; gradients and photos require color quantization and may show banding.
Enter the number of frame cells across and down, not the pixel dimensions of one frame. The page calculates frame width and height after verifying exact division.