Skip to content

nightgolfer/squiish

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,513 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Squiish! v.0.1.7

Squiish logo

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.

Features

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.

Notes

  • 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.

To-do / ideas

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)

Privacy

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.

Use online

Running locally (serve)

  1. Clone the repository.
  2. To install node packages, from the install root dir run:
    npm install
  3. Then build the app by running:
    npm run build
  4. After building, start the app by running:
    npx serve -s build -l 3060
  5. (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.

Running locally (Electron app, macOS only)

  1. Clone the repository.
  2. To install node packages, from the install root dir run:
    npm install
  3. Then build the app by running:
    npm run build
  4. 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.

Packaging Electron (standalone app, macOS only)

To package a standalone Electron app (macOS by default):

  1. Install dependencies:
    npm install
  2. Build the app:
    npm run build
  3. Create a distributable:
    npm run electron:dist
    To output just the app bundle (no DMG/ZIP), run:
    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.

Developing (unaltered from original README.md; YMMV!)

To develop for Squoosh:

  1. Clone the repository
  2. To install node packages, run:
    npm install
  3. Then build the app by running:
    npm run build
  4. After building, start the development server by running:
    npm run dev

Contributing to (original) Squoosh

Squoosh is an open-source project that appreciates all community involvement. To contribute to the project, follow the contribute guide.

Links

Packages

 
 
 

Contributors

Languages

  • TypeScript 64.2%
  • JavaScript 10.1%
  • C++ 8.8%
  • CSS 8.5%
  • Makefile 3.6%
  • Rust 3.0%
  • Other 1.8%