DirectDraw Surface (DDS) converter
Convert DDS game textures to PNG or JPG. DXT1, DXT3, DXT5, BC5, BC6H, BC7 and uncompressed DDS are read; only the top mip level and first face are exported.
.dds
Format
About DirectDraw Surface (DDS)
DDS, DirectDraw Surface, is Microsoft's container for GPU textures. A file starts with the four bytes "DDS " and a 124-byte header giving size, pixel format and flags, optionally followed by a DX10 header with a DXGI format number, then the texture data. That data is usually block-compressed: DXT1 (BC1), DXT3 (BC2) and DXT5 (BC3) for colour with or without alpha, BC4 and BC5 for one- and two-channel maps such as normals, BC6H for HDR lighting and BC7 for high-quality colour. A single file can also hold a full mip chain, the six faces of a cubemap, a texture array or a volume.
DDS files come from games and game engines. Modders open them to recolour skins and armour, artists inspect them when debugging a material, and asset rippers export them by the thousand. Windows Explorer, browsers and most image viewers do not show them, which is why people look for DDS to PNG.
Our image engine decodes the largest mip level of the first surface. In our tests DXT1, DXT3, DXT5, BC5, BC6H, BC7 and uncompressed DDS all opened, from three.js example textures and Pillow's test set. The smaller mip levels are not exported, and in a cubemap only the first of six faces is: a 786,560-byte skybox produced one 512×512 PNG. BC5 normal maps come out red and green with a blue channel of 0, because the format stores only two channels, and BC6H HDR values are clipped to 8-bit colour.
Converting is one-way for now. We do not write DDS: a texture that goes back into a game needs the compression format and mip chain that game expects, which texconv, Paint.NET, GIMP or the game's own tools produce. Keep the PNG as your editable working copy and export to DDS at the end.
Common DirectDraw Surface (DDS) problems
A DDS texture will not open in Windows or a browser.
Use /convert/dds-to-png to get a viewable, editable copy with alpha intact.
You need small previews of textures for a mod page.
Use /convert/dds-to-jpg with width 512; set background to black for fire and glow sprites.
Only one side of a skybox came out.
We export the first cubemap face only. Open the DDS in GIMP, whose DDS import loads the faces as layers, and export each layer.
A normal map looks red and green instead of blue.
It is BC5, which stores X and Y only. The data is correct; rebuild the Z channel in an editor if a tool needs a three-channel map.