Open now
Browser image viewer + converter
Open an image. Choose what to do.
View any supported image with pan and zoom, or switch to Convert and create JPEG, PNG, WebP, BMP, or TIFF output. The selected mode never changes when you choose a file.
No server uploadYour files stay in this tab. Public samples load from their named source only when you click Open here.
Drop a file or open an example
The viewer decodes the visible region locally for any supported image. Drag to pan, scroll to zoom, or choose a TIFF page or pyramid level.
Complete pipeline
Decode, transform, encode, validate.
The converter reopens its own output and verifies its dimensions before offering the download. Whole-slide inputs should use a visible clip rather than converting the complete base level.
- Conversion time
- — Decode, transform, and encode
- Decode mode
- — Enabled mode; selectors may fall back
- WASM vs TypeScript
- — Same file and settings in this tab
- Max observed JS heap
- — Browser estimate at checkpoints
- Known file bytes
- — Input + output, not scratch memory
- Output size
- — Validated encoded Blob
Operation log
Detection, directory selection, viewport reads, exports, validation, errors, timings, and available memory observations appear here.
Use it in a site
How this demo loads PureJsImage
This page serves a deterministic ESM bundle generated from src/browser.ts, the explicit all-codec entry, and the optional JPEG WASM entry on the same repository commit. The TypeScript path remains the default; the WASM module is fetched from this site only after you enable it and submit eligible work.
For an application, install from npm and let your bundler resolve the browser export. For a quick no-build experiment, the pinned npm package is also available from jsDelivr. Raw GitHub file URLs are not used because they are not a dependable JavaScript package CDN.
import { createImageLibrary } from
'https://cdn.jsdelivr.net/npm/purejsimage@0.9.0/dist/browser.js'
import { allCodecs } from
'https://cdn.jsdelivr.net/npm/purejsimage@0.9.0/dist/codec-entries/all.js'
const images = createImageLibrary(allCodecs)
const image = await images.open(file)
const output = await image.webp({ quality: 82 }).toBlob()