Skip to content

Releases

xHamster 2.6.5

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 27 Oct 20:58
4b91daa

xHamster 2.6.5

This release fixes problems found while testing public video, listing and download workflows.

  • Restore shorts and moments extraction from current page data and DOM layouts.
  • Keep profile shorts on the correct listing route and preserve regional URL hosts.
  • Read listing metadata from hydrated page data so later cards retain thumbnails and durations.
  • Avoid incompatible quality filters for VR search and recognize Full HD and UHD videos correctly.
  • Handle missing short metadata safely and add compatible user, video and shorts aliases.
  • Route shorts and moments through the CLI.

The package now uses eaf-base-api>=4.2.5 from PyPI. No local source checkout is required.

unofficial-api-for-xhamster 2.6.3

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 17 Oct 14:30
d3210cc

Release 2.6.3 fixes provider URL handling and pagination.

Changes:

  • Preserve profile tabs and filters during pagination, replacing an existing numeric page suffix.
  • Use the resolved localized host for listing requests and relative video links.
  • Replace account playlist page query keys without duplication.
  • Require eaf-base-api>=4.2.2 for 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-xhamster==2.6.3

Source commit: d3210cc

2.6.2

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 17 Sep 12:48
e452f99

Changelog

  • Fixed an issue where invalid login credentials would report a successful login

2.6.1

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 15 Sep 13:06
a136ebe

What's Changed

Improvements & Resilience

  • Layout Anchor Validations: Added structural anchor checks to detect upstream markup shifts.
  • Metadata Fallbacks: Resilient fallback selectors for video and pornstar metadata.
  • Stream URL Resolution: Enhanced stream URL parsing and error reporting.
  • Unit Tests: Added snippet-based unit tests for video and pornstar extraction.

Core Engine Upgrade

  • Bumped dependency to eaf-base-api>=4.2.0.
  • Adopted fetch_content and @download_errors.
  • Download failures now raise DownloadFailed; cancellation raises DownloadCancelled.

2.6

2.6

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 14 Aug 16:40
79224f5

Changelog

  • Added a lot of new video attributes. See docs :)

2.5

2.5

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 11 Aug 16:19
d9714c3

2.4

2.4

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 26 Jul 20:01
db5a0f6

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

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 23 Jun 18:50
b0f2ed3

Changelog

  • raised python version

2.1

2.1

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 10 Jun 11:59
da5d2cf
  • fixed a bug

Version 2.0

Choose a tag to compare

@EchterAlsFake EchterAlsFake released this 09 Jun 10:59
6aca4e9

Changelog

Switching to Async

Warning

This release absolutely breaks your existing code. Read the documentation (once I updated it)

  • Added more stuff to the Short class
  • 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