1.0.0 • Published 6 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 packavif
Usage
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 sharp
Memory 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
6 months ago