GIF Combiner

Combine multiple GIFs, videos, or images side-by-side / in a grid for simultaneous playback, or merge multiple GIFs sequentially in order. Files are processed entirely within your device.

Loading tool interface...

When to use this tool

Back to the tool ↑

Combine multiple GIFs, videos, or images side-by-side / in a grid for simultaneous playback, or merge multiple GIFs sequentially in order. Files are processed entirely within your device. If assets have different sizes, they are fitted onto a shared canvas. Choose between 'Contain' (preserve aspect ratio with padding), 'Cover' (fill canvas, cropping edges), or 'Stretch' (fit canvas without preserving ratio). Default is Contain.

Try it first

Load the 2-file demo to switch between Parallel and Sequential modes, reorder items, and export. Check the rendered output directly and download.

Before you start

Limits: 25 MiB per file, max 16 files, ~100 MiB total uncompressed memory. Output resolution: 64 to 1280px and at most 1M pixels. Sequential mode max limits: 15s duration, 300 frames, and 50M total processed pixels. Tasks exceeding limits halt rather than auto-crop.

Local Processing and Privacy Notice

Selected media parsing, canvas composition, and file export run locally within your browser using client-side APIs. No media files or processed frames are transmitted to external servers or permanently stored. Normal site access, static script delivery, and analytics operate via standard network requests.

ZeroTools: Browser Processing & Privacy

ZeroTools focuses on tools that process input on your device. Check each tool’s scope and limitations before use.

Processing and privacy policy
Chapter 1

Simultaneous Grid Layout and Use Cases

This tool provides both parallel and sequential modes, with Chapters 1 through 6 below describing the parallel mode specifications.

The sequential mode plays each selected GIF once in list order and stitches them into a single output, calculating total duration from original frame delays without manual FPS or duration settings.

Original loop counts are not inherited; instead, the final combined GIF loops continuously as a whole. Processing is limited to a maximum of 15 seconds, 300 frames, and 50 million total processed pixels.

This tool draws each selected media source into its assigned grid cell in listed order, moving from left to right and then down to the next row.

As the media plays, canvas frames are sequentially captured and encoded directly in your browser into an animated GIF or video file.

Original audio tracks and embedded metadata, such as timestamps or device information, are not included in the exported file.

Chapter 2

Asset Handling and GIF Composition

You can upload up to 16 media files of at most 25 MiB each. The dimensions of each asset must not exceed 4096 pixels on any side.

A strict limit is enforced to keep estimated decompression memory across browser assets within 100 MiB. This 100 MiB figure is a conservative estimate derived from GIF patch data, composited frames, and RGBA pixel allocations for single image or video frames, rather than a strict guarantee of total browser memory consumption.

For GIF files specifically, the tool uses gifuct-js to parse and decompress binaries, interpreting logical screen dimensions (width and height) and per-frame placement instructions (such as disposal methods 2 and 3) to composite frames for display.

Note that this input composition method does not guarantee that the exported GIF will feature transparent backgrounds. During actual export, the background is filled with a solid color or a time-varying rainbow gradient.

Furthermore, loop metadata present in input GIFs is ignored; instead, frames repeat continuously for the duration chosen in the export settings.

Hidden canvas compositing reconstructs differential frame updates, though files with unique inter-frame optimizations might not render identically to their original authoring software.

Chapter 3

Layout, Spacing, and Dimensions

The layout of the composite canvas is determined by configuring rows and columns from 1 to 4 each. Attempting to place more media assets than available grid cells (rows × columns) triggers an export validation error, requiring you to expand the grid or remove extra items.

Output resolution can be adjusted between 64 and 1280 pixels per side, provided total canvas area does not exceed 1,000,000 pixels.

For instance, setting 1280×1280 pixels equals 1,638,400 pixels and will fail validation. Preset buttons for square (1:1), landscape (16:9), and portrait (9:16) facilitate entering standard dimensions while preserving aspect ratios.

Cell gap and outer canvas padding can be adjusted between 0 and 40 px, provided cell dimensions remain greater than zero. The background supports hexadecimal colors via color picker or an animated rainbow gradient.

Fitting within each cell offers three modes: Contain to fit the entire image within the cell while preserving aspect ratio (leaving letterbox margins), Cover to fill the cell and crop overflows, or Stretch to adapt dimensions directly to cell borders.

This allows consistent grid presentation across varied asset ratios.

Chapter 4

Parallel Mode Duration, FPS, and Limits

Playback duration and frame rate (FPS) govern output quality, file size, and browser processing load. Available export durations are 1, 2, 3, 5, 7, 10, or 15 seconds, with selectable frame rates of 10, 12, 15, 20, 24, or 30 FPS.

Canvas rendering proceeds until the selected duration is reached, stopping automatically regardless of source media length. Even when preview playback is paused, exporting GIF or video always reconstructs frames starting from time 0.

The seekVideoFrame routine resolves immediately if the target timestamp matches the current playback position and data is already available.

For different timestamps, it waits for seeked or loadeddata events, timing out with an error if seeking exceeds 10 seconds. This seeking logic captures video frames during GIF rendering, whereas video export plays media in real time after seeking to the start.

During file loading and export execution (indicated by isExporting or isLoading state), layout and timing controls as well as file management are disabled to prevent state conflicts.

A sample GIF button lets you test functionality without your own media, and active object URLs are managed to prevent premature revocation.

Chapter 5

GIF Quantization and Timing

When exporting as an animated GIF (.gif), canvas frames are encoded via the gifenc library. This process quantizes RGBA pixel data for each frame into a palette of up to 256 colors.

GIF exports enforce strict thresholds: total frame count cannot exceed 300 frames, and total processed pixel volume (width × height × total frames) cannot exceed 50,000,000 pixels.

Exceeding these limits raises an export validation error, requiring reductions in dimensions, duration, or FPS. Quantization can reduce smooth color gradients and cause visible banding.

Additionally, GIF specifications mandate delays expressed in hundredths of a second (10 ms increments). When requested frame intervals at a given FPS do not align with 10 ms multiples, delay rounding can cause subtle differences in playback speed relative to real time.

Because rendering, capturing, and quantizing each frame is computationally intensive, processing may take dozens of seconds depending on resolution and length.

A progress percentage bar tracks this encoding process.

Chapter 6

Video Output and Environment Differences

When video (.mp4 or .webm) is selected, the tool captures a canvas media stream using captureStream and records it in real time via MediaRecorder.

Availability depends on browser and OS capabilities, and MP4 (H.264) encoding is not universally supported. At the start of export, MediaRecorder.isTypeSupported checks browser compatibility; if the requested format is unavailable, the recorder falls back automatically to supported WebM codecs (such as VP9 or VP8).

The exported file extension is adjusted to match the actual MIME type, and when MP4 falls back to WebM, a completion message alerts the user.

Video recording runs as silent real-time capture, meaning a 15-second video takes at least 15 seconds to record plus setup and finalization time.

Downloads start automatically from the generated Blob once recording finishes. Backgrounding the browser tab during capture may throttle rendering rates due to browser resource conservation, causing stuttering in the exported video.

Frequently Asked Questions (FAQ)

A.
Side-by-Side (Parallel) arranges multiple GIFs, videos, or images in a single frame to play simultaneously. Sequential merges multiple GIFs end-to-end to play one after another in list order.
A.
No, custom FPS or target durations cannot be set. The output automatically calculates total duration using the original frame delays of each source GIF (invalid delays default to 100ms).
A.
Sequential mode strictly accepts GIF inputs and outputs GIF only. To combine video files like MP4/WebM or static images, please use the Side-by-Side mode.
A.
Each file must be 25 MiB or less, up to 16 files. Sequential mode enforces a maximum resolution of 1280px (1M pixels), 15 seconds duration, 300 frames, and 50M total processed pixels. Exceeding limits halts processing without partial cropping.
A.
No. Because only the canvas visual stream is captured, both video and GIF exports are silent.
A.
MediaRecorder format support depends on your browser and operating system. In environments lacking MP4 support, the tool falls back to WebM and applies the matching file extension.