aadesh121/DSATube
aadesh121/DSATube has 6 GitHub stars and 0 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-14 16:24 UTC. Last push 2026-11-10.
Measured star growth
- in 24h
- +1
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Open-source YouTube made Only for DSA: 10,000+ Videos, 1,000+ playlists. No Unwanted Content.
Web & AppsREADME.md
OriginalDSATube
A YouTube-style site made only of DSA videos: thousands of tutorials, lectures and interview walkthroughs, 1000+ playlists, related-video suggestions, and sharp thumbnails. React + Tailwind + shadcn/ui components. No API keys needed.
1. Install these first
| Tool | Version | Check with | Download |
|---|---|---|---|
| Python | 3.9+ | python --version |
python.org |
| Node.js | 18+ | node --version |
nodejs.org |
| Git (only to deploy) | any | git --version |
git-scm.com |
If python isn't found, use python3 (and pip3) everywhere below.
2. Collect the data (the big step)
Open a terminal inside the folder, then:
pip install -r requirements.txt
python collect.py
It does three things:
- Videos: about 1,800 YouTube searches (14 topics x many terms x 12 styles such as
"tutorial", "in python", "in hindi"). Keeps DSA videos of 90 seconds to 12 hours,
removes duplicates and live streams. Stops at 12,000 videos (
--target). - Real YouTube playlists: finds up to 500 DSA playlists (
--playlists) and saves the videos inside them. - Collections: builds 1000+ more playlists from your video list (by topic, language, channel, "for beginners", "interview questions", ...). These show as "DSATube collection" so you can tell them apart from real YouTube playlists.
It takes a long time (roughly 1-2 hours for everything). That's normal; you'll see
progress lines. It is safe to stop: press Ctrl+C any time, progress is saved, and
running python collect.py again continues where it stopped.
For short sessions: python collect.py --max-minutes 20
Result: public/videos.json and public/playlists.json.
The exact numbers depend on what YouTube returns. If you end with fewer than 1000
playlists, run it again (more videos means more collections).
3. Run the website
npm install
npm run dev
4. Build the final site
npm run build
The finished website is the dist/ folder. Upload it to any static host
(Netlify, Vercel, Cloudflare Pages, GitHub Pages).
5. Deploy free on GitHub Pages
Do step 2 on your computer first, so the data files are full.
Create an empty repository on github.com named
dsatube.In this folder run:
git init git add . git commit -m "first commit" git branch -M main git remote add origin https://github.com/YOUR-USERNAME/dsatube.git git push -u origin mainGitHub: Settings > Pages > Build and deployment > Source: GitHub Actions.
Actions tab > "Update videos and deploy" > Run workflow.
In about 2 minutes:
https://YOUR-USERNAME.github.io/dsatube/
Every day GitHub tries to add more data and redeploys. YouTube sometimes blocks GitHub's
servers; then the site just keeps the data you uploaded. Re-run python collect.py on
your own computer now and then and push the result.
6. Using the site
- Tabs: Home, Playlists, Watch later, Liked videos, Watch history. Liked, saved and history are stored in your browser.
- Home: topic buttons, length filter, search (press
/), more videos load as you scroll. - Watching: the player is on the left and 40 related videos are on the right (below the player on phones). Press the player's fullscreen button and it fills the screen on its own, with no suggestions.
- Playlists: each card opens a page listing every video inside, with Play all and Shuffle. While a playlist plays, the queue shows above the related videos with previous / next buttons.
- The browser Back button works everywhere and returns you to where you were.
7. About thumbnails
YouTube does not provide 4K thumbnails. The largest it offers is "maxres" (up to 1280x720), and DSATube always loads that one. If a video has no maxres thumbnail it automatically falls back to the next best size.
8. Options for collect.py
| Option | Meaning |
|---|---|
--target 20000 |
stop video search at this many videos (default 12000) |
--playlists 800 |
real YouTube playlists to fetch (default 500, --skip-playlists to skip) |
--pl-videos 100 |
max videos taken from one playlist (default 60) |
--max-collections 2000 |
cap on generated collections (default 1500) |
--per-query 100 |
results requested per search (default 60) |
--max-minutes 30 |
stop after 30 minutes |
--reset |
forget finished searches and search everything again |
Add favourite channels to CHANNELS and new search terms to TOPICS at the top of collect.py.
9. Troubleshooting
| Problem | Fix |
|---|---|
| "No videos yet" | Run step 2, then refresh |
| Playlists tab empty | Run python collect.py (it builds playlists.json) |
yt-dlp is missing |
pip install -r requirements.txt |
| "YouTube returned nothing 6 times" | YouTube is rate-limiting you. Wait 30-60 min and run again (it resumes). Avoid VPNs |
| Few real playlists | Normal if YouTube changes its search page. pip install -U yt-dlp, run again. Collections still fill the tab |
| Collector seems stuck | Each search takes a few seconds. Ctrl+C is safe |
npm install fails |
Update Node.js to 18 or newer |
| Blank page after GitHub deploy | Wait 2 min, then hard refresh (Ctrl+Shift+R) |
| A video won't play | Its owner disabled embedding. Use the "YouTube" button on the watch page |
10. Project layout
collect.py collector: videos, playlists, collections
requirements.txt Python dependency (yt-dlp)
data/state.json remembers finished searches so runs can resume
public/videos.json video list (generated)
public/playlists.json playlist list (generated)
src/App.jsx routing, tabs, filters, infinite scroll
src/components/ WatchPage, PlaylistPage, cards, Thumb, ui/ (shadcn-style)
src/lib/related.js "related videos" ranking
src/lib/library.js Liked / Watch later / History (browser storage)
.github/workflows/ daily update + deploy