**
⚠ 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
sharp API in format [...["action", [...args]]]
pipeline - commands to process the images with, seeaction would be the name of the sharp operation e.g.
sharp().resize(300)
can be described withpipeline='[["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