Initializing... drag & drop files here
Supports: PPM
PPM (Portable Pixmap, part of the Netpbm family introduced in 1988) is a deliberately simple uncompressed format — a plain ASCII or binary header followed by raw RGB triples. Ray tracers, scientific solvers, image-processing pipelines, and computer-graphics textbooks output PPM because writing the format takes ten lines of C and no library. The catch: nothing on the modern web plays a PPM, and no browser, messaging app, or document viewer renders one. GIF plays everywhere. Common reasons to convert PPM → GIF:
| Property | PPM | GIF |
|---|---|---|
| Compression | None (raw RGB) | Per-frame LZW (1987) |
| Color depth | 24-bit (16M colors), 48-bit variant | 8-bit (256 colors per frame) |
| Animation | No (single image per file) | Yes (multi-frame, looping) |
| Typical size for 1080p frame | ~6 MB raw | 50-500 KB after palette + LZW |
| Universal playback | Almost none — needs viewer/converter | Every browser, OS, image viewer |
| Transparency | No | 1-bit (binary alpha) |
| Best for | Render / simulation intermediate output | Embedding, sharing, archival of loops |
A 100-frame 1080p PPM sequence is ~600 MB on disk. The same animation as a GIF — palette quantized to 128 colors at 720p, 12 fps — typically lands at 5-15 MB. Drop resolution, frame rate, and palette size to push it lower for chat or email.
| Setting | Effect on size | Best for |
|---|---|---|
| 24-30 fps, 256 colors | Largest, smoothest | Photoreal renders, slow-motion sims |
| 15 fps, 128 colors | Balanced default | Most ray-tracer and simulation output |
| 10 fps, 64 colors | Compact | Plot animations, GitHub READMEs, Slack |
| 8 fps, 32 colors | Smallest | Long sequences that must fit in an 8 MB upload |
The converter sorts uploaded files alphabetically by filename. Numbered sequences like frame_0001.ppm, frame_0002.ppm, …, frame_0500.ppm sort correctly because of the zero-padding. If your renderer outputs frame_1.ppm, frame_2.ppm, …, frame_10.ppm without padding, frame_10 sorts before frame_2 lexicographically — rename them with leading zeros (most shells support printf "frame_%04d.ppm" $i in a loop) or drag-reorder before clicking Convert.
PPM is uncompressed: every pixel is a literal RGB byte triple, so a 1920×1080 frame is exactly 1920 × 1080 × 3 = ~6.2 MB regardless of content. GIF applies a 256-color palette plus LZW compression — both lossy and lossless reductions stack. A 100-frame raw PPM sequence at ~600 MB routinely compresses 30-100× to a 5-20 MB GIF. The visible loss is color banding on smooth gradients, which the dither setting and a larger palette (192-256 colors) can soften.
There's no hard cap, but everything runs in your browser session, so very large sequences (thousands of 4K PPMs) depend on your device's RAM. As a rough guide: 500 frames at 720p stays comfortably under typical browser memory limits. For very long animations, downsample first — drop fps to 8-10 or take every 2nd / 3rd frame using the Drop Frames option.
256 colors gives the cleanest output for photoreal renders, sky gradients, and anything with subtle color transitions. 128 colors is the safe default — visually almost identical to 256 for most content and noticeably smaller. 64 colors works fine for plots, line drawings, UI captures, and synthetic shaded surfaces; below 32 you start to see banding even on flat regions. Try 128 first; drop to 64 if you need a smaller file, raise to 256 only if you see visible banding.
Yes. Use the Frame Selection option to pick a specific frame index — useful for grabbing one keyframe from a long render to share as a static image. If you need the still in another format, see PPM to JPG or PPM to PNG for higher fidelity than GIF's 256-color palette can provide.
No — that's the fundamental tradeoff. PPM stores 24-bit RGB (16.7M colors per pixel), and the binary P6 variant of PPM also supports 16-bit-per-channel for HDR / scientific output. GIF caps at 256 colors per frame from a global or per-frame palette. The quantizer picks the 256 most representative colors and dithering distributes the error spatially. For lossless preservation of every color, output to PNG sequence or PPM to MP4 for video instead.
PFM (Portable FloatMap) is a separate Netpbm-family format with floating-point pixel values for HDR. This page accepts PPM specifically (8-bit or 16-bit integer P3 / P6). For PFM, tonemap to PPM first inside your renderer (most support --ppm or -O image.ppm), then upload here.
Match the framerate to how the simulation reads. For physics demos and slow-evolving systems (heat diffusion, reaction-diffusion, cellular automata), 8-12 fps is plenty — the eye has time to follow each step. For fluid dynamics and N-body where motion matters, 24-30 fps gives a smooth playback. For render previews where you want every frame visible, 10-15 fps is the sweet spot that balances smoothness against GIF file size.
Yes — for animations longer than ~10 seconds, MP4 produces a dramatically smaller file with full 24-bit color. See PPM to MP4 for H.264 / H.265 / AV1 output, or PPM to WebM for the modern web codec. GIF is best when the target platform requires inline animation (GitHub markdown, older chat clients, email).