What's New in v3.0.0
New Features
bbid CLI command — installed automatically, no more python -m ...
- Resume support — re-running skips existing files and downloads only what's missing
- Download manifest —
_manifest.json written per run mapping filenames to source URLs
- MD5 image deduplication — same image from different URLs saved only once
bbid --version flag
Bug Fixes
- Removed
input() and sys.exit() from library API (were blocking programmatic use in scripts, CI, Jupyter)
- Fixed broken relative imports in
multidownloader.py (was crashing on installed package)
- Fixed
urllib.request.urlopen missing timeout parameter (could hang indefinitely)
- Fixed thread-safe
download_count increment with threading.Lock
- Fixed mutable default argument
badsites=[] (shared state across calls)
- Removed global
socket.setdefaulttimeout() side-effect from helperdownload
- Atomic file writes in
helperdownload (write to temp → move on success, no orphaned files)
- Exponential backoff on download retries
- Updated stale Google Images Selenium selectors
- Fixed
resolve_dependencies(driver=str) broken default
- Lazy-load
chromedriver_autoinstaller (only imported when Chrome driver is needed)
Breaking Changes
filter parameter renamed to image_filter in downloader() — old filter= still works with a DeprecationWarning
Packaging
- Migrated to
pyproject.toml with proper install_requires and python_requires=">=3.8"
- Selenium dependencies moved to optional
[google] extra — pip install better-bing-image-downloader is now lightweight
- Full test suite: 41 tests (was 0 working tests before)
Installation
pip install better-bing-image-downloader
# For Google/Selenium support:
pip install "better-bing-image-downloader[google]"