Albumentations vs PIL/Pillow Benchmarks
On this page
This route is reserved for benchmark results generated during the website build.
The benchmark implementation source is public:
Methodology Notes
Pillow is benchmarked only where it has a direct transform analogue. The benchmark does not recreate Albumentations-style augmentation with custom Pillow glue. Unsupported transforms stay unsupported so the comparison remains honest.
The generated benchmark page should preserve these distinctions:
- image-only Pillow operations versus Albumentations pipeline transforms
- RGB/Pillow-mode assumptions versus arbitrary-channel NumPy arrays
- unsupported Pillow transforms, especially target-aware and multichannel augmentation
- hardware, Python version, library versions, and image shape
Generated benchmark tables
Values are taken from the benchmark JSON downloaded during the website build. AlbumentationsX 2.2.5, PIL/Pillow 12.2.0.
Run context: macOS-26.4.1-arm64-arm-64bit, Python 3.12.8, CPUs 16, media image, dataset files 50000, channels 3, runs 5.
Higher median throughput is better. Speedup range matches the interactive benchmark pages (AlbumentationsX interval vs competitor interval). — means unsupported or missing data.
RGB (micro)
| Transform | AlbumentationsX (median ± std) | PIL/Pillow (median ± std) | Speedup (AlbX / other, range) |
|---|---|---|---|
| Affine | 1456 ± 23 | 613 ± 1 | 2.3-2.4x |
| AutoContrast | 1619 ± 44 | 2239 ± 3 | 0.7-0.7x |
| Blur | 7544 ± 134 | 1870 ± 13 | 3.9-4.1x |
| Brightness | 9849 ± 99 | 1340 ± 6 | 7.2-7.5x |
| CLAHE | 644 ± 5 | — | — |
| CenterCrop128 | 95346 ± 1281 | — | — |
| ChannelDropout | 11971 ± 434 | — | — |
| ChannelShuffle | 8235 ± 86 | — | — |
| ColorJiggle | 1208 ± 16 | — | — |
| ColorJitter | 1221 ± 10 | — | — |
| Colorize | 3858 ± 11 | 3697 ± 18 | 1.0-1.1x |
| Contrast | 10045 ± 119 | 1055 ± 6 | 9.4-9.7x |
| CornerIllumination | 866 ± 28 | — | — |
| Dithering | 6 ± 0 | 1426 ± 16 | 0.0-0.0x |
| Elastic | 453 ± 2 | — | — |
| Equalize | 1086 ± 12 | 2204 ± 2 | 0.5-0.5x |
| Erasing | 27849 ± 4028 | — | — |
| GaussianBlur | 2462 ± 11 | 765 ± 3 | 3.2-3.2x |
| GaussianIllumination | 773 ± 21 | — | — |
| GaussianNoise | 328 ± 20 | — | — |
| Grayscale | 19593 ± 350 | 19267 ± 61 | 1.0-1.0x |
| HorizontalFlip | 13200 ± 430 | 14680 ± 194 | 0.9-0.9x |
| Hue | 1908 ± 18 | — | — |
| Invert | 31753 ± 1327 | 5503 ± 17 | 5.5-6.0x |
| JpegCompression | 1351 ± 11 | 1305 ± 5 | 1.0-1.0x |
| LinearIllumination | 557 ± 18 | — | — |
| LongestMaxSize | 3847 ± 62 | — | — |
| MedianBlur | 1546 ± 16 | 11 ± 0 | 140-147x |
| MotionBlur | 3847 ± 49 | — | — |
| Normalize | 1642 ± 26 | — | — |
| OpticalDistortion | 395 ± 4 | — | — |
| Pad | 34979 ± 3274 | 27167 ± 282 | 1.2-1.4x |
| Perspective | 1185 ± 9 | — | — |
| PhotoMetricDistort | 1070 ± 19 | — | — |
| PlankianJitter | 3278 ± 13 | — | — |
| PlasmaBrightness | 394 ± 9 | — | — |
| PlasmaContrast | 250 ± 6 | — | — |
| PlasmaShadow | 526 ± 8 | — | — |
| Posterize | 28724 ± 3259 | 5429 ± 10 | 4.7-5.9x |
| RGBShift | 5025 ± 48 | — | — |
| Rain | 2169 ± 27 | — | — |
| RandomCrop128 | 93574 ± 1964 | — | — |
| RandomGamma | 14482 ± 424 | — | — |
| RandomJigsaw | 9413 ± 136 | — | — |
| RandomResizedCrop | 4354 ± 22 | — | — |
| RandomRotate90 | 8652 ± 167 | — | — |
| Resize | 3542 ± 11 | 1087 ± 9 | 3.2-3.3x |
| Rotate | 2996 ± 12 | 4101 ± 119 | 0.7-0.8x |
| SaltAndPepper | 946 ± 4 | — | — |
| Saturation | 1389 ± 27 | 1324 ± 6 | 1.0-1.1x |
| Sharpen | 2221 ± 35 | — | — |
| Shear | 1322 ± 7 | 502 ± 2 | 2.6-2.7x |
| SmallestMaxSize | 2676 ± 7 | — | — |
| Snow | 754 ± 4 | — | — |
| Solarize | 13505 ± 442 | 5403 ± 13 | 2.4-2.6x |
| ThinPlateSpline | 92 ± 1 | — | — |
| Transpose | 8184 ± 199 | 11038 ± 172 | 0.7-0.8x |
| UnsharpMask | 3063 ± 37 | 478 ± 2 | 6.3-6.5x |
| VerticalFlip | 29169 ± 2657 | 41794 ± 189 | 0.6-0.8x |