Routes
/youtube/user/:username/:routeParams?
/youtube/channel/:id/:routeParams?
Full routes
/youtube/user/@JFlaMusic
/youtube/user/@bellafinance
/youtube/channel/UCDwDMPOZfxVV0x_dz0eQ8KQ
Related documentation
https://docs.rsshub.app/routes/social-media#youtube-channel-with-username
What is expected?
YouTube user and channel routes should return valid RSS feeds containing video items when using the youtubei.js fallback (without YOUTUBE_KEY).
What is actually happening?
All YouTube user/channel routes return HTTP 503 with error: "this route is empty".
Root Cause: YouTube's internal API now returns LockupView objects from channel.getVideos() instead of Video/GridVideo. The code at lib/routes/youtube/api/youtubei.ts filters with .filter((video) => 'video_id' in video), which filters out all videos because LockupView uses content_id instead.
| Property |
Legacy (Video/GridVideo) |
New (LockupView) |
| Video ID |
video.video_id |
video.content_id |
| Title |
video.title.text |
video.metadata.title.text |
| Thumbnail |
video.best_thumbnail.url |
video.content_image.image[0].url |
| Publish date |
video.published.text |
metadata.metadata.metadata_rows[].text.text (matching /ago$/i) |
| Duration |
video.duration.seconds |
Parsed from content_image.overlays[].badges[].text (e.g. "3:22") |
Deployment information
Self-hosted
Deployment information (for self-hosted)
OS: Ubuntu 24.04 (Alibaba Cloud HK ACK), Node: v24.18.0, Docker: diygod/rsshub:latest (commit 6d77bd8, 2026-07-09), youtubei.js: 17.2.0
Additional info
# Verified from inside the running container:
$ node -e "
const { Innertube } = require(youtubei.js);
(async () => {
const yt = await Innertube.create();
const ch = await yt.getChannel(UClkRzsdvg7_RKVhwDwiDZOA);
const vids = await ch.getVideos();
console.log(type:, vids.videos[0]?.type); // LockupView
console.log(content_id:, vids.videos[0]?.content_id); // iFDpCiaaY2Q
console.log(video_id:, vids.videos[0]?.video_id); // undefined
})();
"
type: LockupView
content_id: iFDpCiaaY2Q
video_id: undefined
Related closed issues: #22166, #21961 (both auto-closed without fix)
Routes
Full routes
Related documentation
https://docs.rsshub.app/routes/social-media#youtube-channel-with-username
What is expected?
YouTube user and channel routes should return valid RSS feeds containing video items when using the youtubei.js fallback (without
YOUTUBE_KEY).What is actually happening?
All YouTube user/channel routes return HTTP 503 with error: "this route is empty".
Root Cause: YouTube's internal API now returns
LockupViewobjects fromchannel.getVideos()instead ofVideo/GridVideo. The code atlib/routes/youtube/api/youtubei.tsfilters with.filter((video) => 'video_id' in video), which filters out all videos becauseLockupViewusescontent_idinstead.video.video_idvideo.content_idvideo.title.textvideo.metadata.title.textvideo.best_thumbnail.urlvideo.content_image.image[0].urlvideo.published.textmetadata.metadata.metadata_rows[].text.text(matching/ago$/i)video.duration.secondscontent_image.overlays[].badges[].text(e.g. "3:22")Deployment information
Self-hosted
Deployment information (for self-hosted)
OS: Ubuntu 24.04 (Alibaba Cloud HK ACK), Node: v24.18.0, Docker: diygod/rsshub:latest (commit 6d77bd8, 2026-07-09), youtubei.js: 17.2.0
Additional info
Related closed issues: #22166, #21961 (both auto-closed without fix)