Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b2a673f887 | ||
|
0cd35b4e9a | ||
|
572b7c41cd | ||
|
2fb67b39c6 | ||
|
4ff86707f2 | ||
|
296e911e54 | ||
|
6b9324347f | ||
|
8a449f5f14 | ||
|
bb93ac9bbb | ||
|
07c9a45395 | ||
|
cb48994d71 | ||
|
ff95fa8871 | ||
|
c75ca8ee6f | ||
|
37389ad72d | ||
|
ecf3ce99a7 | ||
|
d3aa2042ee | ||
|
7b2c8576f1 | ||
|
94215bc84d | ||
|
2f7f1d742c | ||
|
895a830122 | ||
|
e5286c0571 | ||
|
bd62d41317 | ||
|
2b5839ca92 | ||
|
0451e5c163 | ||
|
e5d5a60512 |
19
README.md
19
README.md
@@ -6,7 +6,7 @@ The free, open source video downloader!
|
||||
No longer do you have to rely on shady websites, shoving tons of ads in your face to fulfil your downloady needs. No longer will you be held back by artificially crippled download speeds, login-/paywalls or even watermarks.
|
||||
|
||||
## But what is Tubio?
|
||||
Tubio in of itself is not a downloader, but a GUI for the widely known, open-source, public-domain cli [youtube-dl](http://youtube-dl.org/). <sup>Thanks for this awesome tool! You guys are heroes!</sup>
|
||||
Tubio in of itself is not a downloader, but a GUI for the widely known, open-source, public-domain cli [yt-dlp](https://github.com/yt-dlp/yt-dlp/). <sup>Thanks for this awesome tool! You guys are heroes! (Obviously, same goes for youtube-dl, which yt-dlp is based on)</sup>
|
||||
The goal of Tubio is to make this awesome software more accessible. Not everyone knows how to use the command line!
|
||||
|
||||
## But, how does it work?
|
||||
@@ -88,7 +88,7 @@ Tubio does NOT manage sessions or accounts! Everyone using your Tubio instance w
|
||||
If you opt for unleashing Tubio on your LAN, i would **strongly** recommend enabling the whitelist! You can do this either in the `config.json` or in /settings. Either way, it is a json-array of strings which represent IPv4 addresses.
|
||||
|
||||
## Setup (Windows)
|
||||
#### Install youtube-dl.exe:
|
||||
#### Install yt-dlp.exe:
|
||||
1) Download the latest Tubio build from [here](https://github.com/Leonetienne/Tubio/releases).
|
||||
2) Create some folder on your pc. This will be the installation folder.
|
||||
3) Dump in the contents of the Tubio build you just downloaded.
|
||||
@@ -104,36 +104,39 @@ If you opt for unleashing Tubio on your LAN, i would **strongly** recommend enab
|
||||
This happens as there often is some post-processing to do after downloading.
|
||||
|
||||
### My downloads fail!
|
||||
First thing to do: Navigate to /settings and click "Update ytdl". This will update your local instance of [youtube-dl](http://youtube-dl.org/). Check the logs to see if it worked. If not, restart Tubio and try again.
|
||||
First thing to do: Navigate to /settings and click "Update ytdl". This will update your local instance of [yt-dlp](https://github.com/yt-dlp/yt-dlp/). Check the logs to see if it worked. If not, you can always download it yourself (from the [releases-page](https://github.com/yt-dlp/yt-dlp/releases) and put yt-dlp.exe in the same directory tubio.exe lies in.).
|
||||
|
||||
If it\`s still not working, you are most likely trying to download a video from a playlist with a weird url. Try a different one (The one from the share button, the one from right-clicking the video or the one from the url-bar in your browser).
|
||||
|
||||
If it\`s still not working, you\`re out of luck. :(
|
||||
You may want to check youtube-dl compatible sites.
|
||||
|
||||
### I locked myself out by enabling localhost only on another device!
|
||||
This can only be undone from the host. Open Tubio via, and this is important, either `localhost` or `127.0.0.1` and untick it again. If you can only ssh into the host, you can edit the `config.json` itself and restart Tubio.
|
||||
This can only be undone from localhost. Open Tubio via, and this is important, either `localhost` or `127.0.0.1` and untick it again. If you can only ssh into the host, you can edit the `config.json` itself and restart Tubio.
|
||||
|
||||
### Does it work on linux?
|
||||
Well, technically, yes. You would have to install youtube-dl and the ffmpeg suite yourself, and compile Tubio yourself though. I have not tried it yet, but it should work.
|
||||
You may get warnings for missing .exe files, which are obviously not needed on linux.
|
||||
|
||||
### Can i use it on my phone?
|
||||
### Can I use it on my phone?
|
||||
Sure. Read [this](#user-content-can-i-use-tubio-on-multiple-devices).
|
||||
|
||||
### Can i use this to host my own downloader website?
|
||||
On your own risk! Tubio is NOT designed for this! Also do note that tubio does NOT manage sessions or accounts! Everyone accessing this instance can see everyones downloads and access the admin panel! Tubio is really designed for one user!
|
||||
|
||||
### XY is not working, you have to fix it now!
|
||||
I do not. Tubio is a tool i originally made for myself only. I just thought it\`s nice and worth sharing. I will address issues when i have time. Feel free to submit issues and i will have a look when i get to it. :)
|
||||
I do not. Tubio is a tool I originally made for myself only. I just thought it\`s nice and worth sharing. I will address issues when I have time. Feel free to submit issues and I will have a look when I get to it. :)
|
||||
|
||||
### XY is not polished enough!
|
||||
This is an alpha-version. What did you expect? :D
|
||||
|
||||
### Can you please add support for website XY?
|
||||
Please address the awesome team at youtube-dl, as they made the downloading-end: [github.com/ytdl-org/youtube-dl/issues](https://github.com/ytdl-org/youtube-dl/issues)
|
||||
Please address the awesome team at youtube-dl, as they made the downloading-end: [github.com/ytdl-org/youtube-dl/issues](https://github.com/ytdl-org/youtube-dl/issues).
|
||||
The downloader tubio uses ([yt-dlp](https://github.com/yt-dlp/yt-dlp/)) is based on youtube-dl.
|
||||
|
||||
## Important notice!
|
||||
I do NOT endorse illegal downloads in any way, shape, or form. Tubio is a tool to download media from legal sources! Use Tubio at your own discretion! Neither do i provide ANY warranty in ANY way, shape, or form!
|
||||
|
||||
## License
|
||||
Tubio is distributed under the GNU General Public License v3.0.
|
||||
Please read the [license file](https://github.com/Leonetienne/Tubio/blob/master/license.txt).
|
||||
Please read the [license file](https://github.com/Leonetienne/Tubio/blob/master/license.txt).
|
||||
|
@@ -160,7 +160,7 @@ void DownloadManager::DownloadNext()
|
||||
{
|
||||
// Call template
|
||||
std::string ytdl_call_video_base =
|
||||
"youtube-dl --newline --no-call-home --no-playlist --no-part --no-warnings --socket-timeout 5 --limit-rate $$DL_RATE"
|
||||
"yt-dlp --newline --no-call-home --no-playlist --no-part --no-warnings --socket-timeout 5 --limit-rate $$DL_RATE"
|
||||
" --no-mtime --no-cache-dir -f \"$$QUALITY\" --recode-video mp4 --prefer-ffmpeg"
|
||||
" -o \"$$DL_FILE\" \"$$DL_URL\" > \"$$DL_PROG_BUF_FILE\"";
|
||||
|
||||
@@ -171,7 +171,6 @@ void DownloadManager::DownloadNext()
|
||||
ytdl_call_video_base = Internal::StringHelpers::Replace(ytdl_call_video_base, "$$DL_URL", entry->webpage_url);
|
||||
ytdl_call_video_base = Internal::StringHelpers::Replace(ytdl_call_video_base, "$$DL_PROG_BUF_FILE", XGConfig::downloader.cachedir + "/dlprogbuf/" + entry->tubio_id + ".buf");
|
||||
|
||||
|
||||
entry->downloaded_filename = XGConfig::downloader.cachedir + "/download/" + entry->tubio_id + ".mp4";
|
||||
ss << ytdl_call_video_base;
|
||||
}
|
||||
@@ -179,7 +178,7 @@ void DownloadManager::DownloadNext()
|
||||
{
|
||||
// Call template
|
||||
std::string ytdl_call_audio_base =
|
||||
"youtube-dl --newline --no-call-home --no-playlist --no-part --no-warnings --socket-timeout 5 --limit-rate $$DL_RATE"
|
||||
"yt-dlp --newline --no-call-home --no-playlist --no-part --no-warnings --socket-timeout 5 --limit-rate $$DL_RATE"
|
||||
" --no-mtime --no-cache-dir -f worstvideo+bestaudio --audio-format mp3 --audio-quality 0 --extract-audio -o \"$$DL_FILE\""
|
||||
" \"$$DL_URL\" > \"$$DL_PROG_BUF_FILE\"";
|
||||
|
||||
@@ -604,21 +603,21 @@ std::string DownloadManager::DownloadQualityToStringParams(DOWNLOAD_QUALITY qual
|
||||
switch (quality)
|
||||
{
|
||||
case DOWNLOAD_QUALITY::_BEST:
|
||||
return "bestvideo[ext=mp4]+bestaudio";
|
||||
return "best";
|
||||
case DOWNLOAD_QUALITY::_1440p:
|
||||
return "bestvideo[ext=mp4][height<=1440]+bestaudio";
|
||||
return "bestvideo[height<=1440]+bestaudio";
|
||||
case DOWNLOAD_QUALITY::_1080p:
|
||||
return "bestvideo[ext=mp4][height<=1080]+bestaudio";
|
||||
return "bestvideo[height<=1080]+bestaudio";
|
||||
case DOWNLOAD_QUALITY::_720p:
|
||||
return "bestvideo[ext=mp4][height<=720]+bestaudio";
|
||||
return "bestvideo[height<=720]+bestaudio";
|
||||
case DOWNLOAD_QUALITY::_480p:
|
||||
return "bestvideo[ext=mp4][height<=480]+bestaudio";
|
||||
return "bestvideo[height<=480]+bestaudio";
|
||||
case DOWNLOAD_QUALITY::_360p:
|
||||
return "bestvideo[ext=mp4][height<=360]+bestaudio";
|
||||
return "bestvideo[height<=360]+bestaudio";
|
||||
case DOWNLOAD_QUALITY::_240p:
|
||||
return "bestvideo[ext=mp4][height<=240]+bestaudio";
|
||||
return "bestvideo[height<=240]+bestaudio";
|
||||
case DOWNLOAD_QUALITY::_144p:
|
||||
return "bestvideo[ext=mp4][height<=144]+bestaudio";
|
||||
return "bestvideo[height<=144]+bestaudio";
|
||||
}
|
||||
|
||||
return std::string();
|
||||
@@ -676,7 +675,7 @@ DOWNLOAD_QUALITY DownloadManager::GetDownloadQualityByName(const std::string& qu
|
||||
void DownloadManager::FetchInformation(std::string url, std::string tubId)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "youtube-dl --skip-download --no-warnings --no-call-home --no-playlist --socket-timeout 5 --dump-json \"" << url << "\" > \"" << XGConfig::downloader.cachedir << "/metadata/" << tubId << ".json" << "\"";
|
||||
ss << "yt-dlp --skip-download --no-warnings --no-call-home --no-playlist --socket-timeout 5 --dump-json \"" << url << "\" > \"" << XGConfig::downloader.cachedir << "/metadata/" << tubId << ".json" << "\"";
|
||||
system(ss.str().c_str());
|
||||
return;
|
||||
}
|
||||
@@ -708,9 +707,9 @@ std::string DownloadManager::CreateNewTubioID()
|
||||
void DownloadManager::WarnIfMissingDependenciesWIN()
|
||||
{
|
||||
#ifdef _WIN
|
||||
if (!FileSystem::Exists("youtube-dl.exe"))
|
||||
if (!FileSystem::Exists("yt-dlp.exe"))
|
||||
{
|
||||
log->cout << log->Warn() << "Dependency youtube-dl.exe missing! Try updating it! (\"request\": \"update_dep_youtubedl\"). "
|
||||
log->cout << log->Warn() << "Dependency yt-dlp.exe missing! Try updating it! (\"request\": \"update_dep_YtDlp\"). "
|
||||
<< "Dependencies HAVE to lie in Tubios working directory! (where the config.json is)";
|
||||
log->Flush();
|
||||
}
|
||||
|
@@ -135,10 +135,10 @@ namespace Downloader
|
||||
static std::vector<DownloadEntry> ParseJsonArrayToEntries(const JasonPP::JsonArray& arr);
|
||||
|
||||
/// <summary>
|
||||
/// Will return a youtube-dl quality string based on 'quality'
|
||||
/// Will return a yt-dlp quality string based on 'quality'
|
||||
/// </summary>
|
||||
/// <param name="quality">The download quality to get the parameter from</param>
|
||||
/// <returns>The youtube-dl quality parameter</returns>
|
||||
/// <returns>The yt-dlp quality parameter</returns>
|
||||
static std::string DownloadQualityToStringParams(DOWNLOAD_QUALITY quality);
|
||||
|
||||
/// <summary>
|
||||
|
@@ -41,7 +41,7 @@ bool RestQueryHandler::ProcessQuery(const std::string clientAdress, const Json&
|
||||
else if (requestName == "get_os_name") return GetOSName(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "fetch_session_logs") return FetchSessionLogs(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "fetch_alltime_logs") return FetchAlltimeLogs(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "update_dep_youtubedl") return UpdateYoutubeDL(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "update_dep_yt-dlp") return UpdateYtDlp(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "remove_download_entry") return RemoveDownloadEntry(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "update_config") return UpdateConfig(requestBody, responseBody, responseCode);
|
||||
else if (requestName == "reset_config_to_default_values") return ResetConfigDefaults(requestBody, responseBody, responseCode);
|
||||
@@ -370,9 +370,9 @@ bool RestQueryHandler::GetDiskUsage(const JsonBlock& request, JsonBlock& respons
|
||||
{
|
||||
dependencies += FileSystem::CalculateSize("ffplay.exe");
|
||||
}
|
||||
if (FileSystem::Exists("youtube-dl.exe"))
|
||||
if (FileSystem::Exists("yt-dlp.exe"))
|
||||
{
|
||||
dependencies += FileSystem::CalculateSize("youtube-dl.exe");
|
||||
dependencies += FileSystem::CalculateSize("yt-dlp.exe");
|
||||
}
|
||||
diskUsages.Set("dependencies") = dependencies;
|
||||
|
||||
@@ -397,12 +397,12 @@ bool RestQueryHandler::ClearLogs(const JsonBlock& request, JsonBlock& responseBo
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RestQueryHandler::UpdateYoutubeDL(const JsonBlock& request, JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode)
|
||||
bool RestQueryHandler::UpdateYtDlp(const JsonBlock& request, JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode)
|
||||
{
|
||||
log->cout << "Updating youtube-dl...";
|
||||
log->cout << "Updating yt-dlp...";
|
||||
log->Flush();
|
||||
|
||||
std::string result = Updater::UpdateYoutubeDL();
|
||||
std::string result = Updater::UpdateYtDlp();
|
||||
if (result == "OK")
|
||||
{
|
||||
log->cout << " => OK!";
|
||||
@@ -410,7 +410,7 @@ bool RestQueryHandler::UpdateYoutubeDL(const JsonBlock& request, JsonBlock& resp
|
||||
|
||||
responseCode = HTTP_STATUS_CODE::OK;
|
||||
responseBody.CloneFrom(RestResponseTemplates::GetByCode(HTTP_STATUS_CODE::OK));
|
||||
responseBody.Set("message") = "Updated youtube-dl.exe successfully!";
|
||||
responseBody.Set("message") = "Updated yt-dlp.exe successfully!";
|
||||
}
|
||||
else if (result == "not implemented")
|
||||
{
|
||||
@@ -420,7 +420,7 @@ bool RestQueryHandler::UpdateYoutubeDL(const JsonBlock& request, JsonBlock& resp
|
||||
log->Flush();
|
||||
responseCode = HTTP_STATUS_CODE::NOT_IMPLEMENTED;
|
||||
responseBody.CloneFrom(RestResponseTemplates::GetByCode(HTTP_STATUS_CODE::NOT_IMPLEMENTED));
|
||||
responseBody.Set("message") = "On linux you have to update youtube-dl yourself since it is a system-wide package handled by various package managers!";
|
||||
responseBody.Set("message") = "On linux you have to update yt-dlp yourself since it is a system-wide package handled by various package managers!";
|
||||
}
|
||||
else // Some other error
|
||||
{
|
||||
@@ -429,7 +429,7 @@ bool RestQueryHandler::UpdateYoutubeDL(const JsonBlock& request, JsonBlock& resp
|
||||
|
||||
responseCode = HTTP_STATUS_CODE::INTERNAL_SERVER_ERROR;
|
||||
responseBody.CloneFrom(RestResponseTemplates::GetByCode(HTTP_STATUS_CODE::INTERNAL_SERVER_ERROR));
|
||||
responseBody.Set("message") = "Unable do update youtube-dl.exe! See urlmon " + result;
|
||||
responseBody.Set("message") = "Unable do update yt-dlp.exe! See urlmon " + result;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@@ -32,7 +32,7 @@ namespace Rest
|
||||
static bool FetchAlltimeLogs(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool FetchSessionLogs(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool GetDiskUsage(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool UpdateYoutubeDL(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool UpdateYtDlp(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool RemoveDownloadEntry(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool UpdateConfig(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
static bool ResetConfigDefaults(const JasonPP::JsonBlock& request, JasonPP::JsonBlock& responseBody, HTTP_STATUS_CODE& responseCode);
|
||||
|
@@ -1,9 +1,71 @@
|
||||
#include "Updater.h"
|
||||
|
||||
std::string Updater::UpdateYoutubeDL()
|
||||
using namespace JasonPP;
|
||||
|
||||
std::string Updater::UpdateYtDlp()
|
||||
{
|
||||
#ifdef _WIN
|
||||
HRESULT res = URLDownloadToFileA(NULL, "https://yt-dl.org/downloads/latest/youtube-dl.exe", "youtube-dl.exe", 0, NULL);
|
||||
// Fetch rest respone for latest yt-dlp release
|
||||
CComPtr<IStream> dlStream;
|
||||
HRESULT res = URLOpenBlockingStreamA(
|
||||
nullptr,
|
||||
"https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest",
|
||||
&dlStream,
|
||||
0,
|
||||
nullptr
|
||||
);
|
||||
if (FAILED(res))
|
||||
{
|
||||
return "Error fetching latest yt-dlp release identifier. Error code: 0x" + (JasonPP::Internal::Helpers::Base10_2_X(res, "0123456789abcdef"));
|
||||
}
|
||||
|
||||
char buffer[4096];
|
||||
std::stringstream restContent;
|
||||
do
|
||||
{
|
||||
DWORD bytesRead = 0;
|
||||
res = dlStream->Read(buffer, sizeof(buffer), &bytesRead);
|
||||
|
||||
if (bytesRead)
|
||||
restContent.write(buffer, bytesRead);
|
||||
} while ((SUCCEEDED(res)) && (res != S_FALSE));
|
||||
|
||||
// Parse response
|
||||
Json json;
|
||||
try
|
||||
{
|
||||
json.Parse(restContent.str());
|
||||
}
|
||||
catch (JsonException& e)
|
||||
{
|
||||
return "Error parsing the json githubs rest api returned, whilst trying to update yt-dlp.";
|
||||
}
|
||||
|
||||
// Look for the asset in the release that's named "yt-dlp.exe"
|
||||
std::string downloadUrlLatestExe = "";
|
||||
try
|
||||
{
|
||||
const JsonArray assetsArr = json.AsJson["assets"].AsArray;
|
||||
|
||||
for (std::size_t i = 0; i < assetsArr.Size(); i++)
|
||||
{
|
||||
if (assetsArr[i].AsJson["name"] == "yt-dlp.exe")
|
||||
downloadUrlLatestExe = assetsArr[i].AsJson["browser_download_url"];
|
||||
}
|
||||
}
|
||||
catch (JsonException& e)
|
||||
{
|
||||
return "Error whilst trying to access the json key assets[n][\"name\"/\"browser_download_url\"] whilst trying to update yt-dlp.";
|
||||
}
|
||||
|
||||
if (downloadUrlLatestExe == "")
|
||||
{
|
||||
return "Error: No suitable asset found in latest release. Looking for name \"yt-dlp.exe\".";
|
||||
}
|
||||
|
||||
|
||||
// Download the latest yt-dlp.exe
|
||||
res = URLDownloadToFileA(NULL, downloadUrlLatestExe.c_str(), "yt-dlp.exe", 0, NULL);
|
||||
|
||||
if (SUCCEEDED(res))
|
||||
{
|
||||
|
@@ -5,14 +5,16 @@
|
||||
#ifdef _WIN
|
||||
#include <urlmon.h>
|
||||
#include <Windows.h>
|
||||
#include <atlbase.h>
|
||||
#include "external_dependencies/leonetienne/JasonPP/JasonPP.hpp"
|
||||
#endif
|
||||
|
||||
class Updater
|
||||
{
|
||||
public:
|
||||
/// <summary>
|
||||
/// Will update youtube-dl.exe on windows only!! Returns error message. On linux, you have to update it yourself, since it is a package of its own!
|
||||
/// Will update yt-dlp.exe on windows only!! Returns error message. On linux, you have to update it yourself, since it is a package of its own!
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
static std::string UpdateYoutubeDL();
|
||||
static std::string UpdateYtDlp();
|
||||
};
|
||||
|
@@ -1,2 +1,2 @@
|
||||
#pragma once
|
||||
#define TUBIO_SERVER_VERSION (0.539)
|
||||
#define TUBIO_SERVER_VERSION (0.6)
|
||||
|
@@ -1,9 +1,9 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Tubio - Video downloader</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content=""><meta data-n-head="1" name="msapplication-TileColor" content="#031934"><meta data-n-head="1" name="theme-color" content="#031934"><link data-n-head="1" rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link data-n-head="1" rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link data-n-head="1" rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link data-n-head="1" rel="manifest" href="/site.webmanifest"><link data-n-head="1" rel="mask-icon" href="/safari-pinned-tab.svg" color="#031934"><link rel="preload" href="/_nuxt/319ed71.js" as="script"><link rel="preload" href="/_nuxt/8a34dcc.js" as="script"><link rel="preload" href="/_nuxt/d640171.js" as="script"><link rel="preload" href="/_nuxt/b2e29d0.js" as="script">
|
||||
<title>Tubio - Video downloader</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content=""><meta data-n-head="1" name="msapplication-TileColor" content="#031934"><meta data-n-head="1" name="theme-color" content="#031934"><link data-n-head="1" rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link data-n-head="1" rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link data-n-head="1" rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link data-n-head="1" rel="manifest" href="/site.webmanifest"><link data-n-head="1" rel="mask-icon" href="/safari-pinned-tab.svg" color="#031934"><link rel="preload" href="/_nuxt/10b0b66.js" as="script"><link rel="preload" href="/_nuxt/8a34dcc.js" as="script"><link rel="preload" href="/_nuxt/eb2cb16.js" as="script"><link rel="preload" href="/_nuxt/4ddf16a.js" as="script">
|
||||
</head>
|
||||
<body>
|
||||
<div id="__nuxt"><style>#nuxt-loading{background:#fff;visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #000;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div><script>window.__NUXT__={config:{app:{basePath:"/",assetsPath:"/_nuxt/",cdnURL:null}},staticAssetsBase:"/_nuxt/static/1615643415"}</script>
|
||||
<script src="/_nuxt/319ed71.js"></script><script src="/_nuxt/8a34dcc.js"></script><script src="/_nuxt/d640171.js"></script><script src="/_nuxt/b2e29d0.js"></script></body>
|
||||
<div id="__nuxt"><style>#nuxt-loading{background:#fff;visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #000;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div><script>window.__NUXT__={config:{app:{basePath:"/",assetsPath:"/_nuxt/",cdnURL:null}},staticAssetsBase:"/_nuxt/static/1644155680"}</script>
|
||||
<script src="/_nuxt/10b0b66.js"></script><script src="/_nuxt/8a34dcc.js"></script><script src="/_nuxt/eb2cb16.js"></script><script src="/_nuxt/4ddf16a.js"></script></body>
|
||||
</html>
|
||||
|
@@ -1 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{259:function(h,v,t){"use strict";t.r(v);var l=t(9),component=Object(l.a)({},(function(){var h=this.$createElement,v=this._self._c||h;return v("svg",{staticClass:"bi bi-film",attrs:{viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}},[v("path",{attrs:{"fill-rule":"evenodd",d:"M0 1a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1zm4 0h8v6H4V1zm8 8H4v6h8V9zM1 1h2v2H1V1zm2 3H1v2h2V4zM1 7h2v2H1V7zm2 3H1v2h2v-2zm-2 3h2v2H1v-2zM15 1h-2v2h2V1zm-2 3h2v2h-2V4zm2 3h-2v2h2V7zm-2 3h2v2h-2v-2zm2 3h-2v2h2v-2z"}})])}),[],!1,null,null,null);v.default=component.exports}}]);
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{260:function(h,v,t){"use strict";t.r(v);var l=t(9),component=Object(l.a)({},(function(){var h=this.$createElement,v=this._self._c||h;return v("svg",{staticClass:"bi bi-film",attrs:{viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}},[v("path",{attrs:{"fill-rule":"evenodd",d:"M0 1a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1zm4 0h8v6H4V1zm8 8H4v6h8V9zM1 1h2v2H1V1zm2 3H1v2h2V4zM1 7h2v2H1V7zm2 3H1v2h2v-2zm-2 3h2v2H1v-2zM15 1h-2v2h2V1zm-2 3h2v2h-2V4zm2 3h-2v2h2V7zm-2 3h2v2h-2v-2zm2 3h-2v2h2v-2z"}})])}),[],!1,null,null,null);v.default=component.exports}}]);
|
@@ -1 +1 @@
|
||||
!function(e){function r(data){for(var r,n,c=data[0],l=data[1],d=data[2],i=0,h=[];i<c.length;i++)n=c[i],Object.prototype.hasOwnProperty.call(o,n)&&o[n]&&h.push(o[n][0]),o[n]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(v&&v(data);h.length;)h.shift()();return f.push.apply(f,d||[]),t()}function t(){for(var e,i=0;i<f.length;i++){for(var r=f[i],t=!0,n=1;n<r.length;n++){var l=r[n];0!==o[l]&&(t=!1)}t&&(f.splice(i--,1),e=c(c.s=r[0]))}return e}var n={},o={19:0},f=[];function c(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var f,script=document.createElement("script");script.charset="utf-8",script.timeout=120,c.nc&&script.setAttribute("nonce",c.nc),script.src=function(e){return c.p+""+{2:"8a8f637",3:"8f953c4",4:"762bd10",5:"f319ef6",6:"99f9b46",7:"5ee7790",8:"282c5a4",9:"b925fa9",10:"98ddc40",11:"6a9af62",12:"be47b68",13:"e42c667",14:"f70744c",15:"1259aff",16:"b995640",17:"5f3baa0",18:"8debf85"}[e]+".js"}(e);var l=new Error;f=function(r){script.onerror=script.onload=null,clearTimeout(d);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+f+")",l.name="ChunkLoadError",l.type=n,l.request=f,t[1](l)}o[e]=void 0}};var d=setTimeout((function(){f({type:"timeout",target:script})}),12e4);script.onerror=script.onload=f,document.head.appendChild(script)}return Promise.all(r)},c.m=e,c.c=n,c.d=function(e,r,t){c.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,r){if(1&r&&(e=c(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(c.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)c.d(t,n,function(r){return e[r]}.bind(null,n));return t},c.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(r,"a",r),r},c.o=function(object,e){return Object.prototype.hasOwnProperty.call(object,e)},c.p="/_nuxt/",c.oe=function(e){throw console.error(e),e};var l=window.webpackJsonp=window.webpackJsonp||[],d=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var v=d;t()}([]);
|
||||
!function(e){function r(data){for(var r,n,c=data[0],l=data[1],d=data[2],i=0,h=[];i<c.length;i++)n=c[i],Object.prototype.hasOwnProperty.call(o,n)&&o[n]&&h.push(o[n][0]),o[n]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(v&&v(data);h.length;)h.shift()();return f.push.apply(f,d||[]),t()}function t(){for(var e,i=0;i<f.length;i++){for(var r=f[i],t=!0,n=1;n<r.length;n++){var l=r[n];0!==o[l]&&(t=!1)}t&&(f.splice(i--,1),e=c(c.s=r[0]))}return e}var n={},o={19:0},f=[];function c(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var f,script=document.createElement("script");script.charset="utf-8",script.timeout=120,c.nc&&script.setAttribute("nonce",c.nc),script.src=function(e){return c.p+""+{2:"c0a3d47",3:"a1bf271",4:"762bd10",5:"f319ef6",6:"07c557f",7:"3c81a41",8:"282c5a4",9:"b925fa9",10:"98ddc40",11:"959803f",12:"be47b68",13:"e42c667",14:"33f8e12",15:"1259aff",16:"b995640",17:"4abfebf",18:"91d721a"}[e]+".js"}(e);var l=new Error;f=function(r){script.onerror=script.onload=null,clearTimeout(d);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+f+")",l.name="ChunkLoadError",l.type=n,l.request=f,t[1](l)}o[e]=void 0}};var d=setTimeout((function(){f({type:"timeout",target:script})}),12e4);script.onerror=script.onload=f,document.head.appendChild(script)}return Promise.all(r)},c.m=e,c.c=n,c.d=function(e,r,t){c.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,r){if(1&r&&(e=c(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(c.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)c.d(t,n,function(r){return e[r]}.bind(null,n));return t},c.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(r,"a",r),r},c.o=function(object,e){return Object.prototype.hasOwnProperty.call(object,e)},c.p="/_nuxt/",c.oe=function(e){throw console.error(e),e};var l=window.webpackJsonp=window.webpackJsonp||[],d=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var v=d;t()}([]);
|
@@ -1 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{274:function(t,e,o){var content=o(284);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[t.i,content,""]]),content.locals&&(t.exports=content.locals);(0,o(15).default)("5d20b250",content,!0,{sourceMap:!1})},283:function(t,e,o){"use strict";o(274)},284:function(t,e,o){var n=o(14)(!1);n.push([t.i,".click-blocker[data-v-1fe60afe]{bottom:0}.box[data-v-1fe60afe],.click-blocker[data-v-1fe60afe]{position:absolute;left:0;right:0;top:0}.box[data-v-1fe60afe]{height:60%;overflow:hidden}@media(max-width:1280px){.box[data-v-1fe60afe]{position:absolute;top:100px;bottom:100px;left:100px;right:100px}}@media(max-width:768px){.box[data-v-1fe60afe]{position:absolute;top:0;bottom:0;left:0;right:0}}.box h2[data-v-1fe60afe]{text-align:center;font-size:56pt;color:#bbb}@media(max-width:768px){.box h2[data-v-1fe60afe]{margin-top:36px;max-height:unset}}@media(max-width:768px){.box .dots[data-v-1fe60afe]{margin-top:50px}}.box .dots .dot[data-v-1fe60afe]{width:50px;height:50px;background-color:#888;border-radius:50px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.box .dots .dot[data-v-1fe60afe]:first-child{-webkit-animation:dot-hover-data-v-1fe60afe 1.5s infinite;animation:dot-hover-data-v-1fe60afe 1.5s infinite;-webkit-animation-delay:0;animation-delay:0}.box .dots .dot[data-v-1fe60afe]:nth-child(2){-webkit-animation:dot-hover-data-v-1fe60afe 1.5s infinite;animation:dot-hover-data-v-1fe60afe 1.5s infinite;-webkit-animation-delay:.3s;animation-delay:.3s}.box .dots .dot[data-v-1fe60afe]:nth-child(3){-webkit-animation:dot-hover-data-v-1fe60afe 1.5s infinite;animation:dot-hover-data-v-1fe60afe 1.5s infinite;-webkit-animation-delay:.6s;animation-delay:.6s}@media(max-width:768px){.box .dots .dot[data-v-1fe60afe]{width:30px;height:30px}.box .dots .dot[data-v-1fe60afe]:not(:first-child){margin-left:15px}.box .dots .dot[data-v-1fe60afe]:not(:last-child){margin-right:15px}}@media(min-width:768px){.box .dots .dot[data-v-1fe60afe]{font-size:36pt}.box .dots .dot[data-v-1fe60afe]:not(:first-child){margin-left:25px}.box .dots .dot[data-v-1fe60afe]:not(:last-child){margin-right:25px}}.box .loading-text[data-v-1fe60afe]{font-size:36pt}@media(max-width:768px){.box .loading-text[data-v-1fe60afe]{font-size:24pt}}@-webkit-keyframes dot-hover-data-v-1fe60afe{0%{transform:translateY(0)}50%{transform:translateY(1em)}to{transform:translateY(0)}}@keyframes dot-hover-data-v-1fe60afe{0%{transform:translateY(0)}50%{transform:translateY(1em)}to{transform:translateY(0)}}",""]),t.exports=n},287:function(t,e,o){"use strict";o.r(e);var n={},d=(o(283),o(9)),component=Object(d.a)(n,(function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)}),[function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",{staticClass:"click-blocker flex justify-center md:items-center"},[o("div",{staticClass:"box"},[o("div",{staticClass:"w-full h-full flex flex-col justify-center items-center"},[o("h2",{staticClass:"loading-text"},[t._v("Just a second...")]),t._v(" "),o("div",{staticClass:"dots flex w-full justify-center items-center mt-24"},[o("div",{staticClass:"dot"}),t._v(" "),o("div",{staticClass:"dot"}),t._v(" "),o("div",{staticClass:"dot"})])])])])}],!1,null,"1fe60afe",null);e.default=component.exports}}]);
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{274:function(t,e,o){var content=o(284);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[t.i,content,""]]),content.locals&&(t.exports=content.locals);(0,o(15).default)("5d20b250",content,!0,{sourceMap:!1})},283:function(t,e,o){"use strict";o(274)},284:function(t,e,o){var n=o(14)(!1);n.push([t.i,".click-blocker[data-v-1fe60afe]{bottom:0}.box[data-v-1fe60afe],.click-blocker[data-v-1fe60afe]{position:absolute;left:0;right:0;top:0}.box[data-v-1fe60afe]{height:60%;overflow:hidden}@media(max-width:1280px){.box[data-v-1fe60afe]{position:absolute;top:100px;bottom:100px;left:100px;right:100px}}@media(max-width:768px){.box[data-v-1fe60afe]{position:absolute;top:0;bottom:0;left:0;right:0}}.box h2[data-v-1fe60afe]{text-align:center;font-size:56pt;color:#bbb}@media(max-width:768px){.box h2[data-v-1fe60afe]{margin-top:36px;max-height:unset}}@media(max-width:768px){.box .dots[data-v-1fe60afe]{margin-top:50px}}.box .dots .dot[data-v-1fe60afe]{width:50px;height:50px;background-color:#888;border-radius:50px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.box .dots .dot[data-v-1fe60afe]:first-child{-webkit-animation:dot-hover-data-v-1fe60afe 1.5s infinite;animation:dot-hover-data-v-1fe60afe 1.5s infinite;-webkit-animation-delay:0;animation-delay:0}.box .dots .dot[data-v-1fe60afe]:nth-child(2){-webkit-animation:dot-hover-data-v-1fe60afe 1.5s infinite;animation:dot-hover-data-v-1fe60afe 1.5s infinite;-webkit-animation-delay:.3s;animation-delay:.3s}.box .dots .dot[data-v-1fe60afe]:nth-child(3){-webkit-animation:dot-hover-data-v-1fe60afe 1.5s infinite;animation:dot-hover-data-v-1fe60afe 1.5s infinite;-webkit-animation-delay:.6s;animation-delay:.6s}@media(max-width:768px){.box .dots .dot[data-v-1fe60afe]{width:30px;height:30px}.box .dots .dot[data-v-1fe60afe]:not(:first-child){margin-left:15px}.box .dots .dot[data-v-1fe60afe]:not(:last-child){margin-right:15px}}@media(min-width:768px){.box .dots .dot[data-v-1fe60afe]{font-size:36pt}.box .dots .dot[data-v-1fe60afe]:not(:first-child){margin-left:25px}.box .dots .dot[data-v-1fe60afe]:not(:last-child){margin-right:25px}}.box .loading-text[data-v-1fe60afe]{font-size:36pt}@media(max-width:768px){.box .loading-text[data-v-1fe60afe]{font-size:24pt}}@-webkit-keyframes dot-hover-data-v-1fe60afe{0%{transform:translateY(0)}50%{transform:translateY(1em)}to{transform:translateY(0)}}@keyframes dot-hover-data-v-1fe60afe{0%{transform:translateY(0)}50%{transform:translateY(1em)}to{transform:translateY(0)}}",""]),t.exports=n},288:function(t,e,o){"use strict";o.r(e);var n={},d=(o(283),o(9)),component=Object(d.a)(n,(function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)}),[function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",{staticClass:"click-blocker flex justify-center md:items-center"},[o("div",{staticClass:"box"},[o("div",{staticClass:"w-full h-full flex flex-col justify-center items-center"},[o("h2",{staticClass:"loading-text"},[t._v("Just a second...")]),t._v(" "),o("div",{staticClass:"dots flex w-full justify-center items-center mt-24"},[o("div",{staticClass:"dot"}),t._v(" "),o("div",{staticClass:"dot"}),t._v(" "),o("div",{staticClass:"dot"})])])])])}],!1,null,"1fe60afe",null);e.default=component.exports}}]);
|
@@ -1 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{260:function(t,e,l){"use strict";l.r(e);var n=l(9),component=Object(n.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("svg",{staticClass:"bi bi-music-note-beamed",attrs:{viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}},[l("path",{attrs:{d:"M6 13c0 1.105-1.12 2-2.5 2S1 14.105 1 13c0-1.104 1.12-2 2.5-2s2.5.896 2.5 2zm9-2c0 1.105-1.12 2-2.5 2s-2.5-.895-2.5-2 1.12-2 2.5-2 2.5.895 2.5 2z"}}),t._v(" "),l("path",{attrs:{"fill-rule":"evenodd",d:"M14 11V2h1v9h-1zM6 3v10H5V3h1z"}}),t._v(" "),l("path",{attrs:{d:"M5 2.905a1 1 0 0 1 .9-.995l8-.8a1 1 0 0 1 1.1.995V3L5 4V2.905z"}})])}),[],!1,null,null,null);e.default=component.exports}}]);
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{261:function(t,e,l){"use strict";l.r(e);var n=l(9),component=Object(n.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("svg",{staticClass:"bi bi-music-note-beamed",attrs:{viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}},[l("path",{attrs:{d:"M6 13c0 1.105-1.12 2-2.5 2S1 14.105 1 13c0-1.104 1.12-2 2.5-2s2.5.896 2.5 2zm9-2c0 1.105-1.12 2-2.5 2s-2.5-.895-2.5-2 1.12-2 2.5-2 2.5.895 2.5 2z"}}),t._v(" "),l("path",{attrs:{"fill-rule":"evenodd",d:"M14 11V2h1v9h-1zM6 3v10H5V3h1z"}}),t._v(" "),l("path",{attrs:{d:"M5 2.905a1 1 0 0 1 .9-.995l8-.8a1 1 0 0 1 1.1.995V3L5 4V2.905z"}})])}),[],!1,null,null,null);e.default=component.exports}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
Tubio/frontend/_nuxt/91d721a.js
Normal file
1
Tubio/frontend/_nuxt/91d721a.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{261:function(t,l,e){"use strict";e.r(l);var n=e(9),component=Object(n.a)({},(function(){var t=this.$createElement,l=this._self._c||t;return l("svg",{staticClass:"bi bi-x",attrs:{viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}},[l("path",{attrs:{"fill-rule":"evenodd",d:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"}})])}),[],!1,null,null,null);l.default=component.exports}}]);
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{259:function(t,l,e){"use strict";e.r(l);var n=e(9),component=Object(n.a)({},(function(){var t=this.$createElement,l=this._self._c||t;return l("svg",{staticClass:"bi bi-x",attrs:{viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"}},[l("path",{attrs:{"fill-rule":"evenodd",d:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"}})])}),[],!1,null,null,null);l.default=component.exports}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
window.__NUXT__=(function(a){return {staticAssetsBase:"\u002F_nuxt\u002Fstatic\u002F1615643415",layout:"default",error:a,state:{diskUsage:{usage:{}},dlcache:{cache:[]},logs:{logs:[]},serverOs:{os_name:""},serverVersion:{serverVersion:-1},settings:{config:{}}},serverRendered:true,routePath:"\u002Fsettings",config:{app:{basePath:"\u002F",assetsPath:"\u002F_nuxt\u002F",cdnURL:a}}}}(null));
|
||||
window.__NUXT__=(function(a){return {staticAssetsBase:"\u002F_nuxt\u002Fstatic\u002F1644155680",layout:"default",error:a,state:{diskUsage:{usage:{}},dlcache:{cache:[]},logs:{logs:[]},serverOs:{os_name:""},serverVersion:{serverVersion:-1},settings:{config:{}}},serverRendered:true,routePath:"\u002Fsettings",config:{app:{basePath:"\u002F",assetsPath:"\u002F_nuxt\u002F",cdnURL:a}}}}(null));
|
@@ -1 +1 @@
|
||||
window.__NUXT__=(function(a,b){return {staticAssetsBase:"\u002F_nuxt\u002Fstatic\u002F1615643415",layout:"default",error:a,state:{diskUsage:{usage:{}},dlcache:{cache:[]},logs:{logs:[]},serverOs:{os_name:""},serverVersion:{serverVersion:-1},settings:{config:{}}},serverRendered:true,routePath:b,config:{app:{basePath:b,assetsPath:"\u002F_nuxt\u002F",cdnURL:a}}}}(null,"\u002F"));
|
||||
window.__NUXT__=(function(a,b){return {staticAssetsBase:"\u002F_nuxt\u002Fstatic\u002F1644155680",layout:"default",error:a,state:{diskUsage:{usage:{}},dlcache:{cache:[]},logs:{logs:[]},serverOs:{os_name:""},serverVersion:{serverVersion:-1},settings:{config:{}}},serverRendered:true,routePath:b,config:{app:{basePath:b,assetsPath:"\u002F_nuxt\u002F",cdnURL:a}}}}(null,"\u002F"));
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
BIN
Tubio/yt-dlp.exe
Normal file
BIN
Tubio/yt-dlp.exe
Normal file
Binary file not shown.
@@ -165,7 +165,7 @@ export default {
|
||||
data: function() {
|
||||
return {
|
||||
canUpdate: {type: Boolean, default: true},
|
||||
version__webUI: 0.762
|
||||
version__webUI: 0.78
|
||||
};
|
||||
},
|
||||
|
||||
@@ -209,7 +209,7 @@ export default {
|
||||
updateYtdl: function() {
|
||||
const that = this;
|
||||
axios.post("/api", {
|
||||
request: "update_dep_youtubedl",
|
||||
request: "update_dep_yt-dlp",
|
||||
}).then(function(response){
|
||||
if (response.data.status === "OK") {
|
||||
that.$store.dispatch("logs/update", that);
|
||||
|
@@ -2339,15 +2339,15 @@ browserify-zlib@^0.2.0:
|
||||
pako "~1.0.5"
|
||||
|
||||
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.6.4:
|
||||
version "4.16.3"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717"
|
||||
integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==
|
||||
version "4.16.6"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
|
||||
integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001181"
|
||||
colorette "^1.2.1"
|
||||
electron-to-chromium "^1.3.649"
|
||||
caniuse-lite "^1.0.30001219"
|
||||
colorette "^1.2.2"
|
||||
electron-to-chromium "^1.3.723"
|
||||
escalade "^3.1.1"
|
||||
node-releases "^1.1.70"
|
||||
node-releases "^1.1.71"
|
||||
|
||||
buffer-equal-constant-time@1.0.1:
|
||||
version "1.0.1"
|
||||
@@ -2580,10 +2580,10 @@ caniuse-api@^3.0.0:
|
||||
lodash.memoize "^4.1.2"
|
||||
lodash.uniq "^4.5.0"
|
||||
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001191:
|
||||
version "1.0.30001194"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001194.tgz#3d16ff3d734a5a7d9818402c28b1f636c5be5bed"
|
||||
integrity sha512-iDUOH+oFeBYk5XawYsPtsx/8fFpndAPUQJC7gBTfxHM8xw5nOZv7ceAD4frS1MKCLUac7QL5wdAJiFQlDRjXlA==
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001191, caniuse-lite@^1.0.30001219:
|
||||
version "1.0.30001230"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71"
|
||||
integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==
|
||||
|
||||
caseless@~0.12.0:
|
||||
version "0.12.0"
|
||||
@@ -2855,7 +2855,7 @@ color@^3.0.0, color@^3.1.2:
|
||||
color-convert "^1.9.1"
|
||||
color-string "^1.5.4"
|
||||
|
||||
colorette@^1.2.1:
|
||||
colorette@^1.2.1, colorette@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
|
||||
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
|
||||
@@ -3695,10 +3695,10 @@ ee-first@1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
electron-to-chromium@^1.3.649:
|
||||
version "1.3.679"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.679.tgz#69b45bbf1e0bc2320cb1f3e65b9283e86c4d5e2f"
|
||||
integrity sha512-PNF7JSPAEa/aV2nQLvflRcnIMy31EOuCY87Jbdz0KsUf8O/eFNGpuwgQn2DmyJkKzfQb0zrieanRGWvf/4H+BA==
|
||||
electron-to-chromium@^1.3.723:
|
||||
version "1.3.739"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz#f07756aa92cabd5a6eec6f491525a64fe62f98b9"
|
||||
integrity sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==
|
||||
|
||||
elliptic@^6.5.3:
|
||||
version "6.5.4"
|
||||
@@ -4267,9 +4267,9 @@ flush-write-stream@^1.0.0:
|
||||
readable-stream "^2.3.6"
|
||||
|
||||
follow-redirects@^1.0.0, follow-redirects@^1.10.0:
|
||||
version "1.13.3"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267"
|
||||
integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==
|
||||
version "1.14.7"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
|
||||
integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
|
||||
|
||||
for-in@^1.0.2:
|
||||
version "1.0.2"
|
||||
@@ -6437,9 +6437,9 @@ nan@^2.12.1, nan@^2.13.2:
|
||||
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
|
||||
|
||||
nanoid@^3.1.20:
|
||||
version "3.1.20"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
|
||||
integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
|
||||
integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
|
||||
|
||||
nanomatch@^1.2.9:
|
||||
version "1.2.13"
|
||||
@@ -6559,10 +6559,10 @@ node-object-hash@^1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94"
|
||||
integrity sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ==
|
||||
|
||||
node-releases@^1.1.70:
|
||||
version "1.1.71"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
|
||||
integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
|
||||
node-releases@^1.1.71:
|
||||
version "1.1.72"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe"
|
||||
integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
|
||||
|
||||
node-res@^5.0.1:
|
||||
version "5.0.1"
|
||||
@@ -7111,9 +7111,9 @@ path-key@^3.0.0, path-key@^3.1.0:
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
path-parse@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
path-to-regexp@0.1.7:
|
||||
version "0.1.7"
|
||||
|
Reference in New Issue
Block a user