Squiish is an image compression web app that reduces image sizes through numerous formats in bulk, and with a few extra features added.
It is based on squoosh-multiple-export by Khongchai, which is forked from Squoosh by Google Chrome Labs.
In addition to the original Squoosh features, Squiish has been modified with the following functionality:
- Bulk processing from squoosh-multiple-export, but added graceful fallback for situations where files would fail to download because the app ran out of memory.
- Added the ability to set the bulk batch size to mitigate errors caused by app running out of memory (Edit > Bulk processing > Batch size). Default is 3 (app will process and download 3 images at a time, before starting on the next batch of 3).
- Added the ability to proportionally resize all uploaded images based on their longest edge (Edit > Resize > Resize to > Long edge); change the 'Long edge:' value to whatever length in pixels you want each image's longest edge to have (short edge will be scaled to match). 'Long edge' is the default 'Resize to' method.
- Added the ability to rename all downloaded files (Edit > Filename > Rename). Files will have sequential numbering appended, with leading underscore and zeroes (where relevant), e.g.: new-filename_1.jpg for batches ≤ 9, new-filename_01.jpg for batches ≤ 99, etc. Default value is blank (no renaming).
- Added the ability to append text to the filename (Edit > Filename > Append), to make processed files easily identifiable. Default value is '_sqsh', e.g.: new-filename_01_sqsh.jpg. Edit > Filename is toggled on by default.
- I'm only running Squiish locally, for personal use. I have no idea how it will fare in an online environment; YMMV + use at own peril!
- Completely vibe-coded with help from Codex/ChatGPT 5.2; less than ideal code is to be expected.
Some thoughts on future modifications, but do keep in mind that this project is being 'developed' in DHYB-mode, so they may never happen ...
- Add 'Resize to: Short edge' option in Edit > Resize > Resize to.
- Add 'Resize to: Height' and 'Resize to: Width' (scale all files proportionally to same height or width).
- Add option to also generate thumbnails (let user set long edge/short edge/width/height for thumbs). Probably a good idea to add ZIP option at the same time ...
- ZIP download option?
- add CHANGELOG.md
- Dark mode?
Make README.md version number match current version from package.json on commit.(added in v.0.1.7)Swap 'Download all X files' button and regular download button functionality (change the former to 'Download current file' and add more arrows to the latter).(swapped buttons in v.0.1.5)Add better progress indicators ('Processing X', check off processed files on a list, spinning wheel, make interface inactive, percentage done indicator, etc.).(added spinners and disabling buttons while downloading in v.0.1.5)Launch on Vercel(Squiish v.0.1.3 is now live on Vercel: https://squiish.vercel.app)Make standalone app version(completed in v.0.1.3, wrapped with Electron for macOS; see 'Packaging Electron' below)
Squiish does not send your image to a server. All image compression processes locally.
The original version had Google telemetry included; this has been stripped out of Squiish.
- You can use Squiish online here: https://squiish.vercel.app
- (optional) Install the PWA from https://squiish.vercel.app by clicking on the 'Install' button in the top right corner (works in Chrome, untested in other browsers) to run it as a local app.
- Clone the repository.
- To install node packages, from the install root dir run:
npm install
- Then build the app by running:
npm run build
- After building, start the app by running:
npx serve -s build -l 3060
- (optional) To install as a PWA app, open app in chrome (default http://localhost/3060); there should be a buttom in the top right corner that says 'Install'. Keep in mind that the app still needs to be running for the PWA app to work.
- Clone the repository.
- To install node packages, from the install root dir run:
npm install
- Then build the app by running:
npm run build
- Launch the Electron wrapper:
npm run electron
Downloads are saved to your system Downloads folder, and drag/drop from Finder is supported by the browser-based file drop UI.
To package a standalone Electron app (macOS by default):
- Install dependencies:
npm install
- Build the app:
npm run build
- Create a distributable:
To output just the app bundle (no DMG/ZIP), run:
npm run electron:dist
npm run electron:dist:app
Artifacts are written to dist/. These instructions assume macOS; for
Windows/Linux you generally need to build on the target OS. Packaged builds
target macOS 12+ (Electron 28). On macOS, signing/notarization is optional for
local use but required for clean distribution.
To develop for Squoosh:
- Clone the repository
- To install node packages, run:
npm install
- Then build the app by running:
npm run build
- After building, start the development server by running:
npm run dev
Squoosh is an open-source project that appreciates all community involvement. To contribute to the project, follow the contribute guide.
- original Squoosh app: https://squoosh.app
- original Squoosh code: https://github.com/GoogleChromeLabs/squoosh
- squoosh-multiple-export code: https://github.com/Khongchai/squoosh-multiple-export
- squiish code: https://github.com/nightgolfer/squiish