npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@three-flatland/image

v0.1.0-alpha.3

Published

WASM image encoder package — PNG/WebP/AVIF/KTX2 with browser+Node+CLI surfaces

Readme

@three-flatland/image

WASM image codec for three-flatland and Three.js. Encode and decode PNG, WebP, AVIF, and KTX2 across the browser, Node, and a flatland-bake CLI subcommand — plus a Ktx2Loader that keeps textures GPU-compressed to cut VRAM pressure.

Alpha Release — this package is in active development. The API will evolve and breaking changes are expected between releases. Pin your version and check the changelog before upgrading.

npm license

Why KTX2

PNG/WebP/AVIF all decode to raw RGBA on the GPU — a 2048×2048 texture costs ~16 MB of VRAM no matter how small the file was on disk. KTX2 (Basis Universal) stays compressed on the GPU, transcoded to the platform's native format (BC7, ASTC, ETC2, …) at load. Reach for it when textures are under GPU-memory pressure; reach for PNG/WebP/AVIF when disk size or fidelity is what matters.

Install

npm install @three-flatland/image

three is a peer dependency.

Encode / decode

encodeImage takes an ImageData ({ width, height, data }) and returns the compressed bytes; decodeImage goes the other way.

import { encodeImage, decodeImage } from '@three-flatland/image'

// ImageData → compressed bytes
const png = await encodeImage(pixels, { format: 'png' })
const avif = await encodeImage(pixels, { format: 'avif', quality: 60 })
const ktx2 = await encodeImage(pixels, {
  format: 'ktx2',
  basis: { mode: 'uastc', mipmaps: true }, // supercompression defaults to zstd
})

// compressed bytes → ImageData
const decoded = await decodeImage(bytes, 'png')

estimateGpuMemory reports the VRAM a source will cost per candidate format, so you can decide when KTX2 is worth it before committing a texture.

In Node, the /node subpath adds file and batch helpers:

import { encodeImageFile, encodeImageBatch } from '@three-flatland/image/node'

KTX2 loader

Ktx2Loader extends three.Loader. Detect the renderer's supported transcode targets once (synchronous, chainable), then load — the texture stays GPU-compressed.

import { Ktx2Loader } from '@three-flatland/image/loaders/ktx2'

const texture = await new Ktx2Loader()
  .detectSupport(renderer) // required before load(); picks BC7/ASTC/ETC2/…
  .loadAsync('/sprite.ktx2')

CLI

The package contributes an encode subcommand to the flatland-bake CLI:

flatland-bake encode ./sprite.png sprite.ktx2

Documentation

Full docs and guides at tjw.dev/three-flatland.

License

MIT