How OmniGIF converts Live Photos to GIF entirely in the Browser
iPhone Live Photos are not a single GIF-ready file. They are a still image plus a short video clip. Most "Live Photo to GIF" tools ask you to upload that clip to a server. OmniGIF's Live Photo to GIF converter does the opposite: the MOV/MP4 never leaves the device. This post walks through how that pipeline is built — from Apple's export format, through engine selection, to palette-based GIF…
OmniGIF is a browser-based tool that converts Live Photos, which are actual still images paired with short video clips, into GIFs without uploading the video clip to a server. The conversion process starts when the user exports the Live Photo as a MOV/MP4 file. The browser then analyzes the container, duration, and resolution of the exported file.
Users are guided to save the video before opening the file picker to prevent confusion with the still image in narrow viewports. The high-level architecture of OmniGIF's Live Photo to GIF converter includes exporting the Live Photo, analyzing the container, duration, and resolution, previewing and cropping the video, selecting a conversion engine, and generating the GIF.
Two conversion engines are used: WebCodecs + Mediabunny, which is preferred, and FFmpeg.wasm in a Worker, which is a fallback for Safari or when hardware decoding is not reliable. The WebCodecs path, which is compatible with Chrome, Safari, and Firefox, decodes the container and takes the primary video track. It verifies if the video can be decoded, samples frames at the target FPS between the start and end seconds, applies crop and circular mask using Canvas, and encodes the frames into GIF with palette-based encoding.
The FFmpeg path uses a worker with the @ffmpeg/core build to avoid SharedArrayBuffer and cross-origin isolation conflicts. The worker lazy-loads FFmpeg, writes the uploaded buffer to a virtual file system, builds the ffmpeg command line arguments, executes the command, transfers the output GIF back to the UI thread, and deletes temporary files.
Both engines have the same interface and can handle the conversion locally, without the need for a server to receive the file.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.