Initial commit

This commit is contained in:
tyler 2025-03-09 11:51:39 -04:00
commit 2dfd6623ef
1696 changed files with 17652 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

BIN
._.DS_Store Normal file

Binary file not shown.

BIN
._cookies.txt Normal file

Binary file not shown.

BIN
._dropout.json Normal file

Binary file not shown.

BIN
._dropout.tv.html Normal file

Binary file not shown.

BIN
._localHub copy.py Normal file

Binary file not shown.

BIN
._localHub.py Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
android-chrome-192x192.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
android-chrome-512x512.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
apple-touch-icon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

27
cookies.txt Normal file
View 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

Binary file not shown.

386
css/animations.css Executable file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 KiB

5425
css/boxicons.css Executable file

File diff suppressed because it is too large Load Diff

1
css/boxicons.min.css vendored Executable file

File diff suppressed because one or more lines are too long

350
css/style.css Executable file
View 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
View 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
View 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
View 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

File diff suppressed because one or more lines are too long

BIN
favicon-16x16.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

BIN
favicon-32x32.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

BIN
favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
fonts/boxicons.eot Executable file

Binary file not shown.

1653
fonts/boxicons.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
fonts/boxicons.ttf Executable file

Binary file not shown.

BIN
fonts/boxicons.woff Executable file

Binary file not shown.

BIN
fonts/boxicons.woff2 Executable file

Binary file not shown.

BIN
html/._dropout.html Executable file

Binary file not shown.

BIN
html/._index.html Normal file

Binary file not shown.

BIN
html/._navbar.html Normal file

Binary file not shown.

BIN
html/._ydl.html Normal file

Binary file not shown.

0
html/body.html Executable file
View File

0
html/contianer.html Executable file
View File

31
html/dropout.html Executable file
View 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
View 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
View 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
View 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
View 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
View 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
View 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

Binary file not shown.

BIN
images/._youtube.jpg Normal file

Binary file not shown.

BIN
images/dropout.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
images/large-cover.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
images/youtube.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
javascript/._dropout.js Executable file

Binary file not shown.

61
javascript/dropout.js Executable file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View 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

Some files were not shown because too many files have changed in this diff Show More