nbr23 / youtube-dl-server

Web / REST interface for downloading youtube videos onto a server.
MIT License
235 stars 33 forks source link

[Feature request] Entire custom yt-dlp command as input #93

Open steff75 opened 1 year ago

steff75 commented 1 year ago

First of all, thank you for the work on this fine container!

There is one more little thing that would make it even better for me. And that is the possibility to pass a complete yt-dlp command as input via the interface or the API.

Since there are not extractors for all pages, there is for example the Firefox addon "The Stream Detector", which can output all possible detected streams into ready yt-dlp commands, so also for pages without extractor. It would be great if you could then pass these to youtube-dl-server.

Thanks a lot!

nbr23 commented 1 year ago

Allowing arbitrary parameters would be a security risk, so I don't think it's wise to go with this.

Can you give me an example of a command would be for your use case, so I can see if we can work that in?

Thanks!

steff75 commented 1 year ago

Sure, I understand your concerns.

The output of 'The Stream Detector' extension is usually structured as follows: yt-dlp --no-part --restrict-filenames -N 4 --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0" --referer "https://www.somewebsite.com/" "https://link.to/the/hls/playlist/file/master.m3u8"

Thank you!

steff75 commented 1 year ago

Sorry, I just realized that the download already works when I give the address of the m3u8 directly to the youtube-dl-server. I had previously tried only the link of the page where the video is embedded.

So it already works. Only that the video does not get the correct title because of the lack of extractor. Maybe you could add the possibility to specify a name before the download.

Thanks!

Edit (Example) GUI: Screenshot 2023-06-15 102000 API: curl -X POST -H 'Content-Type: application/json' --data-raw '{"url":"{{ URL }}","format":"video/best","output":"{{ OUTPUT }}"}' http://{{host}}:8080/api/downloads

When a custom output name isn't provided, it takes the default from config.