.idea | ||
app | ||
config | ||
nginx | ||
.gitignore | ||
docker-compose.yml | ||
Dockerfile | ||
README.md |
YouTube Subscription Manager
A self-hosted tool which manages your YouTube subscriptions, and downloads files automatically.
Current state
Currently, the program will do what it's main job is to do: download videos, and keep track of the subscriptions.
Of course, there are a lot of things that still need to be done. The web interface is still pretty limited. This is what still needs to be done:
- get status bar to actually display something (right now it's just a hardcoded message)
- add an indication of what the synchronization jobs are doing to the UI
- video page, which contains an embedded player
- OAuth YouTube authentication, so private playlists can be obtained
- Web UI improvements:
- Paging for videos
- Handle drag & drop for the subscription folders
- Update UI when something changes
- Improve stability
- Bonus: Plex integration
Docker
To run with docker, edit the config file (config/config.ini) and then run docker-compose up -d
, it will bind to port 80.
You can edit the default download locations in the docker-compose.yml file.
Dependencies
- python3:
$ apt install python3
- pip:
$ apt install python3-pip
- django:
$ pip3 install django
- crispy_forms:
$ pip3 install django-crispy-forms
- youtube-dl:
$ pip3 install youtube-dl
- google-api-python-client:
$ pip3 install google-api-python-client
- google_auth_oauthlib:
$ pip3 install google_auth_oauthlib
- apscheduler (v3.5+):
$ pip3 install apscheduler
- (recommended) oauth2client:
$ pip3 install oauth2client
Installation
-
Install all the dependencies listed above.
sudo apt install python3 python3-pip sudo pip3 install apscheduler django django-crispy-forms youtube-dl google-api-python-client google_auth_oauthlib oauth2client
-
Clone this repository:
git clone https://github.com/chibicitiberiu/ytsm.git cd ytsm
-
Set up the database:
python3 manage.py migrate
By default, a SQLite database is used, which is located in the project's folder. You can customize that in
YtManager/settings.py
, by modifying theDATABASES
variable (search Django documentation for details). -
Set up the
MEDIA_ROOT
variable inYtManager/settings.py
. This is where the thumbnails will be downloaded. (note: this will be moved toconfig.ini
in the future). -
Obtain an YouTube API developer key from https://console.developers.google.com/apis/dashboard. You can find a detailed guide on this page.
The
defaults.ini
file already has an API key, but if the quotas are reached, you won't be able to use this program any more. Also, I might decide to delete that key, which will break your installation. -
Modify
config/config.ini
to your liking. All the settings should be documented through comments. All these settings apply server-wide. The settings in theuser
section can be overriden from the web page for each individual user.The most important settings are:
[Global] YoutubeApiKey
- put your YouTube API key here[User] DownloadPath
- sets the folder where videos will be downloaded
-
Start the server:
python3 manage.py runserver [port] --noreload
The
port
parameter is optional.The
--noreload
option is necessary, otherwise the scheduler will run on 2 separate processes at the same time, which is not ideal. -
Open the server's page in your browser, by entering
http://localhost:port
in your address bar. -
Create an admin user by going to the register page, and creating an user account.
-
Add some subscriptions, and enjoy!
Correct deploying procedure
This is a django project, so the correct way to deploy it to a server would be by using mod_wsgi. Since this project is still in development, I haven't really thought about getting it ready for production.
If you are willing to try that, you can find the information on how to deploy this application on the Django website.