Skip to content

Instantly share code, notes, and snippets.

@inilim
Last active January 10, 2026 18:11
Show Gist options
  • Select an option

  • Save inilim/5a167d2c781ab92880d1a4cc8d0718fd to your computer and use it in GitHub Desktop.

Select an option

Save inilim/5a167d2c781ab92880d1a4cc8d0718fd to your computer and use it in GitHub Desktop.
YouTube - скрыть старые видео | hide old videos
// ==UserScript==
// @name YouTube — скрыть старые видео
// @namespace http://tampermonkey.net/
// @version 1.3
// @description Скрывает видео старше 1 года
// @author You
// @match https://www.youtube.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Настройка: сколько месяцев считать "старым" (12 = 1 год)
const MAX_AGE_MONTHS = 12;
// Интервал проверки в миллисекундах (1000 мс = 1 секунд)
const CHECK_INTERVAL_MS = 2000;
function parseAge(text) {
if (!text) return 0;
const yearMatch = text.match(/(\d+)\s*(year|год|года|лет)/i);
if (yearMatch) {
return parseInt(yearMatch[1]) * 12;
}
const monthMatch = text.match(/(\d+)\s*(month|месяц|месяца|месяцев)/i);
if (monthMatch) {
return parseInt(monthMatch[1]);
}
return 0;
}
function hideOldVideos() {
const videoItems = document.querySelectorAll('ytd-rich-item-renderer:not([data-checked-age])');
videoItems.forEach(item => {
// Если видео уже обработано (скрыто или проверено), пропускаем
if (item.dataset.checkedAge) return;
// 1. Получаем заголовок
const titleEl = item.querySelector('h3');
const title = titleEl ? titleEl.getAttribute('title') : 'Без названия';
// 2. Получаем ссылку
let videoUrl = 'Ссылка не найдена';
const videoUrlEl = item.querySelector('h3 > a');
if (videoUrlEl) {
videoUrl = videoUrlEl.getAttribute('href');
}
// 3. Проверяем возраст
// Ищем контейнер с метаданными (зависит от версии интерфейса YT)
const metaEl = item.querySelector('yt-content-metadata-view-model');
if (!metaEl) {
// Если метаданные еще не прогрузились, просто выходим из этой итерации
// (не ставим checkedAge, чтобы проверить в следующий раз)
return;
}
const text = metaEl.textContent.trim();
const age = parseAge(text);
if (age > 0) {
// Помечаем, что видео проверено (чтобы не проверять его снова)
item.dataset.checkedAge = 'true-' + age;
} else {
// Если возраст не распарсился (например "2 hours ago"),
// тоже помечаем как проверенное, чтобы не тратить ресурсы
if (text.length > 0) {
item.dataset.checkedAge = 'true-' + age;
}
return;
}
// 4. Скрываем и логируем, если старое
if (age >= MAX_AGE_MONTHS) {
item.style.display = 'none';
// OR
// item.style.setProperty('opacity', '0.2', 'important');
console.log(`[Hide video] MONTHS: "${age}" | Raw text: "${text}" | URL: https://www.youtube.com${videoUrl} | Title: "${title}"`);
}
});
}
// Запускаем сразу при загрузке...
hideOldVideos();
// ...и далее каждые 5 секунд
setInterval(hideOldVideos, CHECK_INTERVAL_MS);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment