Skip to content

Instantly share code, notes, and snippets.

@Sinkmanu
Created April 11, 2026 07:50
Show Gist options
  • Select an option

  • Save Sinkmanu/214eb34a29eaf172de0b1365cdbfa8c9 to your computer and use it in GitHub Desktop.

Select an option

Save Sinkmanu/214eb34a29eaf172de0b1365cdbfa8c9 to your computer and use it in GitHub Desktop.
Dislike to all songs of an artist in Youtube Music (avoid fucking AI-generated music)
// YouTube Music - Dislike all songs from an artist
// 1. Ve a la página del artista en YouTube Music
// 2. Haz clic en "Songs" / "Canciones" para ver todas las canciones
// 3. Haz scroll hasta cargar todas las canciones que quieras
// 4. Abre la consola del navegador (F12 > Console)
// 5. Pega y ejecuta este script
(async () => {
const DELAY_MS = 800; // Delay entre acciones para no saturar
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
// Selecciona todos los botones de dislike en la lista de canciones
const dislikeButtons = document.querySelectorAll(
'ytmusic-like-button-renderer tp-yt-paper-icon-button.dislike'
);
if (dislikeButtons.length === 0) {
// Selector alternativo (la UI cambia entre versiones)
const altButtons = document.querySelectorAll(
'yt-button-shape[aria-label*="islike"], ' +
'yt-icon-button[aria-label*="islike"], ' +
'button[aria-label*="islike"]'
);
if (altButtons.length === 0) {
console.warn(
'[!] No se encontraron botones de dislike. ' +
'Asegúrate de estar en la página de canciones del artista.'
);
return;
}
console.log(`[*] Encontrados ${altButtons.length} botones (selector alt)`);
for (let i = 0; i < altButtons.length; i++) {
const btn = altButtons[i];
const pressed = btn.getAttribute('aria-pressed');
// Solo dar dislike si no está ya marcado
if (pressed !== 'true') {
btn.click();
console.log(`[+] Dislike ${i + 1}/${altButtons.length}`);
await sleep(DELAY_MS);
} else {
console.log(`[-] Ya tiene dislike ${i + 1}/${altButtons.length}, skip`);
}
}
console.log('[*] Proceso completado (selector alt)');
return;
}
console.log(`[*] Encontrados ${dislikeButtons.length} botones de dislike`);
for (let i = 0; i < dislikeButtons.length; i++) {
const btn = dislikeButtons[i];
const ariaPressed = btn.getAttribute('aria-pressed');
if (ariaPressed !== 'true') {
btn.click();
console.log(`[+] Dislike ${i + 1}/${dislikeButtons.length}`);
await sleep(DELAY_MS);
} else {
console.log(`[-] Ya tiene dislike ${i + 1}/${dislikeButtons.length}, skip`);
}
}
console.log('[*] Proceso completado');
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment