@343dev/optimizt
Version:
CLI image optimization tool
143 lines (94 loc) • 4.43 kB
Markdown
# @343dev/optimizt
<img align="right" width="192" height="192"
alt="Optimizt logo: OK hand sign with Mona Lisa image between the fingers"
src="./docs/logo.png">
[](https://www.npmjs.com/package/@343dev/optimizt)
**Optimizt** is a command-line tool that helps prepare images for the web.
It can compress PNG, JPEG, GIF, and SVG lossy or lossless, and create AVIF and WebP versions for raster images.
## Rationale
As frontend developers, we have to care about pictures: compress PNG and JPEG, remove useless parts of SVG, create AVIF and WebP for modern browsers, and so on. One day, we got tired of using a bunch of apps for that, and created one tool that does everything we want.
## Usage
Install:
```sh
npm install -g @343dev/optimizt
```
Optimize!
```sh
optimizt path/to/picture.jpg
```
## Command Line Flags
- `--avif` — create AVIF versions of images.
- `--webp` — create WebP versions of images.
- `-f, --force` — recreate AVIF and WebP versions even if they already exist.
- `-l, --lossless` — optimize losslessly instead of lossily.
- `-v, --verbose` — show detailed output (e.g. skipped files).
- `-c, --config` — use a custom configuration file instead of the default.
- `-o, --output` — write results to the specified directory.
- `-V, --version` — display the tool version.
- `-h, --help` — show help message.
## Usage Examples
```bash
# optimize a single image
optimizt path/to/picture.jpg
# optimize multiple images losslessly
optimizt --lossless path/to/picture.jpg path/to/another/picture.png
# recursively create AVIF and WebP versions for all images in a directory
optimizt --avif --webp path/to/directory
# recursively optimize JPEG files in the current directory
find . -iname \*.jpg -exec optimizt {} +
```
## Differences Between Lossy and Lossless
### Lossy (Default)
Provides the best balance between file size reduction and minimal visual quality loss.
### Lossless (`--lossless` flag)
- **AVIF/WebP**: Uses lossless compression.
- **PNG/JPEG/GIF**: Maximizes image quality at the expense of larger file sizes.
- **SVG**: Settings are identical in both modes.
## Configuration
Image processing leverages:
- [sharp](https://github.com/lovell/sharp) for [JPEG](https://sharp.pixelplumbing.com/api-output#jpeg), [PNG](https://sharp.pixelplumbing.com/api-output#png), [WebP](https://sharp.pixelplumbing.com/api-output#webp), and [AVIF](https://sharp.pixelplumbing.com/api-output#avif).
- [svgo](https://github.com/svg/svgo) for SVG.
- [gifsicle](https://github.com/kohler/gifsicle) for GIF.
> [!NOTE]
> In Lossless mode for JPEG, [Guetzli](https://github.com/google/guetzli) is used. Repeated optimization may degrade visual quality.
Default settings are defined in [.optimiztrc.cjs](./.optimiztrc.cjs), which includes all supported parameters. Disable any parameter by setting it to `false`.
When using `--config path/to/.optimiztrc.cjs`, the specified configuration file will be used. If no `--config` is provided, Optimizt searches recursively from the current directory upward for `.optimiztrc.cjs`. If none is found, defaults are applied.
## Troubleshooting
### Errors like “spawn guetzli ENOENT”.
Ensure the [ignore-scripts](https://docs.npmjs.com/cli/v6/using-npm/config#ignore-scripts) npm option is disabled.
Details: [funbox/optimizt/issues/9](https://github.com/funbox/optimizt/issues/9).
## Docker
### Pre-Built Image
```bash
# pull latest
docker pull 343dev/optimizt
# pull specific version
docker pull 343dev/optimizt:9.0.2
```
### Manual Build
```bash
# clone repository
git clone https://github.com/343dev/optimizt.git
cd optimizt
# build image
docker build --tag 343dev/optimizt .
```
Alternatively:
```bash
# build directly from GitHub
# ignores .dockerignore (see: https://github.com/docker/cli/issues/2827)
docker build --tag 343dev/optimizt https://github.com/343dev/optimizt.git
```
### Run Container
```bash
# mount current directory to /src in the container
docker run --rm --volume $(pwd):/src 343dev/optimizt --webp ./image.png
```
## Integrations
Optimizt works seamlessly with:
- [JetBrains IDEs](./docs/jetbrains.md)
- [Visual Studio Code](./docs/vscode.md)
- [Sublime Text 3](./docs/sublime-text.md)
- [GitHub Actions Workflow](./docs/github.md)
## Credits
Cute picture for the project was made by [Igor Garybaldi](http://pandabanda.com/).