Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Youtube is Boring

How To Make Youtube Less Boring

Paste the below code in your browser console (F12 > Console):

(()=>{
    markAllVideosAsNotBeingInteresting({
        iterations: 1
    });
})();

async function markAllVideosAsNotBeingInteresting({iterations}) {
    for(let i=0; i<iterations; i++) {
        await markCurrentVideosAsNotBeingInteresting();
        console.log(`Iteration ${i} completed. Waiting 300ms`);
        await sleep(300);
    }
   if(confirm("I'm done! Do you want to reload the page", "Yes")) {
    location.reload();
   }
}

async function markCurrentVideosAsNotBeingInteresting() {
    const videoMenuButtons = document.querySelectorAll("yt-icon.ytd-menu-renderer");

    for(let i=0; i<videoMenuButtons.length; i++) {
        if(!videoMenuButtons[i]) {
            continue
        }
        videoMenuButtons[i].scrollIntoView();
        await sleep(10);

        // Open the video menu
        videoMenuButtons[i].click();


        await sleep(50);

        // Click on "Not interested" button
        var notInterestedButton = document.querySelector("#items > ytd-menu-service-item-renderer:nth-child(5) > tp-yt-paper-item");
        if(!notInterestedButton) {
            continue
        }
        notInterestedButton.click();

        console.log("One video has been marked. Waiting 100ms");
        window.scrollBy(0, 95);
        await sleep(100);
    }
}

// Utils
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

PS. I'm not responsible if your accound get banned (Up until now, I wasn't banned) . Thanks!

UPDATE!

You can check the "New to you" tab (make sure to scale the page to 80%) image

@gxfr
Copy link

gxfr commented Jan 13, 2022

@toolonely
Copy link

toolonely commented Jan 13, 2022

Why don't you randomize the sleep() calls? I suppose this decreases the chance to get caught in some algorithm web.

@artyomLisovskij
Copy link

artyomLisovskij commented Jan 13, 2022

nice! youtube is really boring with recomendations last time. if i scroll over recomendations for couple times it should automatically understand - i won't click that videos now and probably won't to watch it in the future. stupid algos

@peyao
Copy link

peyao commented Jan 13, 2022

I wonder what the consequences are for disliking videos instead of marking as not interesting, and if that would achieve a similar effect.

@agluszak
Copy link

agluszak commented Jan 13, 2022

Nitpick: why are there spaces after for keywords, but not after ifs?

@iosifnicolae2
Copy link
Author

iosifnicolae2 commented Jan 13, 2022

@agluszak I don't know either :)

@wormpilled
Copy link

wormpilled commented Jan 14, 2022

So does this actually make a big change? It just switches up your front page entirely?

@iosifnicolae2
Copy link
Author

iosifnicolae2 commented Jan 14, 2022

@wormpilled yes, kind of

@rachmadaniHaryono
Copy link

rachmadaniHaryono commented Jan 14, 2022

based on hackernews comment 1 i try to convert it to bookmarklet using 2 but raise another error on firefox

Uncaught SyntaxError: await is only valid in async functions, async generators and modules

but it is working if copied directly to console

current bookmarklet raw format because markdown can't handle it

javascript:(function()%7Bfunction%20sleep(ms)%20%7B%0A%20%20return%20new%20Promise(resolve%20%3D%3E%20setTimeout(resolve%2C%20ms))%3B%0A%7D%0Aasync%20function%20markCurrentVideosAsNotBeingInteresting()%20%7B%0A%20%20const%20videoMenuButtons%20%3D%20document.querySelectorAll(%22yt-icon.ytd-menu-renderer%22)%3B%0A%0A%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20videoMenuButtons.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20if%20(!videoMenuButtons%5Bi%5D)%20%7B%0A%20%20%20%20%20%20continue%0A%20%20%20%20%7D%0A%20%20%20%20videoMenuButtons%5Bi%5D.scrollIntoView()%3B%0A%20%20%20%20await%20sleep(10)%3B%0A%0A%20%20%20%20%2F%2F%20Open%20the%20video%20menu%0A%20%20%20%20videoMenuButtons%5Bi%5D.click()%3B%0A%0A%0A%20%20%20%20await%20sleep(50)%3B%0A%0A%20%20%20%20%2F%2F%20Click%20on%20%22Not%20interested%22%20button%0A%20%20%20%20var%20notInterestedButton%20%3D%20document.querySelector(%22%23items%20%3E%20ytd-menu-service-item-renderer%3Anth-child(5)%20%3E%20tp-yt-paper-item%22)%3B%0A%20%20%20%20if%20(!notInterestedButton)%20%7B%0A%20%20%20%20%20%20continue%0A%20%20%20%20%7D%0A%20%20%20%20notInterestedButton.click()%3B%0A%0A%20%20%20%20console.log(%22One%20video%20has%20been%20marked.%20Waiting%20100ms%22)%3B%0A%20%20%20%20window.scrollBy(0%2C%2095)%3B%0A%20%20%20%20await%20sleep(100)%3B%0A%20%20%7D%0A%7D%0Aasync%20function%20markAllVideosAsNotBeingInteresting(%7B%0A%20%20iterations%0A%7D)%20%7B%0A%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20iterations%3B%20i%2B%2B)%20%7B%0A%20%20%20%20await%20markCurrentVideosAsNotBeingInteresting()%3B%0A%20%20%20%20console.log(%60Iteration%20%24%7Bi%7D%20completed.%20Waiting%20300ms%60)%3B%0A%20%20%20%20await%20sleep(300)%3B%0A%20%20%7D%0A%20%20if%20(confirm(%22I'm%20done!%20Do%20you%20want%20to%20reload%20the%20page%22%2C%20%22Yes%22))%20%7B%0A%20%20%20%20location.reload()%3B%0A%20%20%7D%0A%7D%0Aawait%20markAllVideosAsNotBeingInteresting(%7B%0A%20%20iterations%3A%201%0A%7D)%3B%7D)()%3B

Footnotes

  1. https://news.ycombinator.com/item?id=29925190

  2. https://caiorss.github.io/bookmarklet-maker/

@iosifnicolae2
Copy link
Author

iosifnicolae2 commented Jan 14, 2022

@rachmadaniHaryono I've updated the code to be compatible with Firefox.

@iosifnicolae2
Copy link
Author

iosifnicolae2 commented Jan 14, 2022

It might be useful to implement these two functionalities:

  1. Allow the script to remove the recommended videos from "Watch later" list.
  2. Create an extension where users can start & stop this algorithm

@rachmadaniHaryono
Copy link

rachmadaniHaryono commented Jan 14, 2022

@iosifnicolae2 can confirm the fix, thank you

markdown

javascript:(function()%7B(()%3D%3E%7B%0A%20%20%20%20markAllVideosAsNotBeingInteresting(%7B%0A%20%20%20%20%20%20%20%20iterations%3A%201%0A%20%20%20%20%7D)%3B%0A%7D)()%3B%0A%0Aasync%20function%20markAllVideosAsNotBeingInteresting(%7Biterations%7D)%20%7B%0A%20%20%20%20for(let%20i%3D0%3B%20i%3Citerations%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20await%20markCurrentVideosAsNotBeingInteresting()%3B%0A%20%20%20%20%20%20%20%20console.log(%60Iteration%20%24%7Bi%7D%20completed.%20Waiting%20300ms%60)%3B%0A%20%20%20%20%20%20%20%20await%20sleep(300)%3B%0A%20%20%20%20%7D%0A%20%20%20if(confirm(%22I'm%20done!%20Do%20you%20want%20to%20reload%20the%20page%22%2C%20%22Yes%22))%20%7B%0A%20%20%20%20location.reload()%3B%0A%20%20%20%7D%0A%7D%0A%0Aasync%20function%20markCurrentVideosAsNotBeingInteresting()%20%7B%0A%20%20%20%20const%20videoMenuButtons%20%3D%20document.querySelectorAll(%22yt-icon.ytd-menu-renderer%22)%3B%0A%0A%20%20%20%20for(let%20i%3D0%3B%20i%3CvideoMenuButtons.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20if(!videoMenuButtons%5Bi%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20videoMenuButtons%5Bi%5D.scrollIntoView()%3B%0A%20%20%20%20%20%20%20%20await%20sleep(10)%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Open%20the%20video%20menu%0A%20%20%20%20%20%20%20%20videoMenuButtons%5Bi%5D.click()%3B%0A%0A%0A%20%20%20%20%20%20%20%20await%20sleep(50)%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Click%20on%20%22Not%20interested%22%20button%0A%20%20%20%20%20%20%20%20var%20notInterestedButton%20%3D%20document.querySelector(%22%23items%20%3E%20ytd-menu-service-item-renderer%3Anth-child(5)%20%3E%20tp-yt-paper-item%22)%3B%0A%20%20%20%20%20%20%20%20if(!notInterestedButton)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20notInterestedButton.click()%3B%0A%0A%20%20%20%20%20%20%20%20console.log(%22One%20video%20has%20been%20marked.%20Waiting%20100ms%22)%3B%0A%20%20%20%20%20%20%20%20window.scrollBy(0%2C%2095)%3B%0A%20%20%20%20%20%20%20%20await%20sleep(100)%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Utils%0Afunction%20sleep(ms)%20%7B%0A%20%20%20%20return%20new%20Promise(resolve%20%3D%3E%20setTimeout(resolve%2C%20ms))%3B%0A%7D%7D)()%3B

@rachmadaniHaryono
Copy link

rachmadaniHaryono commented Jan 15, 2022

@iosifnicolae2 unfortunately if blocktube is installed it will add not interested video channel to block list

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment