Recent Releases of https://github.com/albumentations-team/albumentationsx
https://github.com/albumentations-team/albumentationsx - 🛠Albumentations 2.0.10 Release Notes
Core
- Disabled check for updates on albumentations init
- Optionally can use Pyvips library for resize by @federicopozzi33
New transform Dithering
Supports all algorithms from wiki
by @ternaus
Speedups
- Vectorized PlanckianJitter, when applied to video by @trylinka
- Vectorized PixelDroput, when applied to video by @federicopozzi33
- Vectorized ToSepia, when applied to video by @federicopozzi33
- Vectorized MultiplicativeNoise, when applied to video by @federicopozzi33
Bugfixes
- Bugfix in SaltAndPepper by @trylinka
- Bugfix in ReplayCompose by @federicopozzi33
P.S. Do not forget that AlbumentationsX has dual licensing: AGPL and commercial and if you want to use it without any restrictions => need to buy commercial license.
- Python
Published by ternaus 6 months ago
https://github.com/albumentations-team/albumentationsx - 🛠Albumentations 2.0.9 Release Notes
AlbumentationsX 2.0.9: A New Chapter
This release introduces two significant changes to AlbumentationsX: dual licensing (AGPL/Commercial) and anonymous telemetry. I understand these are substantial changes after 6 years of MIT licensing, so I want to be transparent about the reasoning behind them.
TL;DR: - AlbumentationsX is now dual-licensed (AGPL/Commercial) instead of MIT - Added anonymous telemetry (easily disabled) - Still 100% drop-in compatible - your code doesn't change - Lots of performance improvements and bug fixes
License
Moving to Dual Licensing
After 7 years of MIT licensing, AlbumentationsX is transitioning to a dual license model (AGPL/Commercial). This is a significant change that deserves a thorough explanation.
Important: AlbumentationsX remains a drop-in replacement. Simply:
bash
pip uninstall albumentations
pip install albumentationsx
Your code doesn't change. Same imports, same API, everything works.
The Current Situation
Over the past year, I've been the primary maintainer of Albumentations. While the original team members have moved on to new opportunities, the project's usage and support needs have continued to grow:
- Issues, questions, feature requests arrive weekly
- Major companies rely on this library in production systems
- Bug fixes and feature development happen during my limited spare time
- Financial support through sponsorships covers 2.5% of what I spend for living
I haven't been able to make the donation model work for this project. Part of this is structural - companies have established processes for purchasing licenses but not for donations - but ultimately, I wasn't able to build the kind of sponsorship support needed to work on this full-time.
Your Options
For open source projects: Continue using AlbumentationsX under AGPL. Your workflow remains unchanged.
For companies: Three paths forward:
1. Comply with AGPL by open sourcing your code - a valid approach for many projects
2. Purchase a commercial license to use AlbumentationsX in proprietary software (see pricing)
3. Continue using the original albumentations (MIT) - stable but no longer maintained
Comparison
| | albumentations (original) | albumentationsx | |---|---|---| | License | MIT | Dual: AGPL / Commercial | | Active maintenance | No | Yes | | New features | No | Yes | | Bug fixes | No | Yes | | Code changes required | - | None |
Understanding AGPL
AGPL extends GPL to network services: if you provide a service using AGPL software, you must provide the source code to users. This ensures improvements benefit the entire community.
The dual licensing model balances: - AGPL: Free use in open source projects with reciprocal sharing - Commercial license: Proprietary use without source disclosure requirements
Why This Change Makes Sense
Projects like Ultralytics YOLO have successfully used dual licensing to achieve: - Full-time development focus - Faster feature delivery - Professional bug fixing - Long-term sustainability
My goal is to work on AlbumentationsX full-time, ensuring it remains the best augmentation library available. I wasn't able to achieve the financial sustainability needed for full-time work under the MIT model.
I recognize this change may not align with everyone's preferences. However, I believe a professionally maintained library with dual licensing better serves the community than an undermaintained one with permissive licensing.
Telemetry
Anonymous Usage Analytics
AlbumentationsX now includes anonymous telemetry to better understand usage patterns and prioritize development efforts.
After years of development, I've realized I lack crucial insights into which transforms are actually used in production. This leads to inefficient resource allocation - spending equal time on rarely-used and heavily-used features isn't optimal.
A concrete example: I nearly deprecated several transforms that seemed unused, only to discover they were essential for specific domains like medical imaging. This knowledge gap needs addressing.
Data Collection Details
The telemetry system collects: - Transform names used in pipelines (e.g., "HorizontalFlip", "Normalize") - Parameter configurations (to understand common usage patterns) - Python and AlbumentationsX version information
Not collected: - Image data or file paths - Personal or identifying information - Model architectures or training details - IP addresses or location data
The data goes to Mixpanel, a standard analytics platform, keeping infrastructure requirements minimal.
Practical Benefits
This data enables informed decisions about: - Which transforms need performance optimization - Which features can be safely deprecated - What Python versions to support - Where to focus bug-fixing efforts
Opting Out
Telemetry is easily disabled if you prefer not to participate:
Globally via environment variable:
bash
export ALBUMENTATIONS_NO_TELEMETRY=1
Per-pipeline:
python
transform = A.Compose([...], telemetry=False)
The library functions identically with or without telemetry. Your choice to opt out doesn't affect any features or performance.
Understanding actual usage patterns helps build a better library for everyone. If you're comfortable sharing anonymous usage data, you're contributing to more targeted improvements. If not, simply disable it - no questions asked.
Core
Breaking Changes
NumPy Arrays Required
- Change: Removed support for Python lists as inputs. All inputs (images, masks, bboxes, keypoints) must be NumPy arrays.
- Migration: Use
np.array()to convert lists to arrays. - Rationale: Eliminates type conversion bugs and improves performance.
Grayscale Image Handling
- Change: Individual transforms now require explicit channel dimension for grayscale data.
- Format Requirements:
- Grayscale Image:
(H, W, 1)instead of(H, W) - Grayscale Video:
(N, H, W, 1)instead of(N, H, W) - Grayscale Volume:
(D, H, W, 1)instead of(D, H, W) - Grayscale Volumes:
(N, D, H, W, 1)instead of(N, D, H, W)
- Grayscale Image:
- Note:
Composeaccepts both(H, W)and(H, W, 1)formats and handles conversion automatically.
New Features
Compose Arithmetic Operations
Compose objects now support arithmetic operations for pipeline modification:
```python base = A.Compose([A.HorizontalFlip(), A.Rotate()])
Addition
augmented = base + A.RandomBrightnessContrast() augmented = base + [A.Blur(), A.GaussNoise()]
Subtraction
no_flip = base - A.HorizontalFlip
Prepending
resize_first = A.Resize(512, 512) + base ```
All operations preserve bbox_params, keypoint_params, and other configuration.
Speedups
Performance Improvements
Significant performance optimizations for transforms commonly used in RGB video processing pipelines:
Major Performance Gains (>100% improvement)
Normalize(normalization="image"): +325% by @trylinkaNormalize(normalization="minmax"): +225% by @trylinkaSquareSymmetry/D4: +208% by @trylinkaRandomToneCurve: +195% by @trylinkaToGray(method="from_lab"): +153% by @trylinkaToFloat: +102% by @martinsbruveris
Additional Optimizations
RandomRotate90: +32% by @trylinkaToGray(method="pca"): +31% by @trylinkaToGray(method="weighted_average"): +10% by @trylinkaGaussNoise: +10% by @trylinkaToGray(method="desaturation"): +10% by @trylinkaTranspose: +10% by @trylinka
Bug Fixes
Critical Fixes
PyTorch DataLoader Random Seed (#2559, #2473)
- Issue: Multiple DataLoader workers were initialized with identical random seeds
- Impact: Augmentations were not properly randomized across workers
- Fix: Each worker now receives a unique seed
by @ternaus
CropAndPad Video Support (#2549)
- Issue:
CropAndPadtransform crashed when applied to video data - Impact: Transform was unusable for video pipelines
- Fix: Added proper video dimension handling
Transform Serialization Defaults (#2545)
- Issue: Serialized transforms without explicit
pparameter would deserialize withp=0.5instead of transform's default - Example:
Resize(defaultp=1.0) would deserialize asp=0.5 - Fix: Serialization now preserves transform-specific defaults
Summary
AlbumentationsX 2.0.9 marks a significant milestone with the introduction of dual licensing and telemetry. These changes ensure the project's sustainability while maintaining full backward compatibility. All existing code continues to work without modification.
For questions or feedback, please use GitHub Issues or join our Discord.
- Python
Published by ternaus 8 months ago