YouTube Add filename formatted title

Adds and modifies an filename formatted title on Youtube above the normal one

  1. // ==UserScript==
  2. // @name YouTube Add filename formatted title
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description Adds and modifies an filename formatted title on Youtube above the normal one
  6. // @author ChatGPT
  7. // @match https://www.youtube.com/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. let lastH1Text = '';
  16. let checkCounter = 0;
  17. let changeCounter = 0;
  18. let intervalId;
  19.  
  20. function modifyElement(element, textContents ) {
  21. var usernameLink = document.querySelectorAll('a[href^="/@"]');
  22. usernameLink = usernameLink[0]
  23.  
  24. var aElements = document.querySelectorAll('a[href^="/@"]');
  25. var linkTexts = Array.from(aElements)
  26. .filter(a => !a.querySelector('img'))
  27. .map(a => a.textContent.trim());
  28.  
  29. if (linkTexts.length > 0) {
  30. usernameLink = linkTexts[0]
  31. }
  32.  
  33. if (usernameLink) {
  34. var username = usernameLink;
  35. element.textContent = textContents + ' - ' + username;
  36. }
  37.  
  38. element.textContent = element.textContent.replace(/[^a-zA-Z0-9\-\.\‘\'\"\“\’\s]/g, '-');
  39. element.textContent = element.textContent.replace(/[\‘\'\"\“\’]/g, '');
  40. element.textContent = element.textContent.replace(/([\-]{2,99})+/g, '-');
  41. element.textContent = element.textContent.replace(/([\s]{2,99})+/g, ' ');
  42. element.textContent = element.textContent.replace(/(\- \-)+/g, ' - ');
  43. element.textContent = element.textContent.replace(/([\s]{2,99})+/g, ' ');
  44. element.textContent = element.textContent.replace(/[\[\]{}()<>〈〉《》「」『』【】]/g, '()');
  45.  
  46. console.log('Modified element: ', element.textContent);
  47. }
  48.  
  49. function checkElements() {
  50. var h1Elements = document.getElementsByTagName('h1');
  51. if (h1Elements.length > 0) {
  52. for (var i = 0; i < h1Elements.length; i++) {
  53. if (!h1Elements[i].previousElementSibling || h1Elements[i].previousElementSibling.tagName !== 'H2') {
  54. var h2Element = document.createElement('h2');
  55. h2Element.textContent = " ";
  56. h1Elements[i].parentNode.insertBefore(h2Element, h1Elements[i]);
  57. }
  58. h2Element = h1Elements[i].previousElementSibling;
  59. modifyElement(h2Element, h1Elements[i].textContent);
  60.  
  61. // Track text changes in H1
  62. if (h1Elements[i].textContent !== lastH1Text) {
  63. lastH1Text = h1Elements[i].textContent;
  64. checkCounter = 0;
  65. changeCounter++;
  66. } else {
  67. checkCounter++;
  68. }
  69. }
  70.  
  71. // Adjust checking frequency
  72. clearInterval(intervalId);
  73. if (checkCounter >= 100) {
  74. intervalId = setInterval(checkElements, 60 * 1000); // check every minute
  75. } else if (changeCounter >= 3) {
  76. intervalId = setInterval(checkElements, 10 * 1000); // check every 10 seconds
  77. changeCounter = 0;
  78. } else {
  79. intervalId = setInterval(checkElements, 10 * 1000); // default: check every 10 seconds
  80. }
  81. }
  82. }
  83.  
  84. intervalId = setInterval(checkElements, 2 * 1000);
  85. })();