GIF to JSON Converter

Extract frame-by-frame data from animated GIFs and convert to JSON format. Perfect for building custom animation players, analyzing frame timing, or reconstructing animations in web applications.

Frame Extraction
JSON Output
Canvas Ready
Fast Processing
GIF to JSON Converter
Extract frame data from animated GIFs and convert to JSON format. Perfect for custom animation players or frame analysis.

Upload GIF File

Convert your GIF to JSON format with frame data

Test Your JSON Output
Try the JSON playback demo to see how your converted data works in a Canvas-based animation player.
JSON Playback Demo
Preview Features
Real-time preview and analysis of your GIF conversion process

Frame Preview

Live preview of individual frames as they're extracted from your GIF

Progress Tracking

Real-time progress bar showing extraction and conversion status

JSON Preview

Preview the generated JSON structure before downloading

Download Options

Multiple export formats with customizable quality settings

Interactive Frame Navigation

  • Scrub through frames with timeline slider
  • Play/pause animation preview
  • Adjust playback speed controls
  • Frame-by-frame stepping

Conversion Analytics

  • Total frame count and duration
  • File size comparison (before/after)
  • Compression ratio statistics
  • Processing time metrics
Usage Examples

JSON Structure

{
  "width": 300,
  "height": 200,
  "frameCount": 12,
  "duration": 1200,
  "frames": [
    {
      "index": 0,
      "delay": 100,
      "image": "data:image/png;base64,...",
      "width": 300,
      "height": 200,
      "x": 0,
      "y": 0
    }
    // ... more frames
  ]
}

Canvas Animation Example

// Animate frames on canvas
const gifData = await fetch('frames.json');
let currentFrame = 0;

function animate() {
  const frame = gifData.frames[currentFrame];
  const img = new Image();
  img.onload = () => {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(img, frame.x, frame.y);
    currentFrame = (currentFrame + 1) % gifData.frameCount;
    setTimeout(animate, frame.delay);
  };
  img.src = frame.image;
}
animate();