tzahi12345 / youtubedl-material Goto Github PK
View Code? Open in Web Editor NEWSelf-hosted YouTube downloader built on Material Design
License: MIT License
Self-hosted YouTube downloader built on Material Design
License: MIT License
If a YouTube channel is large enough, users may not want to download all the videos. Instead, they may just want a list of videos, and when they click a particular one, it gets streamed directly to the user.
I need to do more research on the viability of this, but this excerpt from the youtube-dl README makes it seem possible:
If you want to play the video on a machine that is not running youtube-dl, you can relay the video content from the machine that runs youtube-dl. You can use -o - to let youtube-dl stream a video to stdout, or simply allow the player to download the files written by youtube-dl in turn.
A refactoring would need to be done of the subscriptions system. It would also make sense to have "streaming-only mode" be a playlist or channel-specific setting, rather than a global setting.
I run the docker version of this and over ride the UID/GID with docker run command. However this is causing permission problem when the docker try to download the latest youtube-dl package.
As it is a common practice to not run docker as root user, the fixed could be changing the write permission of "modules/youtube-dl/bin/" folder.
internal/streams/legacy.js:59
throw er; // Unhandled stream error in pipe.
^
[Error: EACCES: permission denied, open 'node_modules/youtube-dl/bin/youtube-dl'] {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: 'node_modules/youtube-dl/bin/youtube-dl'
}
This is more of a long-term thing I'd like to do, but getting YoutubeDL-Material integrated with hubs like Homelab OS and Sandstorm would help users get an easier deployment of this app on their favorite platform.
I've warmed up with getting Heroku support up and running, check out the button below:
So one-click installers is something that is very much possible! I'm interested in hearing what integrations you guys would like the most. Here is what I have so far, but feel free to discuss:
Some of these require some configuration to do on our end, but there are some lesser-known "app catalogs" like Puffin which seemingly doesn't require much at all besides a docker-compose.yml.
Comments and help would be very much appreciated! Hope you are all doing well through the extended quarantine :)
I'm having some problems with latest version.
No matter what quality i select but ytdl-m ignores it and download highest quality video.
Here i select 144p but it's still downloading 1080p
I also tried using custom args to fetch different resolution
-f bestvideo[height=360][ext=mp4]+bestaudio
Or
-o "%(title)s.%(ext)s" -f bestvideo[height=360][ext=mp4]+bestaudio
But this causes download failed and shows error in terminal.
ERROR: u'' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:" ) to search YouTube (node:1) UnhandledPromiseRejectionWarning: Error: Command failed with exit code 1: /app/node_modules/youtube-dl/bin/youtube-dl -i -o "%(title)s" -f bestvideo[height=360][ext=mp4]+bestaudio[ext=m4a] https://youtu.be/992OYXQY18w at makeError (/app/node_modules/execa/lib/error.js:56:11) at handlePromise (/app/node_modules/execa/index.js:114:26) at runMicrotasks (<anonymous>) at processTicksAndRejections (internal/process/task_queues.js:94:5) (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 5)
Manually inserting it is a little cumbersome and making automated installs that aren't just re-installs or updates wonky. :)
A often-requested feature is adding the ability to have user logins. I have generally avoided it as doing authentication wrong is extremely easy (see "How NOT to Store Passwords!" by Computerphile).
As a result, I'll be implementing this feature slowly, and (hopefully) do it right the first time. Anyways here are the primary features I'd like to see implemented:
If anyone has more thoughts or a better way of implementing this, make sure to comment in this thread.
I get this error after the initial image build:
root@ssd:~/zDocker/docker-YoutubeDL-Tzahi12345# docker-compose up
Recreating ytdl_material ... done
Attaching to ytdl_material
ytdl_material | internal/modules/cjs/loader.js:796
ytdl_material | throw err;
ytdl_material | ^
ytdl_material |
ytdl_material | Error: Cannot find module '/app/app.js'
ytdl_material | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:793:17)
ytdl_material | at Function.Module._load (internal/modules/cjs/loader.js:686:27)
ytdl_material | at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
ytdl_material | at internal/main/run_main_module.js:17:11 {
ytdl_material | code: 'MODULE_NOT_FOUND',
ytdl_material | requireStack: []
ytdl_material | }
Hello,
When sending an API video download command from within my own network, tnothing happens.
I am using the Docker version. When I type the below directly in my browser, I get a blank response and nothing is downloaded.
http://192.168.0.201:17442/api/tomp4?apiKey=692-xxx59df57b&url=https://www.youtube.com/watch?v=i82528KGDdo
*the above API is edited for security.
I can properly access the Web GUI at:
http://192.168.0.201:17442/#/home
Am I missing something? Is the API not yet implemented?
Thank you.
H.
Just realised that anyone on the internet could use my server. Any ideas to add a simple htpasswd?
Ideally something beyond a copy and paste text box that let's you dump your settings string in there, because youtube-dl - as mighty as it is - has TONS of parameters and digesting them can take - I kid you not - dozens of minutes.
I think it'd be nice to have both, a text field to add parameters manually and then you append (and in case of conflict overwrite this) with UI elements like check boxes and the like.
Having proper "settings" as user expects to stay in tact during a docker container update or a reinstall would necessitate having an appdata config diretory that needs to be bound to a host path.
Also: we should store an archive.txt there or in a separate folder. When the user moves out downloaded items we want to make sure that the items don't get downloaded again through an eventual feature like playlist/channel subscriptions/manual downloads. Why a separate location for the archive.txt? Well, it would make it easily sharable with other instanced of youtube-dl regardless of frontend and device. (think youtube-dl on your laptop storing the archive in a dropbox.)
So I noticed the latest release notes have some really nice and welcome notes, props to that!
However, there is one glaring issue and that is youtube-dl's version. From user feedback I've seen in regards to other applications that work as a wrapper for youtube-dl I've learnt that it's best practice to always auto-update youtube-dl constantly almost at any chance, specifically container restarts, since Youtube is an unpredictably fast moving beast on the back-end and youtube-dl will OFTEN break requiring youtube-dl to be updated.
Relegating the update of youtube-dl to a mere restart of the container and maybe additionally periodically when no task is running would also move the spotlight away from you when your wrapper isn't to blame for something breaking. :)
Cheers!
Example link: https://www.youtube.com/watch?v=egeMAIXYIvI
Plays fine in VLC, but not with other programs such as quicktime player.
Audacity states that it requires the ffmpeg plugin as it is an uncompressed file.
Alltube handles this link fine.
Hi
I just did a docker pull and it is crashing now. I am not sure what the issue issue is. Bear in mind that this used to work.
I am using Docker-compose on Debian Testing X64
docker-compose up
Creating network "youtubedl-material_default" with the default driver
Creating youtubedl-material_ytdl_material_1 ... done
Attaching to youtubedl-material_ytdl_material_1
ytdl_material_1 | Config items set using ENV variables.
ytdl_material_1 | HTTP: Started on PORT 17442
ytdl_material_1 | INFO: Found new update for youtube-dl. Updating binary...
ytdl_material_1 | (node:1) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be one of type string, Buffer, or URL. Received type object
ytdl_material_1 | at Object.access (fs.js:177:10)
ytdl_material_1 | at /app/app.js:680:12
ytdl_material_1 | at new Promise (<anonymous>)
ytdl_material_1 | at checkExistsWithTimeout (/app/app.js:673:12)
ytdl_material_1 | at /app/app.js:656:23
ytdl_material_1 | at processTicksAndRejections (internal/process/task_queues.js:94:5)
ytdl_material_1 | (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise wh
ich was not handled with .catch(). (rejection id: 2)
ytdl_material_1 | (node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero ex
it code.
ytdl_material_1 | /app/app.js:676
ytdl_material_1 | watcher.close();
ytdl_material_1 | ^
ytdl_material_1 |
ytdl_material_1 | TypeError: Cannot read property 'close' of undefined
ytdl_material_1 | at Timeout._onTimeout (/app/app.js:676:21)
ytdl_material_1 | at listOnTimeout (internal/timers.js:531:17)
ytdl_material_1 | at processTimers (internal/timers.js:475:7)
I love this simple clean downloader.
My ideas for the future:
I wanted to host the software on a subpath on my domain, but was unable to do so, and had to resort to creating a new subdomain for it.
Allowing a subpath to be specified in the configuration would be very helpful.
Personally, I'd favor putting the archive related files into a specified directory.
But whatever you do, if you put them into the path for downloaded files you'll have a bad time if you have a variable output directory.
Related here is another issue. If you wanna have an output directory with spaces you need quotation marks, those however escape the -o command arg if I'm not mistaken.
Even when using a directory with underscores I get download failed errors.
Snippet of error log when using video/%(uploader)s [%(channel_id)s]/%(upload_date)s - %(title)s [%(id)s]
as output:
at Object.openSync (fs.js:440:3)
at /app/app.js:923:33
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at /app/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/app/node_modules/express/lib/router/index.js:335:12)
at next (/app/node_modules/express/lib/router/index.js:275:10)
at compression (/app/node_modules/compression/index.js:220:5)
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
(node:1) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open 'video/%(uploader)s [%(channel_id)s]/%(upload_date)s - %(title)s [%(id)s]archive.txt'
Snippet when using just video/
as output.
at Object.openSync (fs.js:440:3)
at /app/app.js:923:33
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at /app/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/app/node_modules/express/lib/router/index.js:335:12)
at next (/app/node_modules/express/lib/router/index.js:275:10)
at compression (/app/node_modules/compression/index.js:220:5)
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 4)
Another thing I noticed. You have coded a way to set the output directory and that's sweet. However, as you can see there are definitely users who want to have a variable output directory, so expect that in your coding, but also a variable filename.
I expected to set the filename in the path setting by simply not putting an /
in the end. Well I was wrong to assume this. :P
Hi,
Thanks for doing this so awesome project. I'm not sure if it's an issue or something I misunderstand. Hopefully I make it here right.
I'm running it in docker. When a video is downloading, the progress bar doesn't show a percent complete, just keep looping from left to right. I tested it on Safari, Firefox and Chrome on macOS. I found it that this's called Indeterminate mode on this link: https://material.angular.io/components/progress-bar/overview.
How can I set it to show Determinate mode?
HI
I am having a weird issue. I used volume mapping as below. /media/YOUTUBE
is a samba drive with proper permissions.
ytdl_audio_folder_path: audio/
ytdl_video_folder_path: video/
volumes:
- /media/YOUTUBE:/app/audio
- /media/YOUTUBE:/app/video
When I download any video I see that info.json
is written to thta folder but I cant find the actual videos themselves in that folder. Is it possible that the videos are not saved in that folder at all?
I also logged into the container and I see that /app/video
is actually /media/YOUTUBE
so that idea is working.
The videos are watchable as far as I can tel, so it is clear that they are saved somewhere, but where? Because they are not in the named volume
Hi, any way to auto download videos from a channel i subscribe on?. Great work so far
I'm unable to setup this on my server.
If I'm hosting on server what values should i change for backend and frontend url?
Tried
My server ip
localhost
0.0.0.0
127.0.0.1
But still it's not working.
I'm using docker-compose with nginx proxy (to assign hostname https://github.com/jwilder/nginx-proxy) to deploy.
A Chrome extension is fine and dandy, but what about users whose main browser is Firefox or basically every mobile user? Bookmarklets are universal and resource-friendly. If I had extensions for all the bookmarklets I use I'd have some of the bloated browsers out there. :D
In the case of Firefox extensions you'd get the added benefit of having the Android version (at least the OG Firefox for Android, the new generation of Firefox is still rebuilding extension support) support the extension as well.
if it is helpful this is what the console shows:
192.168.1.4/:1 GET http://192.168.1.4/ytdlm/systemjs.config.js net::ERR_ABORTED 404 (Not Found)
main.5df17f13314d77194c63.bundle.js:1 PostsService Initialized...
main.5df17f13314d77194c63.bundle.js:1 Config location: http://192.168.1.4/ytdlm/backend/config/default.json
192.168.1.4/:1 Access to XMLHttpRequest at 'http://192.168.1.4:17442/getMp3s' from origin 'http://192.168.1.4' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'http://192.168.1.4/ytdlm' that is not equal to the supplied origin.
main.5df17f13314d77194c63.bundle.js:1 e {_body: ProgressEvent, status: 0, ok: false, statusText: "", headers: t, …}headers: t {_headers: Map(0), _normalizedNames: Map(0)}ok: falsestatus: 0statusText: ""type: 3url: null_body: ProgressEvent {isTrusted: true, lengthComputable: false, loaded: 0, total: 0, type: "error", …}bubbles: falsecancelBubble: falsecancelable: falsecomposed: falsecurrentTarget: XMLHttpRequest {__zone_symbol__xhrSync: false, __zone_symbol__xhrURL: "http://192.168.1.4:17442/getMp3s", __zone_symbol__loadfalse: null, __zone_symbol__errorfalse: null, __zone_symbol__xhrListener: ƒ, …}defaultPrevented: falseeventPhase: 0isTrusted: truelengthComputable: falseloaded: 0path: []returnValue: truesrcElement: XMLHttpRequest {__zone_symbol__xhrSync: false, __zone_symbol__xhrURL: "http://192.168.1.4:17442/getMp3s", __zone_symbol__loadfalse: null, __zone_symbol__errorfalse: null, __zone_symbol__xhrListener: ƒ, …}target: XMLHttpRequest {__zone_symbol__xhrSync: false, __zone_symbol__xhrURL: "http://192.168.1.4:17442/getMp3s", __zone_symbol__loadfalse: null, __zone_symbol__errorfalse: null, __zone_symbol__xhrListener: ƒ, …}timeStamp: 1414.6799999289215total: 0type: "error"__proto__: ProgressEvent__proto__: t
192.168.1.4/:1 Access to XMLHttpRequest at 'http://192.168.1.4:17442/getMp4s' from origin 'http://192.168.1.4' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'http://192.168.1.4/ytdlm' that is not equal to the supplied origin.
main.5df17f13314d77194c63.bundle.js:1 e {_body: ProgressEvent, status: 0, ok: false, statusText: "", headers: t, …}
and the config file:
{
"YoutubeDLMaterial": {
"Host": {
"frontendurl": "http://192.168.1.4/ytdlm",
"backendurl": "http://192.168.1.4:17442/"
},
"Encryption": {
"use-encryption": false,
"cert-file-path": "/etc/letsencrypt/live/example.com/fullchain.pem",
"key-file-path": "/etc/letsencrypt/live/example.com/privkey.pem"
},
"Downloader": {
"path-base": "http://192.168.1.4:17442/",
"path-audio": "audio/",
"path-video": "video/"
},
"Extra": {
"title_top": "Youtube Downloader",
"file_manager_enabled": true
}
}
}
This has been the case in a previous version already, I think it started with 3.5, but I chalked it up to possibly a temporary issue. Looking back and actually reading the error code I might have a little bit of actual issue with the software itself. I think what's happening is that youtubedl-material is passing a broken or bad argument? Idk
Here's the log (freshly updated as you can see):
2020-04-13T09:00:57.265Z INFO: Beginning migration: 3.5->3.6+
2020-04-13T09:00:57.297Z INFO: 3.5->3.6+ migration complete!
2020-04-13T09:00:57.300Z INFO: YoutubeDL-Material v3.6 started on PORT 17442
2020-04-13T09:10:20.619Z ERROR: ERROR: u'' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:" ) to search YouTube
(node:1) UnhandledPromiseRejectionWarning: Error: Command failed with exit code 1: /app/node_modules/youtube-dl/bin/youtube-dl -o video/%(uploader)s_[%(channel_id)s]/%(upload_date)s_-_%(title)s_[%(id)s].mp4 -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4 --write-info-json --print-json --download-archive video/merged.txt --write-sub --write-thumbnail --no-call-home --embed-thumbnail --sub-format srt/ass/best --sub-lang en,eng,de,ger,deu http://www.youtube.com/watch?v=J-2VSNPID2g
at makeError (/app/node_modules/execa/lib/error.js:56:11)
at handlePromise (/app/node_modules/execa/index.js:114:26)
at processTicksAndRejections (internal/process/task_queues.js:94:5)
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
This is when using regular YoutubeDL-Material on the WebUI in Docker. No extension, bookmarklet or API used.
Is the docker maybe missing a dependency?
Hello,
I don’t like the fact that anyone visiting the downloader is able to modify anything in the settings. It should’ve been made that only admins can modify that.
Also, It would be great to have autossl built in with auto-renew.
Thanks
Is there a way to download a file from the site to my local client? I'm thinking this might be most useful once multi-user mode is finished up, but still helpful in any case.
Essentially, once someone is on the site and they are browsing through the Video Files - they click on the video and then click to download directly to their device. This is especially useful when the ytdl path is saving files to a shared drive that the user doesn't have easy access to.
If that function is already there, fantastic! Otherwise, I think it would be very useful.
Thanks
As discussed in issue #52 (link to post)
Adding this issue for tracking and as a "memo".
Hi, AtomicParsley is required to perform postprocessing on the downloaded videos. I tried installing it manually, however, I am still getting the same error "EmbedThumbnailPPError: AtomicParsley was not found. Please install". Perhaps, I am not installing it in the correct directory. Could anyone please help me where exactly I should install AtomicParsley?
Post-processing commands used:
--embed-thumbnail
--add-metadata
-v
--postprocessor-args "-id3v2_version 3"
Thank you in advance!
Is there a way/option to set the maximum concurrent downloads?
I added a channel with over 100 videos. I can see there are 10 to 12 youtube-dl processes inside the docker. Looking at the process ids some appear to be stale. The memory usage of the container gradually climbs to around 500MB. Is it possible to control how many videos can be download at the same time? As this is a background downloader, it's okay to have as low as one active video download to avoid OOS situation on the server and not to overload the Internet line.
There are some videos that only the beginning few minutes are playable, the rest of them are choppy or even unwatchable. Seems like that some partitions of the videos are not downloaded correctly. Is there an option to report such error and control the number of retries for failed segment?
First of all thank you for such good project.
I'm using it in docker and everything is working fine when its accessed using IP:Port. But when behind nginx I get the following html code in browser and webpage is not rendered:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>YoutubeDLMaterial</title>
<base href="./">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"/>
<link rel="stylesheet" href="styles.5112d6db78cf21541598.css"></head>
<body>
<app-root></app-root>
<script src="runtime-es2015.7757e6af49e295bdf676.js" type="module"></script><script src="runtime-es5.7757e6af49e295bdf676.js" nomodule defer></script><script src="polyfills-es5.06526edb6162145ab1a0.js" nomodule defer></script><script src="polyfills-es2015.93d5fad15036291d32c6.js" type="module"></script><script src="main-es2015.b37a2ecdb3f1967e5c1d.js" type="module"></script><script src="main-es5.b37a2ecdb3f1967e5c1d.js" nomodule defer></script></body>
</html>
Here is my Nginx config
server {
listen 80;
server_name youtubedl.example.com;
include conf.d/redirect_http.inc;
}
server {
listen 443 ssl http2;
server_name youtubedl.example.com;
ssl_certificate /etc/acme/*.example.com/certificates/_.example.com.crt;
ssl_certificate_key /etc/acme/*.example.com/certificates/_.example.com.key;
include /etc/nginx/conf.d/ssl-params.inc; # SSL parameters
location / {
#include conf.d/proxy_set_header.inc;
proxy_pass http://ip:8998;
}
}
Let me know if you need any other logs etc.
Cheers
Hi,
Firstly - thank you so much for this tool.
I tested many and this is the only one that worked for me!
I'm using the docker version and was wondering why it's not possible to mount a volume, so I can have the files downloaded to the docker host.
I added sth like this:
volumes:
- ./video:/video
but it doesn't work.
The videos are downloaded and when I check inside the docker container - it is there in the /video
folder, but the folder outside of the container is empty...
Also - should the ytdl_download_only_mode
mode (when it's set to true) provide a way for the user to download the video in the browser somehow?
Because when I set this to true (and the ytdl_file_manager_enabled
to false) - nothing happens after the video is downloaded...
Its always generating a JSON file for each downloaded video. It would be really great to have a toggle to have the json generation on/off. Thanks
Hi
Is there some API calls that cna be used to push videos for download remotely via curl or some other way?
thanks
It'd be very convenient for me to be able to specify a subdirectory I'd like videos to be downloaded to at download time. This would greatly help keeping the download directories somewhat organized. Especially useful for channel and playlist downloads (which seem to explode everywhere, unless I've missed a setting).
Hello,
When using this on safari on iOS, I don’t always get the download prompt. In most cases, it just plays the video with absolutely no prompt to download at all!
When I "Download" a video or mp3 it streams it on my browser instead of directly downloading it.
(google chrome and nginx)
Ran npm install on the main dir (front end) and received the following error durinf the post install script.
> [email protected] postinstall C:\Users\username\YouTubeDL\YoutubeDL-Material
> ng build --prod && mkdir dist/backend && mkdir dist/backend/config && mkdir dist/backend/audio && mkdir dist/backend/video && cp src/assets/default.json dist/backend/config/default.json && cp backend/app.js dist/backend/app.js
Generating ES5 bundles for differential loading...
ES5 bundle generation complete.
chunk {0} runtime-es2015.c5fa8325f89fc516600b.js (runtime) 1.45 kB [entry] [rendered]
chunk {0} runtime-es5.c5fa8325f89fc516600b.js (runtime) 1.45 kB [entry] [rendered]
chunk {2} polyfills-es2015.b0638ec1e72267738494.js (polyfills) 82 kB [initial] [rendered]
chunk {3} polyfills-es5.12553af63efad0b3e192.js (polyfills-es5) 172 kB [initial] [rendered]
chunk {1} main-es2015.ab362dbf073a0f09d159.js (main) 1.11 MB [initial] [rendered]
chunk {1} main-es5.ab362dbf073a0f09d159.js (main) 1.28 MB [initial] [rendered]
chunk {4} styles.3889f9a03e77147fd89c.css (styles) 177 kB [initial] [rendered]
Date: 2020-02-24T14:40:54.559Z - Hash: ec1d0da4cb79918ca13c - Time: 112975ms
The syntax of the command is incorrect.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] postinstall: `ng build --prod && mkdir dist/backend && mkdir dist/backend/config && mkdir dist/backend/audio && mkdir dist/backend/video && cp src/assets/default.json dist/backend/config/default.json && cp backend/app.js dist/backend/app.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\username\AppData\Roaming\npm-cache\_logs\2020-02-24T14_40_54_823Z-debug.log
It would be great to have the possibility to set the ID3 tag of the audio file before creating it, as can get pretty messy in software like iTunes which uses the song title from the ID3 tag rather than the file name.
Issue is as title says, not sure how this is happening. Maybe the json-writing process is run by under a different user ID?
I also stopped the container to make sure that youtubedl-material isn't trying to access and lock the file... No game.
The link on the thumb tiles representing downloaded videos supposed to open the player page for it. That works for a few times. At some point clicking on them the browser is doing nothing. When this happen it happens to all videos no matter played before or not. Used latest version of Firefox and Edge on Windows 10. I try the Firefox inspector and it seems the browser is sending a getMP4 request, gets a 304, then sit still. When this work normally the browser will sent a POST to /api/getMP4 with an uuid parameter; when things get stuck only GET /api/getMP4 is sent with same apiKey no uuid.
I installed and ran the app on a fresh sub domain, but the download of a converted does not work.
I checked the file names in the video/ directory and indeed they differ from the requested file name:
Hi
I am looking at the docker-compose file and I am a bit confused. I am wondering if I could get some answers to q below
Why do we have 2 ports, one ytdl and one for docker ports?
I do not want to serve it over web. How do I disable LE certs?
How do I set external download folders? Where are they saved as of now?
Which option is neded for saving downloads on the server, and disabling clientside download.
thanks
One missing feature that would significantly improve the updating process for users is an updater.
Most importantly, this should include the ability to update through the UI.
Additional notes:
backend/config.js
)The settings menu right now is a bit clunky. It could be difficult to find the setting you need, and the large amount of expansion panels hurt overall performance.
One possible alternative to organizing settings by expansion panel is to use Tabs, maybe in conjunction with lazy loading to keep performance reasonable. It will help reduce the density of information, but might require horizontal scrolling to reach the category you want.
A real logging system would help users/contributors debug errors more effectively by providing persistence and the ability to select verbosity (so you can view only errors or debug info).
A good location for these logs would be appdata/logs
.
After some initial research, the winston NPM package looks well-suited for our purposes.
Note that this logging system would be backend-only. Front-end errors will still be visible from the browser console.
Please provide a method to change the file creation umask, preferably via an environmental variable.
I run this app in a docker container if that matters.
blank page after deployment on heroku
Hey, a few things I noticed and want to address now that some major milestones have been addressed or seem just a line change away from working on my end. See issue #37. :D
For the dark mode I think we can still use the same hue of blue for the top bar. The dark blue seems a bit too toned down and I much prefer the vividness of the lighter blue. It's more friendly.
To maintain the general idea of a dark mode better, imho, the background should be either a real black or very strong anthracite with the two areas for the downloads and the download control view each staying what they are.
I created a little mock up by web inspecting and changing values on the fly. For the background I used the values 20,20,20.
The about dialog's close button should probably just be an X in the top right. In any case, buttons like the close button be it an X button Windows-window-style like I imagine or the way you implemented it should have much more contrast against the background. The idea is that you don't need to read and process the language and context in order to realize it might be an area to interact with. I think with a close button especially so. This is a pet peeve of mine since often times flat UIs are understood as having less contrast and being best when everything blends into each other. I'm a huge fan of Material Design but only in its first iteration. Version 2 is already giving up in a lot of areas, but still not as bad as iOS ever since its flat redesign. Oh iOS, how much I loathe you...
Thirdly: Settings
We have a Save button, a cancel button... But no close button. Cancelling after saving is very unintuitive and confusing UX. Personally I know what to expect from a cancel button on the backend and that the save happens when I click save and not get the window out of my sight, however... It isn't pretty and neat that way. :D I think you know what I mean. :)
Fourthly: Stay safe! I wish everyone who is reading this the best of luck in not catching corona and staying healthy in general. Also extending on that I wish all of us that a vaccine is found as fast as possible and that it can be used really quick. Staying at home is the best thing to do right now, but I really wish that we have to do this for as little time as necessary. I'm usually at home a lot anyhow when I'm not traveling, at work, grocery shopping or at uni. But to know that my movement is limited to work and groceries right now and that I CANNOT see friends etc... It's a real downer. Technology be blessed though, hard to imagine how I'd get through this without the amazing things technology lets us achieve from the comfort of our homes. :D
module.js:549
throw err;
^
Error: Cannot find module 'youtube-dl'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object. (/var/www/html/backend/app.js:4:17)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.