1.0.0 • Published 10 months ago
packavif v1.0.0
Pack AVIF
Convert images to AVIF format with optimized compression while maintaining high quality. This package provides an easy-to-use interface for converting both single images and entire directories of images to the AVIF format.
Features
- High-quality AVIF conversion using Sharp
- Configurable quality and compression settings
- Batch processing for directories
- Detailed conversion statistics
- Support for JPG, JPEG, and PNG input formats
- Promise-based async/await API
- Recursive directory processing
- Progress tracking for batch operations
Installation
npm install packavifUsage
Converting a Single Image
import { AvifConverter } from 'packavif';
// Initialize with default options
const converter = new AvifConverter();
// Convert a single image
try {
const result = await converter.convertImage('input.jpg', 'output.avif');
console.log('Conversion successful:', result);
console.log(`Compression ratio: ${result.compressionRatio.toFixed(2)}%`);
} catch (error) {
console.error('Conversion failed:', error);
}Converting a Directory of Images
// Convert all images in a directory
const results = await converter.convertDirectory(
'input-directory',
'output-directory',
'**/*.{jpg,jpeg,png}' // Optional glob pattern
);
// Print summary
const totalSaved = results.reduce((acc, r) => acc + (r.inputSize - r.outputSize), 0);
console.log(`Total space saved: ${(totalSaved / 1024 / 1024).toFixed(2)} MB`);Custom Configuration
const converter = new AvifConverter({
quality: 80, // 1-100 (default: 80)
speed: 5, // 0-8, lower is slower but better quality (default: 5)
chromaSubsampling: '4:4:4' // '4:4:4' or '4:2:0' (default: '4:4:4')
});API Reference
Class: AvifConverter
Constructor Options
| Option | Type | Default | Description |
|---|---|---|---|
| quality | number | 80 | AVIF quality (1-100) |
| speed | number | 5 | Encoding speed (0-8) |
| chromaSubsampling | string | '4:4:4' | Chroma subsampling ratio |
Methods
convertImage(inputPath: string, outputPath: string): Promise<ConversionResult>
Converts a single image to AVIF format.
Returns an object with:
inputPath: Original image pathoutputPath: Converted image pathinputSize: Original file size in bytesoutputSize: Converted file size in bytescompressionRatio: Percentage of size reductionduration: Processing time in seconds
convertDirectory(inputDir: string, outputDir: string, pattern?: string): Promise<ConversionResult[]>
Converts all matching images in a directory to AVIF format.
Parameters:
inputDir: Source directory pathoutputDir: Destination directory pathpattern: Optional glob pattern (default:**/*.{jpg,jpeg,png})
Returns an array of ConversionResult objects.
Performance Tips
Quality Settings:
- Use quality 80-90 for high-quality images
- Use quality 60-75 for web optimization
- Use quality 40-60 for thumbnail generation
Speed Settings:
- Use speed 0-3 for maximum quality
- Use speed 4-6 for balanced results
- Use speed 7-8 for fastest conversion
Memory Usage:
- Process large batches in smaller chunks
- Monitor memory usage when processing many files
Requirements
- Node.js 14.x or higher
- Sharp dependencies (automatically installed)
Common Issues
Installation Fails:
# If Sharp installation fails, try: npm install --platform=linux --arch=x64 sharpMemory Issues:
// Limit concurrent processing: const converter = new AvifConverter({ maxConcurrency: 4 // Process 4 files at a time });
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
1.0.0
10 months ago