// ==UserScript==
// @name YouTube - Custom Default Settings
// @name:en YouTube - Custom Default Settings
// @name:ja YouTube - 初期設定の変更
// @namespace http://tampermonkey.net/
// @version 2025-04-10
// @description hide short, annotation, liveChat, etc.
// @description:en hide short, annotation, liveChat, etc.
// @description:ja 画質 次の動画への秒数 文字起こしの有無 ライブチャットの有無などの変更
// @author ぐらんぴ
// @match https://www.youtube.com/*
// @icon https://www.youtube.com/favicon.ico
// @run-at document-start
// @grant GM_addStyle
// @license MIT
// ==/UserScript==
const settings = [
// page: "watch"
{ name: 'liveChat', default: 'hide', /* show or hide */ },
{ name: 'transcript', default: 'hide', /* show or hide */ },
{ name: 'autoPlayCount', default: '0', /* 0 or more */ },
{ name: 'annotation', default: 'hide', /* show or hide */ },
{ name: 'quality', default: '720', /* 144, 240, 360, 480, 720, 1080 */ },
{ name: 'loop', default: 'on', /* on or off */ },
{ name: 'shuffle', default: 'on', /* on or off */ },
// search
{ name: 'shorts', default: 'hide', /* show or hide */ },
// promo, ad
{ name: 'promo', default: 'hide', /* show or hide */ }, // testing
{ name: 'ad', default: 'hide', /* show or hide */ }, // testing
];
///-----------------------------------------------------------------------------------///
document.addEventListener('yt-page-data-fetched', e =>{
let res = e.detail.pageData.response
// console.log(e.detail.pageData.page);
settings.forEach(s =>{
try{
if(e.detail.pageData.url == "/feed/you") return;
// page: "watch"
if(s.name == 'liveChat' && s.default == 'hide') res.contents.twoColumnWatchNextResults.conversationBar.liveChatRenderer.initialDisplayState = 'LIVE_CHAT_DISPLAY_STATE_COLLAPSED';
if(s.name == 'transcript' && s.default == 'show'){
let engagementPanels = res.engagementPanels
engagementPanels.forEach(i =>{
if(i.engagementPanelSectionListRenderer.targetId == 'engagement-panel-searchable-transcript') i.engagementPanelSectionListRenderer.visibility = 'ENGAGEMENT_PANEL_VISIBILITY_EXPANDED';
});
}
if(s.name == 'autoPlayCount'){
res.playerOverlays.playerOverlayRenderer.autoplay.playerOverlayAutoplayRenderer.countDownSecs = s.default
res.playerOverlays.playerOverlayRenderer.autoplay.playerOverlayAutoplayRenderer.countDownSecsForFullscreen = s.default
}
if(s.name == 'annotation' && s.default == 'hide'){ // https://i.ytimg.com/an/
GM_addStyle(`
.annotation {
display: none;
}`)
}
if(s.name == 'quality'){
for (let i = 0; i < localStorage.length; i++) {
let key = localStorage.key(i);
if (key === "yt-player-quality") {
let data = localStorage.getItem(key);
// console.log(data);
let obj = JSON.parse(data);
let innerData = JSON.parse(obj.data);
innerData.quality = s.default;
obj.data = JSON.stringify(innerData);
let newData = JSON.stringify(obj);
// console.log(newData);
localStorage.setItem(key, newData);
}
}
}
// playList
if(s.name == 'loop' && s.default == 'on' && e.detail.pageData.response.contents.twoColumnWatchNextResults.playlist){
const loopId = setInterval(()=>{
if(document.querySelector("[aria-label='Loop playlist']")){
clearInterval(loopId);
document.querySelector("[aria-label='Loop playlist']").click();
}
},1000);
}
if(s.name == 'shuffle' && s.default == 'on' && e.detail.pageData.response.contents.twoColumnWatchNextResults.playlist){
const shuffleId = setInterval(()=>{
if(document.querySelector("[aria-label='Shuffle playlist']").getAttribute("aria-pressed") == 'false'){
clearInterval(shuffleId);
document.querySelector("[aria-label='Shuffle playlist']").click();
}
},1000);
}
// search
if(s.name == 'shorts' && s.default == 'hide'){
// page: "browse" - top, "search"
GM_addStyle(`
ytd-reel-shelf-renderer {
display: none;
}
ytd-rich-shelf-renderer {
display: none;
}`)
}
// promo, ad
if(s.name == 'promo' && s.default == 'hide') e.detail.pageData.playerResponse.messages[0].mealbarPromoRenderer = null;
if(s.name == 'ad' && s.default == 'hide'){
if(e.detail.pageData.page == "watch"){ // page: "watch"
e.detail.pageData.playerResponse.auxiliaryUi = null; // testing
}
GM_addStyle(`
ytd-ad-slot-renderer {
display: none;
}`)
}
}catch(err){ //console.log(err)
}
});
});
const qualitySetting = settings.find(s => s.name === 'quality');
if(qualitySetting){
for(let i = 0; i < localStorage.length; i++){
let key = localStorage.key(i);
if(key === "yt-player-quality"){
let data = localStorage.getItem(key);
if(data){
try{
// Parse the existing data
let obj = JSON.parse(data);
let innerData = JSON.parse(obj.data);
// Update quality with default value
innerData.quality = qualitySetting.default;
obj.data = JSON.stringify(innerData);
// Save back to localStorage
let newData = JSON.stringify(obj);
localStorage.setItem(key, newData);
// console.log('Quality updated to:', qualitySetting.default);
}catch{}
}
}
}
}
/* page load function
document.addEventListener('yt-service-request-sent', e => {
// console.log('loaded', e)
});
*/