Initial commit
BIN
._.DS_Store
Normal file
BIN
._cookies.txt
Normal file
BIN
._dropout.json
Normal file
BIN
._dropout.tv.html
Normal file
BIN
._localHub copy.py
Normal file
BIN
._localHub.py
Normal file
BIN
__pycache__/compile_functions.cpython-310.pyc
Executable file
BIN
__pycache__/downloadScript.cpython-310.pyc
Executable file
BIN
android-chrome-192x192.png
Executable file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
android-chrome-512x512.png
Executable file
|
After Width: | Height: | Size: 27 KiB |
BIN
apple-touch-icon.png
Executable file
|
After Width: | Height: | Size: 5.5 KiB |
27
cookies.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Netscape HTTP Cookie File
|
||||||
|
# This file is generated by yt-dlp. Do not edit.
|
||||||
|
|
||||||
|
.dropout.tv TRUE / TRUE 1762650214 FPID FPID2.2.9zC1b6H87kC8ag788%2BwQSwtoJURFGqXmDWaqRo%2B98Tg%3D.1727960007
|
||||||
|
.dropout.tv TRUE / FALSE 1743642174 __hstc 29832480.97ca0fc2f8ff76825d789dc3b4c42818.1727961705072.1727961705072.1728090112881.2
|
||||||
|
.dropout.tv TRUE / FALSE 1751167911 _device Macintosh%3AChrome%3A5Al1clXKpricuMZIVbc3nw
|
||||||
|
.dropout.tv TRUE / FALSE 1762650174 _ga GA1.1.658120894.1727960007
|
||||||
|
.dropout.tv TRUE / FALSE 1762650214 _ga_0SEZQT9B00 GS1.1.1728090111.3.1.1728090213.0.0.0
|
||||||
|
.dropout.tv TRUE / FALSE 1762650214 _ga_6C97G3S3W5 GS1.1.1728090112.3.1.1728090213.0.0.349468773
|
||||||
|
.dropout.tv TRUE / TRUE 1772855577 _session S2lMUFdidkVmM04vejlZai9WcHZhY2RJMmtEdXgrSHpvamsvbTBqOGtJMUVtajZSeCtJajljZHhYQWtwSnJIRXFUYkVkK2tHQ003YjVHU3J3N3A4dDFrWCs3VHJIdGdEUDh4cG5FT2xpbFBxSHVzVmxXMk1JKzFCTDhYbGR0VWZVSkd6bElseGdrNXF6cGVhK2hJR3ErSTBwK1FvMzVSZ1E3NUhvUWh5WllEVHlCYXBWaE1uL1BVbHc0TXBWZ3QrQ1pudkJIT1hmYkVTajR4VVdvc0lJcDBRbjk3M0QrRUc3djNlR0tVYVZLbXFrZkR3RHhwcFVqalg0NFlnOGlNTUp2blFRSGpqUUozbElscmluY3hVMWRKVjUza2cwQnc4RDM5MWlYek5kakhMTTBOV3lCWFJhSTR3dTlVWXByYzA0T2J6S3NCNjFhcUlpaE5wRnF1NnBtUmpmTW9MOXRwWjVzV25IRWVmaVVsRU1UWHlOc1N1SzNIaVpudVlCOVFmYzF4Vld0S2I0OEhWWkxOcm16eHhKWDc4R3JNMFRwdDRWY0dhQjlQNm1pWEJaUkdZTTh3WE51U1JBLzNCdm1ZRVFFcldmcEpyN2wyWG1wRmpUQUxIM2x4ZCt5NHpsM1A2V0ppa0Y5RC80eEJRRVNlZThqcHU0UGJPM3haaHlwRmxKK3dsYVlld0NZVi9wRldPTFpCZlU1djM4T1JURy8wRS9Oa0Q5OFZxZDJRVzhrdDVUbisxQTU5c293SU9nUXZlLS1malFZbHdEVXJsc3BLS3NBMThWVk1BPT0%3D--5b0c79409971bc19245bdfda1e6852252dbfaa71
|
||||||
|
.dropout.tv TRUE / FALSE 1757988936 _shopify_y 79ac1ca5-975c-4299-a564-a0c8d610c603
|
||||||
|
.dropout.tv TRUE / TRUE 1760756861 _swb 501e356a-340e-4df6-b9ab-7a8d533de814
|
||||||
|
.dropout.tv TRUE / FALSE 1757988936 _tracking_consent %7B%22con%22%3A%7B%22CMP%22%3A%7B%22a%22%3A%22%22%2C%22m%22%3A%22%22%2C%22p%22%3A%22%22%2C%22s%22%3A%22%22%7D%7D%2C%22v%22%3A%222.1%22%2C%22region%22%3A%22USNY%22%2C%22reg%22%3A%22%22%7D
|
||||||
|
.dropout.tv TRUE / FALSE 1761656015 _tt_enable_cookie 1
|
||||||
|
.dropout.tv TRUE / FALSE 1761656015 _ttp HPh1adFQl6IEwwcpBMDSUr3Hxk0
|
||||||
|
.dropout.tv TRUE / FALSE 1762522834 duuid 710562ef-9899-438c-d5d0-144467d517ab
|
||||||
|
.dropout.tv TRUE / FALSE 1743642174 hubspotutk 97ca0fc2f8ff76825d789dc3b4c42818
|
||||||
|
.vhx.tv TRUE / TRUE 1741321358 __cf_bm Hym91Xx8qO7sjF04v5pvl73l3V7lHaFeE_SUSYbIE.0-1741319558-1.0.1.1-Lmv054Q4na5nzpSX.UfUeY7WbUi1nhp2hWxybUz2_xq1WuCjvt97YlbniEEOANEM25revG1QVVRvTEWHqB8HUiW0kYrnoVHNy0LksdgVepZWpt3MU.F5K38Kwcz5mqAa
|
||||||
|
.vhx.tv TRUE / TRUE 0 _cfuvid au4mbR6Y5IRc0V0peePTWbEFBXwuLj.Ja6XSPxB2q3o-1741319558200-0.0.1.1-604800000
|
||||||
|
.vimeo.com TRUE / TRUE 1741321359 __cf_bm WQ4dWQeFvrqR1qJZ4YSPNeFm_4mexINjVGyHU.tcQOQ-1741319559-1.0.1.1-IfR_nJ2Lkt44kfjc2J.5qtaMHZUb0nk5laELehtXY7eiukUP5HaYnfrqMEoGHKR5
|
||||||
|
.vimeo.com TRUE / TRUE 0 _cfuvid qBr3kumKBcJPWBxfKCFusw52_kpxqGnQvSk65SQrAwc-1741319559083-0.0.1.1-604800000
|
||||||
|
.www.dropout.tv TRUE / TRUE 1741321351 __cf_bm AEtGRCk4R3NpGP7xIj1Pcj6rPIMYkUAT0oXqDuGsiFs-1741319551-1.0.1.1-.DFHQCxqYsh6UqT2UNbZDb2R9W4HYuIQzB.jG18RNZYq9EiPYZwuqcOTBPUS9hg_XXu8W5jftnYWcHOsC7zPQBtv6E64S8v.2xxLdUJ0CcqkV2d.Wkh6e_DB5usxg_gz
|
||||||
|
.www.dropout.tv TRUE / TRUE 1758330386 __stripe_mid 8fdb7dd8-5923-47a3-8216-a0341a0948d38720a8
|
||||||
|
.www.dropout.tv TRUE / FALSE 1769440228 gcp 1
|
||||||
|
.www.dropout.tv TRUE / FALSE 1769442099 referrer_url https%3A%2F%2Fwww.dropout.tv
|
||||||
|
www.dropout.tv FALSE / FALSE 2372471576 locale_det en
|
||||||
|
www.dropout.tv FALSE / TRUE 0 tracker %7B%22country%22%3A%22gb%22%2C%22platform%22%3A%22macintosh%22%2C%22uid%22%3A5124658859257%2C%22site_id%22%3A36348%7D
|
||||||
BIN
css/._style.css
Normal file
386
css/animations.css
Executable file
@ -0,0 +1,386 @@
|
|||||||
|
@-webkit-keyframes spin
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: rotate(0);
|
||||||
|
transform: rotate(0);
|
||||||
|
}
|
||||||
|
100%
|
||||||
|
{
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: rotate(0);
|
||||||
|
transform: rotate(0);
|
||||||
|
}
|
||||||
|
100%
|
||||||
|
{
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes burst
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
transform: scale(1);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
90%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale(1.5);
|
||||||
|
transform: scale(1.5);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes burst
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale(1);
|
||||||
|
transform: scale(1);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
90%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale(1.5);
|
||||||
|
transform: scale(1.5);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes flashing
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
45%
|
||||||
|
{
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
90%
|
||||||
|
{
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes flashing
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
45%
|
||||||
|
{
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
90%
|
||||||
|
{
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes fade-left
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(-20px);
|
||||||
|
transform: translateX(-20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fade-left
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(-20px);
|
||||||
|
transform: translateX(-20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes fade-right
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(20px);
|
||||||
|
transform: translateX(20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fade-right
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateX(20px);
|
||||||
|
transform: translateX(20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes fade-up
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(0);
|
||||||
|
transform: translateY(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(-20px);
|
||||||
|
transform: translateY(-20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fade-up
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(0);
|
||||||
|
transform: translateY(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(-20px);
|
||||||
|
transform: translateY(-20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes fade-down
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(0);
|
||||||
|
transform: translateY(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(20px);
|
||||||
|
transform: translateY(20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fade-down
|
||||||
|
{
|
||||||
|
0%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(0);
|
||||||
|
transform: translateY(0);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
75%
|
||||||
|
{
|
||||||
|
-webkit-transform: translateY(20px);
|
||||||
|
transform: translateY(20px);
|
||||||
|
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes tada
|
||||||
|
{
|
||||||
|
from
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1);
|
||||||
|
transform: scale3d(1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
10%,
|
||||||
|
20%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||||
|
transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
30%,
|
||||||
|
50%,
|
||||||
|
70%,
|
||||||
|
90%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||||
|
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
40%,
|
||||||
|
60%,
|
||||||
|
80%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
|
||||||
|
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
to
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1);
|
||||||
|
transform: scale3d(1, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes tada
|
||||||
|
{
|
||||||
|
from
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1);
|
||||||
|
transform: scale3d(1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
10%,
|
||||||
|
20%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||||
|
transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
30%,
|
||||||
|
50%,
|
||||||
|
70%,
|
||||||
|
90%
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||||
|
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
40%,
|
||||||
|
60%,
|
||||||
|
80%
|
||||||
|
{
|
||||||
|
-webkit-transform: rotate3d(0, 0, 1, -10deg);
|
||||||
|
transform: rotate3d(0, 0, 1, -10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
to
|
||||||
|
{
|
||||||
|
-webkit-transform: scale3d(1, 1, 1);
|
||||||
|
transform: scale3d(1, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bx-spin
|
||||||
|
{
|
||||||
|
-webkit-animation: spin 2s linear infinite;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
.bx-spin-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: spin 2s linear infinite;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-tada
|
||||||
|
{
|
||||||
|
-webkit-animation: tada 1.5s ease infinite;
|
||||||
|
animation: tada 1.5s ease infinite;
|
||||||
|
}
|
||||||
|
.bx-tada-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: tada 1.5s ease infinite;
|
||||||
|
animation: tada 1.5s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-flashing
|
||||||
|
{
|
||||||
|
-webkit-animation: flashing 1.5s infinite linear;
|
||||||
|
animation: flashing 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-flashing-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: flashing 1.5s infinite linear;
|
||||||
|
animation: flashing 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bx-burst
|
||||||
|
{
|
||||||
|
-webkit-animation: burst 1.5s infinite linear;
|
||||||
|
animation: burst 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-burst-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: burst 1.5s infinite linear;
|
||||||
|
animation: burst 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-up
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-up 1.5s infinite linear;
|
||||||
|
animation: fade-up 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-up-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-up 1.5s infinite linear;
|
||||||
|
animation: fade-up 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-down
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-down 1.5s infinite linear;
|
||||||
|
animation: fade-down 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-down-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-down 1.5s infinite linear;
|
||||||
|
animation: fade-down 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-left
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-left 1.5s infinite linear;
|
||||||
|
animation: fade-left 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-left-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-left 1.5s infinite linear;
|
||||||
|
animation: fade-left 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-right
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-right 1.5s infinite linear;
|
||||||
|
animation: fade-right 1.5s infinite linear;
|
||||||
|
}
|
||||||
|
.bx-fade-right-hover:hover
|
||||||
|
{
|
||||||
|
-webkit-animation: fade-right 1.5s infinite linear;
|
||||||
|
animation: fade-right 1.5s infinite linear;
|
||||||
|
}
|
||||||
BIN
css/background.jpg
Executable file
|
After Width: | Height: | Size: 822 KiB |
5425
css/boxicons.css
Executable file
1
css/boxicons.min.css
vendored
Executable file
350
css/style.css
Executable file
@ -0,0 +1,350 @@
|
|||||||
|
:root {
|
||||||
|
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
|
font-size: 17px;
|
||||||
|
background-color: #292F36;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
nav {
|
||||||
|
width: 100%;
|
||||||
|
text-align: left;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 5;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
text-decoration: unset;
|
||||||
|
background-color: #1b1f24;
|
||||||
|
& ul {
|
||||||
|
padding-inline-start: unset;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-block-start: .4em;
|
||||||
|
margin-block-end: .4em;
|
||||||
|
& li {
|
||||||
|
text-align: left;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.5em;
|
||||||
|
& hover {
|
||||||
|
cursor: pointer;;
|
||||||
|
}
|
||||||
|
& a {
|
||||||
|
display: block;
|
||||||
|
text-decoration: none; /* no underline */
|
||||||
|
color: #ccc;
|
||||||
|
padding: .4em .75em .4em .75em;
|
||||||
|
}
|
||||||
|
& a:hover {
|
||||||
|
color: #f0f0f0;
|
||||||
|
}
|
||||||
|
& i {
|
||||||
|
padding-top: .1em;
|
||||||
|
}
|
||||||
|
& .bx-search {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& b {
|
||||||
|
display: unset;
|
||||||
|
position: absolute;
|
||||||
|
right: 1em;
|
||||||
|
padding: .75em .2em;
|
||||||
|
z-index: 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& form {
|
||||||
|
all: unset;
|
||||||
|
display: inline-block;
|
||||||
|
border: solid 2px #ccc;
|
||||||
|
border-radius: 2em;
|
||||||
|
padding: .15em 1em;
|
||||||
|
top: 0;
|
||||||
|
& input {
|
||||||
|
display: block;
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
& button {
|
||||||
|
all: unset;
|
||||||
|
top: 5em;
|
||||||
|
cursor: pointer;
|
||||||
|
& a {
|
||||||
|
font-size: 1.5em;
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
bottom: -5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#dropSearch {
|
||||||
|
color: #ccc;
|
||||||
|
& form {
|
||||||
|
all: unset;
|
||||||
|
text-align: left;
|
||||||
|
text-indent: 1em;
|
||||||
|
& input {
|
||||||
|
z-index: 6;
|
||||||
|
float: left;
|
||||||
|
height: 2.4em;
|
||||||
|
font-size: 1.2em;
|
||||||
|
background-color: #1b1f24;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#searchFilters {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
/* display:none; */
|
||||||
|
& .selects-container {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #1b1f24;
|
||||||
|
margin: 0.2em;
|
||||||
|
text-align: left;
|
||||||
|
border-radius: .25em;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
& select {
|
||||||
|
left:0;
|
||||||
|
top:0;
|
||||||
|
all: unset;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
background-color: #1b1f24;
|
||||||
|
width: 11ch;
|
||||||
|
padding: 0.5em;
|
||||||
|
border-radius: inherit;
|
||||||
|
}
|
||||||
|
& a {
|
||||||
|
padding: 0.5em;
|
||||||
|
background-color: #2163a1;
|
||||||
|
border-radius: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
& a:hover{
|
||||||
|
color: #f0f0f0;
|
||||||
|
}
|
||||||
|
& i {
|
||||||
|
right: 0.4em;
|
||||||
|
top: 0.65em;
|
||||||
|
position: relative;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#searchButton{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#searchButton:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#glass {
|
||||||
|
position: fixed;
|
||||||
|
pointer-events: unset;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 4;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
left:0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
/* .background-container {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-image: url('background.jpg');
|
||||||
|
background-size: cover;
|
||||||
|
filter: blur(10px);
|
||||||
|
z-index: -1;
|
||||||
|
opacity: 50%;
|
||||||
|
} */
|
||||||
|
body {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 5em;
|
||||||
|
}
|
||||||
|
@media (min-width: 1171px) {
|
||||||
|
.downloader{
|
||||||
|
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 1170px) {
|
||||||
|
:root {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
.movie {
|
||||||
|
margin: 75em;
|
||||||
|
}
|
||||||
|
#desktopSearch {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#searchButton {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#searchFilters {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
#redirect{
|
||||||
|
width: 300;
|
||||||
|
height: 300;
|
||||||
|
}
|
||||||
|
nav {
|
||||||
|
text-align: right;
|
||||||
|
& ul {
|
||||||
|
display: block;
|
||||||
|
& b {
|
||||||
|
left: 1em;
|
||||||
|
right: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& li {
|
||||||
|
border-radius: .5em;
|
||||||
|
margin-right: .25em;
|
||||||
|
background-color: rgba(255, 255, 255, 0.10);
|
||||||
|
box-shadow: -6px 8px 10px rgba(81,41,10,0.1),0px 2px 2px rgba(81,41,10,0.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.pageButton {
|
||||||
|
margin-bottom: 3em;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
.downloader{
|
||||||
|
height: 125px;
|
||||||
|
width: 700px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
width: 10em;
|
||||||
|
height: 3em;
|
||||||
|
overflow: hidden;
|
||||||
|
& h4 {
|
||||||
|
margin-block-start: .1em;
|
||||||
|
margin-block-end: .1em;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2; /* Number of visible lines */
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.resDownload {
|
||||||
|
bottom: 0;
|
||||||
|
display: unset;
|
||||||
|
-webkit-touch-callout: none; /* iOS Safari */
|
||||||
|
-webkit-user-select: none; /* Safari */
|
||||||
|
-khtml-user-select: none; /* Konqueror HTML */
|
||||||
|
-moz-user-select: none; /* Old versions of Firefox */
|
||||||
|
-ms-user-select: none; /* Internet Explorer/Edge */
|
||||||
|
user-select: none;
|
||||||
|
& .resolution {
|
||||||
|
font-weight: bold;
|
||||||
|
color: white;
|
||||||
|
text-decoration: unset;
|
||||||
|
display: inline-block;
|
||||||
|
padding: .25em 1em .5em 1em;
|
||||||
|
border-radius: .5em;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
& .resError {
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.resolution_exists {
|
||||||
|
background-color: #525252;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
.resolution_available {
|
||||||
|
background-color: #2163a1;
|
||||||
|
cursor: pointer;
|
||||||
|
& .resolution_available:active {
|
||||||
|
background-color: #184875;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.details {
|
||||||
|
position: absolute;
|
||||||
|
margin: .25em;
|
||||||
|
margin-top: unset;
|
||||||
|
z-index: 3;
|
||||||
|
-webkit-touch-callout: none; /* iOS Safari */
|
||||||
|
-webkit-user-select: none; /* Safari */
|
||||||
|
-khtml-user-select: none; /* Konqueror HTML */
|
||||||
|
-moz-user-select: none; /* Old versions of Firefox */
|
||||||
|
-ms-user-select: none; /* Internet Explorer/Edge */
|
||||||
|
user-select: none;
|
||||||
|
& .chip {
|
||||||
|
background-color: rgba(0, 0, 0, 0.45);
|
||||||
|
border-radius: .5em;
|
||||||
|
font-size: .75em;
|
||||||
|
padding: .075em .3em;
|
||||||
|
display: inline-block;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
& .rating {
|
||||||
|
color: #fcba03;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.movie {
|
||||||
|
margin: .25em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
padding: .5em;
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: .75em;
|
||||||
|
width: 10em;
|
||||||
|
color: whitesmoke;
|
||||||
|
background-color: rgba(0, 0, 0, 0.45);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.45);
|
||||||
|
}
|
||||||
|
|
||||||
|
.movie img {
|
||||||
|
border-radius: .45em;
|
||||||
|
width: 10em;
|
||||||
|
height: auto;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
#search {
|
||||||
|
height: 2em;
|
||||||
|
}
|
||||||
|
.pageButton {
|
||||||
|
margin: auto;
|
||||||
|
margin-bottom: 2em;
|
||||||
|
margin-top: 1em;
|
||||||
|
width: fit-content;
|
||||||
|
border-radius: 2em;
|
||||||
|
padding: .5em 0em;
|
||||||
|
background-color: rgba(255, 255, 255, 0.10);
|
||||||
|
& a {
|
||||||
|
padding: .5em 1em;
|
||||||
|
}
|
||||||
|
& a:hover {
|
||||||
|
background-color: #ccc;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #292F36;
|
||||||
|
}
|
||||||
|
& #leftArrow {
|
||||||
|
border-radius: 2em 0 0 2em;
|
||||||
|
}
|
||||||
|
& #rightArrow {
|
||||||
|
border-radius: 0 2em 2em 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.disabled-button {
|
||||||
|
color: rgb(116, 116, 116);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.activePage {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.downloader {
|
||||||
|
font-size: 1.25em;
|
||||||
|
padding: 0.5em;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
#redirect{
|
||||||
|
border-radius: 40px;
|
||||||
|
margin: 50px;
|
||||||
|
}
|
||||||
30
css/transformations.css
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
.bx-rotate-90
|
||||||
|
{
|
||||||
|
transform: rotate(90deg);
|
||||||
|
|
||||||
|
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)';
|
||||||
|
}
|
||||||
|
.bx-rotate-180
|
||||||
|
{
|
||||||
|
transform: rotate(180deg);
|
||||||
|
|
||||||
|
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)';
|
||||||
|
}
|
||||||
|
.bx-rotate-270
|
||||||
|
{
|
||||||
|
transform: rotate(270deg);
|
||||||
|
|
||||||
|
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)';
|
||||||
|
}
|
||||||
|
.bx-flip-horizontal
|
||||||
|
{
|
||||||
|
transform: scaleX(-1);
|
||||||
|
|
||||||
|
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)';
|
||||||
|
}
|
||||||
|
.bx-flip-vertical
|
||||||
|
{
|
||||||
|
transform: scaleY(-1);
|
||||||
|
|
||||||
|
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)';
|
||||||
|
}
|
||||||
53
downloadScript.py
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
import os
|
||||||
|
import yt_dlp
|
||||||
|
|
||||||
|
|
||||||
|
class download():
|
||||||
|
def dropout(show,season,episode):
|
||||||
|
directory='/mnt/plex/tv/'+show+'/Season '+season+'/'
|
||||||
|
url_mapping={
|
||||||
|
'Dimension 20':f'https://www.dropout.tv/dimension-20/season:{season}',
|
||||||
|
'Make Some Noise':f'https://www.dropout.tv/make-some-noise/season:{season}'
|
||||||
|
}
|
||||||
|
url = url_mapping.get(show)
|
||||||
|
if not os.path.exists(directory):
|
||||||
|
os.makedirs(directory)
|
||||||
|
if episode is None or episode == '':
|
||||||
|
episode = '%(playlist_index)02d'
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
dl_ops['playliststart'] = int(episode)
|
||||||
|
except ValueError:
|
||||||
|
# Handle the error, e.g., log it or set a default value
|
||||||
|
dl_ops['playliststart'] = 0 # or some appropriate default value
|
||||||
|
dl_ops = {'format': 'bestvideo+bestaudio/best', 'audio_quality': '256K', 'paths': {'temp': '/mnt/data/downloader/temp', 'home': directory},'cookiefile': 'cookies.txt','reject_title': ['Behind The Scenes', 'Trailer', 'Recap'], 'outtmpl': show + ' - S'+season+'E'+episode+' - %(title)s.%(ext)s'}
|
||||||
|
with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
ydl.download(url)
|
||||||
|
|
||||||
|
# def ydl(self, url, location):
|
||||||
|
# dl_ops = {'paths': {'temp': '/mnt/data/downloader/temp', 'home': location}, 'outtmpl': '%(uploader)s/%(title)s.%(ext)s'}
|
||||||
|
# if location == "/mnt/plex/music/podcast":
|
||||||
|
# dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
# dl_ops['postprocessors'] = [{
|
||||||
|
# 'key': 'FFmpegExtractAudio',
|
||||||
|
# 'preferredcodec': 'mp3',
|
||||||
|
# 'preferredquality': '192',
|
||||||
|
# }, {
|
||||||
|
# 'key': 'FFmpegMetadata',
|
||||||
|
# 'add_metadata': True,
|
||||||
|
# }]
|
||||||
|
# elif location == "/mnt/plex/music/asmr":
|
||||||
|
# dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
# dl_ops['postprocessors'] = [{
|
||||||
|
# 'key': 'FFmpegExtractAudio',
|
||||||
|
# 'preferredcodec': 'mp3',
|
||||||
|
# 'preferredquality': '192',
|
||||||
|
# }, {
|
||||||
|
# 'key': 'FFmpegMetadata',
|
||||||
|
# 'add_metadata': True,
|
||||||
|
# }]
|
||||||
|
# else:
|
||||||
|
# dl_ops['format'] = 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best'
|
||||||
|
|
||||||
|
# with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
# ydl.download(url)
|
||||||
520
dropout.json
Executable file
@ -0,0 +1,520 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"SHOW": "Adventuring Academy",
|
||||||
|
"URL": "https://www.dropout.tv/adventuring-academy",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Bad Internet",
|
||||||
|
"URL": "https://www.dropout.tv/bad-internet",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Breaking News No Laugh Newsroom",
|
||||||
|
"URL": "https://www.dropout.tv/breaking-news-no-laugh-newsroom",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Cartoon Hell",
|
||||||
|
"URL": "https://www.dropout.tv/cartoon-hell",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9",
|
||||||
|
"10",
|
||||||
|
"11",
|
||||||
|
"12",
|
||||||
|
"13",
|
||||||
|
"14",
|
||||||
|
"15",
|
||||||
|
"16",
|
||||||
|
"17",
|
||||||
|
"18",
|
||||||
|
"19",
|
||||||
|
"20",
|
||||||
|
"21",
|
||||||
|
"22",
|
||||||
|
"23"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 A Court of Fey Flowers",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-a-court-of-fey-flowers",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 A Crown of Candy",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-a-crown-of-candy",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 A Starstruck Odyssey",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-a-starstruck-odyssey",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Animated",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-animated",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Audio Only",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-audio-only",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9",
|
||||||
|
"10",
|
||||||
|
"11",
|
||||||
|
"12",
|
||||||
|
"13",
|
||||||
|
"14",
|
||||||
|
"15",
|
||||||
|
"16",
|
||||||
|
"17",
|
||||||
|
"18",
|
||||||
|
"19",
|
||||||
|
"20",
|
||||||
|
"21",
|
||||||
|
"22",
|
||||||
|
"23"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Burrow's End",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-burrow-s-end",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Coffin Run",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-coffin-run",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Dungeons And Drag Queens",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-dungeons-and-drag-queens",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Escape From The Bloodkeep",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-escape-from-the-bloodkeep",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Fantasy High",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-fantasy-high",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Fantasy High Junior Year",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-fantasy-high-junior-year",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Leviathan",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-leviathan",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Mentopolis",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-mentopolis",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Misfits And Magic",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-misfits-and-magic",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Never Stop Blowing Up",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-never-stop-blowing-up",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Neverafter",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-neverafter",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Shriek Week",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-shriek-week",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 The Ravening War",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-the-ravening-war",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 The Seven",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-the-seven",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 The Unsleeping City",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-the-unsleeping-city",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Time Quangle",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-time-quangle",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20 Tiny Heist",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-tiny-heist",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dimension 20's Adventuring Party",
|
||||||
|
"URL": "https://www.dropout.tv/dimension-20-s-adventuring-party",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9",
|
||||||
|
"10",
|
||||||
|
"11",
|
||||||
|
"12",
|
||||||
|
"13",
|
||||||
|
"14",
|
||||||
|
"15",
|
||||||
|
"16",
|
||||||
|
"17",
|
||||||
|
"18"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dirty Laundry",
|
||||||
|
"URL": "https://www.dropout.tv/dirty-laundry",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"69"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Dropout Music",
|
||||||
|
"URL": "https://www.dropout.tv/dropout-music",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Erotic Book Club",
|
||||||
|
"URL": "https://www.dropout.tv/erotic-book-club",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Erotic Clubhouse",
|
||||||
|
"URL": "https://www.dropout.tv/erotic-clubhouse",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Fantasy High Extra Credit",
|
||||||
|
"URL": "https://www.dropout.tv/fantasy-high-extra-credit",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Game Changer",
|
||||||
|
"URL": "https://www.dropout.tv/game-changer",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Game Changer Battle Royale",
|
||||||
|
"URL": "https://www.dropout.tv/game-changer-battle-royale",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Gods of Food",
|
||||||
|
"URL": "https://www.dropout.tv/gods-of-food",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Kingpin Katie",
|
||||||
|
"URL": "https://www.dropout.tv/kingpin-katie",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Kingpin Katie The Web Series",
|
||||||
|
"URL": "https://www.dropout.tv/kingpin-katie-the-web-series",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Make Some Noise",
|
||||||
|
"URL": "https://www.dropout.tv/make-some-noise",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Mice Murder",
|
||||||
|
"URL": "https://www.dropout.tv/mice-murder",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Monet's Slumber Party",
|
||||||
|
"URL": "https://www.dropout.tv/monet-s-slumber-party",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Paranoia",
|
||||||
|
"URL": "https://www.dropout.tv/paranoia",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Play It By Ear",
|
||||||
|
"URL": "https://www.dropout.tv/play-it-by-ear",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Raph's Hall of Fame",
|
||||||
|
"URL": "https://www.dropout.tv/raph-s-hall-of-fame",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "See Plum Run",
|
||||||
|
"URL": "https://www.dropout.tv/see-plum-run",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Smartypants",
|
||||||
|
"URL": "https://www.dropout.tv/smartypants",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Tablepop",
|
||||||
|
"URL": "https://www.dropout.tv/tablepop",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Tales From The Closet",
|
||||||
|
"URL": "https://www.dropout.tv/tales-from-the-closet",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "The Rank Room",
|
||||||
|
"URL": "https://www.dropout.tv/the-rank-room",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Thousandaires",
|
||||||
|
"URL": "https://www.dropout.tv/thousandaires",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Total Forgiveness",
|
||||||
|
"URL": "https://www.dropout.tv/total-forgiveness",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Total Forgiveness Early Payoff",
|
||||||
|
"URL": "https://www.dropout.tv/total-forgiveness-early-payoff",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Troopers 1",
|
||||||
|
"URL": "https://www.dropout.tv/troopers-1",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Troopers Animated",
|
||||||
|
"URL": "https://www.dropout.tv/troopers-animated",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Ultramechatron Team Go 1",
|
||||||
|
"URL": "https://www.dropout.tv/ultramechatron-team-go-1",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Um Actually",
|
||||||
|
"URL": "https://www.dropout.tv/um-actually",
|
||||||
|
"SEASONS": [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Very Important People",
|
||||||
|
"URL": "https://www.dropout.tv/very-important-people",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "What The Facts 101",
|
||||||
|
"URL": "https://www.dropout.tv/what-the-facts-101",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Where In The Eff Is Sarah Cincinnati",
|
||||||
|
"URL": "https://www.dropout.tv/where-in-the-eff-is-sarah-cincinnati",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SHOW": "Wtf 101",
|
||||||
|
"URL": "https://www.dropout.tv/wtf-101",
|
||||||
|
"SEASONS": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
6161
dropout.tv.html
Normal file
BIN
favicon-16x16.png
Executable file
|
After Width: | Height: | Size: 366 B |
BIN
favicon-32x32.png
Executable file
|
After Width: | Height: | Size: 656 B |
BIN
favicon.ico
Executable file
|
After Width: | Height: | Size: 15 KiB |
BIN
fonts/boxicons.eot
Executable file
1653
fonts/boxicons.svg
Executable file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
fonts/boxicons.ttf
Executable file
BIN
fonts/boxicons.woff
Executable file
BIN
fonts/boxicons.woff2
Executable file
BIN
html/._dropout.html
Executable file
BIN
html/._index.html
Normal file
BIN
html/._navbar.html
Normal file
BIN
html/._ydl.html
Normal file
0
html/body.html
Executable file
0
html/contianer.html
Executable file
31
html/dropout.html
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Dropout.tv</title>
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/boxicons.css">
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- <div id="glass"></div> -->
|
||||||
|
{navBar}
|
||||||
|
<form id="dropout_download">
|
||||||
|
<select class="downloader" name="show" id="download_show">
|
||||||
|
{shows}
|
||||||
|
</select>
|
||||||
|
<input class="downloader" name="season" type="text" id="download_season" placeholder="Season">
|
||||||
|
<!-- <input class="downloader" name="episode" type="text" id="download_episode" placeholder="Episode"><br> -->
|
||||||
|
<button class="downloader" type="submit">Download</button> <!-- Added a submit button -->
|
||||||
|
</form>
|
||||||
|
<div id="downloadResult"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="javascript/general.js"></script>
|
||||||
|
<script type="text/javascript" src="javascript/dropout.js"></script>
|
||||||
|
|
||||||
|
</html>
|
||||||
220
html/filters.html
Executable file
@ -0,0 +1,220 @@
|
|||||||
|
<div id="searchFilters">
|
||||||
|
<form>
|
||||||
|
<div class="selects-container">
|
||||||
|
<select name="genre" class="selects-child">
|
||||||
|
<option value="all" selected hidden>Genre</option>
|
||||||
|
<option value="all">All</option>
|
||||||
|
<option value="action">Action</option>
|
||||||
|
<option value="adventure">Adventure</option>
|
||||||
|
<option value="animation">Animation</option>
|
||||||
|
<option value="biography">Biography</option>
|
||||||
|
<option value="comedy">Comedy</option>
|
||||||
|
<option value="crime">Crime</option>
|
||||||
|
<option value="documentary">Documentary</option>
|
||||||
|
<option value="drama">Drama</option>
|
||||||
|
<option value="family">Family</option>
|
||||||
|
<option value="fantasy">Fantasy</option>
|
||||||
|
<option value="film-noir">Film-Noir</option>
|
||||||
|
<option value="game-show">Game-Show</option>
|
||||||
|
<option value="history">History</option>
|
||||||
|
<option value="horror">Horror</option>
|
||||||
|
<option value="music">Music</option>
|
||||||
|
<option value="musical">Musical</option>
|
||||||
|
<option value="mystery">Mystery</option>
|
||||||
|
<option value="news">News</option>
|
||||||
|
<option value="reality-tv">Reality-TV</option>
|
||||||
|
<option value="romance">Romance</option>
|
||||||
|
<option value="sci-fi">Sci-Fi</option>
|
||||||
|
<option value="sport">Sport</option>
|
||||||
|
<option value="talk-show">Talk-Show</option>
|
||||||
|
<option value="thriller">Thriller</option>
|
||||||
|
<option value="war">War</option>
|
||||||
|
<option value="western">Western</option>
|
||||||
|
</select>
|
||||||
|
<i class='bx bxs-sort-alt'></i>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="selects-container">
|
||||||
|
<select name="year" class="selects-child">
|
||||||
|
<option value="0" selected hidden>Year</option>
|
||||||
|
<option value="0">All</option>
|
||||||
|
<option value="2023">2023</option>
|
||||||
|
<option value="2022">2022</option>
|
||||||
|
<option value="2020-2023">2020-now</option>
|
||||||
|
<option value="2010-2023">2010-now</option>
|
||||||
|
<option value="2010-2019">2010-2019</option>
|
||||||
|
<option value="2000-2009">2000-2009</option>
|
||||||
|
<option value="1990-1999">1990-1999</option>
|
||||||
|
<option value="1980-1989">1980-1989</option>
|
||||||
|
<option value="1970-1979">1970-1979</option>
|
||||||
|
<option value="1900-1969">1900-1969</option>
|
||||||
|
</select>
|
||||||
|
<i class='bx bxs-sort-alt'></i>
|
||||||
|
</div> -->
|
||||||
|
<div class="selects-container">
|
||||||
|
<select name="rating" class="selects-child">
|
||||||
|
<option value="0" selected hidden>Rating</option>
|
||||||
|
<option value="0">All</option>
|
||||||
|
<option value="9">9+</option>
|
||||||
|
<option value="8">8+</option>
|
||||||
|
<option value="7">7+</option>
|
||||||
|
<option value="6">6+</option>
|
||||||
|
<option value="5">5+</option>
|
||||||
|
<option value="4">4+</option>
|
||||||
|
<option value="3">3+</option>
|
||||||
|
<option value="2">2+</option>
|
||||||
|
<option value="1">1+</option>
|
||||||
|
</select>
|
||||||
|
<i class='bx bxs-sort-alt'></i>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="selects-container" class="selects-child">
|
||||||
|
<select name="language">
|
||||||
|
<option value="all" selected hidden>Language</option>
|
||||||
|
<option value="all" >All</option>
|
||||||
|
<option value="" disabled>---------------------</option>
|
||||||
|
<option value="en">English</option>
|
||||||
|
<option value="foreign">Foreign</option>
|
||||||
|
<option value="fr">French (2714)</option>
|
||||||
|
<option value="ja">Japanese (2402)</option>
|
||||||
|
<option value="es">Spanish (1470)</option>
|
||||||
|
<option value="it">Italian (1282)</option>
|
||||||
|
<option value="de">German (1050)</option>
|
||||||
|
<option value="zh">Chinese (912)</option>
|
||||||
|
<option value="ko">Korean (824)</option>
|
||||||
|
<option value="cn">Cantonese (734)</option>
|
||||||
|
<option value="hi">Hindi (620)</option>
|
||||||
|
<option value="ru">Russian (364)</option>
|
||||||
|
<option value="sv">Swedish (348)</option>
|
||||||
|
<option value="pt">Portuguese (347)</option>
|
||||||
|
<option value="ro">Romanian (314)</option>
|
||||||
|
<option value="pl">Polish (297)</option>
|
||||||
|
<option value="th">Thai (214)</option>
|
||||||
|
<option value="nl">Dutch (202)</option>
|
||||||
|
<option value="tr">Turkish (202)</option>
|
||||||
|
<option value="da">Danish (196)</option>
|
||||||
|
<option value="no">Norwegian (132)</option>
|
||||||
|
<option value="ta">Tamil (132)</option>
|
||||||
|
<option value="ar">Arabic (129)</option>
|
||||||
|
<option value="id">Indonesian (124)</option>
|
||||||
|
<option value="vi">Vietnamese (118)</option>
|
||||||
|
<option value="hu">Hungarian (115)</option>
|
||||||
|
<option value="fi">Finnish (107)</option>
|
||||||
|
<option value="te">Telugu (106)</option>
|
||||||
|
<option value="cs">Czech (96)</option>
|
||||||
|
<option value="fa">Persian (79)</option>
|
||||||
|
<option value="tl">Tagalog (78)</option>
|
||||||
|
<option value="uk">Ukrainian (53)</option>
|
||||||
|
<option value="et">Estonian (51)</option>
|
||||||
|
<option value="el">Greek (48)</option>
|
||||||
|
<option value="he">Hebrew (45)</option>
|
||||||
|
<option value="ml">Malayalam (34)</option>
|
||||||
|
<option value="ms">Malay (29)</option>
|
||||||
|
<option value="pa">Punjabi (27)</option>
|
||||||
|
<option value="bn">Bangla (25)</option>
|
||||||
|
<option value="ca">Catalan (24)</option>
|
||||||
|
<option value="ur">Urdu (21)</option>
|
||||||
|
<option value="is">Icelandic (19)</option>
|
||||||
|
<option value="sk">Slovak (17)</option>
|
||||||
|
<option value="sr">Serbian (17)</option>
|
||||||
|
<option value="kn">Kannada (17)</option>
|
||||||
|
<option value="lv">Latvian (14)</option>
|
||||||
|
<option value="mr">Marathi (10)</option>
|
||||||
|
<option value="lt">Lithuanian (9)</option>
|
||||||
|
<option value="bg">Bulgarian (9)</option>
|
||||||
|
<option value="xx">xx (8)</option>
|
||||||
|
<option value="ka">Georgian (8)</option>
|
||||||
|
<option value="mk">Macedonian (7)</option>
|
||||||
|
<option value="gl">Galician (7)</option>
|
||||||
|
<option value="sh">Serbo-Croatian (7)</option>
|
||||||
|
<option value="hr">Croatian (7)</option>
|
||||||
|
<option value="eu">Basque (6)</option>
|
||||||
|
<option value="ga">Irish (6)</option>
|
||||||
|
<option value="bo">Tibetan (6)</option>
|
||||||
|
<option value="wo">Wolof (6)</option>
|
||||||
|
<option value="af">Afrikaans (5)</option>
|
||||||
|
<option value="am">Amharic (5)</option>
|
||||||
|
<option value="ku">Kurdish (5)</option>
|
||||||
|
<option value="sq">Albanian (5)</option>
|
||||||
|
<option value="yo">Yoruba (5)</option>
|
||||||
|
<option value="yue">Cantonese (5)</option>
|
||||||
|
<option value="sw">Swahili (4)</option>
|
||||||
|
<option value="sl">Slovenian (4)</option>
|
||||||
|
<option value="bs">Bosnian (3)</option>
|
||||||
|
<option value="km">Khmer (3)</option>
|
||||||
|
<option value="ps">Pashto (3)</option>
|
||||||
|
<option value="st">Southern Sotho (3)</option>
|
||||||
|
<option value="hy">Armenian (3)</option>
|
||||||
|
<option value="zu">Zulu (3)</option>
|
||||||
|
<option value="kk">Kazakh (3)</option>
|
||||||
|
<option value="cmn">cmn (3)</option>
|
||||||
|
<option value="gu">Gujarati (3)</option>
|
||||||
|
<option value="la">Latin (2)</option>
|
||||||
|
<option value="mn">Mongolian (2)</option>
|
||||||
|
<option value="nb">Norwegian Bokmål (2)</option>
|
||||||
|
<option value="yi">Yiddish (2)</option>
|
||||||
|
<option value="mi">Maori (2)</option>
|
||||||
|
<option value="ak">Akan (2)</option>
|
||||||
|
<option value="ht">Haitian Creole (2)</option>
|
||||||
|
<option value="mt">Maltese (2)</option>
|
||||||
|
<option value="my">Burmese (2)</option>
|
||||||
|
<option value="ne">Nepali (2)</option>
|
||||||
|
<option value="bm">Bambara (2)</option>
|
||||||
|
<option value="ab">Abkhazian (1)</option>
|
||||||
|
<option value="os">Ossetic (1)</option>
|
||||||
|
<option value="aa">Afar (1)</option>
|
||||||
|
<option value="lb">Luxembourgish (1)</option>
|
||||||
|
<option value="ky">Kyrgyz (1)</option>
|
||||||
|
<option value="az">Azerbaijani (1)</option>
|
||||||
|
<option value="so">Somali (1)</option>
|
||||||
|
<option value="iu">Inuktitut (1)</option>
|
||||||
|
<option value="lg">Ganda (1)</option>
|
||||||
|
<option value="be">Belarusian (1)</option>
|
||||||
|
<option value="ig">Igbo (1)</option>
|
||||||
|
<option value="cy">Welsh (1)</option>
|
||||||
|
<option value="zxx">No linguistic content (1)</option>
|
||||||
|
<option value="fil">Filipino (1)</option>
|
||||||
|
<option value="xh">Xhosa (1)</option>
|
||||||
|
<option value="tw">Twi (1)</option>
|
||||||
|
<option value="rw">Kinyarwanda (1)</option>
|
||||||
|
<option value="or">Odia (1)</option>
|
||||||
|
<option value="ase">American Sign Language (1)</option>
|
||||||
|
<option value="nan">Min Nan Chinese (1)</option>
|
||||||
|
<option value="ber">ber (1)</option>
|
||||||
|
<option value="qag">qag (1)</option>
|
||||||
|
<option value="gsw">Swiss German (1)</option>
|
||||||
|
<option value="ln">Lingala (1)</option>
|
||||||
|
<option value="iba">Iban (1)</option>
|
||||||
|
<option value="cr">Cree (1)</option>
|
||||||
|
<option value="jv">Javanese (1)</option>
|
||||||
|
<option value="tn">Tswana (1)</option>
|
||||||
|
<option value="qab">qab (1)</option>
|
||||||
|
<option value="lo">Lao (1)</option>
|
||||||
|
<option value="rom">Romany (1)</option>
|
||||||
|
<option value="dz">Dzongkha (1)</option>
|
||||||
|
<option value="mo">Romanian (1)</option>
|
||||||
|
<option value="sa">Sanskrit (1)</option>
|
||||||
|
<option value="ukl">ukl (1)</option>
|
||||||
|
</select>
|
||||||
|
<i class='bx bxs-sort-alt'></i>
|
||||||
|
</div> -->
|
||||||
|
<!-- <div class="selects-container">
|
||||||
|
<select name="order_by" class="selects-child">
|
||||||
|
<option value="latest" selected hidden>Order By</option>
|
||||||
|
<option value="latest">Latest</option>
|
||||||
|
<option value="oldest">Oldest</option>
|
||||||
|
<option value="featured">Featured</option>
|
||||||
|
<option value="seeds">Seeds</option>
|
||||||
|
<option value="peers">Peers</option>
|
||||||
|
<option value="year">Year</option>
|
||||||
|
<option value="rating">IMDb Rating</option>
|
||||||
|
<option value="likes">YTS Likes</option>
|
||||||
|
<option value="rt_audience">RT Audience</option>
|
||||||
|
<option value="alphabetical">Alphabetical</option>
|
||||||
|
<option value="downloads">Downloads</option>
|
||||||
|
</select>
|
||||||
|
<i class='bx bxs-sort-alt'></i>
|
||||||
|
</div> -->
|
||||||
|
<!-- <div class="selects-container">
|
||||||
|
<a>GO</a>
|
||||||
|
</div> -->
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
23
html/index.html
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Movie Hub</title>
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/boxicons.css">
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- <div id="glass"></div> -->
|
||||||
|
{navBar}
|
||||||
|
<a href="/dropout"><img id="redirect" src="images/dropout.jpg"width="200" height="200"></a>
|
||||||
|
<a href="/downloader"><img id="redirect" src="images/youtube.jpg"width="200" height="200"></a>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="javascript/general.js"></script>
|
||||||
|
|
||||||
|
</html>
|
||||||
22
html/movie.html
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Movie Hub</title>
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/boxicons.css">
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{navBar}
|
||||||
|
<div style="max-width: 77em; margin: auto;">{movie_tiles}</div>
|
||||||
|
{pageButton}
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
<script type="text/javascript" src="javascript/general.js"></script>
|
||||||
|
</html>
|
||||||
17
html/navbar.html
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<div id="dropSearch" style="display: none;">
|
||||||
|
<form method="get" action="/movie">
|
||||||
|
<input type="text" id="searchDropdown" placeholder="Search..." name="query_term">
|
||||||
|
<!-- <button type="submit" id="search-button"></button> -->
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<li><a href="/"><i class='bx bxs-home'></i></a></li>
|
||||||
|
<!-- <li><a id="searchButton"><i class='bx bx-search' ></i></a></li> -->
|
||||||
|
<!-- <form method="get" id="desktopSearch" action="/movie">
|
||||||
|
<input type="text" id="search" placeholder="Search..." name="query_term" size="50">
|
||||||
|
<button type="submit" id="search-button"><a><i class='bx bx-search' ></i></a></button>
|
||||||
|
</form> -->
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</nav>
|
||||||
50
html/pagebutton.html
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
<div class="pageButton">
|
||||||
|
<a id="leftArrow"><i class='bx bxs-left-arrow'></i></a>
|
||||||
|
{pages}
|
||||||
|
<a id="rightArrow"><i class='bx bxs-right-arrow'></i></a>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
// Get all elements with the class "pageNumber"
|
||||||
|
const pageNumbers = document.querySelectorAll('.pageNumber');
|
||||||
|
const activePageElement = document.getElementById('activePage');
|
||||||
|
const nextPage = parseInt(activePageElement.getAttribute('data-page')) + 1;
|
||||||
|
const previousPage = parseInt(activePageElement.getAttribute('data-page')) - 1;
|
||||||
|
const rightArrow = document.getElementById('rightArrow');
|
||||||
|
const leftArrow = document.getElementById('leftArrow');
|
||||||
|
|
||||||
|
// Add click event listeners to each page number element
|
||||||
|
pageNumbers.forEach(pageNumber => {{
|
||||||
|
pageNumber.addEventListener('click', () => {{
|
||||||
|
// Get the page number from the data-page attribute
|
||||||
|
const page = pageNumber.getAttribute('data-page');
|
||||||
|
// Construct the URL with the page number
|
||||||
|
const url = `/movie?query_term={query_term}&page=${{page}}`;
|
||||||
|
// Redirect to the constructed URL
|
||||||
|
window.location.href = url;
|
||||||
|
}});
|
||||||
|
}});
|
||||||
|
if (nextPage > {pageLimit}) {{
|
||||||
|
rightArrow.disabled = true;
|
||||||
|
rightArrow.classList.add('disabled-button');
|
||||||
|
}}
|
||||||
|
if (previousPage < 1) {{
|
||||||
|
leftArrow.disabled = true;
|
||||||
|
leftArrow.classList.add('disabled-button');
|
||||||
|
}}
|
||||||
|
// Add click event listener to the leftArrow element
|
||||||
|
leftArrow.addEventListener('click', () => {{
|
||||||
|
// Define the URL to redirect to
|
||||||
|
const page = previousPage
|
||||||
|
const url = `/movie?query_term={query_term}&page=${{page}}`;
|
||||||
|
// Redirect to the specified URL
|
||||||
|
window.location.href = url;
|
||||||
|
}});
|
||||||
|
// Add click event listener to the leftArrow element
|
||||||
|
rightArrow.addEventListener('click', () => {{
|
||||||
|
// Define the URL to redirect to
|
||||||
|
const page = nextPage
|
||||||
|
const url = `/movie?query_term={query_term}&page=${{page}}`;
|
||||||
|
// Redirect to the specified URL
|
||||||
|
window.location.href = url;
|
||||||
|
}});
|
||||||
|
</script>
|
||||||
33
html/ydl.html
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>YDL</title>
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/site.webmanifest">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/boxicons.css">
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- <div id="glass"></div> -->
|
||||||
|
{navBar}
|
||||||
|
<form id="ydl_download">
|
||||||
|
<input class="downloader" name="url" type="text" id="download_field" placeholder="Enter URL">
|
||||||
|
<select class="downloader" name="location" id="download_location">
|
||||||
|
<option value="/mnt/nsfw">NSFW</option>
|
||||||
|
<option value="/mnt/plex/podcasts">Podcast</option>
|
||||||
|
<option value="/mnt/plex/asmr">ASMR</option>
|
||||||
|
<option value="/mnt/plex/youtube">YouTube</option>
|
||||||
|
</select><br>
|
||||||
|
<button class="downloader" type="submit">Download</button> <!-- Added a submit button -->
|
||||||
|
</form>
|
||||||
|
<div id="downloadResult"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="javascript/general.js"></script>
|
||||||
|
<script type="text/javascript" src="javascript/ydl.js"></script>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
images/._dropout.jpg
Normal file
BIN
images/._youtube.jpg
Normal file
BIN
images/dropout.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
images/large-cover.jpg
Executable file
|
After Width: | Height: | Size: 18 KiB |
BIN
images/youtube.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
javascript/._dropout.js
Executable file
61
javascript/dropout.js
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
function clearInput() {
|
||||||
|
$('#download_field').val(''); // Clear the input field
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle the form submission with AJAX
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('#dropout_download').submit(function (event) {
|
||||||
|
event.preventDefault(); // Prevent the default form submission
|
||||||
|
alert("Episode(s) now downloading");
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST', // Use POST method to send data
|
||||||
|
url: '/dropoutDownloader', // Target URL for the CherryPy handler
|
||||||
|
data: $('#dropout_download').serializeArray(), // Serialize the form data
|
||||||
|
success: function (data) {
|
||||||
|
$('#downloadResult').html(data); // Display the result in the specified div
|
||||||
|
alert("File has finished downloading");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
let showsData = [];
|
||||||
|
|
||||||
|
// Load JSON data from the file
|
||||||
|
fetch('dropout.json')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
showsData = data;
|
||||||
|
populateShows();
|
||||||
|
});
|
||||||
|
|
||||||
|
function populateShows() {
|
||||||
|
const showSelect = document.getElementById("download_show");
|
||||||
|
showsData.forEach(show => {
|
||||||
|
const option = document.createElement("option");
|
||||||
|
option.value = show.SHOW;
|
||||||
|
option.text = show.SHOW;
|
||||||
|
showSelect.appendChild(option);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateSeasons() {
|
||||||
|
const showSelect = document.getElementById("download_show");
|
||||||
|
const seasonSelect = document.getElementById("download_season");
|
||||||
|
const selectedShow = showSelect.value;
|
||||||
|
|
||||||
|
// Clear existing options
|
||||||
|
seasonSelect.innerHTML = '';
|
||||||
|
|
||||||
|
// Find the selected show and update seasons
|
||||||
|
const show = showsData.find(s => s.SHOW === selectedShow);
|
||||||
|
if (show) {
|
||||||
|
show.SEASONS.forEach(season => {
|
||||||
|
const option = document.createElement("option");
|
||||||
|
option.value = season;
|
||||||
|
option.text = "Season " + season;
|
||||||
|
seasonSelect.appendChild(option);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
57
javascript/general.js
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
// function showPopup(movie_name) {
|
||||||
|
// var alert = "Sending download request for " + movie_name + "\n\n" + "Press OK to continue."
|
||||||
|
// window.alert(alert);
|
||||||
|
// }
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
var inputField = document.getElementById("searchDropdown");
|
||||||
|
var searchButton = document.getElementById("searchButton");
|
||||||
|
var matches = document.getElementById("matches");
|
||||||
|
var dropSearch = document.getElementById("dropSearch");
|
||||||
|
|
||||||
|
// window.addEventListener('scroll', () => {
|
||||||
|
// dropSearch.style.display = 'none';
|
||||||
|
// });
|
||||||
|
|
||||||
|
// Add a click event listener to the element
|
||||||
|
searchButton.addEventListener("click", function() {
|
||||||
|
// Toggle the 'display' style property
|
||||||
|
if (dropSearch.style.display === "none") {
|
||||||
|
dropSearch.style.display = "unset";
|
||||||
|
matches.style.display = "none";
|
||||||
|
} else {
|
||||||
|
dropSearch.style.display = "none";
|
||||||
|
matches.style.display = "unset";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
searchButton.addEventListener("click", function() {
|
||||||
|
inputField.focus(); // Activate the input field
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('.download-link').click(function (event) {
|
||||||
|
event.preventDefault(); // Prevent the default link behavior
|
||||||
|
|
||||||
|
var url = $(this).data('url');
|
||||||
|
var filename = $(this).data('filename');
|
||||||
|
var clickedLink = $(this);
|
||||||
|
|
||||||
|
// Use AJAX to download the file and save it with the provided filename
|
||||||
|
$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
url: '/download',
|
||||||
|
data: { url: url, filename: filename },
|
||||||
|
success: function (response) {
|
||||||
|
alert(response); // Display a message indicating success or failure
|
||||||
|
clickedLink.addClass('resolution_exists');
|
||||||
|
clickedLink.removeClass('resolution_available');
|
||||||
|
clickedLink.removeClass('download-link');
|
||||||
|
},
|
||||||
|
error: function () {
|
||||||
|
alert('Error downloading the file.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
21
javascript/ydl.js
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
function clearInput() {
|
||||||
|
$('#download_field').val(''); // Clear the input field
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle the form submission with AJAX
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('#ydl_download').submit(function (event) {
|
||||||
|
event.preventDefault(); // Prevent the default form submission
|
||||||
|
alert("File is now downloading");
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST', // Use POST method to send data
|
||||||
|
url: '/ydl', // Target URL for the CherryPy handler
|
||||||
|
data: $('#ydl_download').serializeArray(), // Serialize the form data
|
||||||
|
success: function (data) {
|
||||||
|
$('#downloadResult').html(data); // Display the result in the specified div
|
||||||
|
alert("File has finished downloading");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
201
localHub copy.py
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
import cherrypy
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
import pycountry
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import urllib.request
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
import subprocess
|
||||||
|
import yt_dlp
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
|
||||||
|
class download():
|
||||||
|
def dropout(show,season,episode):
|
||||||
|
directory='/mnt/plex/tv/'+show+'/Season '+season+'/'
|
||||||
|
with open('dropout.json', 'r') as json_file:
|
||||||
|
url_mapping = json.load(json_file)
|
||||||
|
url = next((item['URL'] for item in url_mapping if item['SHOW'] == show), None)
|
||||||
|
if url is not None:
|
||||||
|
url = f'{url}/season:{season}'
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Show '{show}' not found in the JSON data.")
|
||||||
|
if not os.path.exists(directory):
|
||||||
|
os.makedirs(directory)
|
||||||
|
if episode is None or episode == '':
|
||||||
|
episode = '%(playlist_index)02d'
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
dl_ops['playliststart'] = int(episode)
|
||||||
|
except ValueError:
|
||||||
|
# Handle the error, e.g., log it or set a default value
|
||||||
|
dl_ops['playliststart'] = 0 # or some appropriate default value
|
||||||
|
dl_ops = {
|
||||||
|
'format': 'bestvideo+bestaudio/best',
|
||||||
|
'audio_quality': '256K',
|
||||||
|
'paths': {
|
||||||
|
'temp': '/mnt/data/downloader/temp',
|
||||||
|
'home': directory
|
||||||
|
},
|
||||||
|
'cookiefile': 'cookies.txt',
|
||||||
|
'reject_title':
|
||||||
|
[
|
||||||
|
'Behind the Scenes',
|
||||||
|
'Behind The Scenes',
|
||||||
|
'Trailer',
|
||||||
|
'Recap'
|
||||||
|
],
|
||||||
|
'outtmpl': show + ' - S'+f"{int(season):02}"+'E'+episode+' - %(title)s.%(ext)s'
|
||||||
|
}
|
||||||
|
with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
ydl.download(url)
|
||||||
|
|
||||||
|
def ydl(url, location):
|
||||||
|
dl_ops = {'paths': {'temp': '/mnt/data/downloader/temp', 'home': location}, 'outtmpl': '%(uploader)s/%(title)s.%(ext)s'}
|
||||||
|
if location == "/mnt/plex/music/podcast":
|
||||||
|
dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
dl_ops['postprocessors'] = [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': '192',
|
||||||
|
}, {
|
||||||
|
'key': 'FFmpegMetadata',
|
||||||
|
'add_metadata': True,
|
||||||
|
}]
|
||||||
|
elif location == "/mnt/plex/music/asmr":
|
||||||
|
dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
dl_ops['postprocessors'] = [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': '192',
|
||||||
|
}, {
|
||||||
|
'key': 'FFmpegMetadata',
|
||||||
|
'add_metadata': True,
|
||||||
|
}]
|
||||||
|
else:
|
||||||
|
dl_ops['format'] = 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best'
|
||||||
|
|
||||||
|
with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
ydl.download(url)
|
||||||
|
|
||||||
|
# Extracting video information
|
||||||
|
video_info = ydl.extract_info(url, download=False)
|
||||||
|
thumbnail_url = video_info.get('thumbnail')
|
||||||
|
|
||||||
|
# Download the thumbnail image
|
||||||
|
if thumbnail_url:
|
||||||
|
try:
|
||||||
|
thumbnail_filename = os.path.join(location, f"{video_info['id']}.jpg")
|
||||||
|
with open(thumbnail_filename, 'wb') as thumbnail_file:
|
||||||
|
thumbnail_file.write(requests.get(thumbnail_url).content)
|
||||||
|
print("Downloaded MP4 and downloaded thumbnail successfully!")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error downloading thumbnail: {str(e)}")
|
||||||
|
else:
|
||||||
|
print("Downloaded MP4 but no thumbnail found.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def navbar(json=None):
|
||||||
|
movieCount =''
|
||||||
|
movieCount = '<b id="matches">'+str(json['data']['movie_count'])+' Matches</b>' if json != None else ""
|
||||||
|
return open('html/navbar.html').read().format(movieCount=movieCount)
|
||||||
|
|
||||||
|
def shows(json_data):
|
||||||
|
html = ''
|
||||||
|
accepted_D20 = ('Dimension 20', 'Dimension 20 Animated', "Dimension 20's Adventuring Party")
|
||||||
|
for item in json_data:
|
||||||
|
if 'Dimension 20' in item['SHOW']:
|
||||||
|
if item['SHOW'] in accepted_D20:
|
||||||
|
name = item['SHOW']
|
||||||
|
url = item['URL']
|
||||||
|
html += '<option value="' + name + '">' + name + '</option>'
|
||||||
|
else:
|
||||||
|
name = item['SHOW']
|
||||||
|
url = item['URL']
|
||||||
|
html += '<option value="' + name + '">' + name + '</option>'
|
||||||
|
return html
|
||||||
|
|
||||||
|
|
||||||
|
class grab():
|
||||||
|
def season(url):
|
||||||
|
page_html=requests.get(url)
|
||||||
|
soup = BeautifulSoup(page_html.text, 'html.parser')
|
||||||
|
select_element = soup.find('select', class_='js-switch-season')
|
||||||
|
options = select_element.find_all('option')
|
||||||
|
option_values = [option['value'] for option in options if option.has_attr('value')]
|
||||||
|
seasons = [item.replace(url+'/season:', '') for item in option_values]
|
||||||
|
print(seasons)
|
||||||
|
return seasons
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MovieApp:
|
||||||
|
@cherrypy.expose
|
||||||
|
def index(self):
|
||||||
|
|
||||||
|
return open('html/index.html').read().format(navBar=navbar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def downloader(self):
|
||||||
|
return open('html/ydl.html').read().format(navBar=navbar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def dropout(self):
|
||||||
|
with open('dropout.json', 'r') as json_file:
|
||||||
|
json_data = json.load(json_file)
|
||||||
|
return open('html/dropout.html').read().format(navBar=navbar(),shows=shows(json_data))
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def seriesInfo(self):
|
||||||
|
json_data=[]
|
||||||
|
page_html=requests.get('https://www.dropout.tv/series')
|
||||||
|
# If you want to parse the HTML
|
||||||
|
soup = BeautifulSoup(page_html.text, 'html.parser')
|
||||||
|
# Example: Find all elements with a specific class
|
||||||
|
elements = soup.find_all(class_='browse-item-link')
|
||||||
|
# Extract URLs from href attributes
|
||||||
|
urls = [element['href'] for element in elements if 'href' in element.attrs]
|
||||||
|
|
||||||
|
for url in urls:
|
||||||
|
info_data={}
|
||||||
|
name=url.replace('https://www.dropout.tv/','').replace('-s-',"'s-").replace('-',' ').title().replace('Of','of').replace("'S","'s")
|
||||||
|
info_data['SHOW'] = name
|
||||||
|
info_data['URL'] = url
|
||||||
|
info_data['SEASONS'] = grab.season(url)
|
||||||
|
json_data.append(info_data)
|
||||||
|
|
||||||
|
# Sort the json_data by the 'SHOW' key
|
||||||
|
sorted_json_data = sorted(json_data, key=lambda x: x['SHOW'])
|
||||||
|
|
||||||
|
with open('dropout.json', 'w') as json_file:
|
||||||
|
json.dump(sorted_json_data, json_file, indent=4)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def tester(self):
|
||||||
|
grab.season('https://www.dropout.tv/adventuring-academy')
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def dropoutDownloader(self,show,season,episode=None):
|
||||||
|
download.dropout(show,season,episode)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def ydl(self, url, location='/mnt/plex/youtube'):
|
||||||
|
download.ydl(url,location)
|
||||||
|
|
||||||
|
cherrypy.config.update({
|
||||||
|
'tools.staticdir.on': True,
|
||||||
|
'tools.staticdir.dir': os.getcwd(),
|
||||||
|
'server.socket_host': '0.0.0.0',
|
||||||
|
'server.socket_port': 8008,
|
||||||
|
'favicon.ico': 'favicon.ico',
|
||||||
|
})
|
||||||
|
if __name__ == '__main__':
|
||||||
|
cherrypy.quickstart(MovieApp())
|
||||||
211
localHub.py
Executable file
@ -0,0 +1,211 @@
|
|||||||
|
import cherrypy
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
import pycountry
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import urllib.request
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
import subprocess
|
||||||
|
import yt_dlp
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
|
||||||
|
class download():
|
||||||
|
def dropout(show,season,episode):
|
||||||
|
directory='/mnt/plex/tv/'+show+'/Season '+season+'/'
|
||||||
|
with open('dropout.json', 'r') as json_file:
|
||||||
|
url_mapping = json.load(json_file)
|
||||||
|
url = next((item['URL'] for item in url_mapping if item['SHOW'] == show), None)
|
||||||
|
if url is not None:
|
||||||
|
url = f'{url}/season:{season}'
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Show '{show}' not found in the JSON data.")
|
||||||
|
if not os.path.exists(directory):
|
||||||
|
os.makedirs(directory)
|
||||||
|
if episode is None or episode == '':
|
||||||
|
episode = '%(playlist_index)02d'
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
dl_ops['playliststart'] = int(episode)
|
||||||
|
except ValueError:
|
||||||
|
# Handle the error, e.g., log it or set a default value
|
||||||
|
dl_ops['playliststart'] = 0 # or some appropriate default value
|
||||||
|
dl_ops = {
|
||||||
|
'format': 'bestvideo+bestaudio/best',
|
||||||
|
'audio_quality': '256K',
|
||||||
|
'paths': {
|
||||||
|
'temp': '/mnt/data/downloader/temp',
|
||||||
|
'home': directory
|
||||||
|
},
|
||||||
|
'cookiefile': 'cookies.txt',
|
||||||
|
'reject_title': [
|
||||||
|
r'(?i).*behind.?the.?scenes.*', # Reject titles with "behind the scenes" (case-insensitive)
|
||||||
|
r'(?i).*trailer.*', # Reject titles with "trailer" (case-insensitive)
|
||||||
|
r'(?i).*recap.*', # Reject titles with "recap" (case-insensitive)
|
||||||
|
r'(?i).*last.looks.*' # Reject titles with "last looks" (case-insensitive)
|
||||||
|
],
|
||||||
|
'outtmpl': show + ' - S'+f"{int(season):02}"+'E'+episode+' - %(title)s.%(ext)s',
|
||||||
|
'noplaylist': True,
|
||||||
|
# Additional options for downloading subtitles
|
||||||
|
'writesubtitles': True, # Download subtitles
|
||||||
|
'subtitleslangs': ['en'] # Specify the language for subtitles (e.g., 'en' for English)
|
||||||
|
}
|
||||||
|
with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
ydl.download([url])
|
||||||
|
|
||||||
|
def ydl(url, location):
|
||||||
|
dl_ops = {'paths': {'temp': '/mnt/data/downloader/temp', 'home': location}, 'outtmpl': '%(uploader)s/%(title)s.%(ext)s'}
|
||||||
|
if location == "/mnt/plex/podcasts":
|
||||||
|
dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
dl_ops['postprocessors'] = [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': '192',
|
||||||
|
}, {
|
||||||
|
'key': 'FFmpegMetadata',
|
||||||
|
'add_metadata': True,
|
||||||
|
}]
|
||||||
|
elif location == "/mnt/plex/asmr":
|
||||||
|
dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
dl_ops['postprocessors'] = [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': '192',
|
||||||
|
}, {
|
||||||
|
'key': 'FFmpegMetadata',
|
||||||
|
'add_metadata': True,
|
||||||
|
}]
|
||||||
|
elif location == "/mnt/nsfw":
|
||||||
|
dl_ops['format'] = 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best'
|
||||||
|
|
||||||
|
else:
|
||||||
|
dl_ops = {
|
||||||
|
'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best',
|
||||||
|
'cookiefile': 'yt-cookies.txt'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
ydl.download(url)
|
||||||
|
|
||||||
|
# Extracting video information
|
||||||
|
video_info = ydl.extract_info(url, download=False)
|
||||||
|
thumbnail_url = video_info.get('thumbnail')
|
||||||
|
|
||||||
|
# Download the thumbnail image
|
||||||
|
if thumbnail_url:
|
||||||
|
try:
|
||||||
|
thumbnail_filename = os.path.join(location, f"{video_info['id']}.jpg")
|
||||||
|
with open(thumbnail_filename, 'wb') as thumbnail_file:
|
||||||
|
thumbnail_file.write(requests.get(thumbnail_url).content)
|
||||||
|
print("Downloaded MP4 and downloaded thumbnail successfully!")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error downloading thumbnail: {str(e)}")
|
||||||
|
else:
|
||||||
|
print("Downloaded MP4 but no thumbnail found.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def navbar(json=None):
|
||||||
|
movieCount =''
|
||||||
|
movieCount = '<b id="matches">'+str(json['data']['movie_count'])+' Matches</b>' if json != None else ""
|
||||||
|
return open('html/navbar.html').read().format(movieCount=movieCount)
|
||||||
|
|
||||||
|
def shows(json_data):
|
||||||
|
html = ''
|
||||||
|
accepted_D20 = ('Dimension 20', 'Dimension 20 Animated', "Dimension 20's Adventuring Party")
|
||||||
|
for item in json_data:
|
||||||
|
if 'Dimension 20' in item['SHOW']:
|
||||||
|
if item['SHOW'] in accepted_D20:
|
||||||
|
name = item['SHOW']
|
||||||
|
url = item['URL']
|
||||||
|
html += '<option value="' + name + '">' + name + '</option>'
|
||||||
|
else:
|
||||||
|
name = item['SHOW']
|
||||||
|
url = item['URL']
|
||||||
|
html += '<option value="' + name + '">' + name + '</option>'
|
||||||
|
return html
|
||||||
|
|
||||||
|
|
||||||
|
class grab():
|
||||||
|
def season(url):
|
||||||
|
page_html=requests.get(url)
|
||||||
|
soup = BeautifulSoup(page_html.text, 'html.parser')
|
||||||
|
select_element = soup.find('select', class_='js-switch-season')
|
||||||
|
options = select_element.find_all('option')
|
||||||
|
option_values = [option['value'] for option in options if option.has_attr('value')]
|
||||||
|
seasons = [item.replace(url+'/season:', '') for item in option_values]
|
||||||
|
print(seasons)
|
||||||
|
return seasons
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MovieApp:
|
||||||
|
@cherrypy.expose
|
||||||
|
def index(self):
|
||||||
|
|
||||||
|
return open('html/index.html').read().format(navBar=navbar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def downloader(self):
|
||||||
|
return open('html/ydl.html').read().format(navBar=navbar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def dropout(self):
|
||||||
|
with open('dropout.json', 'r') as json_file:
|
||||||
|
json_data = json.load(json_file)
|
||||||
|
return open('html/dropout.html').read().format(navBar=navbar(),shows=shows(json_data))
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def seriesInfo(self):
|
||||||
|
json_data=[]
|
||||||
|
page_html=requests.get('https://www.dropout.tv/series')
|
||||||
|
# If you want to parse the HTML
|
||||||
|
soup = BeautifulSoup(page_html.text, 'html.parser')
|
||||||
|
# Example: Find all elements with a specific class
|
||||||
|
elements = soup.find_all(class_='browse-item-link')
|
||||||
|
# Extract URLs from href attributes
|
||||||
|
urls = [element['href'] for element in elements if 'href' in element.attrs]
|
||||||
|
|
||||||
|
for url in urls:
|
||||||
|
info_data={}
|
||||||
|
name=url.replace('https://www.dropout.tv/','').replace('-s-',"'s-").replace('-',' ').title().replace('Of','of').replace("'S","'s")
|
||||||
|
info_data['SHOW'] = name
|
||||||
|
info_data['URL'] = url
|
||||||
|
info_data['SEASONS'] = grab.season(url)
|
||||||
|
json_data.append(info_data)
|
||||||
|
|
||||||
|
# Sort the json_data by the 'SHOW' key
|
||||||
|
sorted_json_data = sorted(json_data, key=lambda x: x['SHOW'])
|
||||||
|
|
||||||
|
with open('dropout.json', 'w') as json_file:
|
||||||
|
json.dump(sorted_json_data, json_file, indent=4)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def tester(self):
|
||||||
|
grab.season('https://www.dropout.tv/adventuring-academy')
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def dropoutDownloader(self,show,season,episode=None):
|
||||||
|
download.dropout(show,season,episode)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def ydl(self, url, location='/mnt/plex/youtube'):
|
||||||
|
download.ydl(url,location)
|
||||||
|
|
||||||
|
cherrypy.config.update({
|
||||||
|
'tools.staticdir.on': True,
|
||||||
|
'tools.staticdir.dir': os.getcwd(),
|
||||||
|
'server.socket_host': '0.0.0.0',
|
||||||
|
'server.socket_port': 8008,
|
||||||
|
'favicon.ico': 'favicon.ico',
|
||||||
|
})
|
||||||
|
if __name__ == '__main__':
|
||||||
|
cherrypy.quickstart(MovieApp())
|
||||||
361
movie_hub.py
Executable file
@ -0,0 +1,361 @@
|
|||||||
|
import cherrypy
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
import pycountry
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import urllib.request
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
from PyMovieDb import IMDB
|
||||||
|
import subprocess
|
||||||
|
import yt_dlp
|
||||||
|
from downloadScript import download
|
||||||
|
imdb = IMDB()
|
||||||
|
top_movies = []
|
||||||
|
recent_movies = []
|
||||||
|
|
||||||
|
priorities = [
|
||||||
|
{"type": "web", "video_codec": "x264"},
|
||||||
|
{"type": "web", "video_codec": "x265"},
|
||||||
|
{"type": "bluray", "video_codec": "x264"},
|
||||||
|
{"type": "bluray", "video_codec": "x265"},
|
||||||
|
]
|
||||||
|
|
||||||
|
def createMoviePoster(json_format):
|
||||||
|
movie_data = json_format
|
||||||
|
movie_readout = ""
|
||||||
|
plex_movies = json.load(open('/mnt/moviehub/plex_movies.json', 'r'))
|
||||||
|
for movie in movie_data:
|
||||||
|
res720 = {}
|
||||||
|
res1080 = {}
|
||||||
|
resOther = {}
|
||||||
|
availableRes = []
|
||||||
|
downButton = ""
|
||||||
|
plex_server_resolution = []
|
||||||
|
title = movie["title_english"]
|
||||||
|
rating = movie["rating"]
|
||||||
|
year = movie["year"]
|
||||||
|
imdb = movie["imdb_code"]
|
||||||
|
language = pycountry.languages.get(alpha_2=movie['language'])
|
||||||
|
language = language.name if language is not None else language
|
||||||
|
poster_url = movie["large_cover_image"]
|
||||||
|
for movie_match in plex_movies["movies"]:
|
||||||
|
if str(movie_match["video"]["title"].lower()) == str(movie["title"].lower()) and abs(int(movie_match["video"]["year"]) - year) <= 1:
|
||||||
|
plex_server_resolution.append(movie_match["media"]["videoResolution"]+"p")
|
||||||
|
for priority in priorities:
|
||||||
|
for resolution in movie["torrents"]:
|
||||||
|
if (resolution["quality"] == "720p" and
|
||||||
|
resolution["type"] == priority["type"] and
|
||||||
|
resolution["video_codec"] == priority["video_codec"]):
|
||||||
|
res720["res"] = resolution["quality"]
|
||||||
|
res720["url"] = resolution["url"]
|
||||||
|
break
|
||||||
|
for priority in priorities:
|
||||||
|
for resolution in movie["torrents"]:
|
||||||
|
if (resolution["quality"] == "1080p" and
|
||||||
|
resolution["type"] == priority["type"] and
|
||||||
|
resolution["video_codec"] == priority["video_codec"]):
|
||||||
|
res1080["res"] = resolution["quality"]
|
||||||
|
res1080["url"] = resolution["url"]
|
||||||
|
break
|
||||||
|
if len(res720) == 0 and len(res1080) == 0:
|
||||||
|
for resolution in movie["torrents"]:
|
||||||
|
resOther["res"] = resolution["quality"]
|
||||||
|
resOther["url"] = resolution["url"]
|
||||||
|
break
|
||||||
|
availableRes.append(res720)
|
||||||
|
availableRes.append(res1080)
|
||||||
|
availableRes.append(resOther)
|
||||||
|
if availableRes:
|
||||||
|
for resolution in availableRes:
|
||||||
|
res = resolution.get('res')
|
||||||
|
url = resolution.get('url')
|
||||||
|
if res is not None and url is not None:
|
||||||
|
extra_class = "resolution_exists" if res in plex_server_resolution else "download-link resolution_available"
|
||||||
|
downButton += f"""<a class="resolution {extra_class}" data-filename="{title} ({year}) ({res}).torrent" data-url="{url}">{res}</a>\n"""
|
||||||
|
# Create the movie readout HTML for each movie
|
||||||
|
movie_readout += f"""
|
||||||
|
<div class="movie">
|
||||||
|
<div class="details">
|
||||||
|
<b class="chip rating">{rating}<i class='bx bxs-star'></i></b>
|
||||||
|
<b class="chip">{year}</b>
|
||||||
|
<b class="chip">{language}</b>
|
||||||
|
</div>
|
||||||
|
<a href="https://www.imdb.com/title/{imdb}" target="_blank">
|
||||||
|
<img src="{poster_url}" onerror="this.src='images/large-cover.jpg'" alt="{title} Poster">
|
||||||
|
</a>
|
||||||
|
<div class="description">
|
||||||
|
<h4>{title}</h4>
|
||||||
|
</div>
|
||||||
|
<div class="resDownload">
|
||||||
|
{downButton}
|
||||||
|
</div>
|
||||||
|
</div>"""
|
||||||
|
return movie_readout
|
||||||
|
|
||||||
|
def navBar(json=None):
|
||||||
|
movieCount =''
|
||||||
|
movieCount = '<b id="matches">'+str(json['data']['movie_count'])+' Matches</b>' if json != None else ""
|
||||||
|
return open('html/navbar.html').read().format(movieCount=movieCount)
|
||||||
|
|
||||||
|
def pageButton(json, query_term):
|
||||||
|
pages = ''
|
||||||
|
movieCount = json['data']['movie_count']
|
||||||
|
resultLimit = json['data']['limit']
|
||||||
|
activePage = json['data']['page_number']
|
||||||
|
pageLimit = math.ceil(movieCount / resultLimit)
|
||||||
|
|
||||||
|
# Calculate the range of pages to display (5 pages)
|
||||||
|
start_page = max(1, activePage - 2)
|
||||||
|
end_page = min(pageLimit, start_page + 4)
|
||||||
|
if end_page - start_page < 4: # Ensure we always show 5 pages if possible
|
||||||
|
start_page = max(1, end_page - 4)
|
||||||
|
|
||||||
|
for number in range(start_page, end_page + 1):
|
||||||
|
if number == activePage:
|
||||||
|
pages += "<input type='hidden' id='activePage' data-page='" + str(number) + "'>"
|
||||||
|
pages += "<a class='pageNumber activePage' data-page='" + str(number) + "'>" + str(number) + "</a>"
|
||||||
|
else:
|
||||||
|
pages += "<a class='pageNumber' data-page='" + str(number) + "'>" + str(number) + "</a>"
|
||||||
|
|
||||||
|
if pageLimit == 1:
|
||||||
|
return ''
|
||||||
|
else:
|
||||||
|
# Load your HTML template from the file 'pagebutton.html' and format it with the generated pages.
|
||||||
|
return open('html/pagebutton.html').read().format(pages=pages, query_term=query_term, pageLimit=pageLimit)
|
||||||
|
|
||||||
|
def eztv_json():
|
||||||
|
return 'pass'
|
||||||
|
|
||||||
|
class fetch():
|
||||||
|
|
||||||
|
def imdb_data(query_term=None):
|
||||||
|
json_data = imdb.search(query_term, tv=True) if query_term is not None else imdb.popular_movies(genre=None, sort_by=None)
|
||||||
|
data = json.loads(json_data)
|
||||||
|
results_data = data.get('results', [])
|
||||||
|
return results_data
|
||||||
|
|
||||||
|
def yts_movies(parameter=None, movie=None):
|
||||||
|
movie_id = movie['id'] if movie is not None else ""
|
||||||
|
url = f'https://yts.mx/api/v2/list_movies.json{parameter}{movie_id}'
|
||||||
|
data = requests.get(url).json()
|
||||||
|
if 'data' in data and data['data'].get('movie_count', 0) > 0:
|
||||||
|
return data['data']['movies'][0] if movie is not None else data["data"]["movies"]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def plex_data():
|
||||||
|
url = f'http://10.0.0.105:32400/library/sections/1/all'
|
||||||
|
response = requests.get(url)
|
||||||
|
if response.status_code == 200:
|
||||||
|
plex_xml_data = response.text
|
||||||
|
root = ET.fromstring(plex_xml_data)
|
||||||
|
movies = []
|
||||||
|
for video_elem in root.findall('.//Video'):
|
||||||
|
video_keys = {}
|
||||||
|
media_keys = {}
|
||||||
|
for key, value in video_elem.items():
|
||||||
|
video_keys[key] = value
|
||||||
|
media_element = video_elem.find(".//Media")
|
||||||
|
if media_element is not None:
|
||||||
|
media_attributes = media_element.attrib
|
||||||
|
for key, value in media_attributes.items():
|
||||||
|
media_keys[key] = value
|
||||||
|
movie_info = {
|
||||||
|
'video': video_keys,
|
||||||
|
'media': media_keys
|
||||||
|
}
|
||||||
|
movies.append(movie_info)
|
||||||
|
movie_dict = {'movies': movies}
|
||||||
|
json_data = json.dumps(movie_dict, indent=2)
|
||||||
|
with open('/mnt/moviehub/plex_movies.json', 'w') as json_file:
|
||||||
|
json_file.write(json_data)
|
||||||
|
else:
|
||||||
|
print(f'Error: {response.status_code}')
|
||||||
|
|
||||||
|
|
||||||
|
class background():
|
||||||
|
|
||||||
|
def update_top_movies():
|
||||||
|
while True:
|
||||||
|
global top_movies # Access the global variable
|
||||||
|
# Your code to fetch and update the top 18 movies
|
||||||
|
new_top_movies = []
|
||||||
|
for movie in fetch.imdb_data():
|
||||||
|
if len(new_top_movies) >= 12:
|
||||||
|
break
|
||||||
|
movie_data = fetch.yts_movies('?query_term=', movie)
|
||||||
|
if movie_data is not None:
|
||||||
|
new_top_movies.append(movie_data)
|
||||||
|
top_movies = new_top_movies # Update the global variable
|
||||||
|
|
||||||
|
global recent_movies
|
||||||
|
recent_movies = fetch.yts_movies('?sort_by=date_added&limit=18')
|
||||||
|
|
||||||
|
fetch.plex_data()
|
||||||
|
time.sleep(3600)
|
||||||
|
|
||||||
|
background_thread = threading.Thread(target=background.update_top_movies)
|
||||||
|
background_thread.daemon = True # Set the thread as a daemon to exit when the main program exits
|
||||||
|
background_thread.start()
|
||||||
|
|
||||||
|
class MovieApp:
|
||||||
|
@cherrypy.expose
|
||||||
|
def index(self):
|
||||||
|
latestMoviesTiles = createMoviePoster(top_movies)
|
||||||
|
recentMoviesTiles = createMoviePoster(recent_movies)
|
||||||
|
return open('html/index.html').read().format(latestMoviesTiles=latestMoviesTiles,recentMoviesTiles=recentMoviesTiles,navBar=navBar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def movie(self, query_term='', page='1', genre=None, minimum_rating=None):
|
||||||
|
api_url = f"https://yts.mx/api/v2/list_movies.json?limit=30&query_term={query_term}&page={page}"
|
||||||
|
api_url += f"&genre={genre}" if genre is not None else ""
|
||||||
|
api_url += f"&minimum_rating={minimum_rating}" if minimum_rating is not None else ""
|
||||||
|
response = requests.get(api_url)
|
||||||
|
if response.status_code == 200 and response.json()['status_message'] == "Query was successful" and response.json()['data']['movie_count'] > 0:
|
||||||
|
movie_tiles = createMoviePoster(response.json()["data"]["movies"])
|
||||||
|
pageBar = pageButton(response.json(), query_term)
|
||||||
|
else:
|
||||||
|
movie_tiles = "<h1>No matches found<h1>"
|
||||||
|
pageBar = ""
|
||||||
|
return open('html/movie.html').read().format(movie_tiles=movie_tiles,navBar=navBar(response.json()),pageButton=pageBar)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def tv(self, query_term=''):
|
||||||
|
poster_x, poster_y = '500', '750'
|
||||||
|
results_data = fetch.imdb_data(query_term)
|
||||||
|
html = ''
|
||||||
|
regex_pattern = r'_V1_QL\d+_([A-Z]+)(\d+)_CR(\d+),(\d+),(\d+),(\d+)_'
|
||||||
|
for result in results_data:
|
||||||
|
extract = re.search(regex_pattern, result['poster'])
|
||||||
|
item_id = result.get('id', '').replace('tt', '')
|
||||||
|
zoom = int(extract.group(4))
|
||||||
|
move_x = int(extract.group(3)) if extract else 0
|
||||||
|
move_x = move_x * 9 if move_x != 0 else move_x + 6.5
|
||||||
|
upscale_num = '510' if extract.group(2) == extract.group(5) else poster_y
|
||||||
|
resolution = f"""_V1_QL100_{extract.group(1)}{upscale_num}_CR{str(move_x)},{str(zoom)},{poster_x},{poster_y}_"""
|
||||||
|
poster_url = re.sub(r'_V1[\w_,]+', resolution, result['poster'])
|
||||||
|
title = result['name']
|
||||||
|
html += f"""<img style="width: 200px;" src="{poster_url}" id='{item_id}' onerror="this.src='images/large-cover.jpg'" alt="{title} Poster">"""
|
||||||
|
return html
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def download(self, url, filename):
|
||||||
|
save_path = os.path.join('/mnt/data/deluge/watch/movies', filename)
|
||||||
|
title = filename.replace('.torrent','')
|
||||||
|
response = requests.get(url)
|
||||||
|
if response.status_code == 200:
|
||||||
|
with open(save_path, 'wb') as file:
|
||||||
|
file.write(response.content)
|
||||||
|
return(f"Download has been set for '{title}'.")
|
||||||
|
else:
|
||||||
|
print(f"Failed to download the file from '{url}'.")
|
||||||
|
return(f"Failed to send download request. Contact your system administrator.")
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def anime(self):
|
||||||
|
rss = open('/mnt/deluge/config/yarss2.conf').read()
|
||||||
|
config = {} # Create an empty dictionary to store configuration
|
||||||
|
|
||||||
|
with open('/mnt/deluge/config/yarss2.conf', 'r') as file:
|
||||||
|
lines = file.readlines()
|
||||||
|
|
||||||
|
current_section = None
|
||||||
|
for line in lines:
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith("{"):
|
||||||
|
current_section = {}
|
||||||
|
elif line.startswith("}"):
|
||||||
|
if current_section:
|
||||||
|
config.update(current_section)
|
||||||
|
current_section = None
|
||||||
|
elif current_section:
|
||||||
|
key, value = line.split(":")
|
||||||
|
current_section[key.strip()] = value.strip()
|
||||||
|
|
||||||
|
# The 'config' dictionary now contains your configuration data
|
||||||
|
print(config)
|
||||||
|
return config
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def downloader(self):
|
||||||
|
return open('html/ydl.html').read().format(navBar=navBar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def dropout(self):
|
||||||
|
return open('html/dropout.html').read().format(navBar=navBar())
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def dropoutDownloader(self,show,season,episode=None):
|
||||||
|
download.dropout(show,season,episode)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def ydl(self, url, location):
|
||||||
|
dl_ops = {'paths': {'temp': '/mnt/data/downloader/temp', 'home': location}, 'outtmpl': '%(uploader)s/%(title)s.%(ext)s'}
|
||||||
|
if location == "/mnt/plex/music/podcast":
|
||||||
|
dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
dl_ops['postprocessors'] = [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': '192',
|
||||||
|
}, {
|
||||||
|
'key': 'FFmpegMetadata',
|
||||||
|
'add_metadata': True,
|
||||||
|
}]
|
||||||
|
elif location == "/mnt/plex/music/asmr":
|
||||||
|
dl_ops['format'] = 'bestaudio/best[ext=mp3]'
|
||||||
|
dl_ops['postprocessors'] = [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': '192',
|
||||||
|
}, {
|
||||||
|
'key': 'FFmpegMetadata',
|
||||||
|
'add_metadata': True,
|
||||||
|
}]
|
||||||
|
else:
|
||||||
|
dl_ops['format'] = 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best'
|
||||||
|
|
||||||
|
with yt_dlp.YoutubeDL(dl_ops) as ydl:
|
||||||
|
ydl.download(url)
|
||||||
|
|
||||||
|
# Extracting video information
|
||||||
|
video_info = ydl.extract_info(url, download=False)
|
||||||
|
thumbnail_url = video_info.get('thumbnail')
|
||||||
|
|
||||||
|
# Download the thumbnail image
|
||||||
|
if thumbnail_url:
|
||||||
|
try:
|
||||||
|
thumbnail_filename = os.path.join(location, f"{video_info['id']}.jpg")
|
||||||
|
with open(thumbnail_filename, 'wb') as thumbnail_file:
|
||||||
|
thumbnail_file.write(requests.get(thumbnail_url).content)
|
||||||
|
print("Downloaded MP4 and downloaded thumbnail successfully!")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error downloading thumbnail: {str(e)}")
|
||||||
|
else:
|
||||||
|
print("Downloaded MP4 but no thumbnail found.")
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def plex(self):
|
||||||
|
fetch.plex_data()
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def yts(self):
|
||||||
|
background.update_top_movies()
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def imdb(self):
|
||||||
|
return fetch.imdb_data()
|
||||||
|
|
||||||
|
|
||||||
|
cherrypy.config.update({
|
||||||
|
'tools.staticdir.on': True,
|
||||||
|
'tools.staticdir.dir': os.getcwd(),
|
||||||
|
'server.socket_host': '0.0.0.0',
|
||||||
|
'server.socket_port': 8008,
|
||||||
|
'favicon.ico': 'favicon.ico',
|
||||||
|
})
|
||||||
|
if __name__ == '__main__':
|
||||||
|
cherrypy.quickstart(MovieApp())
|
||||||
24
phcookies.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Netscape HTTP Cookie File
|
||||||
|
# This file is generated by yt-dlp. Do not edit.
|
||||||
|
|
||||||
|
.pornhub.com TRUE / FALSE 1769460179 accessAgeDisclaimerPH 1
|
||||||
|
.pornhub.com TRUE / TRUE 1769460178 bs 00000000000000009eec37e14c4791de
|
||||||
|
.pornhub.com TRUE / TRUE 1769460178 bsdd 00000000000000009eec37e14c4791de
|
||||||
|
.pornhub.com TRUE / TRUE 1740516178 comp_detect-cookies 32098.100000
|
||||||
|
.pornhub.com TRUE / TRUE 1740516178 fg_4e57973c726ec945fb2e66c2843f85c3 39643.100000
|
||||||
|
.pornhub.com TRUE / TRUE 1740516178 fg_afaf12e314c5419a855ddc0bf120670f 84717.100000
|
||||||
|
.pornhub.com TRUE / TRUE 1769460178 lvv 369418311554475781
|
||||||
|
.pornhub.com TRUE / TRUE 1738528978 platform pc
|
||||||
|
.pornhub.com TRUE / TRUE 1769460178 sessid 989272105831283424
|
||||||
|
.pornhub.com TRUE / TRUE 1769460178 ss 278330425773441703
|
||||||
|
.pornhub.com TRUE / TRUE 1738010578 ua f51bb482c660d0eeadd1f058058a2b35
|
||||||
|
.pornhub.com TRUE / TRUE 1769460178 vlc 593768424956759716
|
||||||
|
pornhub.com FALSE / FALSE 0 accessAgeDisclaimerPH 1
|
||||||
|
pornhub.com FALSE / FALSE 0 accessAgeDisclaimerUK 1
|
||||||
|
pornhub.com FALSE / FALSE 0 accessPH 1
|
||||||
|
pornhub.com FALSE / FALSE 0 age_verified 1
|
||||||
|
pornhub.com FALSE / FALSE 0 platform pc
|
||||||
|
www.pornhub.com FALSE / FALSE 0 KEY 18966643*21040703:2111841225:76138189:1
|
||||||
|
www.pornhub.com FALSE / TRUE 1769481093 __l 67969E46-42FE722901BB334966-3E7A877
|
||||||
|
www.pornhub.com FALSE / TRUE 0 __s 67969E46-42FE722901BB334966-3E7A877
|
||||||
|
www.pornhub.com FALSE / TRUE 1737924767 route 1737924167.521.29.628898|97956b72bfbf7fab22f88563ba4bba67
|
||||||
18
pornhub_cookies.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Netscape HTTP Cookie File
|
||||||
|
# http://curl.haxx.se/rfc/cookie_spec.html
|
||||||
|
# This is a generated file! Do not edit.
|
||||||
|
|
||||||
|
.pornhub.com TRUE / TRUE 1734531707 ua f51bb482c660d0eeadd1f058058a2b35
|
||||||
|
.pornhub.com TRUE / TRUE 1735050107 platform pc
|
||||||
|
.pornhub.com TRUE / TRUE 1765981307 bs q8dmd4tgi00cvvbdf75uct9hnm4pbqjr
|
||||||
|
.pornhub.com TRUE / TRUE 1765981307 bsdd q8dmd4tgi00cvvbdf75uct9hnm4pbqjr
|
||||||
|
.pornhub.com TRUE / TRUE 1765981307 ss 973545694738637567
|
||||||
|
.pornhub.com TRUE / TRUE 1765981307 sessid 464901789162651957
|
||||||
|
.pornhub.com TRUE / TRUE 1737037307 comp_detect-cookies 97493.100000
|
||||||
|
.pornhub.com TRUE / TRUE 1737037307 fg_afaf12e314c5419a855ddc0bf120670f 43066.100000
|
||||||
|
.pornhub.com TRUE / TRUE 1737037307 fg_7d31324eedb583147b6dcbea0051c868 33358.100000
|
||||||
|
www.pornhub.com FALSE / TRUE 0 __s 676188FB-42FE722901BB13D826-21882BD
|
||||||
|
www.pornhub.com FALSE / TRUE 1766002233 __l 676188FB-42FE722901BB13D826-21882BD
|
||||||
|
.pornhub.com TRUE / FALSE 1765981309 accessAgeDisclaimerPH 1
|
||||||
|
.pornhub.com TRUE / TRUE 1765981322 lvv 291874629710999433
|
||||||
|
.pornhub.com TRUE / TRUE 1765981322 vlc 775361919821281150
|
||||||
19
site.webmanifest
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "Movie Hub",
|
||||||
|
"short_name": "Movie Hub",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#1b1f24",
|
||||||
|
"background_color": "#1b1f24",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
||||||
1
svg/logos/bxl-500px.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.379 14.791c.004.01.098.269.151.396a5.859 5.859 0 0 0 1.258 1.865 5.86 5.86 0 0 0 6.437 1.259 5.876 5.876 0 0 0 3.124-3.125 5.802 5.802 0 0 0 .461-2.285c0-.793-.153-1.563-.461-2.287a5.862 5.862 0 0 0-1.257-1.864 5.86 5.86 0 0 0-4.152-1.72 6 6 0 0 0-2.318.461c-.57.241-1.536.862-2.102 1.446l-.002.002V4.107h8.117c.295-.003.295-.417.295-.55 0-.137 0-.549-.296-.553H7.857a.387.387 0 0 0-.388.384v6.801c0 .221.273.379.527.434.496.104.61-.053.732-.222l.015-.021c.187-.275.767-.858.771-.863a4.776 4.776 0 0 1 3.406-1.403 4.76 4.76 0 0 1 3.394 1.403 4.75 4.75 0 0 1 1.408 3.385c0 1.28-.498 2.483-1.4 3.385a4.858 4.858 0 0 1-3.416 1.403 4.656 4.656 0 0 1-2.42-.668l.004-4.137c0-.552.238-1.151.64-1.604a2.351 2.351 0 0 1 1.778-.803c.667 0 1.291.254 1.754.714.46.455.714 1.064.714 1.711a2.443 2.443 0 0 1-2.474 2.466c-.268 0-.753-.117-.773-.123-.281-.084-.4.305-.439.435-.151.492.077.59.122.604.448.138.741.164 1.124.164a3.555 3.555 0 0 0 3.551-3.553c0-1.943-1.592-3.526-3.548-3.526a3.59 3.59 0 0 0-2.536 1.033c-.644.632-1.013 1.478-1.013 2.317v.021c-.004.105-.004 2.583-.005 3.398l-.005-.006c-.368-.407-.731-1.029-.973-1.668-.097-.25-.309-.206-.601-.116-.127.04-.514.159-.429.438l.002.004zm4.172-.972c.002.118.111.223.175.286l.021.019c.111.11.217.164.315.164.081 0 .13-.037.148-.054.05-.046.604-.608.658-.662l.618.618c.058.064.12.097.192.098.1 0 .207-.058.32-.174.267-.272.134-.42.069-.49l-.628-.63.655-.658c.144-.155.017-.32-.111-.446-.183-.184-.359-.23-.474-.127l-.65.652-.657-.658a.183.183 0 0 0-.128-.051c-.087 0-.191.06-.308.177-.202.201-.246.341-.141.453l.657.656-.653.655a.247.247 0 0 0-.078.172m1.434-8.891c-1.053 0-2.171.211-2.992.566a.23.23 0 0 0-.151.205c-.011.093.013.216.076.377.051.131.187.478.449.376a7.566 7.566 0 0 1 2.618-.498c.96 0 1.892.188 2.768.558.696.296 1.354.721 2.068 1.341a.243.243 0 0 0 .165.068c.138 0 .271-.137.386-.266.191-.214.321-.392.135-.569a7.674 7.674 0 0 0-2.354-1.52 8.088 8.088 0 0 0-3.168-.638m5.668 12.986c-.127-.126-.235-.199-.33-.228a.24.24 0 0 0-.247.059l-.063.062a7.07 7.07 0 0 1-5.018 2.081 7.09 7.09 0 0 1-5.02-2.081 6.794 6.794 0 0 1-1.521-2.255 7.618 7.618 0 0 1-.462-1.596c-.004-.018-.005-.031-.009-.041-.044-.232-.257-.249-.564-.202-.127.019-.517.078-.479.358l.002.006a8.104 8.104 0 0 0 2.288 4.478 8.089 8.089 0 0 0 2.59 1.747 8.093 8.093 0 0 0 3.175.642 8.062 8.062 0 0 0 3.172-.643 8.129 8.129 0 0 0 2.658-1.813c.083-.09.154-.248-.172-.574"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
1
svg/logos/bxl-99designs.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19.93 10.61A2.7 2.7 0 0 0 19 10a2.74 2.74 0 0 0-1.1-.19 3.28 3.28 0 0 0-2.16.76v-.05a3.67 3.67 0 0 0-5.09-3.39 3.61 3.61 0 0 0-1.78 1.56 3.67 3.67 0 0 0-3.12-1.86 3.74 3.74 0 0 0-1.82.44 3.66 3.66 0 0 0-1.37 1.28A3.77 3.77 0 0 0 2 10.34a3.67 3.67 0 0 0 3.42 3.83l-1.6 2.76h2.39l2.65-4.59a3.63 3.63 0 0 0 2.93 1.84l-1.59 2.76h2.4l1.86-3.23a3.53 3.53 0 0 0 2.07 3.19 3.52 3.52 0 0 0 2.61.05 2.58 2.58 0 0 0 .9-.74v.73h2V7.06h-2.11zm-12.78.72a1.69 1.69 0 0 1-1.46.83 1.72 1.72 0 0 1-.86-.16 1.75 1.75 0 0 1-.62-.62 1.78 1.78 0 0 1-.21-.87 1.69 1.69 0 0 1 1.67-1.69 1.63 1.63 0 0 1 .84.23 1.58 1.58 0 0 1 .62.61 1.62 1.62 0 0 1 .23.83 1.72 1.72 0 0 1-.21.84zm6.38 0a1.58 1.58 0 0 1-.62.61 1.53 1.53 0 0 1-.84.22 1.78 1.78 0 0 1-.84-.22 1.65 1.65 0 0 1-.61-.62 1.67 1.67 0 0 1 0-1.69 1.73 1.73 0 0 1 .62-.61 1.63 1.63 0 0 1 .84-.23 1.69 1.69 0 0 1 .84.23 1.69 1.69 0 0 1 .63 2.28zm6.3 3a1.72 1.72 0 0 1-2 .85 1.72 1.72 0 0 1-1-.7 1.75 1.75 0 0 1-.29-1.15 1.77 1.77 0 0 1 .51-1.07 1.75 1.75 0 0 1 2.35-.11 1.73 1.73 0 0 1 .43 2.18z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
1
svg/logos/bxl-adobe.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M21 19.966V4.034h-6.654zM3 4.034v15.932L9.658 4.034zM9.092 16.76h3.104l1.268 3.205h2.778L12.003 9.904z"/></svg>
|
||||||
|
After Width: | Height: | Size: 203 B |
1
svg/logos/bxl-airbnb.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.001 16.709c-1.013-1.271-1.609-2.386-1.808-3.34-.197-.769-.12-1.385.218-1.848.357-.532.89-.791 1.589-.791s1.231.259 1.589.796c.335.458.419 1.075.215 1.848-.218.974-.813 2.087-1.808 3.341l.005-.006zm7.196.855c-.14.934-.775 1.708-1.65 2.085-1.687.734-3.359-.437-4.789-2.026 2.365-2.961 2.803-5.268 1.787-6.758-.596-.855-1.449-1.271-2.544-1.271-2.206 0-3.419 1.867-2.942 4.034.276 1.173 1.013 2.506 2.186 3.996-.735.813-1.432 1.391-2.047 1.748-.478.258-.934.418-1.37.456-2.008.299-3.582-1.647-2.867-3.656.1-.259.297-.734.634-1.471l.019-.039c1.097-2.382 2.43-5.088 3.961-8.09l.039-.1.435-.836c.338-.616.477-.892 1.014-1.231.258-.157.576-.235.934-.235.715 0 1.271.418 1.511.753.118.18.259.419.436.716l.419.815.06.119c1.53 3.001 2.863 5.702 3.955 8.089l.02.019.401.915.237.573c.183.459.221.915.16 1.393l.001.002zm.913-1.791c-.139-.438-.378-.953-.675-1.569v-.022a262.99 262.99 0 0 0-3.976-8.128l-.084-.121C14.486 4.109 13.849 3.014 12 3.014c-1.827 0-2.604 1.27-3.397 2.922l-.061.119c-1.251 2.426-2.564 5.128-3.975 8.13v.039l-.418.914c-.158.378-.237.575-.259.636C2.878 18.556 4.964 21 7.489 21c.021 0 .099 0 .198-.021h.278c1.313-.159 2.664-.993 4.035-2.485 1.371 1.49 2.725 2.326 4.033 2.485h.279c.1.021.18.021.2.021 2.525.002 4.61-2.444 3.598-5.227z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
1
svg/logos/bxl-algolia.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.177 9.059a3.582 3.582 0 0 0-3.576 3.584 3.584 3.584 0 0 0 3.576 3.585 3.578 3.578 0 0 0 3.575-3.585 3.582 3.582 0 0 0-3.575-3.584zm2.518 2.268-2.366 1.229c-.07.039-.153-.017-.153-.093V9.791h.001c0-.06.054-.104.109-.104a2.943 2.943 0 0 1 2.452 1.492c.028.055.011.121-.043.148z"/><path d="M18.578 3H5.361A2.363 2.363 0 0 0 3 5.366v13.277a2.368 2.368 0 0 0 2.361 2.371h13.217a2.367 2.367 0 0 0 2.361-2.372V5.372A2.368 2.368 0 0 0 18.578 3zm-8.112 3.404a.78.78 0 0 1 .779-.781h1.815c.43 0 .778.35.778.781v.618a.106.106 0 0 1-.131.104 5.677 5.677 0 0 0-3.106.017c-.07.016-.136-.033-.136-.104v-.635zM7.08 8.993a.78.78 0 0 1 .001-1.103l.371-.371.002-.002a.776.776 0 0 1 1.099.002l.31.311c.043.05.038.127-.017.159a5.82 5.82 0 0 0-1.296 1.3c-.044.049-.114.06-.163.011l-.306-.306-.001-.001zm5.097 8.737a5.078 5.078 0 0 1-5.074-5.087c0-2.813 2.272-5.092 5.074-5.092a5.074 5.074 0 0 1 5.074 5.086c0 2.815-2.272 5.093-5.074 5.093z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1022 B |
1
svg/logos/bxl-amazon.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M2.027 17.023c.061-.098.156-.105.289-.02 3.035 1.76 6.338 2.645 9.906 2.645 2.381 0 4.73-.447 7.051-1.332l.262-.117c.115-.051.195-.084.244-.109.189-.074.326-.037.438.109.102.143.076.279-.1.4-.213.158-.5.342-.84.545-1.037.619-2.203 1.098-3.492 1.441a14.815 14.815 0 0 1-3.77.508c-1.889 0-3.68-.33-5.369-.99a14.875 14.875 0 0 1-4.531-2.797c-.084-.061-.125-.123-.125-.184 0-.039.016-.074.041-.109l-.004.01zm5.479-5.189c0-.84.207-1.555.619-2.152.414-.592.977-1.041 1.703-1.346.666-.281 1.465-.48 2.43-.602.326-.037.861-.086 1.6-.145v-.31c0-.773-.084-1.299-.248-1.564-.252-.359-.65-.541-1.203-.541h-.15c-.4.039-.746.162-1.039.383a1.51 1.51 0 0 0-.564.916c-.049.25-.172.387-.361.426l-2.105-.264c-.209-.051-.311-.15-.311-.326 0-.037.006-.074.018-.123.209-1.078.715-1.881 1.52-2.404.814-.514 1.752-.814 2.828-.875h.451c1.379 0 2.469.361 3.244 1.076.115.123.227.25.34.398.1.139.188.264.234.377.063.111.127.275.164.475.051.213.088.352.113.426.023.086.051.25.064.514.006.262.016.41.016.461v4.406c0 .314.049.602.137.865.088.26.174.451.262.563l.428.561a.598.598 0 0 1 .111.303c0 .102-.049.188-.148.26-1.002.877-1.553 1.352-1.639 1.428-.137.113-.313.125-.525.039a5.397 5.397 0 0 1-.439-.414l-.258-.291c-.051-.063-.141-.174-.266-.352l-.25-.363c-.676.74-1.338 1.205-2.002 1.393-.414.125-.914.188-1.529.188-.926 0-1.701-.285-2.303-.863-.598-.576-.9-1.389-.9-2.453l-.043-.063.001-.007zm3.131-.367c0 .475.117.852.355 1.139.236.285.563.428.965.428.035 0 .088-.008.16-.018.078-.012.111-.02.141-.02.512-.133.902-.461 1.189-.982a2.62 2.62 0 0 0 .299-.758c.076-.268.1-.494.111-.666.016-.166.016-.453.016-.84v-.451c-.703 0-1.24.049-1.604.148-1.063.303-1.604.977-1.604 2.029l-.029-.016v.007zm7.646 5.865c.025-.051.063-.092.109-.143.301-.201.596-.342.877-.416a6.597 6.597 0 0 1 1.344-.201c.117-.01.234 0 .346.025.539.051.873.141.977.273.053.078.074.191.074.328v.125c0 .426-.117.926-.348 1.502s-.553 1.041-.963 1.402c-.061.049-.115.074-.164.074-.025 0-.051 0-.074-.01-.076-.037-.09-.1-.055-.201.451-1.051.672-1.787.672-2.201 0-.127-.025-.227-.074-.289-.119-.137-.457-.217-1.02-.217a9.42 9.42 0 0 0-.727.039c-.303.041-.582.078-.834.115-.074 0-.123-.014-.15-.037-.025-.025-.031-.039-.018-.064 0-.014.006-.025.018-.053v-.049l.01-.002z"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
svg/logos/bxl-android.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M18.344 8.71c-.707 0-1.279.572-1.279 1.278v4.53a1.278 1.278 0 1 0 2.558 0v-4.53c0-.706-.572-1.278-1.279-1.278zm-12.688 0c-.707 0-1.279.572-1.279 1.278v4.53a1.278 1.278 0 1 0 2.558 0v-4.53A1.277 1.277 0 0 0 5.656 8.71zm8.889-3.809.768-1.388a.343.343 0 0 0-.133-.47.344.344 0 0 0-.471.135l-.789 1.42c-.588-.235-1.236-.368-1.92-.368s-1.332.132-1.92.367l-.789-1.418a.344.344 0 0 0-.471-.135.345.345 0 0 0-.133.47l.768 1.388C8.072 5.69 7.148 7.099 7.148 8.71c0 .011 0 .021.002.034-.002.006-.002.013-.002.019v.001h9.703V8.71c.001-1.611-.923-3.019-2.306-3.809zM9.76 6.869a.346.346 0 1 1 .005-.693.346.346 0 0 1-.005.693zm4.48 0a.347.347 0 0 1 0-.692.346.346 0 0 1 0 .692zM7.148 16.12c0 .646.525 1.171 1.174 1.171h.586v2.401a1.279 1.279 0 0 0 2.558 0v-2.401h1.066v2.401c0 .707.572 1.278 1.277 1.278.709 0 1.281-.571 1.281-1.278v-2.401h.586c.648 0 1.174-.524 1.174-1.171V9.028H7.148v7.092z"/></svg>
|
||||||
|
After Width: | Height: | Size: 981 B |
1
svg/logos/bxl-angular.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.483 12.482h3.034L12 8.831z"/><path d="M12 3.074 3.689 6.038l1.268 10.987 7.043 3.9 7.043-3.9 1.268-10.987L12 3.074zm5.187 13.621H15.25l-1.045-2.606h-4.41L8.75 16.695H6.813L12 5.047l5.187 11.648z"/></svg>
|
||||||
|
After Width: | Height: | Size: 299 B |
1
svg/logos/bxl-apple.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19.665 16.811a10.316 10.316 0 0 1-1.021 1.837c-.537.767-.978 1.297-1.316 1.592-.525.482-1.089.73-1.692.744-.432 0-.954-.123-1.562-.373-.61-.249-1.17-.371-1.683-.371-.537 0-1.113.122-1.73.371-.616.25-1.114.381-1.495.393-.577.025-1.154-.229-1.729-.764-.367-.32-.826-.87-1.377-1.648-.59-.829-1.075-1.794-1.455-2.891-.407-1.187-.611-2.335-.611-3.447 0-1.273.275-2.372.826-3.292a4.857 4.857 0 0 1 1.73-1.751 4.65 4.65 0 0 1 2.34-.662c.46 0 1.063.142 1.81.422s1.227.422 1.436.422c.158 0 .689-.167 1.593-.498.853-.307 1.573-.434 2.163-.384 1.6.129 2.801.759 3.6 1.895-1.43.867-2.137 2.08-2.123 3.637.012 1.213.453 2.222 1.317 3.023a4.33 4.33 0 0 0 1.315.863c-.106.307-.218.6-.336.882zM15.998 2.38c0 .95-.348 1.838-1.039 2.659-.836.976-1.846 1.541-2.941 1.452a2.955 2.955 0 0 1-.021-.36c0-.913.396-1.889 1.103-2.688.352-.404.8-.741 1.343-1.009.542-.264 1.054-.41 1.536-.435.013.128.019.255.019.381z"/></svg>
|
||||||
|
After Width: | Height: | Size: 992 B |
1
svg/logos/bxl-audible.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M2.005 10.238v1.69l10.002 6.254 9.988-6.254v-1.69l-9.988 6.229z"/><path d="m15.938 12.469 1.465-.938c-1.161-1.701-3.153-2.876-5.396-2.876-2.257 0-4.236 1.135-5.371 2.89.093-.093.146-.146.238-.211 2.811-2.336 6.86-1.808 9.064 1.135z"/><path d="M9.051 13.063a2.99 2.99 0 0 1 1.78-.58c1.083 0 2.047.554 2.692 1.49l1.399-.871c-.607-.963-1.688-1.557-2.916-1.557-1.226 0-2.309.62-2.955 1.518zM5.25 9.012c4.117-3.246 9.937-2.362 13.037 1.953l.026.026 1.517-.938a9.337 9.337 0 0 0-7.823-4.235 9.35 9.35 0 0 0-7.825 4.235c.304-.342.686-.751 1.068-1.041z"/></svg>
|
||||||
|
After Width: | Height: | Size: 645 B |
1
svg/logos/bxl-aws.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M18.75 11.35a4.32 4.32 0 0 1-.79-.08 3.9 3.9 0 0 1-.73-.23l-.17-.04h-.12q-.15 0-.15.21v.33a.43.43 0 0 0 0 .19.5.5 0 0 0 .21.19 3 3 0 0 0 .76.26 4.38 4.38 0 0 0 1 .12 3 3 0 0 0 1-.14 1.94 1.94 0 0 0 .73-.37 1.81 1.81 0 0 0 .49-.58 1.79 1.79 0 0 0 .17-.78 1.54 1.54 0 0 0-.3-.93 2.15 2.15 0 0 0-1-.64l-.95-.3a2 2 0 0 1-.73-.36.65.65 0 0 1-.2-.47.66.66 0 0 1 .31-.6 1.82 1.82 0 0 1 .89-.18 2.89 2.89 0 0 1 1.27.26.79.79 0 0 0 .26.08c.1 0 .15-.08.15-.22v-.36a.38.38 0 0 0-.06-.22.56.56 0 0 0-.2-.16 1.55 1.55 0 0 0-.28-.12 3.44 3.44 0 0 0-.38-.11l-.44-.1A3.4 3.4 0 0 0 19 6a2.82 2.82 0 0 0-.83.11 2.19 2.19 0 0 0-.7.35A1.61 1.61 0 0 0 17 7a1.5 1.5 0 0 0-.18.74 1.6 1.6 0 0 0 .33 1 2.08 2.08 0 0 0 1.06.68l1 .3a1.58 1.58 0 0 1 .67.34.66.66 0 0 1 .18.47.72.72 0 0 1-.35.63 1.83 1.83 0 0 1-.96.19zM12.94 6.5a.48.48 0 0 0-.13-.26.37.37 0 0 0-.26-.07H12a.43.43 0 0 0-.26.07.42.42 0 0 0-.13.26l-1 4.4-1.14-4.4a.48.48 0 0 0-.14-.26s-.13-.07-.26-.07h-.65c-.11 0-.16.06-.16.17a1.22 1.22 0 0 0 .06.27l1.56 5.14A.61.61 0 0 0 10 12a.45.45 0 0 0 .26.06h.57a.49.49 0 0 0 .27-.06.57.57 0 0 0 .12-.27l1-4.28 1 4.29a.42.42 0 0 0 .12.26.4.4 0 0 0 .27.07h.57a.41.41 0 0 0 .25-.07.44.44 0 0 0 .14-.26l1.61-5.14a.73.73 0 0 0 0-.16.52.52 0 0 0 0-.11.15.15 0 0 0-.17-.17h-.62a.45.45 0 0 0-.26.07.68.68 0 0 0-.13.26L14 11zM5.77 8.63a5.92 5.92 0 0 0-.71-.05 2.42 2.42 0 0 0-1.63.52 1.72 1.72 0 0 0-.6 1.37 1.7 1.7 0 0 0 .49 1.28 1.82 1.82 0 0 0 1.33.48 2.48 2.48 0 0 0 2-.92 3.5 3.5 0 0 0 .2.39 2.34 2.34 0 0 0 .24.31.26.26 0 0 0 .37 0l.42-.28a.28.28 0 0 0 .13-.2.27.27 0 0 0 0-.16 3.63 3.63 0 0 1-.21-.47 2 2 0 0 1-.07-.6V8.19a2.2 2.2 0 0 0-.55-1.64A2.42 2.42 0 0 0 5.33 6a3.9 3.9 0 0 0-1 .13 3.9 3.9 0 0 0-.84.3.47.47 0 0 0-.18.14.37.37 0 0 0 0 .23v.33c0 .14 0 .2.14.2a.26.26 0 0 0 .11 0l.23-.08A4.32 4.32 0 0 1 4.42 7a3 3 0 0 1 .72-.09 1.5 1.5 0 0 1 1.08.31 1.46 1.46 0 0 1 .31 1.06v.49zm.78.9v.27a2.36 2.36 0 0 1-.07.58 1.06 1.06 0 0 1-.23.43 1.38 1.38 0 0 1-.63.42 2.12 2.12 0 0 1-.68.12.94.94 0 0 1-.7-.24.92.92 0 0 1-.24-.71.92.92 0 0 1 .33-.76 1.52 1.52 0 0 1 1-.27h.62a5.67 5.67 0 0 1 .6.16zM19.76 15a19.68 19.68 0 0 1-7.55 1.54 20 20 0 0 1-9.9-2.62c-.24-.15-.43.1-.22.29A14.68 14.68 0 0 0 12 18a14.4 14.4 0 0 0 8.1-2.47c.34-.31.03-.72-.34-.53z"/><path d="M18.38 14.06c-.19.14-.16.33.05.3.71-.09 2.28-.27 2.56.09s-.31 1.83-.58 2.49c-.08.2.1.28.28.13a3.9 3.9 0 0 0 1.23-3.34 3.94 3.94 0 0 0-3.54.33z"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
1
svg/logos/bxl-baidu.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M6.217 12.486c1.964-.422 1.693-2.772 1.637-3.287-.096-.788-1.028-2.172-2.291-2.061-1.588.141-1.821 2.44-1.821 2.44-.216 1.06.515 3.33 2.475 2.908m3.646-3.944c1.084 0 1.959-1.251 1.959-2.792 0-1.537-.871-2.785-1.955-2.785-1.086 0-1.966 1.242-1.966 2.785s.88 2.792 1.965 2.792m4.671.186c1.454.195 2.38-1.355 2.568-2.53.188-1.166-.754-2.528-1.776-2.763-1.031-.237-2.303 1.411-2.431 2.484-.136 1.318.188 2.627 1.634 2.813m5.751 1.973c0-.562-.46-2.253-2.19-2.253-1.729 0-1.965 1.596-1.965 2.726 0 1.077.089 2.573 2.247 2.528 2.148-.052 1.913-2.438 1.913-3.002M18.1 15.626s-2.247-1.739-3.557-3.613c-1.776-2.768-4.304-1.64-5.144-.239-.845 1.418-2.153 2.306-2.339 2.544-.188.232-2.709 1.596-2.147 4.079.563 2.483 2.528 2.439 2.528 2.439s1.446.142 3.133-.234c1.686-.375 3.13.091 3.13.091s3.92 1.317 5.005-1.212c1.072-2.537-.61-3.847-.61-3.847"/></svg>
|
||||||
|
After Width: | Height: | Size: 934 B |
1
svg/logos/bxl-behance.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.803 5.731c.589 0 1.119.051 1.605.155.483.103.895.273 1.243.508.343.235.611.547.804.939.187.387.28.871.28 1.443 0 .62-.14 1.138-.421 1.551-.283.414-.7.753-1.256 1.015.757.219 1.318.602 1.69 1.146.374.549.557 1.206.557 1.976 0 .625-.119 1.162-.358 1.613a3.11 3.11 0 0 1-.974 1.114 4.315 4.315 0 0 1-1.399.64 6.287 6.287 0 0 1-1.609.206H2V5.731h5.803zm-.351 4.972c.48 0 .878-.114 1.192-.345.312-.228.463-.604.463-1.119 0-.286-.051-.522-.151-.707a1.114 1.114 0 0 0-.417-.428 1.683 1.683 0 0 0-.597-.215 3.609 3.609 0 0 0-.697-.061H4.71v2.875h2.742zm.151 5.239c.267 0 .521-.023.76-.077.241-.052.455-.136.637-.261.182-.12.332-.283.44-.491.109-.206.162-.475.162-.798 0-.634-.179-1.085-.533-1.358-.355-.27-.831-.404-1.414-.404H4.71v3.39h2.893zm8.565-.041c.367.358.896.538 1.584.538.493 0 .919-.125 1.278-.373.354-.249.57-.515.653-.79h2.155c-.346 1.072-.871 1.838-1.589 2.299-.709.463-1.572.693-2.58.693-.702 0-1.334-.113-1.9-.337a4.033 4.033 0 0 1-1.439-.958 4.37 4.37 0 0 1-.905-1.485 5.433 5.433 0 0 1-.32-1.899c0-.666.111-1.289.329-1.864a4.376 4.376 0 0 1 .934-1.493c.405-.42.885-.751 1.444-.994a4.634 4.634 0 0 1 1.858-.362c.754 0 1.413.146 1.979.44a3.967 3.967 0 0 1 1.39 1.182c.363.493.622 1.058.783 1.691.161.632.217 1.292.171 1.983h-6.431c.001.704.238 1.371.606 1.729zm2.812-4.681c-.291-.322-.783-.496-1.385-.496-.391 0-.714.065-.974.199a1.97 1.97 0 0 0-.62.491 1.772 1.772 0 0 0-.328.628 2.82 2.82 0 0 0-.111.587h3.982c-.058-.624-.272-1.085-.564-1.409zm-3.918-4.663h4.989v1.215h-4.989z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
1
svg/logos/bxl-bing.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="m5.71 3 3.593 1.264v12.645l5.061-2.919-2.48-1.165-1.566-3.897 7.974 2.802v4.073l-8.984 5.183-3.595-2L5.71 3z"/></svg>
|
||||||
|
After Width: | Height: | Size: 209 B |
1
svg/logos/bxl-bitcoin.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="m11.953 8.819-.547 2.19c.619.154 2.529.784 2.838-.456.322-1.291-1.673-1.579-2.291-1.734zm-.822 3.296-.603 2.415c.743.185 3.037.921 3.376-.441.355-1.422-2.029-1.789-2.773-1.974z"/><path d="M14.421 2.299C9.064.964 3.641 4.224 2.306 9.581.97 14.936 4.23 20.361 9.583 21.697c5.357 1.335 10.783-1.924 12.117-7.281 1.336-5.356-1.924-10.781-7.279-12.117zm1.991 8.275c-.145.974-.686 1.445-1.402 1.611.985.512 1.485 1.298 1.009 2.661-.592 1.691-1.998 1.834-3.87 1.48l-.454 1.82-1.096-.273.447-1.794a44.624 44.624 0 0 1-.875-.228l-.449 1.804-1.095-.275.454-1.823c-.257-.066-.517-.136-.782-.202L6.87 15l.546-1.256s.808.215.797.199c.311.077.448-.125.502-.261l.719-2.875.115.029a.864.864 0 0 0-.114-.037l.512-2.053c.013-.234-.066-.528-.511-.639.018-.011-.797-.198-.797-.198l.291-1.172 1.514.378-.001.005c.227.057.461.111.7.165l.449-1.802 1.097.273-.44 1.766c.294.067.591.135.879.207l.438-1.755 1.097.273-.449 1.802c1.384.479 2.396 1.195 2.198 2.525z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
1
svg/logos/bxl-blender.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.427 13.011c.037-.667.363-1.254.856-1.671a2.855 2.855 0 0 1 1.844-.66c.71 0 1.36.25 1.845.66.492.417.819 1.005.856 1.671.038.686-.237 1.323-.721 1.795a2.829 2.829 0 0 1-1.979.782 2.83 2.83 0 0 1-1.981-.782c-.483-.472-.759-1.109-.72-1.795z"/><path d="M8.124 14.361c.005.26.089.767.213 1.164a6.156 6.156 0 0 0 1.328 2.299 6.833 6.833 0 0 0 2.323 1.667 7.465 7.465 0 0 0 3.05.635 7.495 7.495 0 0 0 3.051-.645 6.913 6.913 0 0 0 2.321-1.675 6.196 6.196 0 0 0 1.326-2.303 5.76 5.76 0 0 0 .25-1.285 5.942 5.942 0 0 0-.888-3.594 6.496 6.496 0 0 0-1.545-1.703l.001-.001-6.249-4.799-.016-.014c-.411-.314-1.101-.313-1.551.002-.457.319-.508.846-.104 1.18l-.001.001 2.606 2.121-7.943.009h-.012c-.656 0-1.287.432-1.412.976-.128.555.318 1.015 1.001 1.017l-.001.003 4.027-.008-7.188 5.516-.027.021c-.677.519-.896 1.382-.47 1.929.434.556 1.354.556 2.04.002l3.922-3.209c.001 0-.056.433-.052.694zm10.078 1.45c-.808.824-1.938 1.291-3.163 1.293-1.226.002-2.356-.461-3.165-1.283a3.739 3.739 0 0 1-.864-1.352 3.503 3.503 0 0 1-.199-1.511c.044-.505.193-.987.434-1.422.236-.429.562-.815.962-1.144a4.477 4.477 0 0 1 2.832-.988 4.478 4.478 0 0 1 2.832.98c.399.326.725.711.961 1.139.24.436.39.916.434 1.421a3.52 3.52 0 0 1-.198 1.511 3.804 3.804 0 0 1-.866 1.356z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
1
svg/logos/bxl-blogger.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.954 10.667c-.072-.322-.272-.621-.502-.745-.07-.039-.522-.088-1.004-.109-.809-.036-.898-.052-1.152-.201-.405-.237-.516-.493-.518-1.187-.002-1.327-.554-2.559-1.646-3.67-.776-.793-1.645-1.329-2.634-1.629-.236-.072-.768-.097-2.545-.118-2.787-.033-3.405.024-4.356.402-1.748.697-3.008 2.166-3.465 4.05-.087.353-.103.92-.124 4.177-.025 4.08.004 4.68.258 5.488.212.668.425 1.077.861 1.657.835 1.108 2.083 1.907 3.334 2.133.595.107 7.931.135 8.683.032 1.306-.178 2.331-.702 3.293-1.684.694-.71 1.129-1.479 1.414-2.499.117-.424.127-.63.149-3.117.017-1.878.002-2.758-.046-2.98zM8.007 8.108c.313-.316.399-.329 2.364-.329 1.764 0 1.822.004 2.081.134.375.189.538.456.538.88 0 .384-.153.653-.493.869-.184.115-.293.123-2.021.133-1.067.007-1.916-.013-2.043-.048-.669-.184-.918-1.143-.426-1.639zm7.706 8.037-.597.098-3.114.035c-2.736.033-3.511-.018-3.652-.08-.288-.124-.554-.472-.602-.78-.042-.292.104-.696.33-.9.285-.257.409-.266 3.911-.27 3.602-.002 3.583-.003 3.925.315.482.45.381 1.251-.201 1.582z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
1
svg/logos/bxl-bootstrap.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M18.002 2.997H5.999A3.011 3.011 0 0 0 2.997 6v12.002a3.012 3.012 0 0 0 3.002 3.001h12.003a3.012 3.012 0 0 0 3.001-3.001V6a3.012 3.012 0 0 0-3.001-3.003zm-1.64 12.647c-.152.36-.389.68-.693.927a3.594 3.594 0 0 1-1.206.614c-.49.151-1.074.229-1.75.229H7.888V6.909h5.103c.943 0 1.7.213 2.267.646.569.436.854 1.082.854 1.958 0 .528-.13.983-.389 1.357-.259.373-.63.664-1.111.868v.034c.642.135 1.137.438 1.464.912.327.473.493 1.069.493 1.789 0 .405-.078.788-.225 1.147l.02.021v.003zm-2.084-2.589c-.309-.282-.739-.419-1.297-.419H9.737v3.276h3.253c.554 0 .991-.144 1.298-.435.308-.289.464-.701.464-1.229-.005-.518-.156-.919-.464-1.193h-.014.004zm-.451-2.119c.299-.251.444-.613.444-1.084 0-.526-.131-.902-.397-1.116-.264-.214-.646-.326-1.146-.326H9.727v2.898h3.001c.436.001.81-.127 1.099-.372z"/></svg>
|
||||||
|
After Width: | Height: | Size: 883 B |
1
svg/logos/bxl-c-plus-plus.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.66 7a1.51 1.51 0 0 0-.55-.57l-7.34-4.24a1.67 1.67 0 0 0-1.54 0L3.89 6.43a1.68 1.68 0 0 0-.77 1.33v8.48a1.57 1.57 0 0 0 .22.76 1.51 1.51 0 0 0 .55.57l7.34 4.24a1.67 1.67 0 0 0 1.54 0l7.34-4.24a1.51 1.51 0 0 0 .55-.57 1.57 1.57 0 0 0 .22-.76V7.76a1.57 1.57 0 0 0-.22-.76zM12 17.92A5.92 5.92 0 1 1 17.13 9L16 9.71l-.36.2-1 .61A3 3 0 0 0 9 12a2.88 2.88 0 0 0 .4 1.48 3 3 0 0 0 5.13 0l2.6 1.52A5.94 5.94 0 0 1 12 17.92zm5.92-5.59h-.66V13h-.65v-.66H16v-.66h.66V11h.65v.66h.66zm2.47 0h-.66V13h-.66v-.66h-.65v-.66h.65V11h.66v.66h.66z"/></svg>
|
||||||
|
After Width: | Height: | Size: 630 B |
1
svg/logos/bxl-chrome.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.742 2.04c-1.404.183-3.06.808-4.281 1.626-1.01.664-2.397 2.02-2.309 2.251.193.501 3.28 5.658 3.33 5.562.038-.067.095-.279.123-.49.25-1.385 1.425-2.704 2.897-3.253.568-.221.683-.221 5.495-.27l4.917-.047-.395-.646c-1.385-2.26-3.522-3.819-6.197-4.512-.731-.193-2.81-.318-3.58-.22z"/><path d="M3.2 7.217c-.453.799-.983 2.415-1.107 3.358-.588 4.273 1.568 8.4 5.379 10.315.894.452 2.174.885 2.732.933l.356.029 1.674-2.838c.915-1.559 1.655-2.849 1.636-2.868-.02-.019-.231.039-.481.125-1.569.53-3.387.086-4.57-1.116-.424-.424-1.002-1.357-2.84-4.542C4.71 8.41 3.642 6.601 3.603 6.601c-.028 0-.211.279-.403.616z"/><path d="M15.15 8.804c1.222 1.242 1.655 3.003 1.116 4.59-.086.26-1.212 2.271-2.501 4.485-1.29 2.203-2.349 4.031-2.349 4.06 0 .115 1.328.057 2.175-.087 4.32-.74 7.573-4.002 8.265-8.276.26-1.558.164-2.925-.307-4.503l-.25-.837h-6.707l.557.568z"/><path d="M10.608 8.563C9.598 8.987 8.905 9.7 8.53 10.71c-.173.453-.202.713-.173 1.424.03.75.068.963.347 1.511.366.75.962 1.329 1.751 1.703.462.221.654.25 1.54.25.895 0 1.077-.029 1.559-.26.712-.326 1.462-1.077 1.79-1.79.23-.48.259-.663.259-1.558 0-.886-.029-1.078-.25-1.54-.375-.788-.952-1.386-1.703-1.75-.568-.28-.742-.318-1.56-.348-.788-.019-.99.01-1.48.212z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
1
svg/logos/bxl-codepen.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M21.838 8.445c0-.001-.001-.001 0 0l-.003-.004-.001-.001v-.001a.809.809 0 0 0-.235-.228l-9.164-6.08a.834.834 0 0 0-.898 0L2.371 8.214A.786.786 0 0 0 2 8.897v6.16a.789.789 0 0 0 .131.448v.001l.002.002.01.015v.002h.001l.001.001.001.001c.063.088.14.16.226.215l9.165 6.082a.787.787 0 0 0 .448.139.784.784 0 0 0 .45-.139l9.165-6.082a.794.794 0 0 0 .371-.685v-6.16a.793.793 0 0 0-.133-.452zm-9.057-4.172 6.953 4.613-3.183 2.112-3.771-2.536V4.273zm-1.592 0v4.189l-3.771 2.536-3.181-2.111 6.952-4.614zm-7.595 6.098 2.395 1.59-2.395 1.611v-3.201zm7.595 9.311-6.96-4.617 3.195-2.15 3.765 2.498v4.269zm.795-5.653-3.128-2.078 3.128-2.105 3.131 2.105-3.131 2.078zm.797 5.653v-4.27l3.766-2.498 3.193 2.15-6.959 4.618zm7.597-6.11-2.396-1.611 2.396-1.59v3.201z"/></svg>
|
||||||
|
After Width: | Height: | Size: 844 B |
1
svg/logos/bxl-creative-commons.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.354 6.479a10.021 10.021 0 0 0-7.421-4.429c-3.108-.294-6.031.771-8.123 2.963C3.533 6.35 2.699 7.839 2.21 9.66c-.217.805-.247 1.104-.244 2.396.002 1.293.034 1.599.255 2.432a10.232 10.232 0 0 0 7.451 7.332c.315.078.702.16.859.182.696.097 2.381.056 3.131-.075 3.088-.538 5.832-2.531 7.24-5.258 1.644-3.181 1.426-7.222-.548-10.19zm-.41 7.688c-.808 2.99-3.263 5.272-6.361 5.912-4.831.997-9.538-2.658-9.839-7.641-.194-3.217 1.755-6.446 4.745-7.863 1.133-.536 2.045-.733 3.425-.738 1.327-.004 2.064.132 3.223.596 2.324.931 4.146 3.04 4.816 5.573.281 1.06.276 3.103-.009 4.161z"/><path d="M8.042 14.955c-.915-.324-1.616-1.275-1.74-2.36-.183-1.607.422-2.856 1.654-3.415.669-.303 1.882-.296 2.603.016.438.19 1.261.933 1.261 1.139 0 .033-.284.201-.631.372l-.632.312-.337-.337c-.187-.188-.475-.363-.649-.396-.433-.082-.952.111-1.187.44-.389.546-.415 1.972-.048 2.533.191.291.512.494.813.518.635.05.796-.006 1.172-.401l.379-.398.488.269c.269.148.527.305.575.347.164.148-.592.92-1.199 1.224-.517.259-.679.293-1.358.286-.425-.006-.949-.074-1.164-.149zm5.816 0c-.901-.32-1.591-1.241-1.739-2.325-.215-1.569.419-2.888 1.654-3.45.717-.324 1.934-.3 2.661.056.45.221 1.201.911 1.201 1.104 0 .034-.295.203-.654.377l-.654.317-.341-.37c-.304-.332-.385-.369-.802-.369-.576 0-.945.225-1.145.698-.18.423-.201 1.461-.043 1.934.324.961 1.505 1.188 2.175.419l.304-.346.58.294c.32.161.582.319.582.352 0 .219-.75.918-1.256 1.17-.517.259-.679.293-1.358.287-.425-.005-.949-.073-1.165-.148z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
1
svg/logos/bxl-css3.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M4.192 3.143h15.615l-1.42 16.034-6.404 1.812-6.369-1.813L4.192 3.143zM16.9 6.424l-9.8-.002.158 1.949 7.529.002-.189 2.02H9.66l.179 1.913h4.597l-.272 2.62-2.164.598-2.197-.603-.141-1.569h-1.94l.216 2.867L12 17.484l3.995-1.137.905-9.923z"/></svg>
|
||||||
|
After Width: | Height: | Size: 336 B |
1
svg/logos/bxl-dailymotion.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M13.551 11.485a2.327 2.327 0 0 0-2.328 2.332c0 1.314 1.013 2.313 2.441 2.313l-.012.002c1.192 0 2.193-.983 2.193-2.28.001-1.349-1.001-2.367-2.294-2.367z"/><path d="M3 3v18h18V3H3zm15.52 15.605h-2.682v-1.058c-.825.81-1.667 1.103-2.786 1.103-1.142 0-2.124-.371-2.947-1.114-1.086-.956-1.648-2.227-1.648-3.701 0-1.351.524-2.561 1.507-3.506.878-.859 1.946-1.298 3.139-1.298 1.14 0 2.018.385 2.647 1.192V6.118l2.77-.574v-.002l.002.003h-.002v13.06z"/></svg>
|
||||||
|
After Width: | Height: | Size: 541 B |
1
svg/logos/bxl-deezer.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M17.68 5.47H22V8h-4.32zm0 3.51H22v2.53h-4.32zm0 3.51H22v2.53h-4.32zM2 16h4.32v2.53H2zm5.22 0h4.32v2.53H7.22zm5.23 0h4.32v2.53h-4.32zm5.23 0H22v2.53h-4.32zm-5.23-3.51h4.32v2.53h-4.32zm-5.23 0h4.32v2.53H7.22zm0-3.51h4.32v2.53H7.22z"/></svg>
|
||||||
|
After Width: | Height: | Size: 330 B |
1
svg/logos/bxl-dev-to.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.826 10.083a.784.784 0 0 0-.468-.175h-.701v4.198h.701a.786.786 0 0 0 .469-.175c.155-.117.233-.292.233-.525v-2.798c.001-.233-.079-.408-.234-.525zM19.236 3H4.764C3.791 3 3.002 3.787 3 4.76v14.48c.002.973.791 1.76 1.764 1.76h14.473c.973 0 1.762-.787 1.764-1.76V4.76A1.765 1.765 0 0 0 19.236 3zM9.195 13.414c0 .755-.466 1.901-1.942 1.898H5.389V8.665h1.903c1.424 0 1.902 1.144 1.903 1.899v2.85zm4.045-3.562H11.1v1.544h1.309v1.188H11.1v1.543h2.142v1.188h-2.498a.813.813 0 0 1-.833-.792V9.497a.813.813 0 0 1 .792-.832h2.539l-.002 1.187zm4.165 4.632c-.531 1.235-1.481.99-1.906 0l-1.548-5.818h1.309l1.193 4.569 1.188-4.569h1.31l-1.546 5.818z"/></svg>
|
||||||
|
After Width: | Height: | Size: 735 B |
1
svg/logos/bxl-deviantart.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M17.57 3h-3.271l-.326.33-1.544 2.942-.486.327H6.432v4.495h3.03l.27.327-3.3 6.305v3.273h3.272l.327-.33 1.543-2.943.486-.326h5.511v-4.495h-3.03l-.269-.329 3.299-6.303L17.57 3z"/></svg>
|
||||||
|
After Width: | Height: | Size: 274 B |
1
svg/logos/bxl-digg.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16.803 8.8v6.801h3.2v.799h-3.2v1.602h5.2V8.8h-5.2zm-6 0v6.801h3.199v.799h-3.199v1.602h5.199V8.8h-5.199zM5.2 5.999V8.8H2v6.801h5.201V5.999H5.2zM10.001 8.8h-2v6.801h2V8.8zM20.003 14h-1.2v-3.601h1.2V14zM5.2 14H4v-3.601h1.2V14zm8.802 0h-1.2v-3.601h1.2V14zm-4.001-8.001h-2v2h2v-2z"/></svg>
|
||||||
|
After Width: | Height: | Size: 377 B |
1
svg/logos/bxl-digitalocean.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.005 21.992v-3.877c4.104 0 7.288-4.068 5.714-8.388a5.81 5.81 0 0 0-3.457-3.446c-4.319-1.563-8.389 1.61-8.389 5.714H2.008c0-6.541 6.325-11.642 13.184-9.499 2.991.94 5.383 3.321 6.313 6.313 2.141 6.858-2.96 13.183-9.5 13.183z"/><path d="M12.017 18.139H8.152v-3.866h3.865zm-3.865 2.959H5.193v-2.959h2.959zm-2.959-2.959H2.711v-2.483h2.482v2.483z"/></svg>
|
||||||
|
After Width: | Height: | Size: 445 B |
1
svg/logos/bxl-discord-alt.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M14.82 4.26a10.14 10.14 0 0 0-.53 1.1 14.66 14.66 0 0 0-4.58 0 10.14 10.14 0 0 0-.53-1.1 16 16 0 0 0-4.13 1.3 17.33 17.33 0 0 0-3 11.59 16.6 16.6 0 0 0 5.07 2.59A12.89 12.89 0 0 0 8.23 18a9.65 9.65 0 0 1-1.71-.83 3.39 3.39 0 0 0 .42-.33 11.66 11.66 0 0 0 10.12 0q.21.18.42.33a10.84 10.84 0 0 1-1.71.84 12.41 12.41 0 0 0 1.08 1.78 16.44 16.44 0 0 0 5.06-2.59 17.22 17.22 0 0 0-3-11.59 16.09 16.09 0 0 0-4.09-1.35zM8.68 14.81a1.94 1.94 0 0 1-1.8-2 1.93 1.93 0 0 1 1.8-2 1.93 1.93 0 0 1 1.8 2 1.93 1.93 0 0 1-1.8 2zm6.64 0a1.94 1.94 0 0 1-1.8-2 1.93 1.93 0 0 1 1.8-2 1.92 1.92 0 0 1 1.8 2 1.92 1.92 0 0 1-1.8 2z"/></svg>
|
||||||
|
After Width: | Height: | Size: 709 B |
1
svg/logos/bxl-discord.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M9.593 10.971c-.542 0-.969.475-.969 1.055 0 .578.437 1.055.969 1.055.541 0 .968-.477.968-1.055.011-.581-.427-1.055-.968-1.055zm3.468 0c-.542 0-.969.475-.969 1.055 0 .578.437 1.055.969 1.055.541 0 .968-.477.968-1.055-.001-.581-.427-1.055-.968-1.055z"/><path d="M17.678 3H4.947A1.952 1.952 0 0 0 3 4.957v12.844c0 1.083.874 1.957 1.947 1.957H15.72l-.505-1.759 1.217 1.131 1.149 1.064L19.625 22V4.957A1.952 1.952 0 0 0 17.678 3zM14.01 15.407s-.342-.408-.626-.771c1.244-.352 1.719-1.13 1.719-1.13-.39.256-.76.438-1.093.562a6.679 6.679 0 0 1-3.838.398 7.944 7.944 0 0 1-1.396-.41 5.402 5.402 0 0 1-.693-.321c-.029-.021-.057-.029-.085-.048a.117.117 0 0 1-.039-.03c-.171-.094-.266-.16-.266-.16s.456.76 1.663 1.121c-.285.36-.637.789-.637.789-2.099-.067-2.896-1.444-2.896-1.444 0-3.059 1.368-5.538 1.368-5.538 1.368-1.027 2.669-.998 2.669-.998l.095.114c-1.71.495-2.499 1.245-2.499 1.245s.21-.114.561-.275c1.016-.446 1.823-.57 2.156-.599.057-.009.105-.019.162-.019a7.756 7.756 0 0 1 4.778.893s-.751-.712-2.366-1.206l.133-.152s1.302-.029 2.669.998c0 0 1.368 2.479 1.368 5.538 0-.001-.807 1.376-2.907 1.443z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
1
svg/logos/bxl-discourse.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.077 3C7.149 3 3 6.96 3 11.843V21l9.075-.01c4.928 0 8.925-4.11 8.925-8.993C21 7.113 17 3 12.077 3zm3.92 12.859a5.568 5.568 0 0 1-6.102 1.043l-3.595.805 1.001-3.192a5.435 5.435 0 0 1 .11-5.415 5.55 5.55 0 0 1 4.753-2.678v.001h.006a5.533 5.533 0 0 1 5.131 3.438 5.442 5.442 0 0 1-1.304 5.998z"/></svg>
|
||||||
|
After Width: | Height: | Size: 394 B |
1
svg/logos/bxl-django.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.533 12.249c-.011 1.985 1.445 3.168 3.768 2.63V9.618c-2.352-.716-3.758.733-3.768 2.631m3.839-10.238h3.199v15.143c-3.066.501-6.004.819-8.104-.355-2.705-1.513-2.923-6.319-.782-8.46 1.085-1.085 3.271-1.85 5.616-1.351V2.225c-.006-.101-.012-.202.071-.214m8.389 3.342h-3.199V2.011h3.199v3.342z"/><path d="M19.761 7.044c-.003 2.356-.003 4.048-.003 6.911-.136 2.813-.104 5.052-1.135 6.398-.203.266-.634.652-.995.924-.303.228-.881.691-1.208.711-.331.021-1.18-.459-1.564-.64-.505-.237-.971-.553-1.493-.71 1.218-.754 2.372-1.32 2.844-2.844.41-1.326.355-3.247.355-5.119 0-1.849.009-3.998.009-5.63l3.19-.001z"/></svg>
|
||||||
|
After Width: | Height: | Size: 698 B |
1
svg/logos/bxl-docker.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.17 9.82a4.76 4.76 0 0 0-.84.07 3.12 3.12 0 0 0-1.43-2.14l-.28-.16-.19.27a3.7 3.7 0 0 0-.51 1.19 2.84 2.84 0 0 0 .33 2.22 4.11 4.11 0 0 1-1.45.35H2.63a.63.63 0 0 0-.63.62 9.6 9.6 0 0 0 .58 3.39 5 5 0 0 0 2 2.6 8.86 8.86 0 0 0 4.42.95 13.27 13.27 0 0 0 2.42-.18 10.09 10.09 0 0 0 3.19-1.15A8.9 8.9 0 0 0 16.78 16a11.94 11.94 0 0 0 2.13-3.67h.19a3.08 3.08 0 0 0 2.23-.84 2.36 2.36 0 0 0 .59-.87l.08-.22-.2-.16a2.69 2.69 0 0 0-1.63-.42z"/><path d="M5.61 9.35H3.85a.16.16 0 0 0-.16.15v1.58a.16.16 0 0 0 .16.15h1.76a.16.16 0 0 0 .16-.15V9.5a.16.16 0 0 0-.16-.15zm2.44 0H6.28a.16.16 0 0 0-.16.15v1.58a.16.16 0 0 0 .16.15h1.77a.15.15 0 0 0 .15-.15V9.5a.15.15 0 0 0-.15-.15zm2.47 0H8.75a.15.15 0 0 0-.15.15v1.58a.15.15 0 0 0 .15.15h1.77a.15.15 0 0 0 .15-.15V9.5a.15.15 0 0 0-.15-.15zm.67 0a.15.15 0 0 0-.19.15v1.58a.15.15 0 0 0 .15.15H13a.15.15 0 0 0 .15-.15V9.5a.15.15 0 0 0-.15-.15zM6.28 7.09H8a.16.16 0 0 1 .16.16v1.56A.16.16 0 0 1 8 9H6.28a.15.15 0 0 1-.15-.15V7.24a.15.15 0 0 1 .15-.15zm2.47 0h1.77a.15.15 0 0 1 .15.15v1.57a.16.16 0 0 1-.16.16H8.75a.15.15 0 0 1-.15-.15V7.24a.15.15 0 0 1 .15-.15zm2.44 0H13a.15.15 0 0 1 .15.15v1.57A.15.15 0 0 1 13 9h-1.81a.16.16 0 0 1-.19-.19V7.24a.15.15 0 0 1 .19-.15z"/><rect x="11.04" y="4.82" width="2.07" height="1.88" rx=".15"/><path d="M13.65 9.35a.15.15 0 0 0-.15.15v1.58a.15.15 0 0 0 .15.15h1.77a.15.15 0 0 0 .15-.15V9.5a.15.15 0 0 0-.15-.15z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
1
svg/logos/bxl-dribbble.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.66 6.98a9.932 9.932 0 0 0-3.641-3.64C15.486 2.447 13.813 2 12 2s-3.486.447-5.02 1.34c-1.533.893-2.747 2.107-3.64 3.64S2 10.187 2 12s.446 3.487 1.34 5.02a9.924 9.924 0 0 0 3.641 3.64C8.514 21.553 10.187 22 12 22s3.486-.447 5.02-1.34a9.932 9.932 0 0 0 3.641-3.64C21.554 15.487 22 13.813 22 12s-.446-3.487-1.34-5.02zM12 3.66c2 0 3.772.64 5.32 1.919-.92 1.174-2.286 2.14-4.1 2.9-1.002-1.813-2.088-3.327-3.261-4.54A7.715 7.715 0 0 1 12 3.66zM5.51 6.8a8.116 8.116 0 0 1 2.711-2.22c1.212 1.201 2.325 2.7 3.34 4.5-2 .6-4.114.9-6.341.9-.573 0-1.006-.013-1.3-.04A8.549 8.549 0 0 1 5.51 6.8zM3.66 12c0-.054.003-.12.01-.2.007-.08.01-.146.01-.2.254.014.641.02 1.161.02 2.666 0 5.146-.367 7.439-1.1.187.373.381.793.58 1.26-1.32.293-2.674 1.006-4.061 2.14S6.4 16.247 5.76 17.5c-1.4-1.587-2.1-3.42-2.1-5.5zM12 20.34c-1.894 0-3.594-.587-5.101-1.759.601-1.187 1.524-2.322 2.771-3.401 1.246-1.08 2.483-1.753 3.71-2.02a29.441 29.441 0 0 1 1.56 6.62 8.166 8.166 0 0 1-2.94.56zm7.08-3.96a8.351 8.351 0 0 1-2.58 2.621c-.24-2.08-.7-4.107-1.379-6.081.932-.066 1.765-.1 2.5-.1.799 0 1.686.034 2.659.1a8.098 8.098 0 0 1-1.2 3.46zm-1.24-5c-1.16 0-2.233.047-3.22.14a27.053 27.053 0 0 0-.68-1.62c2.066-.906 3.532-2.006 4.399-3.3 1.2 1.414 1.854 3.027 1.96 4.84-.812-.04-1.632-.06-2.459-.06z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
1
svg/logos/bxl-dropbox.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.004 3.5 2 6.689l5.004 3.186 5.002-3.186zm10.005 0-5.003 3.189 5.003 3.186 5.003-3.186zM2 13.062l5.004 3.187 5.002-3.187-5.002-3.187zm15.009-3.187-5.003 3.187 5.003 3.187 5.003-3.187zM7.004 17.311l5.002 3.189 5.003-3.189-5.003-3.186z"/></svg>
|
||||||
|
After Width: | Height: | Size: 336 B |
1
svg/logos/bxl-drupal.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11.474 14.42a3.162 3.162 0 1 0 0 6.324 3.162 3.162 0 0 0 0-6.324zm3.936-.606a5.433 5.433 0 0 1 1.513 3.769 5.441 5.441 0 0 1-2.335 4.47c2.609-.803 4.771-2.767 5.737-5.142 1.338-3.288.09-5.761-1.999-8.005.066.288.103.592.103.898a4.175 4.175 0 0 1-3.019 4.01zm-3.577-4.003c0 1.34 1.087 2.419 2.42 2.419s2.423-1.087 2.423-2.419a2.418 2.418 0 0 0-2.417-2.417 2.425 2.425 0 0 0-2.426 2.417z"/><path d="M7.303 21.093a5.435 5.435 0 0 1-1.276-3.51 5.441 5.441 0 0 1 4.8-5.408 4.162 4.162 0 0 1 3.99-6.492c-1.361-1.176-2.724-2.369-3.799-3.672.547 5.714-5.2 3.638-7.332 8.904-1.422 3.527-.138 7.892 3.617 10.178z"/></svg>
|
||||||
|
After Width: | Height: | Size: 704 B |
1
svg/logos/bxl-ebay.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.021 12.111V8.004h1.001v2.525c.493-.586 1.17-.756 1.838-.756 1.118 0 2.361.754 2.361 2.383 0 .195-.014.381-.051.559.2-.797 1.063-1.09 2.418-1.123.426-.016.914-.016 1.302-.016v-.111c0-.738-.464-1.039-1.276-1.039-.602 0-1.04.25-1.09.676H12.46c.113-1.076 1.253-1.352 2.242-1.352.889 0 1.666.225 2.017.852l-.365-.702h1.177l1.716 3.443 1.716-3.445H22l-3.105 6.098h-1.124l.894-1.703-1.945-3.656c.108.213.167.465.167.777v2.055c0 .289.009.574.034.838h-.931a5.478 5.478 0 0 1-.038-.639c-.503.613-1.103.803-1.937.803-1.236 0-1.897-.652-1.897-1.416 0-.125.013-.236.031-.338-.251 1.041-1.135 1.74-2.31 1.74-.727 0-1.414-.262-1.837-.775 0 .201-.013.412-.033.611h-.986c.018-.324.034-.713.034-1.037v-.877H2.985c.054.914.683 1.451 1.547 1.451.599 0 1.131-.25 1.309-.775h1.035c-.2 1.078-1.344 1.439-2.329 1.439-1.789.018-2.582-.973-2.582-2.301 0-1.463.819-2.428 2.602-2.428 1.409 0 2.445.738 2.454 2.342v.004zm7.627.153c-.915.027-1.479.193-1.479.793 0 .389.301.809 1.09.809 1.052 0 1.615-.574 1.615-1.514v-.109c-.376 0-.826.006-1.239.02h.011l.002.001zm-5.059 1.564c.927 0 1.566-.672 1.566-1.686s-.642-1.686-1.58-1.686c-.928 0-1.578.672-1.578 1.686s.639 1.686 1.565 1.686h.027zM5.958 11.73c-.037-.939-.714-1.291-1.44-1.291-.788 0-1.414.395-1.516 1.291h2.956z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
1
svg/logos/bxl-edge.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.349 13.684H8.874c0 .433.063.825.195 1.178a3.334 3.334 0 0 0 1.381 1.634c.309.196.646.359 1.005.484.356.13.729.226 1.107.288.821.13 1.658.123 2.477-.021a9.79 9.79 0 0 0 2.421-.783c.393-.18.79-.376 1.201-.594v3.805a13.453 13.453 0 0 1-2.711.978c-.457.112-.92.196-1.396.246-.486.054-.975.079-1.464.079a8.185 8.185 0 0 1-1.95-.232 7.679 7.679 0 0 1-1.762-.668 7.29 7.29 0 0 1-1.51-1.062 6.67 6.67 0 0 1-1.941-3.103 6.978 6.978 0 0 1-.267-1.953c0-.737.101-1.439.303-2.11a6.718 6.718 0 0 1 2.264-3.342 7.38 7.38 0 0 1 1.847-1.066 3.891 3.891 0 0 0-.869 1.329 5.682 5.682 0 0 0-.401 1.538h6.391c0-.646-.063-1.207-.196-1.689-.131-.484-.342-.885-.637-1.201A2.64 2.64 0 0 0 13.23 6.7c-.462-.16-1.021-.241-1.675-.241-.771 0-1.543.111-2.314.344a9.804 9.804 0 0 0-2.2.955c-.695.412-1.335.897-1.919 1.452a9.167 9.167 0 0 0-1.474 1.819c.084-.742.247-1.474.485-2.18a9.304 9.304 0 0 1 .912-1.938 8.622 8.622 0 0 1 1.303-1.609 7.735 7.735 0 0 1 1.655-1.235 8.45 8.45 0 0 1 1.955-.792 10.042 10.042 0 0 1 2.233-.254c.46 0 .917.041 1.375.124.457.084.903.196 1.339.342a8.012 8.012 0 0 1 2.315 1.239 7.95 7.95 0 0 1 1.711 1.833c.463.692.813 1.459 1.055 2.292s.365 1.701.365 2.602v2.23h-.002z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
1
svg/logos/bxl-etsy.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11.139 14.058c-.438 0-.693-.294-.693-1.058v-2.696l1.456.112.074-.694-1.496.074v-1.53h-.438c-.216 1.201-.759 1.638-1.488 1.712v.364h.869v3.062c0 .836.588 1.271 1.313 1.271.585 0 1.202-.255 1.418-.763l-.217-.255c-.108.18-.402.401-.798.401zm-3.494-.803c-.294.69-.767.729-1.24.729h-1.53c-.508 0-.729-.186-.729-.62v-2.258s1.092 0 1.457.039c.291.035.438.109.546.473l.108.511h.438l-.039-1.309.074-1.278h-.434l-.147.585c-.073.399-.147.438-.546.508-.508.038-1.457.038-1.457.038V7.979c0-.112 0-.147.185-.147h2.291c.402 0 .62.326.763.98l.147.512h.399c.039-1.457.074-2.074.074-2.074s-.981.105-1.562.105H3.53L2 7.324v.399l.508.107c.367.074.475.147.475.473 0 0 .039.984.039 2.619 0 1.639-.039 2.623-.039 2.623 0 .291-.108.399-.475.473L2 14.131v.396l1.565-.035h2.623c.581 0 1.965.035 1.965.035.034-.361.216-1.964.255-2.146H8.04l-.395.874zm6.04-2.622c0-.474.437-.655.875-.655.36 0 .653.147.729.325l.255.729.361-.035c0-.364.038-.838.111-1.201-.328-.147-.983-.221-1.421-.221-.984 0-1.747.441-1.747 1.387 0 1.674 2.44 1.31 2.44 2.549 0 .399-.256.729-.876.729-.581 0-.837-.294-.945-.585l-.29-.693h-.369c.04.476.074.948 0 1.382 0 0 .767.294 1.531.294 1.022 0 1.858-.507 1.858-1.457 0-1.674-2.512-1.421-2.512-2.548zm6.369-.945v.364l.259.074c.252.07.36.178.36.363 0 .108-.034.144-.073.291-.108.291-.802 2.003-1.162 2.767a75.566 75.566 0 0 1-1.093-2.949c-.035-.073-.035-.108-.035-.146 0-.148.105-.292.361-.326l.329-.074v-.364l-1.346.073-1.096-.039v.368l.187.069c.251.074.287.11.469.512.693 1.53 1.457 3.529 1.716 4.15-.584 1.019-1.204 1.309-1.677 1.309-.291 0-.399-.147-.435-.329l-.146-.763-.4.035c-.073.477-.147.984-.255 1.383.287.182.616.294 1.053.293.691 0 1.675-.182 2.623-2.332l1.601-3.747c.145-.293.182-.329.546-.476l.183-.144v-.362l-.945.034-1.024-.034z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
1
svg/logos/bxl-facebook-circle.svg
Executable file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.001 2.002c-5.522 0-9.999 4.477-9.999 9.999 0 4.99 3.656 9.126 8.437 9.879v-6.988h-2.54v-2.891h2.54V9.798c0-2.508 1.493-3.891 3.776-3.891 1.094 0 2.24.195 2.24.195v2.459h-1.264c-1.24 0-1.628.772-1.628 1.563v1.875h2.771l-.443 2.891h-2.328v6.988C18.344 21.129 22 16.992 22 12.001c0-5.522-4.477-9.999-9.999-9.999z"/></svg>
|
||||||
|
After Width: | Height: | Size: 414 B |