- // ==UserScript==
- // @name Apple Music - iTunes Artwork Finder Lookup
- // @namespace http://tampermonkey.net/
- // @version 1.7.3
- // @description Add a "🔎 iTunes Artwork Finder" button to Apple Music album pages. Clicking this button will capture the Album and Artist info from the page to the clipboard and open https://bendodson.com/projects/itunes-artwork-finder/, where you can paste the contents of the clipboard to search for high resolution album/cover art. Make sure to change the selectors for the "format" and "country" on iTAF to optimize your results!
- // @match https://music.apple.com/*/album/*
- // @match https://music.apple.com/*/library/albums/*
- // @icon https://ptpimg.me/0r4nex.png
- // @grant none
- // @license MIT
- // ==/UserScript==
-
- (function () {
- 'use strict';
-
- // Function to create the "🔎 iTunes Artwork Finder" button with SVG icon
- function createButton(album, artist) {
- const button = document.createElement('button');
- button.className = 'custom-button';
- button.style.cssText = 'background-color: var(--keyColorBG); color: white; border: none; padding: 0px 12px; cursor: pointer; border-radius: 6px; font: var(--body-emphasized); display: flex; align-items: center';
-
- // Create the SVG element
- const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
- svg.setAttribute('viewBox', '0 0 16 16');
- svg.setAttribute('width', '13');
- svg.setAttribute('height', '13');
- svg.style.marginRight = '5px';
-
- // Create the path element and set the new d attribute, fill color to white
- const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
- path.setAttribute('class', 'st0');
- path.setAttribute('d', 'M0.9,16c-0.2,0-0.5-0.1-0.7-0.3C0.1,15.5,0,15.3,0,15.1s0.1-0.5,0.3-0.7l4.3-4.3c-0.4-0.5-0.7-1-0.9-1.6C3.4,7.8,3.3,7.1,3.3,6.4c0-0.6,0.1-1.2,0.2-1.7c0.2-0.5,0.4-1.1,0.6-1.5c0.3-0.5,0.6-0.9,1-1.3c0.4-0.4,0.8-0.7,1.3-1c0.5-0.3,1-0.5,1.5-0.6C8.5,0.1,9,0,9.6,0c0.6,0,1.2,0.1,1.7,0.2c0.5,0.1,1.1,0.4,1.5,0.6c0.5,0.3,0.9,0.6,1.3,1c0.4,0.4,0.7,0.8,1,1.3c0.3,0.5,0.5,1,0.6,1.5C15.9,5.2,16,5.8,16,6.4c0,0.6-0.1,1.2-0.2,1.7c-0.2,0.5-0.4,1.1-0.6,1.5c-0.3,0.5-0.6,0.9-1,1.3s-0.8,0.7-1.3,1c-0.5,0.3-1,0.5-1.5,0.6c-0.5,0.1-1.1,0.2-1.7,0.2c-0.7,0-1.5-0.1-2.2-0.4c-0.6-0.2-1.1-0.5-1.6-0.9l-4.3,4.3C1.4,15.9,1.2,16,0.9,16z M9.6,1.9C9.2,1.9,8.8,1.9,8.4,2C8.1,2.1,7.7,2.3,7.4,2.5C7,2.7,6.7,2.9,6.4,3.2C6.2,3.5,5.9,3.8,5.7,4.1C5.5,4.4,5.4,4.8,5.3,5.2C5.2,5.6,5.1,6,5.1,6.4c0,0.6,0.1,1.2,0.4,1.8c0.2,0.5,0.6,1,1,1.4c0.4,0.4,0.9,0.7,1.4,1c0.5,0.2,1.1,0.4,1.8,0.4c0.6,0,1.2-0.1,1.8-0.4c0.5-0.2,1-0.6,1.4-1c0.4-0.4,0.7-0.9,1-1.4C14,7.6,14.1,7,14.1,6.4c0-0.6-0.1-1.2-0.4-1.8c-0.2-0.5-0.6-1-1-1.4c-0.4-0.4-0.9-0.7-1.4-1C10.8,2,10.3,1.9,9.6,1.9z');
- path.setAttribute('fill', '#FFFFFF');
-
- // Append the path to the SVG
- svg.appendChild(path);
-
- // Create the text node for "iTunes Artwork Finder"
- const buttonText = document.createTextNode(' iTunes Artwork Finder');
-
- // Append SVG and text to the button
- button.appendChild(svg);
- button.appendChild(buttonText);
-
- // Copy album and artist to clipboard
- button.onclick = function () {
- const textToCopy = `${album} ${artist}`;
- navigator.clipboard.writeText(textToCopy).then(() => {
- window.open('https://bendodson.com/projects/itunes-artwork-finder/', '_blank');
- });
- };
-
- return button;
- }
-
- // Function to add the button to the primary actions section
- function addButton() {
- const albumElement = document.querySelector('h1.headings__title span[dir="auto"]');
- const artistElement = document.querySelector('div.headings__subtitles');
- const primaryActionsDiv = document.querySelector('div.primary-actions');
-
- // Check if the button already exists to prevent adding it multiple times
- if (albumElement && artistElement && primaryActionsDiv && !document.querySelector('#search-iTAF-button')) {
- const album = albumElement.innerText;
- const artist = artistElement.innerText;
-
- // Create and append the "🔎 iTunes Artwork Findero" button
- const button = createButton(album, artist);
- button.id = 'search-iTAF-button'; // Assign an ID to the button to track its presence
- primaryActionsDiv.appendChild(button);
- }
- }
-
- // Keep checking for changes on the page and add the button once the elements are loaded
- function persistentlyAddButton() {
- addButton();
- setTimeout(persistentlyAddButton, 1000); // Retry every 1 second
- }
-
- persistentlyAddButton(); // Start the loop to add the button
-
- // Handle changes in the URL (e.g., if navigating between albums)
- let lastUrl = location.href;
- new MutationObserver(() => {
- const url = location.href;
- if (url !== lastUrl) {
- lastUrl = url;
- setTimeout(addButton, 1000); // Add button after the URL changes
- }
- }).observe(document, { subtree: true, childList: true });
-
- })();