Image optimization for Flask. Reduces 5MB uploads to ~200KB.
- Creates 6 optimized variants per upload (JPEG + WebP for 3 sizes)
- EXIF auto-orientation
- Progressive JPEG encoding
- Aggressive compression without visible quality loss
Built while working on wallmarkets.
pip install flask-imagekitfrom flask import Flask, request
from flask_imagekit import ImageOptimizer
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static/uploads'
optimizer = ImageOptimizer(app)
@app.route('/upload', methods=['POST'])
def upload():
result = optimizer.save_product_image(request.files['image'])
if result.get('success'):
return {'url': result['image_path']}
return {'error': result.get('error')}, 400For each image, you get 6 variants:
thumbnail(150x150): ~5-10KB JPEGthumbnail_webp: ~3-7KB WebPsmall(400x400): ~20-40KB JPEGsmall_webp: ~15-30KB WebPmedium(800x800): ~80-150KB JPEGmedium_webp: ~50-100KB WebP
Total: ~200KB vs original 5MB
app.config['UPLOAD_FOLDER'] = 'static/uploads'
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024 # 5MB
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif', 'webp'}<picture>
<source srcset="{{ product.image_webp }}" type="image/webp">
<img src="{{ product.image }}" alt="{{ product.name }}" loading="lazy">
</picture>MIT
Pull requests welcome. Please add tests.