Pornhub Pro-ish

Adds a menu with to apply filters, add sorting, player tweaks like hiding the cursor and auto-mute, and site-wide quality-of-life improvements like automatic age verification and always default to the english version of the site. Beta download button added! Actively maintained and used by me so updated regularly. Feel free to request features!

Ili estas versioj de tiu ĉi skripto, kie la kodo estas ĝisdatigita. Montri ĉiujn versiojn

  • v6.9.5 2026/04/14

    Rewrote the menu
    added an extra filter method
    made the sections collapasable for easier use
    improved the saving of the settings
    and added a sort by views method
    fixed dragging of the menu button on mobile

  • v6.9.0 2026/04/09

    Beta Download button added, squashed some bugs, and made the filter look better!

  • v6.8.1 2026/04/07

    Removed an old non functioning menu toggle and changed the description to better reflect functionality

  • v6.8.0 2026/04/07

    Improved the filtering, the menu button is now draggable if it's in the way

  • v6.7.0 2026/04/07

    I lost track of my changelog and uploaded the wrong file as version 6.6.1, so here's the update to 6.7.0 without a decent changelog, apologies.

    I changed the auto confirm age and language method to use cookies, they work almost perfectly across browsers and devices now.

  • v6.6.1 2026/04/03

    Changelog

    • Fixed auto age confirmation, uses cookies now
    • Made the menu floating
    • Added some mobile friendly changes
  • v6.6.0 2026/03/26

    Changelog

    v6.6.0

    Added auto skip of the age verification modal

  • v6.5.0 2026/02/26

    v6.5.0 — What's New

    Menu — Redesigned


    The side menu no longer takes up a fixed strip of the screen. It's now a compact floating panel that opens and closes on demand — click ☰ Menu to toggle it. The panel auto-closes when you click outside it or move your mouse more than 120 px away, keeping it out of your way while browsing.

    New toggle — Opaque menu button


    The ☰ Menu button can now be set to 50% opacity so it's less distracting while you watch. Enable Opaque menu button in the General section of the menu. The button always returns to full opacity on hover.

    Menu visibility — Simplified


    Previously the menu had a persistent Show / Hide Menu toggle that was saved to localStorage. The panel is now always hidden on load and opened on demand — no saved visibility state needed. The toggle button label is now a consistent ☰ Menu.

    DOM attachment — Fixed


    The menu and toggle button are now appended to document.documentElement instead of document.body. This prevents the menu from being displaced or hidden on pages where scripts manipulate the body before the DOM is ready.

    Tab-sync — Streamlined


    On tab visibility change (switching back to the tab), the script no longer attempts to re-sync menu visibility — since the panel is transient, this is no longer needed. Feature re-initialization and toggle-state sync still happen as before.

  • v6.3.0 2026/02/25

    6.3.0 - Changelog


    New Features

    • Hide VR Videos — new toggle in the Filtering category to hide VR content (detected via span.vr-thumbnail)
    • Hide Shorts Section — new toggle to hide the entire #shortiesListSection container

    AutoScroller Improvements

    • Duplicate detection: incoming li items checked against existing video IDs before insertion
    • Pre-existing duplicate cleanup on already-present li[data-video-id] elements
    • Stops after 3 consecutive empty pages (configurable: AUTOSCROLL_MAX_CONSECUTIVE_EMPTY)
    • Smoother scroll using scrollIntoView() on first new item
    • Cleaner state: _playlistPage & _fetchedPages now proper private fields

    Observer / Mutation Handling Improvements

    • Observer now scoped to ul.videos containers (much less noise)
    • Fallback to document.body only when needed
    • Tracks observed targets in a Set, auto re-scopes on new containers
    • Incremental hiding: only processes newly added nodes
    • li count diffing replaces old height/count heuristics

    Code Quality & Architecture

    • Unified handleError(context, error, level) error handler
    • Consistent private field naming (_field)
    • EventEmitter → internal Map + removeAllListeners()
    • StateManager cleanup: extracted private methods
    • VideoPlayer: hasMuted_hasMuted, added resetMuteState()
    • MenuManager features built once in constructor
    • Filter input: enforces maxlength + clamps value
    • Filter sanitizer: splits on commas only
    • PlaylistManager no longer depends on EventEmitter
    • Removed window.PornhubProApp global
    • Removed #cmtContent from hide list

    Config Changes

    • Renamed: CURSOR_HIDE_DELAY_MSCURSOR_HIDE_DELAY_S
    • Added:
      • AUTOSCROLL_MIN_DELAY_MS
      • AUTOSCROLL_MAX_DELAY_MS
      • AUTOSCROLL_MAX_CONSECUTIVE_EMPTY
      • OBSERVER_THROTTLE_MS
      • FEATURE_INIT_DELAY_MS
      • ELEMENT_HIDE_LOAD_DELAY_MS
      • FILTER_WORDS_MAX_LENGTH
    • Removed:
      • AUTOSCROLL_CHECK_INTERVAL_MS
      • AUTOSCROLL_TIMEOUT_MS
      • SCROLL_STEP_DELAY_MS
      • SCROLL_WAIT_MS


    Released February 2026

  • v6.2.0 2026/02/25

    AutoScroller — Complete Rewrite
    The autoscroll mechanism was fundamentally redesigned. The old version used a basic scroll-to-bottom + page-up loop with a simple interval-based timeout checker. The new version replaces this entirely with a fetch-based playlist loader that directly requests chunked playlist pages from the server API (/playlist/viewChunked), inserting the returned HTML into the DOM rather than simulating scroll input. Key improvements:

    Tracks which pages have already been fetched via a Set to avoid duplicate requests
    Automatically stops when a page returns no new items, rather than relying on a stale page-height timeout
    Adds randomized delays between fetches (800–2500ms) to reduce the risk of rate limiting
    Removed the old startUpdateChecker interval and performPageUps logic entirely, simplifying the class considerably


    VideoPlayer — Mute Idempotency
    Added a static hasMuted flag to VideoPlayer to prevent the mute action from firing redundantly on repeated calls. The mute() method now accepts a force parameter to override this guard when needed (e.g. when the toggle is explicitly clicked). The flag is reset to false on tab visibility loss (visibilitychange), so muting re-applies correctly when the user returns to the tab.

    Observer Lifecycle — Autoscroll Awareness
    The DOM mutation observer is now paused when autoscroll starts and resumed when it stops. Previously, the observer continued running during autoscroll, causing sort/hide features to fire repeatedly as new content was injected. This eliminates unnecessary processing during autoscroll and ensures a clean sort/hide pass runs once after autoscroll completes.

    Mute Toggle Handler — State-Aware
    The "Mute by default" feature toggle handler now checks whether the toggle was turned on before attempting to mute, and resets hasMuted before calling mute(true) — ensuring the action only fires when enabling the feature, not when disabling it.

  • v6.1.3 2025/11/04

    Small bugfixes regarding autoscroll

  • v6.1.2 2025/10/08

    Updated the mute button selector

  • v6.1.1 2025/09/07

    Changed some minor faults in the naming

  • v6.1.0 2025/09/04

    Completely rewrote the observer logic, so it uses WAY less memory

  • v6.0.0 2025/09/04
  • v6.0.0 2025/09/04
  • v5.1.0 2025/09/04
  • v5.1.0 2025/09/04

    Added a function to autoscroll through a page for playlists etc.
    Has a known bug when hiding a lot of videos, the expanding of the playlist won't always trigger correctly when not enough items are shown.

  • v5.0.1 2025/09/03

    Fixed the sorting within playlists! New version coming soon. I am reading the feedback and I'm trying to improve upon it as much as I can.

  • v5.0.0 2025/07/19
  • v3.5.7 2024/09/19
  • v3.5.6 2024/09/12

    attempted to fix a bug where all videos would hide instead of only the watched ones

  • v3.5.5 2024/09/11

    added class for mobile playlist sorting

  • v3.5.4 2024/09/08

    Added a fix for the buttons not working in playlists, will do an overhaul for 3.6.0

  • v3.5.3 2024/09/08

    Fixed a bug where sometimes none of the filters would work if the custom filter inpt was empty. Also rearranged some toggles

  • v3.5.3 2024/09/08

    Fixed a little bug where sometimes none of the filter would work if the text input was empty

  • v3.5.2 2024/09/04

    Small fix for sorting on mobile, PH updated the classes this script takes advantage off

  • v3.5.1 2024/09/01

    Updated the function that hides elements to include the huge empty space underneath pages with page numbering when searching for videos

  • v3.5.0 2024/08/30
  • v3.5.0 2024/08/25

    Added dynamic toggle creation and the option to hide the cursor when it is hovering over a playing video after 3 sec.

  • v3.4.2 2024/08/25
  • v3.4.2 2024/08/25

    Updated how toggles work and fixed a bug with the show/hide menu button.

  • v3.4.1 2024/08/25

    Added some more options to disable sorting within playlists

  • v3.4.0 2024/08/25

    introducing:

    A mobile friendly menu
    More toggles
    Filters work with both ',' and spaces now
    Added option to always redirect to english
    Updated styling
    Updated the code that hides video elements

  • v3.3.3 2024/08/25

    Some styling updates and syncing hide/show menu across tabs

  • v3.3.2 2024/08/25

    introducing a menu on the left that will also work on mobile

  • v3.3.1 2024/08/25

    Bugfix with showing watched videos on page reload

  • v3.3.0 2024/08/16
  • v3.2.3 2024/08/05
  • v3.2.3 2024/08/05

    Updated the topbar padding so the animation doesn't take place on initial page load

  • v3.2.2 2024/08/05

    Added a button to hide the menu and fixed some styling issues

  • v3.2.1 2024/08/05

    Improved the toggle states and their functions, also added ID's to the toggles. They should now correctly update and run when using multiple tabs of PH.

    Also improved the sorting of the videos by duration, that should now work all across the board.

  • v3.2.0 2024/08/04

    Updated the code and refactored the functions to make them more readable. Added Beta features as well.

  • v3.1.4 2024/07/28
  • v3.1.3 2024/07/25

    pornhub changed the trophy element

  • v3.1.2 2024/07/07
  • v3.1.0 2024/06/30
  • v3.1.0 2024/06/30
  • v3.1.0 2024/06/30

    Updated the script to use toggles instead of recolored buttons, also visually updated the manual triggers.

  • v3.0.4 2024/03/09

    updated some tags

Show all script versions