- Setting up the environment
- Downloading your first playlist or channel
- Checking download progress
- Adding new playlists while itβs running
- Managing multiple playlists safely
This guide assumes youβre using the Docker-based version of the yt-dlp scheduler setup described earlier.
- Docker (and optionally Docker Compose)
- Internet access
- Basic command-line usage
Create a working folder, for example:
mkdir -p ~/yt_scheduler/{config,logs,downloads}
cd ~/yt_schedulerYou should have:
yt_scheduler/
βββ config/ # contains urls.txt and downloaded.txt
βββ logs/ # contains download.log
βββ downloads/ # where videos will be saved
From inside yt_scheduler/ (where your Dockerfile is):
docker build -t yt-scheduler .In config/urls.txt, add one YouTube link per line.
Example:
https://www.youtube.com/playlist?list=PLabc123...
https://www.youtube.com/@examplechannel
π‘ You can mix playlists and channels β
yt-dlpwill handle both.
If you donβt want to paste manually, you can generate the list automatically:
yt-dlp --flat-playlist -i --get-id "https://youtube.com/playlist?list=PLabc123..." \
| sed 's#^#https://youtu.be/#' >> config/urls.txtdocker run -d \
--name yt_downloader \
-e MAX_PER_DAY=5 \
-e DELAY_HOURS=4 \
-v $(pwd)/config:/app/config \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/downloads:/app/downloads \
yt-schedulerThe downloader now:
- Reads all links from
config/urls.txt - Downloads up to 5 videos per day
- Waits 4 hours between downloads
- Logs to
logs/download.log
You can adjust limits anytime by changing environment variables and restarting the container.
See whatβs happening in real time:
docker logs -f yt_downloaderYouβll see messages like:
[2025-11-05 10:00:00] Starting download: https://youtu.be/abcd123
[2025-11-05 10:10:00] Completed: https://youtu.be/abcd123
[2025-11-05 10:10:00] Sleeping for 4.23 hours before next download.
All activity is also written to:
logs/download.log
You can view it anytime:
tail -n 50 logs/download.logAll completed videos are stored in:
downloads/
Organized by playlist or channel name.
Yes β you can safely add new playlists while the container is running!
Hereβs how:
-
Edit your
config/urls.txton the host machine. Add new YouTube playlist or channel URLs (one per line). Example:https://www.youtube.com/playlist?list=PLabc123... https://www.youtube.com/@newchannel -
Save the file β the container will automatically process new entries the next time it loops through the list. It wonβt re-download videos already in
downloaded.txt. -
If you want to force it to check right away, you can restart the container:
docker restart yt_downloader
The script resumes where it left off, keeping all logs and archives intact.
You have two options:
- Just keep appending URLs to the same
config/urls.txt. - The script downloads all items sequentially.
- Good if youβre fine with one long queue.
If you want each playlist handled independently, give each its own folders:
yt_scheduler/
βββ playlist1/{config,logs,downloads}
βββ playlist2/{config,logs,downloads}
Run each with a unique container name and volume bindings:
docker run -d \
--name yt_playlist1 \
-e MAX_PER_DAY=5 \
-e DELAY_HOURS=4 \
-v $(pwd)/playlist1/config:/app/config \
-v $(pwd)/playlist1/logs:/app/logs \
-v $(pwd)/playlist1/downloads:/app/downloads \
yt-scheduler
docker run -d \
--name yt_playlist2 \
-e MAX_PER_DAY=3 \
-e DELAY_HOURS=6 \
-v $(pwd)/playlist2/config:/app/config \
-v $(pwd)/playlist2/logs:/app/logs \
-v $(pwd)/playlist2/downloads:/app/downloads \
yt-schedulerEach container runs independently and maintains its own limits and schedules.
| Task | Command | Description |
|---|---|---|
| View running containers | docker ps |
Check if your downloader is active |
| Stop container | docker stop yt_downloader |
Pause downloads |
| Restart container | docker restart yt_downloader |
Resume downloads |
| Remove old container | docker rm yt_downloader |
Clean up |
| Update image | docker build -t yt-scheduler . |
Rebuild with latest code |
| View free disk space | du -sh downloads/ |
Monitor video storage |
β
Yes.
Just append new URLs to config/urls.txt. The script checks that file each time it finishes or restarts.
β The script keeps progress in:
downloaded.txt(prevents re-downloading)logs/download.log(records history)
When restarted, it picks up where it left off.
When the log ends with:
[YYYY-MM-DD HH:MM:SS] All videos processed.
and no new URLs remain in config/urls.txt.
Yes β just stop and restart with new values:
docker stop yt_downloader
docker rm yt_downloader
docker run -d \
-e MAX_PER_DAY=10 \
-e DELAY_HOURS=2 \
-v $(pwd)/config:/app/config \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/downloads:/app/downloads \
yt-schedulerUse only for:
- Your own videos
- Public domain or Creative Commons content Downloading copyrighted videos without permission violates YouTubeβs Terms of Service.