diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c0dcf8..6168f16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Automatic HEIC/MPO to JPEG conversion (browsers cannot display these formats) - Graceful error handling if pillow-heif library not installed +### Changed + +- Increased maximum input image dimensions from 4096x4096 to 12000x12000 to support modern phone cameras (48MP+); images are still optimized to smaller sizes for web delivery + ### Dependencies - Added `pillow-heif` for HEIC image processing diff --git a/starpunk/media.py b/starpunk/media.py index af981b6..dd5db7b 100644 --- a/starpunk/media.py +++ b/starpunk/media.py @@ -38,7 +38,7 @@ ALLOWED_MIME_TYPES = { # Limits per Q&A and ADR-058 (updated in v1.4.0) MAX_FILE_SIZE = 50 * 1024 * 1024 # 50MB (v1.4.0) MAX_OUTPUT_SIZE = 10 * 1024 * 1024 # 10MB target after optimization (v1.4.0) -MAX_DIMENSION = 4096 # 4096x4096 max +MAX_DIMENSION = 12000 # 12000x12000 max input (v1.4.2 - supports modern phone cameras) RESIZE_DIMENSION = 2048 # Auto-resize to 2048px (default) MIN_QUALITY = 70 # Minimum JPEG quality before rejection (v1.4.0) MIN_DIMENSION = 640 # Minimum dimension before rejection (v1.4.0) @@ -194,7 +194,8 @@ def validate_image(file_data: bytes, filename: str) -> Tuple[bytes, str, int, in else: raise ValueError("Could not determine image format") - # Check dimensions + # Check dimensions (v1.4.2: increased to 12000px to support modern phone cameras) + # Images will be resized by optimize_image() anyway width, height = img.size if max(width, height) > MAX_DIMENSION: raise ValueError(f"Image dimensions too large. Maximum is {MAX_DIMENSION}x{MAX_DIMENSION} pixels") diff --git a/tests/test_media_upload.py b/tests/test_media_upload.py index 6ac67b2..280f142 100644 --- a/tests/test_media_upload.py +++ b/tests/test_media_upload.py @@ -127,8 +127,8 @@ class TestImageValidation: assert "File too large" in str(exc_info.value) def test_dimensions_too_large(self): - """Test rejection of >4096px image (per ADR-058)""" - large_image = create_test_image(5000, 5000, 'PNG') + """Test rejection of >12000px image (v1.4.2: increased from 4096)""" + large_image = create_test_image(13000, 13000, 'PNG') with pytest.raises(ValueError) as exc_info: validate_image(large_image, 'huge.png')