@georgedrpg/bulk-process-images

1.3.3 • Public • Published

** WARNING: this script writes files on your hard drive, make sure it won't overwrite important files. Make sure outputPath is different to inputPath.

Bulk process images

There are 2 options, install as npm module, and use as a CLI program.

Install as npm module

npm i @georgedrpg/bulk-process-images

Import into your project

import processImages from '@georgedrpg/bulk-process-images'

Or if no ESM support use:

const processImages = require('@georgedrpg/bulk-process-images').default

Call with these arguments (or use defaults)

inputPath (default: 'inputs')
outputPath (default: 'outputs')
allowedExts: [".png"]
pipeline:

[
  {
    action: 'flip'
  },
  {
    action: 'blur',
    args: [
      10
    ]
  },
]

suffix: (default: '-processed') newExtension: (default: undefined) // override original extension with new extension, for example if changing a file's format transformFilenameFn (default: (fileName, suffix, ext) => filename+suffix+'.'+ext)
logLevel (default: 'verbose') // 'verbose' or 'none' - console log level dryRun (default: false) // doesn't process images, useful for confirming arguments are correct with 'verbose' logLevel.

For pipeline options see sharp API. Use format: { action: string, args: any[] }

For example:

const width = 64;
processImages({
  inputPath: 'large_images',
  outputPath: 'build/images',
  allowedExts: ['.png', '.jpeg', '.jpg'],
  pipeline: [{action:'resize', args:[width]}]
  suffix: '_'+width+'w' })
processImages({
  inputPath: 'png_images',
  outputPath: 'build/images',
  allowedExts: ['.png'],
  pipeline: [{action:'toFormat', args:['jpg']}],
  suffix: '',
  newExtension: 'jpg'
})

Use as a CLI program

npm i @georgedrpg/bulk-process-images -g

bulk-process-images <option>=<value>

Options:

i - input folder

o - output folder

pipeline - commands to process the images with, see sharp API in format [...["action", [...args]]]

action would be the name of the sharp operation e.g. sharp().resize(300) can be described with pipeline='[["resize", [300]]]'

exts - Allowed extensions e.g. [".png", ".jpg", ".jpeg"]

suffix - string added to end of output filenames (before the extension)

newExtension - if specified, filename extension will be set to this (doesn't alter image format, use in combination with pipeline 'toFormat' action instead.)

dry - dry run, don't actually process the images

logLevel - "verbose" | "none" (default: "verbose") - console log level

For example:

bulk-process-images i=./inputs o=./outputs pipeline='[["resize", [32]],["blur", [1]]]' exts='[".png"]'

The pipeline and exts arguments take stringified JSON as input, so you might want to run JSON.stringify(value) on your value first. If adding it to an npm package.json script, you will need to ensure inner double quotes are escaped with backslash ''.

Notes

This program is not designed to handle overwriting images, and can end up corrupting images without outputting anything useful if the output folder+filename is the same as the input folder+filename. Make sure to use a different output and input folder, and handle overwriting your input folder yourself if needed.

TODO:

  • Needs automated tests

  • Need to make sure paths resolve correctly and odd input/output paths don't break

  • Separate CLI and importable NPM module into separate modules

Package Sidebar

Install

npm i @georgedrpg/bulk-process-images

Weekly Downloads

1

Version

1.3.3

License

MIT

Unpacked Size

11 kB

Total Files

7

Last publish

Collaborators

  • georgedrpg