texturepackerify
v1.4.1
Published
Tool to pack textures into atlases
Maintainers
Readme
TexturePackerify
TexturePackerify is a free, lightweight alternative to TexturePacker, built for seamless integration into your game asset build pipeline.
Setup
Install the package:
$ npm install texturepackerifyBuild Atlases
Step 1: Organize Images
Place your images into folders. Each folder will be packed into its own atlas. For example:
atlases/
├── atlas1/
│ ├── img0.png
│ ├── img1.png
│ ├── img2.png
├── atlas2/
│ ├── img12.png
│ ├── img13.png
│ ├── img14.pngStep 2: Pack Atlases
Using the CLI:
Create a .texturepackerify.js file:
module.exports = {
inputDir: "./atlases",
outputDir: "./output",
};Add to package.json:
"scripts": {
"pack": "texturepackerify"
}Run:
npm run packUsing a Custom Script:
Create pack.js:
const texturepackerify = require("texturepackerify");
const packAtlases = async () => {
await texturepackerify.pack({
inputDir: "./atlases",
outputDir: "./output",
});
};
packAtlases();Run:
node pack.jsPack Config
The pack function accepts a config object with the following parameters:
Pack Configuration Parameters
inputDir:string. The directory containing input atlas folders. Default:"./".outputDir:string. The directory for the generated output. Default: Same asinputDir.hashPath:string. The path to the hash file for caching. Default:"./.texturepackerify/hash.json".force:boolean. Determines whether to force a rebuild of the atlases. Default:false.scales:number[]. An array of scale factors for generating mipmaps. Default:[1].appendFileHash:boolean. Adds a file hash to output file names. Default:false.appendTextureFormat:boolean. Adds a texture format to output atlas names. Default:false.textureFormat:"png" | "jpeg" | "webp" | "avif". Specifies the texture output format. Default:"png".enableLogs:boolean. Enables or disables console logs. Default:true.onProgress:Function. Callback function for tracking progress. Default: (none).defaultAtlasConfig:Object. Customizes default atlas settings. Default:{}.formatConfig:Object. Allows customization of texture format-specific settings. Default:{}.
defaultAtlasConfig Parameters
extraSpace:number. Space (in pixels) between texture frames. Default:2.border:number. Border (in pixels) around the atlas texture. Default:0.jpeg:boolean. Force to usejpeginstead ofpngfor texture format. Default:false.removeAlpha:boolean. Remove alpha channel. Default:false.extrude:booleanorarray. Expand image borders by one pixel in all directions. Default:false.pot:boolean. Force atlas size to be a power of two (e.g., 256x256). Default:true.square:boolean. Force atlas size to be square. Default:false.animations:boolean. Enable animation parsing. Default:false.alphaThreshold:number. Alpha threshold for trimming transparent areas. Default:1.spriteExtensions:boolean. Append extensions (e.g.,.png) to sprite frame names. Default:true.allowRotation:boolean. Allows sprite frame rotation. Default:true.allowTrim:boolean. Enables the trimming of transparent pixels. Default:true.maxWidth:number. Maximum texture width (in pixels). Default:4096.maxHeight:number. Maximum texture height (in pixels). Default:4096.
formatConfig Parameters
jpeg:quality:number. Specifies compression quality (1-100). Default:80.
webp:quality:number. Specifies compression quality (1-100). Default:80.alphaQuality:number. Specifies compression quality for alpha channel (0-100). Default:80.
avif:quality:number. Specifies compression quality (1-100). Default:50.
Quick Tips
The
hash.jsonfile can be used to generate versioned atlases. Simply create a hash of this file and append it to the asset URL to prevent browser caching. Example URL:my_atlas.png?v=kg5n2v3k8l. Alternatively, you can setappendFileHash : trueand get files names with hash, such as:my_atlas-1vIVHTXW75Ce7I8x322Ofw.png.To customize individual atlases, place a
config.jsonfile in the specific atlas folder. This configuration file will override thedefaultAtlasConfig. This is useful for tasks like packing only certain atlases asjpegfiles or adding aborderto prevent texture glitches.To disable console logs, set
enableLogs: false. You can also use theonProgresscallback to customize your progress logs.
Advanced Config Example
module.exports = {
inputDir: "./atlases",
outputDir: "./public/assets",
textureFormat: "webp",
scales: [1, 0.5],
defaultAtlasConfig: {
pot: false,
animations: true,
border: 2,
},
formatConfig: {
webp: { quality: 60 },
},
};