// ==UserScript== // @name Audio Tab Title // @description Change the window title on YouTube based on the channel name and video title, and append the website name on Spotify and SoundCloud pages. // @version 0.6.5 // @namespace itsafeature.org // @author Geoffrey De Belie (Smile4ever) // @license Unlicense // @match https://www.youtube.com/watch?v=* // @match https://music.youtube.com/* // @match https://open.spotify.com/* // @match https://soundcloud.com/* // @match https://music.amazon.com/* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Format GrupoBryndisOficial to Grupo Bryndis function formatChannelName(name) { if (!name.includes(" ")) { name = name.replace(/([a-z])([A-Z])/g, '$1 $2'); // Add spaces if none exist } return name.replace("Oficial", "").trim(); // Remove "Oficial" and trim spaces } // Function to update the title on YouTube function updateYouTubeTitle() { const metadataElementArtist = document.querySelector(".yt-video-attribute-view-model__metadata h4"); // Artist const metadataElementArtistText = metadataElementArtist?.innerText ?? ""; const metadataElementTitle = document.querySelector(".yt-video-attribute-view-model__metadata h1"); // Title const metadataElementTitleText = metadataElementTitle?.innerText ?? ""; const channelElement = document.querySelector('a.yt-simple-endpoint.style-scope.yt-formatted-string'); const channelName = channelElement?.innerText ?? ""; const channelNameClean = formatChannelName(channelName.split(' - ')[0].split('|')[0]); const videoTitleElement = document.querySelector('#above-the-fold #title'); let videoTitle = videoTitleElement?.innerText ?? ""; const spaceIndex = videoTitle.indexOf(' '); const dashIndex = videoTitle.indexOf('-'); const spaceDashIndex = videoTitle.indexOf(' - '); const lastDashIndex = videoTitle.lastIndexOf('-'); // Cleanup videoTitle videoTitle = videoTitle.replace(" - Video Oficial", ""); videoTitle = videoTitle.replace(" - Video", ""); // We need the video title element, if it's not found the page structure must have changed if(videoTitleElement == null) return; if (metadataElementArtist && metadataElementTitle && lastDashIndex != -1){ const contentAfterDash = videoTitle.substring(lastDashIndex + 1).trim(); if (contentAfterDash.toLowerCase().includes(metadataElementArtistText.toLowerCase())) { // If metadata artist appears after the dash in video title, fix the tab title document.title = `${metadataElementArtistText} - ${metadataElementTitleText} - YouTube`; return; } } // Fix dash, for example Marco Antonio Solís — Eran Mentiras if(dashIndex == -1 && videoTitle.indexOf("—") != -1){ document.title = `${videoTitle.replace("—", "-")} - YouTube`; return; } // Fix comma's, for example Marco Antonio Solís, Los Bukis - Será Mejor Que Te Vayas // But don't break Olvídala, Binomio De Oro De América - Video Oficial if(spaceDashIndex != -1 && videoTitle.indexOf(", ") != -1 && metadataElementArtistText.indexOf(", ") != -1){ document.title = `${videoTitle.split(", ")[0]} - ${videoTitle.split(" - ")[1]} - YouTube`; return; } // Sombras, Los Betas - Video if(videoTitle.indexOf("-") == -1 && videoTitle.indexOf(", ") != -1){ document.title = videoTitle.replace(", ", " - ") + " - YouTube"; return; } // Use metadata if available, but not if the artist and title are the same if (metadataElementArtist && metadataElementTitle && metadataElementArtistText != metadataElementTitleText && metadataElementArtistText.includes("|") == false) { // Set the window title for YouTube if needed document.title = `${metadataElementArtistText} - ${metadataElementTitleText} - YouTube`; return; } // Fall back to channel + video title approach if (channelElement && videoTitle.includes('-') == false) { // If there's no space, continue. If the first dash appears before the first space, get out (case A-ha) if (spaceIndex != -1 && dashIndex < spaceIndex) return; // Set the window title for YouTube if needed if(videoTitle.includes(channelNameClean) == false){ document.title = `${channelNameClean} - ${videoTitle} - YouTube`; return; } } } // Function to update the title on YouTube Music function updateYouTubeMusicTitle() { const elements = document.querySelectorAll('.ytmusic-player-bar yt-formatted-string'); if (elements.length < 2) return; const artistElement = elements[1]; const audioTitleElement = elements[0]; if (artistElement && audioTitleElement) { const artistName = artistElement.childNodes[0].innerText; const audioTitle = audioTitleElement.innerText; // Set the window title for YouTube Music document.title = `${artistName} - ${audioTitle} - YouTube Music`; } } // Function to update the title on Spotify function updateSpotifyTitle() { const titleElement = document.querySelector('title'); // Get the