Taken from my YouTube channel on 2024-08-29.
Count | Channel list (click to scroll to the list) |
---|---|
47 | → Entertainer (General List) |
36 | → Animations |
23 | → Mechanics |
34 | → Documentaries |
8 | → Backrooms / SCP |
26 | → Science |
23 | → Technology |
14 | → Maths |
9 | → Electronics |
38 | → Game dev |
258 Total / 243 Unique
Create your own list (on your YouTube channel).
Click to hide 47 channels
- Markiplier
- Gronkh
- DatPags
- This Old Tony
- TomSka
- Adam Savage’s Tested
- colinfurze
- Harry101UK
- The Game Theorists
- grayfruit
- Alan Becker
- RocketJump
- Gorillaz
- Oxhorn
- The 8-Bit Guy
- Code Bullet
- 8-Bit Keys
- Davis Schulz
- Chillyman
- Takuya Okada
- David Firth
- Pirate Software
- James Lee
- Peter Draws
- The Living Tombstone
- AstralSpiff
- Insym
- IngameAsylum
- Primitive Technology
- Wintergatan
- PietSmiet
- Evan Kale
- Davie504
- Linus Tech Tips
- NoCopyrightSounds
- Quarks
- simpleclub - Die Lernapp
- Doktor Allwissend
- kiwami japan
- Vinheteiro
- Sheet Music Boss
- Kevin MacLeod
- Jay & Arya
- iBlali
- ApeCrime
- WBS LEGAL
- TKOR
Click to hide 36 channels
- newgrounds
- TerminalMontage
- NCHProductions
- Hyun's Dojo Community
- Cas van de Pol
- Liam Vickers Animation
- Krinkels
- Felix Colgrave
- James Lee
- Gildedguy
- dillongoo
- [JaimeR]
- GeoExe
- TomSka
- Alan Becker
- David Firth
- Corridor
- 2spotstudio
- pwnisher
- Sam Green
- Sr Pelo
- からめる
- ExplosmEntertainment
- beeple
- u m a m i
- CS Ghost Animation
- The Jam Cave
- Worthikids
- Flashgitz
- Jhanzou
- Gooseworx
- Element Animation
- Crazy Boris Productions
- Zetabrand
- RubberRoss
- Animationcraft
Click to hide 23 channels
- This Old Tony
- Clickspring
- DIY Perks
- Adam Savage’s Tested
- colinfurze
- AWE me
- Hand Tool Rescue
- my mechanics
- Inheritance Machining
- Zack Freedman
- Hacksmith Industries
- Fireball Tool
- MatthiasWandel
- I did a thing
- Daniel de Bruin
- Mark Rober
- James Bruton
- CNC Kitchen
- Dalibor Farný
- Alec Steele
- Stuff Made Here
- Marius Hornberger
- Chronova Engineering
Click to hide 34 channels
- LEMMiNO
- Ahoy
- Fredrik Knudsen
- Internet Historian
- Jules
- Tom Scott
- Nick Robinson
- UpIsNotJump
- hbomberguy
- Wendigoon
- BobbyBroccoli
- Thoughty2
- Summoning Salt
- Brew
- DidYouKnowGaming
- Noodle
- Simplicissimus
- Curious Archive
- Extra History
- Cinemassacre
- The Cinema Cartography
- Shesez
- FitMC
- Oxhorn
- EZScape
- Retro Game Mechanics Explained
- MrRhexx
- Think That Through
- Y-Kollektiv
- Ultralativ
- Whang!
- Aperture
- Nexpo
- Insider
Click to hide 8 channels
Click to hide 26 channels
- Kurzgesagt – In a Nutshell
- Veritasium
- The Organic Chemistry Tutor
- The Thought Emporium
- Vsauce
- AlphaPhoenix
- The Science Asylum
- SmarterEveryDay
- The Slow Mo Guys
- NileRed
- MAITHINK X
- NurdRage
- Explosions&Fire
- Chubbyemu
- Cody'sLab
- The Action Lab
- Applied Science
- TheBackyardScientist
- Periodic Videos
- minutephysics
- MIT OpenCourseWare
- Improbable Matter
- NightHawkInLight
- Breaking Taps
- Real Engineering
- Practical Engineering
Click to hide 23 channels
Click to hide 14 channels
Click to hide 9 channels
Click to hide 38 channels
- Game Maker's Toolkit
- Brackeys
- Mental Checkpoint
- Sebastian Lague
- Acerola
- Jonas Tyroller
- javidx9
- Freya Holmér
- Virtus Learning Hub
- Let's GameDev
- GDC
- Codeer
- Steven
- John Lin
- Mythic Legion
- Sam Hogan
- ThatGuyGlen
- Gabriel Aguiar Prod.
- Daniel Ilett
- Suboptimal Engineer
- thebennybox
- Travis Vroman
- SimonDev
- The Art of Code
- Retro Game Mechanics Explained
- Code Monkey
- Pirate Software
- t3ssel8r
- Threat Interactive
- Jump Trajectory
- Pontypants
- Dani
- NesHacker
- Lychee Game Labs
- iHeartGameDev
- Piranha Bytes
- Randy
- The Good Trash
You can create your personal featured channel (or playlist) listings on your YouTube channel:
- Open YouTube studio (https://studio.youtube.com) and log in
- or click on your avatar on any YouTube page (top right) and click
YouTube Studio
- or click on your avatar on any YouTube page (top right) and click
- On the sidebar click
Customization
- choose tab
Layout
if it's not already - scroll down to
Featured sections
- add (up to 12) sections (channels/playlist(s)/videos) via the
ADD SECTION
button
Optionally, when you want to link to a section via the #:~:text=
(URL Fragment Text Directives), as I did here, then it's best to choose a unique prefix, as I did with → <name>
, so it doesn't accidentally match (and scroll to) some video title with that name in it on the page
Scroll TOP
Open a channels-page like https://www.youtube.com/@MAZ01001/channels?view=49&flow=grid&shelf_id=3 and load the entire page by scrolling all the way down.
YouTube removed featured-channels pages, so now, you click on the title / "View all" on the channel list panel (e.g., https://www.youtube.com/@MAZ01001#:~:text=%E2%86%92%20Entertainer%20(General%20List)) and make sure the entire list is loaded by scrolling all the way down.
Then, open developer-console [F12] and copy-paste the following code:
(()=>{//~ copy featured channels panel list as markdown
"use strict";
const base=Array.prototype.filter.call(
document.querySelectorAll("ytd-app ytd-popup-container>tp-yt-paper-dialog:has(ytd-engagement-panel-section-list-renderer)"),
panel=>panel.checkVisibility()
)[0];
if(base==null)return"couldn't find channel panel";
const list=Array.prototype.map.call(
base.querySelectorAll("div#content>ytd-section-list-renderer ytd-grid-renderer div#items>ytd-grid-channel-renderer"),
channel=>(link=>`- <img alt="Channel icon" title="Channel icon" height="32" src="${channel.querySelector("img#img").src}"> [${channel.querySelector("span#title").textContent.replace(/([\\[\]])/g,"\\$1")}](${link} "${link.substring(24).replace(/([\\"])/g,"\\$1")}")`)(channel.querySelector("a#channel-info").href)
),title=base.querySelector("ytd-engagement-panel-title-header-renderer #title>yt-formatted-string#title-text").textContent;
console.log("found %i channels in list: %s",list.length,title);
return(markdown=>window.copy?(window.copy(markdown),"markdown copied"):markdown)(`## [${title.replace(/([\\[\]])/g,"\\$1")}](${location.protocol}//${location.host+location.pathname.replace("/featured","")}#:~:text=${encodeURIComponent(title)} "View list on YouTube")\n\n<details open><summary>Click to hide ${list.length} channels</summary>\n\n${list.join("\n")}\n\n</details>`);
})();
It copies (or prints out) the entire list formatted as markdown, including the title and the number of channels (exactly like the lists here).
Alternatively, you can, instead of pasting the above code into the dev-console, create a new bookmark named something like YT featured channels to markdown
with the following text as the URL and click on it whenever you need to copy the list (without opening dev-console).
javascript:(base=>base==null?alert("Couldn't find channel panel"):((list,title)=>navigator.clipboard.writeText(`## [${title.replace(/([\\[\]])/g,"\\$1")}](${location.protocol}//${location.host+location.pathname.replace("/featured","")}#:~:text=${encodeURIComponent(title)} "View list on YouTube")\n\n<details open><summary>Click to hide ${list.length} channels</summary>\n\n${list.join("\n")}\n\n</details>`).then(()=>alert(`Markdown list ${title} with ${list.length} channels copied`)).catch(reason=>alert("Couldn't copy markdown, reason: %O",reason)))(Array.prototype.map.call(base.querySelectorAll("div#content>ytd-section-list-renderer ytd-grid-renderer div#items>ytd-grid-channel-renderer"),channel=>(link=>`- <img alt="Channel icon" title="Channel icon" height="32" src="${channel.querySelector("img#img").src}"> [${channel.querySelector("span#title").textContent.replace(/([\\[\]])/g,"\\$1")}](${link} "${link.substring(24).replace(/([\\"])/g,"\\$1")}")`)(channel.querySelector("a#channel-info").href)),base.querySelector("ytd-engagement-panel-title-header-renderer #title>yt-formatted-string#title-text").textContent))(Array.prototype.filter.call(document.querySelectorAll("ytd-app ytd-popup-container>tp-yt-paper-dialog:has(ytd-engagement-panel-section-list-renderer)"),panel=>panel.checkVisibility())[0]);
Also, if you want to have the channel icons available offline, use the following; a lot larger since it stores all images in base64 text (data URL):
await(async()=>{//~ copy featured channels panel list as markdown (100% offline version - async)
"use strict";
const base=Array.prototype.filter.call(
document.querySelectorAll("ytd-app ytd-popup-container>tp-yt-paper-dialog:has(ytd-engagement-panel-section-list-renderer)"),
panel=>panel.checkVisibility()
)[0];
if(base==null)return"couldn't find channel panel";
const img=Object.assign(new Image(),{loading:"eager",crossOrigin:"anonymous"}),
cnv=document.createElement("canvas"),
cnx=cnv.getContext("2d"),
loadIMG=async src=>{
"use strict";
const p=new Promise(L=>img.onload=L);
img.src=src;
await p;
cnv.width=img.naturalWidth;
cnv.height=img.naturalHeight;
cnx.drawImage(img,0,0);
return cnv.toDataURL();
},
list=[...base.querySelectorAll("div#content>ytd-section-list-renderer ytd-grid-renderer div#items>ytd-grid-channel-renderer")],
title=base.querySelector("ytd-engagement-panel-title-header-renderer #title>yt-formatted-string#title-text").textContent;
for(let i=0;i<list.length;++i){
const channel=list[i],
link=channel.querySelector("a#channel-info").href;
list[i]=`- <img alt="Channel icon" title="Channel icon" height="32" src="${await loadIMG(channel.querySelector("img#img").src)}"> [${channel.querySelector("span#title").textContent.replace(/([\\[\]])/g,"\\$1")}](${link} "${link.substring(24).replace(/([\\"])/g,"\\$1")}")`;
}
console.log("found %i channels in list: %s",list.length,title);
return(markdown=>window.copy?(window.copy(markdown),"markdown copied"):markdown)(`## [${title.replace(/([\\[\]])/g,"\\$1")}](${location.protocol}//${location.host+location.pathname.replace("/featured","")}#:~:text=${encodeURIComponent(title)} "View list on YouTube")\n\n<details open><summary>Click to hide ${list.length} channels</summary>\n\n${list.join("\n")}\n\n</details>`);
})();
Scroll TOP