Live site after deployment: https://moconvert.vercel.app (only if the name is still available and the site has been deployed).
MoConvert is a privacy-focused batch image converter. Processing runs in the browser; files are not uploaded to MoConvert or Vercel. The application is written in plain HTML, CSS, and JavaScript and includes its own dependency-free ZIP writer, BMP writer, and single-resolution ICO writer.
- Batch drag-and-drop and multiple-file selection, previews and per-file results.
- Export: PNG, JPEG/JPG, WebP, BMP (24-bit), ICO (one resolution with PNG data), and AVIF only when the current browser can encode it. Unsupported AVIF export is disabled.
- Inputs: PNG, JPEG, WebP, SVG, GIF, BMP, ICO, and AVIF when the browser decodes them. HEIC, HEIF, TIFF, JXL, and other formats depend on built-in browser decoding; there are no bundled HEIC/TIFF decoders. Do not assume that all extensions work.
- Quality for lossy outputs; 100/75/50/25% resolution; configurable background color for formats without transparency; 32/64/128/256px icon export.
- Animated GIFs require consent to use their first frame. Animated WebP and APNG are detected when possible and also require consent. Animation is never preserved.
- EN (default)/ID translations and Light (default)/Dark themes, choices saved locally.
- ZIP download is STORE (valid ZIP container, no second compression pass).
- No API keys, account, database, upload endpoint, subscription, external libraries, or third-party fonts.
- Converting can change pixels, compress lossy, flatten transparent backgrounds, rasterize SVG, lose animation, and/or discard EXIF/GPS metadata, color profiles, and other metadata. This is a converter, not a lossless optimizer.
- Canvas codecs are browser-defined. Encoded quality/size is not guaranteed across browsers. Native AVIF export is optional; browsers that cannot encode it fall back to other user-selectable formats without falsely renaming PNG as AVIF.
- Converting SVG to raster requires readable SVG; malformed SVG or SVG requiring unsupported external resources may fail.
- Max batch 60 files, 75 MB each; images over 45 MP or sides above 16384 px are rejected for memory safety. Mobile browser memory may impose lower practical limits.
- ZIP writer limits 4 GB, most browsers may run out of memory much earlier.
Open index.html with a local HTTP server (e.g. python -m http.server 8080), or run:
npm run check
npm run buildnpm run build copies the source into dist/. No npm install is necessary. Browser ES modules need HTTP or HTTPS: opening index.html directly as file:// may not work.
- Extract the ZIP.
- On GitHub, create a public empty repository named
moconvert(turn off autogenerated README/license). - Click
uploading an existing file, drag the contents of the extracted folder (not the enclosing folder or ZIP) into GitHub. Includeindex.html,src,public,scripts,package.json,vercel.json; the hidden.githubfolder is optional. - Commit with message
Initial release MoConvert. - Open vercel.com/new, select GitHub, and import
dimasmong/moconvert. - Use Framework Preset: Other, Root Directory:
./, Build Command:npm run build, Output Directory:dist, no environment variables.vercel.jsonalready specifies build and output. - Deploy and check the
Readystatus. Open the website and test JPEG to WebP, PNG to JPG, and download ZIP. - Future commits on
mainautomatically trigger a new production deployment.
GitHub button: points to https://github.com/dimasmong/moconvert. If you choose a different repository URL, update the href in index.html.
index.html: page structuresrc/style.css: responsive themes and stylessrc/app.js: interactions, local preferences, queue, ZIP/downloadsrc/i18n.js: complete EN/ID translationssrc/converter.js: browser-API conversion plus BMP/ICO writerssrc/zip.js: standards-compliant ZIP writerscripts/build.mjs: deterministic buildpublic/favicon.svg: MoConvert icon
MIT License. The site is not affiliated with Vercel or GitHub.