Advertisement
Guest User

ytadskip3

a guest
Jun 8th, 2025
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. // ==UserScript==
  2. // @name YouTube Ad Cleaner (Smart Resume)
  3. // @namespace SebaARG22
  4. // @version 3.4.0
  5. // @description Skips YouTube ads, resumes video after ad is closed, but respects manual pauses completely.
  6. // @author SebaARG22
  7. // @match *://www.youtube.com/*
  8. // @run-at document-end
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. 'use strict';
  14.  
  15. const LOG = msg => console.log(`[😭 CryTubeFix] ${msg}`);
  16.  
  17. let lastAdTime = 0;
  18. let lastPauseTime = 0;
  19.  
  20. const video = () => document.querySelector('video');
  21.  
  22. function handleAdSkipAndResume() {
  23. const skipButton = document.querySelector('.ytp-ad-skip-button');
  24. const closeButton = document.querySelector('.ytp-ad-overlay-close-button');
  25.  
  26. let didAdAction = false;
  27.  
  28. if (skipButton) {
  29. skipButton.click();
  30. lastAdTime = Date.now();
  31. LOG('Clicked "Skip Ad" button.');
  32. didAdAction = true;
  33. }
  34.  
  35. if (closeButton) {
  36. closeButton.click();
  37. lastAdTime = Date.now();
  38. LOG('Closed overlay ad.');
  39. didAdAction = true;
  40. }
  41.  
  42. const v = video();
  43. const now = Date.now();
  44.  
  45. if (v && v.paused && (now - lastAdTime < 1500) && (now - lastPauseTime < 1500)) {
  46. // Resume only if pause happened right after ad
  47. v.play().then(() => {
  48. LOG('Resumed video after auto ad pause.');
  49. }).catch(err => {
  50. LOG('Could not resume video: ' + err);
  51. });
  52. }
  53. }
  54.  
  55. // Detect manual pauses (via spacebar or clicking)
  56. document.addEventListener('keydown', e => {
  57. if (e.code === 'Space') {
  58. lastPauseTime = Date.now();
  59. }
  60. });
  61.  
  62. document.addEventListener('click', () => {
  63. const v = video();
  64. if (v && v.paused) {
  65. lastPauseTime = Date.now();
  66. }
  67. });
  68.  
  69. const observer = new MutationObserver(() => {
  70. handleAdSkipAndResume();
  71. });
  72.  
  73. observer.observe(document.body, { childList: true, subtree: true });
  74.  
  75. setInterval(handleAdSkipAndResume, 1000);
  76.  
  77. LOG('Smart YouTube ad remover and resume script loaded.');
  78. })();
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement