Skip to content

KTX2 Texture Compressor

Convert a PNG, JPG, or WebP texture to KTX2 (powered by Basis Universal) right in your browser. KTX2 textures stay GPU-compressed in video memory, so they cut both VRAM use and load time for web games far more than ordinary image formats. Nothing is uploaded, the encoding runs locally.

Why KTX2 for Web Games

A PNG or JPG has to be fully decoded to raw pixels and uploaded to the GPU, where it sits uncompressed in VRAM. A 2048×2048 RGBA texture is 16 MB in memory no matter how small the PNG was. KTX2 with Basis Universal supercompression stays compressed all the way into VRAM by transcoding to a GPU-native format (BC on desktop, ASTC or ETC2 on mobile), which typically cuts texture memory 4× to 8×. For a browser game where every megabyte and every millisecond of load matters, that's a big win.

KTX2 is the container format standardized by Khronos, and it's supported by the major web engines: Three.js, Babylon.js, and PlayCanvas all ship KTX2 loaders.

UASTC vs ETC1S: Which to Pick

Basis Universal offers two compression modes, and this tool supports both:

UASTC is the high-quality mode. It preserves detail well, which makes it the right choice for hero assets, normal maps, and anything where artifacts would show. Files are larger, but you can add Zstandard supercompression to shrink the download (it decompresses back to the GPU format at load).

ETC1S is the small-file mode. It compresses much harder with a quality slider, so it's ideal for the bulk of your textures where tiny size matters more than perfect fidelity, like UI, props, and background detail.

A common approach is ETC1S for most textures and UASTC for the few that need it.

How to Use It

  1. Drop a PNG, JPG, or WebP onto the box above (or click to choose). It never leaves your browser.
  2. Pick UASTC for quality or ETC1S for size, and set the quality.
  3. Turn on mipmaps for textures viewed at varying distances, and leave sRGB on for color textures (turn it off for normal and data maps).
  4. Click Encode to KTX2, check the size saving, and download the .ktx2 file.

Need to convert a whole folder of textures? The Batch tab converts up to 10 images at once. It's free, you just sign in to unlock it, and your images still never leave your browser.

Common Questions

What is a KTX2 file?

KTX2 is a Khronos container format for GPU textures. Paired with Basis Universal supercompression, a KTX2 file stays compressed in video memory by transcoding at load time to whatever GPU format the device supports (BC, ASTC, or ETC2). That's why it saves far more memory than a PNG or JPG, which end up uncompressed in VRAM.

How do I convert a PNG to KTX2?

Drop the PNG into the tool above, choose UASTC (quality) or ETC1S (smaller), and click Encode to KTX2, then download the file. It runs entirely in your browser using Basis Universal compiled to WebAssembly, so the image is never uploaded.

Should I use UASTC or ETC1S?

Use UASTC for textures where quality matters most, like hero art and normal maps, and add Zstandard supercompression to shrink the download. Use ETC1S for the bulk of your textures where small size matters more than perfect detail. Many games mix both.

Does KTX2 work in Three.js, Babylon.js, and PlayCanvas?

Yes. All three major web engines ship a KTX2 loader that transcodes the texture to a GPU-native format at load time. Check our WebGL & WebGPU Checker to see which compressed-texture formats (BC, ASTC, ETC2) the current device supports.

Can I convert multiple textures at once?

Yes. Switch to the Batch tab to convert up to 10 images in one go. Batch mode is free, you just sign in to unlock it, and like single mode it runs entirely in your browser, so nothing is uploaded.

Is this KTX2 converter free and private?

Yes. It's free and runs entirely in your browser. The image is encoded locally with WebAssembly and never uploaded to any server.