Skip to content

benevolent-games/batch

Repository files navigation

@benev/batch

command-line tool for compressing media files in bulk.

  • batch makes it a pleasure to convert all your media files
  • batch operates on directories (not per-file)
  • batch is great for your build script
  • batch is a one-stop shop for:
    • audio files
    • 3d glb files
    • images

just run npx @benev/batch --help

  • after running the command, you should see this help page.
  • ask for --help about each specific command for more details, eg
    npx @benev/batch images webp --help

example: compress images

take all the image files from src/ directory, and then emit compressed webp files into dist/:

npx @benev/batch images webp --in="src" --out="dist" --quality="80"

of course, this is recursive, the directory structure for each file will be maintained in the output.

read the --help pages for more info.


for automated builds

prelude: context and rationale

  • okay, so you've got a typical build script in your package.json, where you run typescript or whatever
    • you probably have a src directory with your "source code"
    • you probably have a dist directory with your "build artifacts"
  • what you want to do, is a similar thing for your media files
    • just like you have "source code", you want to have "source media", which is the highest quality version of the images/audio/glb files that you have
    • then, you want to include a @benev/batch step in your build process to compress all your media files down to the shippable versions
  • then, you'll have the freedom to change the format or compression settings of all your media files at any time, by tweaking your build step

package.json script

  • install batch locally:
    npm i --save-dev @benev/batch
  • now you can use it in your package.json scripts as just batch:
    "scripts": {
      "build": "batch images webp --in=src --out=dist --quality=80"
    },
  • and now when you npm run build you'll get all these nice webp images under your dist directory
  • that's basically what's up
  • for coordinating multiple build steps, look into npm-run-all, i use it all the time

made with open source love

  • post an issue if you have any questions or comments
  • i've started by adding the formats i need -- please consider creating pull requests to add support for new formats
  • batch's cli is built with @benev/argv
  • 🌠 gimme a star on github if you like this project