Change YouTube Leftbar Subscription Links To Channel/User Video Page

Change YouTube leftbar's subscription links to channel/user video page. This script can optionally also move updated links to top of the list (if there's enough space), optionally uncollapse all updated links which may extend the non collapsible links, and optionally display the number of updated & total links following the "SUBSCRIPTION" section label. All features can be enabled/disabled from the script code. For new YouTube layout only.

< Feedback on Change YouTube Leftbar Subscription Links To Channel/User Video Page

Review: ठीक - स्क्रिप्ट चालते, पण त्यात बग आहेत

Not sure how widespread it is or if it's a gradual rollout, but as of yesterday:

- changeLinksURL set to true, it no longer sorts channels.
- moveUpdatedLinksToTop set to true, collapsing channel list (manually or via autoExpandCollapsed set to true) is broken, subscription title/header missing.
- UncollapseUpdatedLinks seems to be working fine.
- showLinksCount does not work at all.
- autoExpandCollapsed is fine, except as noted in moveUpdatedLinksToTop.

Update:

Just did a quick A/B, and UncollapseUpdatedLinks seems to have no effect. If moveUpdatedLinksToTop is set to true, it always displays exactly channels with new content, no more or less, although I have no yet tested with "zero" new content to see what happens.

jcunewsलेखक
§
पोस्ट केले: 2025-08-25

Script updated.

👍 wish they would just leave shit well enough alone.

When I click on a subscription link, it takes me to the homepage, not the videos page.

I've noticed that, as of today, it's no longer working consistently. It seems that /videos is not always being injected (noticed this on a hover over).

jcunewsलेखक
§
पोस्ट केले: 2025-10-20

When I click on a subscription link, it takes me to the homepage, not the videos page.

I noticed the problem but only for scripts which require page context (i.e. full access to page) which are run using ViolentMonkey. They either failed to be injected, or failed to run in page context. I suspect that, YouTube has changed something which ViolentMonkey couldn't handle.

I don't think this is solvable from my side. My workaround for above scripts is to move the failed scripts to TamperMonkey (again). If you're already using TamperMonkey, make sure TamperMonkey's Inject Mode setting is set to Instant instead of Default; and try changing Content Script API setting to UserScripts API Dynamic. Or play around on those two settings to see which works. FYI, the settings I mentioned are for Firefox. It could be different for Chrome/ium.

A side note: the script can not instantly change the link URLs, because the URLs must be pre-retrieved from the user/channel page (in the background). So, the link URLs will only change after the the user/channel page which is pointed by those links, have been retrieved and processed. i.e. there will be delay since a background network request is performed for each link. This is only done when the YouTube is freshly loaded, or when YouTube freshly loaded the sidebar content. How fast the link URL is actually changed, will depend on your internet speed and YouTube server speed. If it's slow enough, you'll have to be patient until the link you wanted, is finally changed. Knowing whether there's a pending background network or not, is the reason why I made the "Background Network Requests Indicator" script (like a HDD LED), because no web browser provides such feature.

Thanks @jcunews - also on Firefox, but unfortunately, Tapermonkey didn't work any better than VioletMonkey for me (with any combination of those settings).

Still, as much as that feature was useful, having new content channels sorted to top is most important, thanks for that. YouTube is such a ball ache.

Not my code (generated with LLM), but this seems to work with left hand channel menu links (on Firefox w/Violetmonkey):

(function() {
'use strict';

function isTabActive(tab) {
return tab.getAttribute('aria-selected') === 'true';
}

function clickVideosTab() {
const videoTab = Array.from(document.querySelectorAll('yt-tab-shape[role="tab"][tab-title="Videos"]'))
.find(el => el.textContent.trim().includes('Videos'));

if (videoTab && !isTabActive(videoTab)) {
videoTab.click();
}
}

const observer = new MutationObserver(() => {
const videoTab = document.querySelector('yt-tab-shape[role="tab"][tab-title="Videos"]');
if (videoTab && !isTabActive(videoTab)) {
// Delay a little to ensure page has stabilized
setTimeout(() => {
clickVideosTab();
}, 300);
observer.disconnect(); // Stop observing after clicking once
}
});

// Observe DOM mutations to trigger when the tabs load
observer.observe(document.body, { childList: true, subtree: true });
})();

§
पोस्ट केले: 2025-10-20
संपादित केले: 2025-10-20

Disregard, above does not work.

उत्तर पोस्ट करा

उत्तर पोस्ट करण्यासाठी साइन इन करा.