Repository navigation
Releases
SpankBang 2.4.4
SpankBang 2.4.4
This release fixes problems found while testing public video, listing and download workflows.
- Build independent search page URLs and preserve special characters in search terms.
- Use conservative default listing concurrency and standard navigation headers.
- Keep each RAW download URL paired with its resolution and support numeric and named quality choices.
- Select RAW mode when only a RAW configuration is supplied, and add the --raw CLI flag.
- Normalize bare, embed and play links and handle regional profile paths and statistics.
- Improve thumbnail, duration and stream-data parsing across the supported page layouts.
The package now uses eaf-base-api>=4.2.5 from PyPI. No local source checkout is required.
unofficial-api-for-spankbang 2.4.3
Release 2.4.3 fixes provider URL handling and pagination.
Changes:
- Treat profile
pagesas the total number of pages requested; zero retains the first-page-only default. - Normalize profile paths without duplicate slashes, remove stale page query keys, and retain other filters.
- Normalize embed/play links to video pages and preserve configured Accept-Language headers.
- Require
eaf-base-api>=4.2.2for shared URL composition and resolved-response metadata. - Add focused offline URL regression tests; verify the repaired behavior with bounded live metadata/listing checks.
Install from PyPI:
uv pip install unofficial-api-for-spankbang==2.4.3Source commit: abcea8a
2.4.2
What's Changed
New Features & Improvements
- 4K Resolution Support: Added full support for 4K video resolution (mapped and sorted as
2160p) for both metadata scraping and video downloading. - Scraper Resilience: Modernized selectors across video, channel, creator, and pornstar pages using robust fallbacks and
data-testidattributes. - Stream Parsing: Enhanced regex parsing for inline
stream_dataJSON payloads. - Unit Tests: Added offline tests for snippet parsing and 4K resolution handling.
Core Engine Upgrade
- Bumped dependency to
eaf-base-api>=4.2.0. - Adopted
fetch_contentand@download_errors. - Download failures now raise
DownloadFailed; cancellation raisesDownloadCancelled.
2.4.1
Changelog
- fixed 403 error by forcing http3
2.4
Changelog
2.3
Changelog
I am too lazy to write a dedicated changelog for all my APIs now, so here's a summary
-
Raised Python version to 3.12 (because I use Python 3.12 specific async logic + type hints)
-
Improved memory usage by 99%
-
Dataclass models for all objects with slots
-
Added new exceptions that actually work now
-
Improved parsing speed for video iterators a lot because we can actually just scrape the data from the page directly and fill it into the video object. Just read the docs lol
-
I have added an option to the iterators, so you can actually say if the videos should be in the correct order or not which has an influence on scraping speed
-
You can now pass custom on_error functions into the iterators and handle video re-trying yourself
Oh yeah..
Switched to AGPL
Does this break my existing code?
Yes.
2.2.2
2.2
2.1
Changelog
Switching to Async
Warning
This release absolutely breaks your existing code. Read the documentation (once I updated it)
- Replaced httpx with curl_cffi for HTTP requests, enabling browser impersonation ( chrome ) to bypass
bot protections - Converted all network methods to async/await ( fetch , download , legacy_download , get_segments ,
get_m3u8_by_quality , list_available_qualities , download_segment ) - Converted Helper.iterator from a synchronous ThreadPoolExecutor -based generator to an async generator
using asyncio.Task - Replaced ThreadPoolExecutor in the HLS segment downloader with asyncio.Semaphore + asyncio.
as_completed - Added async_generator_to_sync bridge utility for synchronous iteration
- Added fast concurrent multipart range downloading to legacy_download ( allow_multipart=True by default)
- Added ios_support parameter to download for stricter audio codec filtering during remux
- Fixed progress bars to handle unknown/zero total sizes gracefully instead of dividing by zero
- Fixed multipart downloads failing on compressed streams by requesting Accept-Encoding: identity for range
requests - Changed remux progress tracking from packet count to byte-based for more accurate reporting
2.0
Changelog
- Removed default / ffmpeg downloaders (BREAKS YOUR CODE!)
- Resume support
- Cancellation support
- Improved logging
- Switched to UV for project management
- Updated documentation
- Support for Python >= 3.9
Caution
This release breaks existing code and has complex changes, please visit the documentation once again!