Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9566c2fcc | ||
|
|
dfd29e9e0b | ||
|
|
fc61a00beb | ||
|
|
a05ae0b9f4 | ||
| 185d6efc5a | |||
| 76e8832071 | |||
| 7d2503fe77 | |||
|
|
dcd80b7366 | ||
|
|
515888b156 | ||
|
|
57cc86d328 |
6
.github/workflows/docker-publish.yml
vendored
6
.github/workflows/docker-publish.yml
vendored
@@ -8,12 +8,12 @@ name: Docker
|
||||
on:
|
||||
# schedule:
|
||||
# - cron: '39 13 * * *'
|
||||
push:
|
||||
release:
|
||||
branches: [ master ]
|
||||
# Publish semver tags as releases.
|
||||
tags: [ 'v*.*.*' ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
# pull_request:
|
||||
# branches: [ master ]
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM alpine:3.17
|
||||
# folder structure
|
||||
WORKDIR /usr/src/yt-dlp-webui/downloads
|
||||
VOLUME /usr/src/yt-dlp-webui/downloads
|
||||
VOLUME /downloads
|
||||
WORKDIR /usr/src/yt-dlp-webui
|
||||
# install core dependencies
|
||||
RUN apk update
|
||||
@@ -17,4 +17,4 @@ WORKDIR /usr/src/yt-dlp-webui
|
||||
RUN go build -o yt-dlp-webui
|
||||
# expose and run
|
||||
EXPOSE 3033
|
||||
CMD [ "yt-dlp-webui" , "--out", "./downloads" ]
|
||||
CMD [ "./yt-dlp-webui" , "--out", "/downloads" ]
|
||||
|
||||
29
README.md
29
README.md
@@ -11,13 +11,14 @@ The bottleneck remains yt-dlp startup time (until yt-dlp will provide a rpc inte
|
||||
|
||||
**I strongly recomend the ghcr build instead of docker hub one.**
|
||||
|
||||
```shell
|
||||
docker pull ghcr.io/marcopeocchi/yt-dlp-web-ui:master
|
||||
```sh
|
||||
docker pull ghcr.io/marcopeocchi/yt-dlp-web-ui:latest
|
||||
```
|
||||
|
||||
---
|
||||

|
||||

|
||||
|
||||
Changelog:
|
||||
## Changelog
|
||||
```
|
||||
05/03/22: Korean translation by kimpig
|
||||
|
||||
@@ -40,15 +41,11 @@ Refactoring and JSDoc.
|
||||
|
||||
08/06/22: ARM builds.
|
||||
|
||||
28/02/22: Reworked resume download feature. Now it's pratically instantaneous. It no longer stops and restarts each process, references to each process are saved in memory.
|
||||
28/06/22: Reworked resume download feature. Now it's pratically instantaneous. It no longer stops and restarts each process, references to each process are saved in memory.
|
||||
|
||||
12/01/23: Switched from TypeScript to Golang on the backend. It was a great effort but it was worth it.
|
||||
```
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
## Settings
|
||||
|
||||
The currently avaible settings are:
|
||||
@@ -85,22 +82,22 @@ Future releases will have:
|
||||
- **The download doesn't start.**
|
||||
- As before server address is not specified or simply yt-dlp process takes a lot of time to fire up. (Forking yt-dlp isn't fast especially if you have a lower-end/low-power NAS/server/desktop where the server is running)
|
||||
|
||||
## [Docker](https://github.com/marcopeocchi/yt-dlp-web-ui/pkgs/container/yt-dlp-web-ui/63294924?tag=master) installation
|
||||
## [Docker](https://github.com/marcopeocchi/yt-dlp-web-ui/pkgs/container/yt-dlp-web-ui) installation
|
||||
```sh
|
||||
# recomended for ARM and x86 devices
|
||||
docker pull ghcr.io/marcopeocchi/yt-dlp-web-ui:master
|
||||
docker run -d -p 3022:3022 -v <your dir>:/usr/src/yt-dlp-webui/downloads ghcr.io/marcopeocchi/yt-dlp-web-ui:master
|
||||
docker pull ghcr.io/marcopeocchi/yt-dlp-web-ui:latest
|
||||
docker run -d -p 3033:3033 -v <your dir>:/usr/src/yt-dlp-webui/downloads ghcr.io/marcopeocchi/yt-dlp-web-ui:latest
|
||||
|
||||
# or even
|
||||
docker pull ghcr.io/marcopeocchi/yt-dlp-web-ui:master
|
||||
docker create --name yt-dlp-webui -p 8082:3022 -v <your dir>:/usr/src/yt-dlp-webui/downloads ghcr.io/marcopeocchi/yt-dlp-web-ui:master
|
||||
docker pull ghcr.io/marcopeocchi/yt-dlp-web-ui:latest
|
||||
docker create --name yt-dlp-webui -p 8082:3033 -v <your dir>:/usr/src/yt-dlp-webui/downloads ghcr.io/marcopeocchi/yt-dlp-web-ui:latest
|
||||
```
|
||||
|
||||
Or with docker but building the container manually.
|
||||
|
||||
```sh
|
||||
docker build -t yt-dlp-webui .
|
||||
docker run -d -p 3022:3022 -v <your dir>:/usr/src/yt-dlp-webui/downloads yt-dlp-webui
|
||||
docker run -d -p 3033:3033 -v <your dir>:/usr/src/yt-dlp-webui/downloads yt-dlp-webui
|
||||
```
|
||||
|
||||
## [Prebuilt binaries](https://github.com/marcopeocchi/yt-dlp-web-ui/releases) installation
|
||||
@@ -197,4 +194,4 @@ For more information open an issue on GitHub and I will provide more info ASAP.
|
||||
- I genuinely don't know. I know that standalone yt-dlp is slow to start up even on my M1 Mac, so....
|
||||
|
||||
## What yt-dlp-webui is not
|
||||
`yt-dlp-webui` isn't your ordinary website where downloading stuff from the internet, so don't try asking for links of where this is hosted. It's a self hosted platform for a Linux NAS.
|
||||
`yt-dlp-webui` isn't your ordinary website where to download stuff from the internet, so don't try asking for links of where this is hosted. It's a self hosted platform for a Linux NAS.
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "Downloading latest yt-dlp build..."
|
||||
|
||||
rm -f yt-dlp
|
||||
|
||||
RELEASE=$(curl --silent "https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||
|
||||
wget "https://github.com/yt-dlp/yt-dlp/releases/download/$RELEASE/yt-dlp"
|
||||
|
||||
chmod +x yt-dlp
|
||||
|
||||
echo "Done!"
|
||||
@@ -15,7 +15,6 @@
|
||||
"@mui/icons-material": "^5.6.2",
|
||||
"@mui/material": "^5.6.4",
|
||||
"@reduxjs/toolkit": "^1.8.1",
|
||||
"radash": "^10.6.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-redux": "^8.0.1",
|
||||
@@ -32,8 +31,6 @@
|
||||
"@types/uuid": "^8.3.4",
|
||||
"@vitejs/plugin-react": "^1.3.2",
|
||||
"buffer": "^6.0.3",
|
||||
"path-browserify": "^1.0.1",
|
||||
"process": "^0.11.10",
|
||||
"typescript": "^4.6.4",
|
||||
"vite": "^2.9.10"
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ export default function Home({ socket }: Props) {
|
||||
socket.onopen = () => {
|
||||
dispatch(connected())
|
||||
setCustomArgs(localStorage.getItem('last-input-args') ?? '')
|
||||
setFilenameOverride(localStorage.getItem('last-filename-override') ?? '')
|
||||
}
|
||||
}, [])
|
||||
|
||||
@@ -136,7 +137,6 @@ export default function Home({ socket }: Props) {
|
||||
|
||||
setUrl('')
|
||||
setWorkingUrl('')
|
||||
setFilenameOverride('')
|
||||
|
||||
setTimeout(() => {
|
||||
resetInput()
|
||||
@@ -179,6 +179,7 @@ export default function Home({ socket }: Props) {
|
||||
*/
|
||||
const handleFilenameOverrideChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
setFilenameOverride(e.target.value)
|
||||
localStorage.setItem('last-filename-override', e.target.value)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -297,6 +298,7 @@ export default function Home({ socket }: Props) {
|
||||
fullWidth
|
||||
label={i18n.t('customFilename')}
|
||||
variant="outlined"
|
||||
value={fileNameOverride}
|
||||
onChange={handleFilenameOverrideChange}
|
||||
disabled={!status.connected || (settings.formatSelection && downloadFormats != null)}
|
||||
/>
|
||||
|
||||
@@ -72,15 +72,15 @@ languages:
|
||||
toastConnected: '已连接到 '
|
||||
toastUpdated: 已更新 yt-dlp 可执行文件!
|
||||
formatSelectionEnabler: 启用视频/音频格式选择
|
||||
themeSelect: 'Theme'
|
||||
languageSelect: 'Language'
|
||||
overridesAnchor: Overrides
|
||||
pathOverrideOption: Enable output path overriding
|
||||
filenameOverrideOption: Enable output file name overriding
|
||||
customFilename: Custom filemame (leave blank to use default)
|
||||
customPath: Custom path
|
||||
customArgs: Enable custom yt-dlp args (great power = great responsabilities)
|
||||
customArgsInput: Custom yt-dlp arguments
|
||||
themeSelect: '主题'
|
||||
languageSelect: '语言'
|
||||
overridesAnchor: 覆盖
|
||||
pathOverrideOption: 启用输出路径覆盖
|
||||
filenameOverrideOption: 启用输出文件名覆盖
|
||||
customFilename: 自定义文件名(留空使用默认值)
|
||||
customPath: 自定义路径
|
||||
customArgs: 启用自定义 yt-dlp 参数(能力越大 = 责任越大)
|
||||
customArgsInput: 自定义 yt-dlp 参数
|
||||
spanish:
|
||||
urlInput: YouTube or other supported service video url
|
||||
statusTitle: Status
|
||||
@@ -188,4 +188,4 @@ languages:
|
||||
customFilename: Custom filemame (leave blank to use default)
|
||||
customPath: Custom path
|
||||
customArgs: Enable custom yt-dlp args (great power = great responsabilities)
|
||||
customArgsInput: Custom yt-dlp arguments
|
||||
customArgsInput: Custom yt-dlp arguments
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
// @ts-nocheck
|
||||
import i18n from "../../assets/i18n.yaml";
|
||||
import i18n from "../../assets/i18n.yaml"
|
||||
|
||||
export default class I18nBuilder {
|
||||
private language: string;
|
||||
private textMap = i18n.languages;
|
||||
private language: string
|
||||
private textMap = i18n.languages
|
||||
|
||||
constructor(language: string) {
|
||||
this.language = language;
|
||||
this.language = language
|
||||
}
|
||||
|
||||
getLanguage(): string {
|
||||
return this.language;
|
||||
return this.language
|
||||
}
|
||||
|
||||
setLanguage(language: string): void {
|
||||
this.language = language;
|
||||
this.language = language
|
||||
}
|
||||
|
||||
t(key: string): string {
|
||||
const map = this.textMap[this.language]
|
||||
if (map) {
|
||||
const translation = map[key];
|
||||
return translation ?? 'caption not defined';
|
||||
const translation = map[key]
|
||||
return translation ?? 'caption not defined'
|
||||
}
|
||||
return 'caption not defined';
|
||||
return 'caption not defined'
|
||||
}
|
||||
}
|
||||
@@ -20,10 +20,13 @@ export class RPCClient {
|
||||
}
|
||||
|
||||
private sendHTTP<T>(req: RPCRequest) {
|
||||
return new Promise<RPCResponse<T>>((resolve, reject) => {
|
||||
return new Promise<RPCResponse<T>>((resolve) => {
|
||||
fetch(getHttpRPCEndpoint(), {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(req)
|
||||
body: JSON.stringify({
|
||||
id: this.incrementSeq(),
|
||||
...req
|
||||
})
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => resolve(data))
|
||||
@@ -59,6 +62,7 @@ export class RPCClient {
|
||||
|
||||
public running() {
|
||||
this.send({
|
||||
id: this.incrementSeq(),
|
||||
method: 'Service.Running',
|
||||
params: [],
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user