Initializing... drag & drop files here
Supports: XCF
.xcf GIMP project, or click "+ Add Files" to pick one. Flatten layered projects in GIMP first (Image → Flatten Image, then re-save the .xcf) — one layer of a multi-layer XCF is what gets written, not the merged canvas. GIMP-compressed variants (XCF saved with zlib, gzip, or bzip2) are accepted, and batch upload of multiple XCF files is supported.XCF is GIMP's native working format — first shipped on December 15, 1997 and named after Berkeley's eXperimental Computing Facility. It is a layered, editable container that holds layers, layer masks, channels, paths, guides, and the current selection, similar in scope to Photoshop's PSD. Almost nothing outside GIMP (and a few partial readers like Krita and Gwenview) reads XCF reliably, and the GIMP team explicitly recommends against XCF as an interchange format. PPM, the Portable Pixmap from the Netpbm suite, is the opposite: a tiny, well-specified, header-plus-raw-RGB container that every image-processing tool on Unix can read.
pnmscale, pnmtopng, pamscale, ppmhist) are deliberately small, single-purpose programs designed to be chained with pipes. Converting your XCF to PPM lets you drop a GIMP-edited frame straight into a shell pipeline without GIMP's libraries installed.| Property | XCF (GIMP) | PPM (Netpbm) |
|---|---|---|
| Full name | eXperimental Computing Facility | Portable Pixmap |
| Introduced | 1997 (GIMP 1.0 era) | 1988 (Pbmplus, Jef Poskanzer) |
| Designed for | Editable, layered project file | Cross-platform raw RGB exchange |
| Layers / channels / paths | Preserved | Single image only — flatten in GIMP before converting |
| Compression | RLE, plus zlib (since v4), gzip, bzip2, xz | None — raw bytes after a tiny header |
| Color depth | 8-bit, 16-bit integer, 32-bit float (per GIMP) | 1–255 maxval = 8 bits/channel; 256–65535 = 16 bits/channel |
| Transparency | Yes (alpha channel, layer masks) | No (RGB only; PAM/PNG needed for alpha) |
| Metadata | Parasites, ICC profile, EXIF | None — color space implied (typically sRGB / BT.709) |
| Magic bytes | gimp xcf ASCII signature |
P6 (binary) or P3 (ASCII) |
| Software support | GIMP (full); Krita, Gwenview (partial) | Universal on Unix: ImageMagick, FFmpeg, OpenCV, Netpbm |
| Typical file size | Large (layers + history) | Very large (uncompressed; ~3 bytes/pixel) |
| Variant | Magic | Sample storage | Channels | Best for |
|---|---|---|---|---|
| PPM (P6) — 8-bit | P6, maxval 1–255 | 1 byte / sample | RGB | The common case; ImageMagick, OpenCV, FFmpeg default |
| PPM (P6) — 16-bit | P6, maxval 256–65535 | 2 bytes / sample, big-endian | RGB | High-precision scientific work, HDR intermediates |
| PPM (P3) — ASCII | P3 | Decimal text | RGB | Human-readable debugging, tiny test fixtures |
| PGM (P5/P2) | P5 binary, P2 ASCII | 1 or 2 bytes / sample | Single grayscale | Greyscale-only pipelines; convert via PPM then ppmtopgm, or export PGM directly from GIMP |
| PBM (P4/P1) | P4 binary, P1 ASCII | 1 bit / pixel | Black & white | 1-bit masks, fax, OCR pre-processing |
| PAM | P7 | Variable | RGB+alpha, others | When you need transparency (PPM does not) |
No, and there is an important difference from xcf2pnm here. PPM has no concept of layers, masks, or vector paths — the entire format spec is "magic number, width, height, maxval, raw RGB bytes." Unlike xcf2pnm, this converter does not composite the stack: a multi-layer XCF is read as a multi-page image and a single layer is written out, so anything the other layers contributed is missing. The regions they covered are empty in that layer, and because PPM cannot store transparency they arrive as a flat fill rather than as your artwork. Flatten in GIMP first — Image → Flatten Image, then re-save the .xcf — and the P6 output matches your canvas. If you need to keep layers, save your XCF as PSD, OpenRaster (.ora), or TIFF instead.
Because PPM is uncompressed by design. An 8-bit RGB PPM is exactly width × height × 3 bytes plus a tiny ASCII header (~15 bytes). A 4000×3000 PPM is therefore around 36 MB. Your XCF likely compressed the same pixels with zlib (the default since XCF v4) or RLE. PPM trades file size for parsing simplicity — that is the whole point of the format. If size matters, run the PPM through pnmtopng or save as PNG instead.
Pick 8-bit (maxval 255) unless you have a specific reason not to. Almost every reader handles 8-bit correctly, and most consumer XCFs are 8-bit anyway. Pick 16-bit (maxval 65535) if your XCF uses GIMP's 16-bit integer or 32-bit float precision mode and you need to keep fine tonal gradations for scientific analysis, HDR work, or downstream colour grading. Be aware that 16-bit doubles file size and a few legacy tools only accept 8-bit PPM.
No. PPM is strictly red-green-blue with no alpha. The Netpbm spec is explicit on this. If you need transparency, the Netpbm answer is PAM (Portable Arbitrary Map, magic P7), which adds an alpha tuple type. In practice, most workflows just pick PNG instead — see XCF to PNG when alpha matters.
The first two bytes of a PPM file are the magic number. P6 is the binary form: header in ASCII, then raw RGB bytes packed back-to-back. P3 is the plain form: every sample written as a decimal number in ASCII text, separated by whitespace. P6 is what you almost always want — it is roughly 3× smaller and orders of magnitude faster to parse. P3 exists mainly for human inspection, tiny test files, and environments without binary file support. This converter writes P6 by default.
Photoshop does not read PPM natively. The standard route is either to install a plugin or, more reliably, run the PPM through a free converter to PNG/TIFF first. Affinity Photo also has limited PPM support. If your target audience is Photoshop or Affinity users, XCF to TIFF or XCF to PNG is a better choice — both keep lossless pixel data and are widely supported.
xcf2pnm locally?xcf2pnm (Henning Makholm's tool, packaged in the xcf2png / xcftools Debian/Ubuntu package) is excellent if you already have it installed, and it does one thing this converter does not: it merges the layer stack for you. This tool is for everyone else — no install step, no Linux required, no command line — and once you have flattened the project in GIMP the two emit the same P6 PPM, interchangeable for downstream pipelines. Batch upload also lets you convert many XCFs without writing a shell loop.
The GIMP project itself recommends against using XCF as an interchange format because the spec evolves (layer groups added in 2.7, color-managed channels later, etc.) and forward compatibility is not guaranteed. For long-term editable storage, the GIMP team is moving toward OpenRaster (.ora). For "send to another editor," PSD, TIFF, or PNG are safer than XCF. Converting to PPM is for downstream processing, not for round-tripping back into an editor.
The big one is a multi-layer stack, which needs the GIMP flatten described above. Beyond that, floating selections, exotic layer modes, indexed-color layers in mixed-mode files, and very recent GIMP effects can render slightly differently outside GIMP's own engine. If pixel-perfect fidelity matters, open the XCF in GIMP and use File → Export As →.ppm directly — that uses GIMP's full rendering engine. For a flattened photographic or design XCF, this converter produces output indistinguishable from GIMP's own export.