Compare commits
No commits in common. "c42fdb2127d465599e4910e12fbc3073612c640d" and "18ca12c1cb03766cdc89480c19d06e856bd51710" have entirely different histories.
c42fdb2127
...
18ca12c1cb
4
.gitignore
vendored
4
.gitignore
vendored
@ -4,7 +4,3 @@ __pycache__/
|
|||||||
.env
|
.env
|
||||||
node_modules/
|
node_modules/
|
||||||
examples/
|
examples/
|
||||||
data/
|
|
||||||
downloads/
|
|
||||||
logs/
|
|
||||||
params/
|
|
||||||
|
24
COPYING
24
COPYING
@ -1,24 +0,0 @@
|
|||||||
This is free and unencumbered software released into the public domain.
|
|
||||||
|
|
||||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
|
||||||
distribute this software, either in source code form or as a compiled
|
|
||||||
binary, for any purpose, commercial or non-commercial, and by any
|
|
||||||
means.
|
|
||||||
|
|
||||||
In jurisdictions that recognize copyright laws, the author or authors
|
|
||||||
of this software dedicate any and all copyright interest in the
|
|
||||||
software to the public domain. We make this dedication for the benefit
|
|
||||||
of the public at large and to the detriment of our heirs and
|
|
||||||
successors. We intend this dedication to be an overt act of
|
|
||||||
relinquishment in perpetuity of all present and future rights to this
|
|
||||||
software under copyright law.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
||||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
||||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
For more information, please refer to <http://unlicense.org/>
|
|
11
Dockerfile
11
Dockerfile
@ -1,11 +0,0 @@
|
|||||||
FROM alpine:latest
|
|
||||||
RUN apk update && apk add --no-cache python3 py3-pip
|
|
||||||
RUN mkdir -p /opt/ydl_web_ui
|
|
||||||
ADD requirements.txt web_ui/ /opt/ydl_web_ui
|
|
||||||
WORKDIR /opt/ydl_web_ui
|
|
||||||
RUN pip install --disable-pip-version-check --requirement requirements.txt
|
|
||||||
RUN pip install --disable-pip-version-check gunicorn
|
|
||||||
EXPOSE 3000
|
|
||||||
USER nobody
|
|
||||||
ENV YDL_API_HOST=
|
|
||||||
CMD gunicorn router:app --bind :3000
|
|
4
Makefile
4
Makefile
@ -10,7 +10,3 @@ run:
|
|||||||
lint:
|
lint:
|
||||||
pipenv run black $(SRCDIR)
|
pipenv run black $(SRCDIR)
|
||||||
pipenv run pylint $(SRCDIR)
|
pipenv run pylint $(SRCDIR)
|
||||||
|
|
||||||
image:
|
|
||||||
ver=$$(awk -F'= ' '/__version__/{gsub("\"", ""); print $$2}' web_ui/router.py) && \
|
|
||||||
sudo docker build . -t ydl-web-ui:$$ver -t ydl-web-ui:latest
|
|
||||||
|
48
README.md
48
README.md
@ -11,11 +11,10 @@ This UI is written for my personal use and may not have the features you would l
|
|||||||
|
|
||||||
# Roadmap
|
# Roadmap
|
||||||
|
|
||||||
- [x] Add Dockerfile and docker-compose.yml
|
- [ ] Add Dockerfile and docker-compose.yml
|
||||||
- [ ] Handle non-youtube links
|
- [ ] Handle non-youtube links
|
||||||
- [ ] Twitter
|
- [ ] Twitter
|
||||||
- [ ] Nicovideo
|
- [ ] Nicovideo
|
||||||
- [ ] vk.com
|
|
||||||
- [ ] Handle unsupported URLs
|
- [ ] Handle unsupported URLs
|
||||||
- [ ] YouTube playlists download
|
- [ ] YouTube playlists download
|
||||||
- [ ] Advanced settings
|
- [ ] Advanced settings
|
||||||
@ -23,50 +22,7 @@ This UI is written for my personal use and may not have the features you would l
|
|||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
## Docker Compose (easiest)
|
I recomment setup with Docker via [docker-compose.yml](docker-compose.yml).
|
||||||
|
|
||||||
Copy [docker-compose.yml](docker-compose.yml) and edit if you want.
|
|
||||||
|
|
||||||
Then up containers:
|
|
||||||
|
|
||||||
```
|
|
||||||
docker compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
ydl-web-ui will listen port 4011/tcp.
|
|
||||||
|
|
||||||
## Docker
|
|
||||||
|
|
||||||
1. [Setup ydl_api_ng](https://github.com/Totonyus/ydl_api_ng#installation).
|
|
||||||
|
|
||||||
2. Install Web UI.
|
|
||||||
|
|
||||||
You must specify your ydl_api_ng instance host as `YDL_API_HOST` environment variable.
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -d \
|
|
||||||
--name ydl_web_ui \
|
|
||||||
-p 4011:3000 \
|
|
||||||
-e YDL_API_HOST=http://1.2.3.4:5011 \
|
|
||||||
nxhs/ydl-web-ui:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
## Without Docker
|
|
||||||
|
|
||||||
Use python 3.6 or newer.
|
|
||||||
|
|
||||||
Replace `YDL_API_HOST` value to your actual ydl_api_ng instance URL.
|
|
||||||
|
|
||||||
```
|
|
||||||
python3 -m venv env
|
|
||||||
. env/bin/activate
|
|
||||||
pip install -r requirements.txt
|
|
||||||
pip install gunicorn
|
|
||||||
export YDL_API_HOST=http://1.2.3.4:5011
|
|
||||||
gunicorn --chdir=./web_ui router:app -b :3000
|
|
||||||
```
|
|
||||||
|
|
||||||
See also gunicorn deployment options: https://docs.gunicorn.org/en/latest/deploy.html
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
version: "3.1"
|
|
||||||
services:
|
|
||||||
web_ui:
|
|
||||||
container_name: ydl_web_ui
|
|
||||||
image: nxhs/ydl-web-ui
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
- api
|
|
||||||
ports:
|
|
||||||
- 4011:3000
|
|
||||||
environment:
|
|
||||||
- YDL_API_HOST=http://api:80
|
|
||||||
networks:
|
|
||||||
- ydl_api_ng
|
|
||||||
|
|
||||||
api:
|
|
||||||
container_name: ydl_api_ng
|
|
||||||
image: totonyus/ydl_api_ng
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
ports:
|
|
||||||
- 5011:80
|
|
||||||
volumes:
|
|
||||||
- ./params:/app/params
|
|
||||||
- ./logs:/app/logs
|
|
||||||
- ./downloads:/app/downloads
|
|
||||||
- ./data:/app/data
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
environment:
|
|
||||||
- UID=1000
|
|
||||||
- GID=1000
|
|
||||||
- NB_WORKERS=5
|
|
||||||
- LOG_LEVEL=error
|
|
||||||
# Redis will be disable is this value is not false, remember to also change the setting in params.ini file
|
|
||||||
- DISABLE_REDIS=false
|
|
||||||
networks:
|
|
||||||
- ydl_api_ng
|
|
||||||
|
|
||||||
redis:
|
|
||||||
container_name: ydl_api_ng_redis
|
|
||||||
image: redis
|
|
||||||
restart: unless-stopped
|
|
||||||
networks:
|
|
||||||
- ydl_api_ng
|
|
||||||
volumes:
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
|
|
||||||
networks:
|
|
||||||
ydl_api_ng:
|
|
@ -1,7 +1,5 @@
|
|||||||
"""ydl_api_ng Web UI."""
|
"""ydl_api_ng Web UI."""
|
||||||
|
|
||||||
__version__ = "0.1.0"
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
@ -31,13 +29,6 @@ def info():
|
|||||||
video_info["duration_in_hms"] = str(
|
video_info["duration_in_hms"] = str(
|
||||||
datetime.timedelta(seconds=int(video_info["duration"]))
|
datetime.timedelta(seconds=int(video_info["duration"]))
|
||||||
)
|
)
|
||||||
# Replace channel with uploader for non-YouTube sources
|
|
||||||
try:
|
|
||||||
video_info["channel_url"]
|
|
||||||
except KeyError:
|
|
||||||
video_info["channel_url"] = video_info["uploader_url"]
|
|
||||||
video_info["channel"] = video_info["uploader"]
|
|
||||||
|
|
||||||
return template("templates/video.tpl", video=video_info)
|
return template("templates/video.tpl", video=video_info)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user