Open GIMP XCF files in PhotoCraft and convert XCF to PSD
Open GIMP .xcf files without GIMP in free PhotoCraft, with layers, groups, masks and blend modes, then convert XCF to PSD, PNG or OpenRaster, singly or in bulk.
Yes, you can open a GIMP .xcf file without GIMP. Since v0.13.0, PhotoCraft opens XCF files (and gzipped .xcf.gz) from GIMP 1.x through 3.2, with their layers, nested groups, layer masks, blend modes, extra channels and the saved selection (#2945). The import is read only: PhotoCraft can't save XCF. To convert XCF to PSD, open the file and use File › Save As…, which suggests PSD for an XCF document. Text, vector and link layers arrive as plain pixels, GIMP 3's non-destructive filters and paths are left out, and every gap is listed in a warning when the file opens. This page describes v0.16.0 (25 October 2026), which also fixes XCF files with link layers that failed to open in v0.13.0 to v0.15.1 (#8865).
Photoshop itself doesn't open .xcf files, so PhotoCraft is also a free way to get GIMP work to Photoshop users. Get it from the download page, or try it in the browser with the online editor.
What opens
The reader is PhotoCraft's own, written from GIMP's public XCF specification and checked against files GIMP 3.2.6 wrote, with GIMP's own rendering of each as the reference. It contains no GIMP code.
Versions, depths and compression
| GIMP file | In PhotoCraft |
|---|---|
| XCF versions 0 to 26 (GIMP 1.x to 3.2) | Open. A newer version opens with a note, and parts the reader doesn't know are skipped |
| GIMP 2.10 and 3.x files | Open. The real-file tests use GIMP 3.2.6; older versions are covered by tests built from the specification |
| 8-bit integer | 8 bits/channel |
| 16-bit integer | 16 bits/channel |
| 32-bit integer | 16 bits/channel, with a note |
| 16-bit (half), 32-bit and 64-bit floating point | 32 bits/channel float, values above 1.0 kept |
| Linear light precisions | Open with a linear sRGB (or linear gray) profile, which replaces any profile the file had, with a note |
| RGB, grayscale | Open as RGB or grayscale |
| Indexed | Open as RGB through the colour map, with a note |
| Uncompressed, RLE, zlib tiles | All open |
.xcf.gz (or .xcfgz) | Opens. .xcf.bz2 and .xcf.xz don't: decompress them first |
PhotoCraft recognises an XCF by its signature, so a renamed XCF still opens as one.
Layers
| In GIMP | In PhotoCraft |
|---|---|
| Pixel layers, any size and position (also off the canvas) | Pixel layers at the same position |
| Layer groups, nested; Pass through groups | Groups; Pass Through groups |
| Names, visibility, opacity | Kept |
| Layer masks, applied or disabled | Layer masks, enabled or disabled the same way |
| Lock alpha, lock pixels, lock position | Lock transparent pixels, Lock image pixels, Lock position |
| A layer with no alpha channel | A layer with Lock transparent pixels turned on |
| Colour tags | Layer colours. GIMP's brown tag has no match and is dropped |
| Text layers | Pixels, with a note. The text isn't editable |
| Vector layers and link layers (GIMP 3.2) | Pixels, with a note |
| Non-destructive filters on a layer (GIMP 3) | Not applied: the layer opens unfiltered, with a note |
| Floating selection | Not imported, with a note asking you to anchor it in GIMP first |
| Clipped layers saved by GIMPhoto | Clipping masks |
Blend modes
GIMP's current modes and its legacy modes both map to Photoshop's, which PhotoCraft uses.
| GIMP mode | PhotoCraft mode |
|---|---|
| Normal, Dissolve, Multiply, Screen, Overlay, Difference, Darken only, Lighten only, Divide, Hard light, Vivid light, Pin light, Linear light, Hard mix, Exclusion, Linear burn, Subtract | The same mode (Darken, Lighten and so on) |
| Addition | Linear Dodge (Add) |
| Dodge, Burn | Color Dodge, Color Burn |
| Pass through (groups) | Pass Through |
| Soft light, and the legacy Overlay that GIMP draws as soft light | Soft Light, with a note (GIMP's formula differs a little) |
| HSV Hue, HSV Saturation, HSL Color, HSV Value, LCH Hue, LCH Chroma, LCH Color, LCH Lightness, Luminance | Hue, Saturation, Color or Luminosity, with a note (Photoshop's modes are HSL based, so the result differs) |
| Luma darken only, Luma lighten only | Darker Color, Lighter Color, with a note |
| Behind, Grain extract, Grain merge, Color erase, Erase, Merge, Split | Normal, with a note naming the layer |
Channels, selection and image settings
| In the XCF | In PhotoCraft |
|---|---|
| Extra channels | Alpha channels in the Channels panel |
| The saved selection | The active selection |
| Guides | Guides |
| ICC profile | The document's colour profile (except in linear light files, above) |
| Resolution | Kept. If the vertical value differs, the horizontal one is used for both, with a note |
| Image comment | A "Comment" entry in the document's text metadata |
| Paths | Not imported. A note gives the count |
| Other parasites (GIMP stores Exif and XMP metadata this way), sample points, grid | Skipped without a note |
What doesn't come across, and how PhotoCraft tells you
When something is approximated or left out, the file still opens. The status bar says how many warnings there were, and a notice lists them, naming the layers each one applies to. With the command line, photocraft-cli convert prints each one as a warning: line, and photocraft-cli info lists them in its JSON output. The messages are in English in every interface language:
| Message | What it means |
|---|---|
is a text layer and opens as pixels (also vector and link layers) | The layer looks right but can't be edited as text or paths |
has N layer effect(s) (non-destructive filters) that are not applied | The GIMP 3 filters on that layer are missing. Merge them into the layer in GIMP if you need them |
is a floating selection and was not imported (anchor it in GIMP first) | Anchor or turn the floating selection into a layer in GIMP and save again |
uses GIMP's Grain merge mode, which opens as Normal | The mode has no Photoshop equivalent |
N path(s) were not imported | Paths aren't read yet. Upstream says they "could follow later" |
GIMP composites this image in linear light; PhotoCraft composites in gamma-encoded RGB, so blends and soft edges differ slightly | See Why the file looks slightly different |
N layer(s) use a mode GIMP clips to the layers beneath; … | GIMP's "Clip to backdrop" hides those layers over transparent areas, and PhotoCraft shows them there |
composites with Clip to layer, which is not reproduced (or Intersection) | That GIMP composite mode isn't reproduced |
the indexed image opens as RGB | Use Image › Mode › Indexed Color to go back if you need it |
32-bit integer samples open as 16-bit | The extra precision is lost |
XCF version N is newer than this reader … | A future GIMP file. Check the result carefully |
Why the file looks slightly different
Upstream's docs list three GIMP defaults that Photoshop, and so PhotoCraft, doesn't have:
- Linear light. Since 2.10, GIMP blends most modes and composites layers in linear light. PhotoCraft composites in the document's own encoding, as Photoshop does. In upstream's tests, a Multiply layer at 60% differed by up to 38/255 in one channel, and the edge pixels of anti-aliased text by up to 73/255. Layers whose blend space and composite space are set to RGB (perceptual) in GIMP match within 2.5/255.
- Clip to backdrop. In GIMP, every mode except Normal shows nothing where the layers beneath are transparent. PhotoCraft shows the layer there. This only matters over transparent parts of the image.
- Clamping order. For Addition, Subtract, Divide, Dodge, Burn and Linear light, GIMP applies a pixel's transparency before clamping and Photoshop clamps first. Opaque pixels at 100% opacity match. Semi-transparent ones can differ.
The approximated modes in the blend table also render differently.
How to open an XCF file
-
File › Open… (
Ctrl+O,⌘Oon macOS). The file type menu has a GIMP entry for.xcfand.xcf.gzfiles. -
Drag and drop. Drop the file on the tab strip, or anywhere in the window when no document is open, to open it in its own tab. Dropping it on the canvas of an open document places it into that document instead, as Photoshop does.
-
Open Recent works as for any file.
-
The command line.
photocraft-cli convertandphotocraft-cli infoaccept.xcfand.xcf.gzinput:photocraft-cli info poster.xcf photocraft-cli convert poster.xcf poster.psdinfoprints the size, mode, depth, layer tree and warnings as JSON. The same reader serves the automation server'sdoc.openand the MCP tools; see MCP and CLI. -
The online editor. It runs v0.16.0, and its File › Open… lists
.xcfand.xcf.gz. Drag and drop works too. Nothing is uploaded: the file is read inside your browser.
An opened XCF has no file to save back to, so File › Save asks for a new name, just like Save As….
Convert XCF to PSD
- Open the
.xcfwith File › Open… or by dropping it on the window. - Read the warnings. If text, filters or a floating selection matter, fix them in GIMP first (see Troubleshooting).
- Check the image against GIMP if blend modes or soft edges matter. The section above explains small differences.
- To keep the saved selection, choose Select › Save Selection… to store it as an alpha channel. A PSD has no place for an active selection.
- Choose File › Save As… (
Ctrl+Shift+S,⌘⇧S). For an XCF document the dialog suggests the same name ending in.psd, with the PSD Document type. Save. - Open the PSD in Photoshop, or wherever it's going, and check it before you delete anything.
When Photoshop opens that PSD, it sees pixel layers (text included), groups, Pass Through groups, layer masks (disabled ones stay disabled), blend modes, opacity, visibility, locks, layer colours, alpha channels, guides, resolution and the colour profile, at 8, 16 or 32 bits. Layers that had no alpha channel in GIMP show Lock transparent pixels. The GIMP image comment isn't saved, and PhotoCraft warns free-form text metadata is not supported by PSD/PSB; it will be dropped. If you'll keep editing in PhotoCraft, save a .pcraft copy too: it keeps everything PhotoCraft holds.
A whole folder of XCF files
On the desktop, File › Scripts › Image Processor… is the simplest way. Pick the folder, set the format to psd, leave the width and height at 0 to keep the size, check the output folder (it defaults to a processed folder), and run it. Subfolders can be included. Its convert-to-sRGB option is on by default and turns grayscale files into RGB, so turn it off to keep them grayscale.
File › Automate › Batch… also picks up .xcf and .xcf.gz files, but it needs an action selected in the Actions panel, and its Format Same fails on XCF files because PhotoCraft can't write XCF. Choose psd instead.
From a terminal, loop over the files with photocraft-cli convert. Create the output folder first, because convert doesn't:
# macOS, Linux
mkdir -p psd
for f in *.xcf; do photocraft-cli convert "$f" "psd/${f%.xcf}.psd"; done
# Windows PowerShell
New-Item -ItemType Directory -Force psd | Out-Null
Get-ChildItem *.xcf | ForEach-Object { photocraft-cli convert $_.FullName "psd\$($_.BaseName).psd" }
convert refuses to write over its own input unless you add --in-place, which never applies here because each output is a new .psd in another folder. A .psd that's already there is replaced without asking, so run the loop into an empty folder if you want to keep earlier results.
Don't use photocraft-cli batch for this. In v0.16.0 its folder scan leaves out .xcf files, although upstream's XCF page lists it. Batch also needs an actions file.
XCF to PNG, JPEG, TIFF or OpenRaster
Use Save As… with another type, File › Export › Export As…, or photocraft-cli convert poster.xcf poster.png. Notes per format:
- PNG, JPEG, WebP: a flattened image, rendered by PhotoCraft, so the composite differences apply. JPEG and WebP are 8-bit, PNG keeps 16-bit. If the image must match GIMP to the pixel, export the PNG from GIMP.
- TIFF: flat by default. To keep the layers, accept the layered TIFF prompt in the app, or add
--tiff-layerson the command line. - OpenRaster (
.ora): keeps pixel layers, groups, names, opacity, visibility, locks and blend modes. Masks are applied to the pixels, and alpha channels, metadata and any profile other than sRGB are left out. Grayscale becomes RGB and 32-bit float becomes 16-bit. PhotoCraft lists each loss when you save.
All the formats are compared in file formats.
Saving back to GIMP
PhotoCraft can't write XCF, and Save As doesn't offer it. A save to .xcf from the command line fails with XCF is GIMP's own format and PhotoCraft only opens it; save as .pcraft to keep the layers, or export a flat image. For a round trip to GIMP, save a layered copy that GIMP imports:
| Format | Use it when | What GIMP gets |
|---|---|---|
| PSD | You need layer masks, alpha channels, guides or 16-bit | Layers, groups, masks and most blend modes. Photoshop-only features (adjustment layers, layer styles, smart objects, editable text) don't survive in GIMP, so rasterise them in PhotoCraft first if they matter |
OpenRaster (.ora) | You have a plain stack of pixel layers and groups | Layers, groups, opacity, visibility and blend modes, with masks already applied |
| PNG or TIFF | You only need the finished image | One flattened image |
Upstream tested its OpenRaster files with Krita but notes that GIMP files "have not been checked yet", so check the layers after GIMP opens them. Keep the original .xcf as your GIMP master. PhotoCraft never changes it.
Coming from GIMP
PhotoCraft follows Photoshop rather than GIMP, so a few habits change:
- Saving. GIMP saves XCF and exports everything else. In PhotoCraft, Save As… writes PSD, PNG, JPEG and the rest directly, and File › Export has Export As… and Quick Export as PNG. PhotoCraft's own lossless format, the role XCF plays in GIMP, is
.pcraft. - Tools. Tools are grouped in the toolbar under Photoshop's letters:
VMove,MMarquee,LLasso,WMagic Wand,BBrush,EEraser,TType,CCrop, andCtrl+T(⌘T) for Free Transform. See the tools list and the shortcuts cheat sheet. Keys can be remapped in Edit › Keyboard Shortcuts…. - Alpha channels on layers. GIMP's Add Alpha Channel has no counterpart. A layer that was opaque in GIMP opens with Lock transparent pixels on. Turn the lock off in the Layers panel before you erase it to transparency.
- Mode names. Addition is Linear Dodge (Add), Dodge and Burn are Color Dodge and Color Burn, and Darken only and Lighten only are Darken and Lighten.
- Color to Alpha. It's at Filter › Other › Color to Alpha…, one of the few filters PhotoCraft has that Photoshop doesn't.
For a broader comparison, including when GIMP is still the better choice, see PhotoCraft vs Photoshop, GIMP and Photopea.
Troubleshooting
"XCF: the file ends early (wanted 4 bytes at …)". If the offset is huge and the file comes from GIMP 3.2, it probably has link layers, whose length field GIMP can write four bytes short. v0.13.0 to v0.15.1 failed on these, and v0.16.0 opens them (#8857, #8865). Update PhotoCraft. If it still fails, the file may really be cut short: try opening it in GIMP.
"the canvas exceeds the 1 GiB pixel limit" or "the layers exceed the 1 GiB pixel limit". The reader decodes every layer, mask and channel into 32-bit floats and stops at 1 GiB in total. That's 16 bytes per pixel for a layer with transparency, 12 without, and 4 for a mask or channel. So the canvas can't pass about 67 million pixels (8,192 × 8,192), and a 4,000 × 3,000 image holds about five full-size transparent layers. Layers that are smaller than the canvas cost less. In GIMP, crop layers to their content, delete unused layers or merge some, then save again. Other limits: 300,000 pixels a side, 8,192 layers, 1,024 channels, and group nesting 64 deep (deeper layers move to the top level, with a note).
"unknown precision", "unknown compression" or "unknown layer type". The file uses something outside the specification the reader was written against, or it's damaged. Open it in GIMP and save it again, and if that doesn't help, report it upstream with a sample file.
.xcf.bz2 or .xcf.xz won't open. Only gzip is recognised. Decompress the file, or save it from GIMP as .xcf or .xcf.gz.
The image looks a little different from GIMP. That's usually linear light, Clip to backdrop or an approximated mode; see the explanation above. To match exactly, set the affected layers' blend space and composite space to RGB (perceptual) in GIMP, or merge those layers in GIMP, before you save.
A layer looks unfiltered. GIMP 3's non-destructive filters aren't applied. Merge the filters into the layer in GIMP and save again.
A layer is missing. It was probably a floating selection, which isn't imported. Anchor it or make it a new layer in GIMP.
Text can't be edited. GIMP text layers arrive as pixels. Retype the text with the Type tool (T) if you need to edit it.
Erasing or Color to Alpha won't make pixels transparent. The layer had no alpha channel in GIMP, so it opened with Lock transparent pixels on. Turn the lock off in the Layers panel. Color to Alpha refuses a locked layer.
A batch skips or fails every XCF. photocraft-cli batch leaves .xcf files out of its folder scan, so use a convert loop. In File › Automate › Batch…, pick a format other than Same.
More help is in Troubleshooting. For every other file type PhotoCraft reads and writes, see file formats.