Tommy: web assets optimverter Tommy will process, optimize and convert all your static assets ready to use for the web.
--src
specify the source directory (where your assets are located)--dst
specify the destination directory (where your assets will be generated)--force
regenerate all assets ignoring cache--config
specify a JSON file containing an extension to the configuration--webserver
will spawn an HTTP webserver that access viaPOST /
a request to run--port
is the webserver port (default: 80)--watch
will enable a persistent watch over the src directory to detect instant file changes⚡️️️ Always set--dst
option to an empty directory: this directory should only be used by Tommy because files in could be potentially deleted if Tommy is started with a weird configuration or a corrupted database ⚡️
The main advantage of using Tommy is that all dependencies used to process/convert entities are encapsulated into a docker image.
For this reason, you should use thedocker run
command to use Tommy in the original way it was created.
docker run \-v" $( pwd) /test/src" :/src \-v" $( pwd) /test/dst" :/dst \-v" $( pwd) /config.json:/root/config.json" \kopiro/tommy:latest \--src /src \--dst /dst \--config /root/config.json Explanation of mounts:
-v "$(pwd)/test/src":/src
mount the source directory (where your assets are located) into container/src
-v "$(pwd)/test/dst":/dst
mount the destination directory (where your assets will be generated) into container/dst
-v "$(pwd)/config.json:/root/config.json"
mount your (optional) configuration JSON file into container/root/config.json
You can also use the native NPM package on OSX.
tommy --src ./test/src --dst ./test/dst By providing a JSON file to--config
, you configuration will be extended with the default one.
tommy --config config.json Example:
{"processor.resize" : {"enabled" :false },"processor.resize" : {"enabled" :true ,"suffix" :" -resized-${i}.${ext}" ,"dimensions" : [100 ,300 ],"quality" :60 },"ignore" : [" .dockerignore" ]} Key Type Description Default ignore string[] Pattern to ignore see config.json
Key Applies to Description processor.resize * resize the image in differents formats processor.image * optimize the image processor.lazyLoadBlurried * generates a very small blurried image that can be used before loading final image in lazy load converter.webp * converts to WEBP format tester.image * generates a sample HTML page to test all differents formats processor.jpg *.jpg optimizes the JPG usingjpegoptim
processor.png *.png optimizes the PNG usingpngquant
processor.gif *.gif optimizes the GIF usinggifsicle
processor.svg *.svg optimizes the SVG usingsvgo
processor.favicon /favicon.png generates all images/icons needed in various browsers for the favicon
Key Applies to Description processor.poster * generates a representative poster image from the video to use as picture before loading the video. processor.videoThumbs * generates N different thumbs from the video converter.webm * converts to WEBM format converter.h264_mp4 * converts to H264 using MP4 container converter.av1_mp4 * converts to AV1 using MP4 container.currently disabled by default because it's very very slow converter.hevc_mp4 * converts to HEVC using MP4 container tester.video * generates a sample HTML page to test all differents formats
Key Applies to Description converter.ttf * converts to TTF format converter.otf * converts to OTF format converter.eot * converts to EOT format converter.svg * converts to SVG format converter.woff * converts to WOFF format converter.woff2 * converts to WOFF2 format tester.font * generates a sample HTML page to test all differents formats
Key Applies to Description converter.mp3 * converts to MP3 format
By settingsenabled: false
in a key, you'll disable that service.
... "processor.resize" : {"enabled" :false }... Specific configurations for services Key Type Description Default dimensions number[] Dimensions of resized images in PX (longest side) [200,400,800,1200]
quality number Quality of images 80
suffix string Suffix to Applies to new files "-resized-${i}.${ext}"
Key Type Description Default quality number Quality of image 80
Key Type Description Default count number How many thumbnails extract 5
size number Length of longest side 400
quality number Quality of image 80
suffix string Suffix to Applies to new files "-thumb-\${i}.jpg"
processor.lazyLoadBlurried Key Type Description Default size number Length of longest side 10
suffix string Suffix to Applies to new files "-blurried.jpg"
Key Type Description Default suffix string Suffix to Applies to new files "-poster.jpg"
Key Type Description Default webmanifest object JSON object to extend for thesite.webmanifest
. Set tofalse
to disable generation. see config.json browserconfig bool Set tofalse
to disable generation ofbrowserconfig.xml
true
test bool Set tofalse
to disable HTML test page (favicon.html
) true
tileColor string Color of the tile for Windows "#336699"
themeColor string Color of the theme for Chrome Mobile "#336699"
These are the general settings used for video. You can override manually in every section
Key Type Description Default audioCodec string The coded to use for audio null
crf number The range of the CRF scale is 0–51, where 0 is lossless, 23 is the default, and 51 is worst quality possible. 23
pixelFormat string It uses full resolution for brightness and a smaller resolution for color. "yuv420p"
mapMetadata string Choose to keep/remove metadata "-1"
movFlags string Movie flags to pass to ffmpeg "+faststart"
preset string Will provide a certain encoding speed to compression ratio. "medium"
Key Type Description Default videoCodec string see general section "libvpx-vp9"
Key Type Description Default videoCodec string see general section "libx264"
Key Type Description Default videoCodec string see general section "libaom-av1"
audioCoded string see general section "libopus"
crf number see general section (note: this value is higher due te different scale of this algorithm)50
Key Type Description Default videoCodec string The coded to use for video "libx265"
You can use the commandnpm run test-docker
to build the image and test against a test directory.
If you need samples, runnpm run download-samples
MIT