forked from computertech/techdj
Upload files to "/"
This commit is contained in:
BIN
Bahama Mama (Long Version).mp3
Normal file
BIN
Bahama Mama (Long Version).mp3
Normal file
Binary file not shown.
BIN
Dire Straits - Walk of Life (Official Audio).mp3
Normal file
BIN
Dire Straits - Walk of Life (Official Audio).mp3
Normal file
Binary file not shown.
BIN
One Night In Bangkok.mp3
Normal file
BIN
One Night In Bangkok.mp3
Normal file
Binary file not shown.
56
downloader.py
Normal file
56
downloader.py
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import yt_dlp
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
def clean_filename(title):
|
||||||
|
# Remove quotes and illegal characters
|
||||||
|
title = title.strip("'").strip('"')
|
||||||
|
return re.sub(r'[\\/*?:"<>|]', "", title)
|
||||||
|
|
||||||
|
def download_mp3(url, quality='320'):
|
||||||
|
print(f"\n🔍 Processing: {url}")
|
||||||
|
|
||||||
|
# 1. Fetch Title First (Clean Name)
|
||||||
|
try:
|
||||||
|
with yt_dlp.YoutubeDL({'quiet':True}) as ydl:
|
||||||
|
info = ydl.extract_info(url, download=False)
|
||||||
|
if 'entries' in info:
|
||||||
|
title = '%(title)s' # Playlist default
|
||||||
|
else:
|
||||||
|
title = clean_filename(info['title'])
|
||||||
|
print(f"📝 Renaming to: {title}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Error fetching info: {e}")
|
||||||
|
return {"success": False, "error": "Invalid URL or video unavailable"}
|
||||||
|
|
||||||
|
# 2. Download Options (adjustable quality)
|
||||||
|
ydl_opts = {
|
||||||
|
'format': 'bestaudio/best',
|
||||||
|
'postprocessors': [{
|
||||||
|
'key': 'FFmpegExtractAudio',
|
||||||
|
'preferredcodec': 'mp3',
|
||||||
|
'preferredquality': quality,
|
||||||
|
}],
|
||||||
|
'outtmpl': f'music/{title}.%(ext)s',
|
||||||
|
'quiet': False,
|
||||||
|
'no_warnings': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
||||||
|
ydl.download([url])
|
||||||
|
print("✅ Success! (Hit Refresh in the App)")
|
||||||
|
return {"success": True, "title": title}
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Error: {e}")
|
||||||
|
return {"success": False, "error": str(e)}
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if not os.path.exists("music"):
|
||||||
|
os.makedirs("music")
|
||||||
|
|
||||||
|
print("--- TECHDJ DOWNLOADER (320kbps) ---")
|
||||||
|
while True:
|
||||||
|
url = input("\n🔗 URL (q to quit): ").strip()
|
||||||
|
if url.lower() == 'q': break
|
||||||
|
if url: download_mp3(url)
|
||||||
162
edge_glow_test.html
Normal file
162
edge_glow_test.html
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Edge Glow Test</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: #0a0a14;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EDGE GLOW - EXACT COPY FROM style.css lines 28-61 */
|
||||||
|
body::before {
|
||||||
|
content: '';
|
||||||
|
position: fixed;
|
||||||
|
inset: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 99999;
|
||||||
|
border: 3px solid rgba(80, 80, 80, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.playing-A::before {
|
||||||
|
border: 15px solid #00f3ff;
|
||||||
|
box-shadow:
|
||||||
|
0 0 80px rgba(0, 243, 255, 1),
|
||||||
|
inset 0 0 80px rgba(0, 243, 255, 0.8);
|
||||||
|
animation: pulse-cyan 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.playing-B::before {
|
||||||
|
border: 15px solid #bc13fe;
|
||||||
|
box-shadow:
|
||||||
|
0 0 80px rgba(188, 19, 254, 1),
|
||||||
|
inset 0 0 80px rgba(188, 19, 254, 0.8);
|
||||||
|
animation: pulse-magenta 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.playing-A.playing-B::before {
|
||||||
|
border: 15px solid #00f3ff;
|
||||||
|
box-shadow:
|
||||||
|
0 0 80px rgba(0, 243, 255, 1),
|
||||||
|
0 0 120px rgba(188, 19, 254, 1),
|
||||||
|
inset 0 0 80px rgba(0, 243, 255, 0.6),
|
||||||
|
inset 0 0 120px rgba(188, 19, 254, 0.6);
|
||||||
|
animation: pulse-both 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse-cyan {
|
||||||
|
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse-magenta {
|
||||||
|
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse-both {
|
||||||
|
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
text-align: center;
|
||||||
|
z-index: 100000;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 20px 40px;
|
||||||
|
margin: 10px;
|
||||||
|
font-size: 18px;
|
||||||
|
cursor: pointer;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
color: #fff;
|
||||||
|
margin-top: 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="controls">
|
||||||
|
<h1 style="color: #fff;">Edge Glow Test</h1>
|
||||||
|
<button onclick="testDeckA()">Test Deck A (Cyan)</button>
|
||||||
|
<button onclick="testDeckB()">Test Deck B (Magenta)</button>
|
||||||
|
<button onclick="testBoth()">Test Both</button>
|
||||||
|
<button onclick="testOff()">Turn Off</button>
|
||||||
|
<div class="status" id="status">Status: No glow</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function testDeckA() {
|
||||||
|
document.body.className = 'playing-A';
|
||||||
|
document.getElementById('status').textContent = 'Status: Deck A (Cyan) - body class: ' + document.body.className;
|
||||||
|
console.log('Body classes:', document.body.classList.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
function testDeckB() {
|
||||||
|
document.body.className = 'playing-B';
|
||||||
|
document.getElementById('status').textContent = 'Status: Deck B (Magenta) - body class: ' + document.body.className;
|
||||||
|
console.log('Body classes:', document.body.classList.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
function testBoth() {
|
||||||
|
document.body.className = 'playing-A playing-B';
|
||||||
|
document.getElementById('status').textContent = 'Status: Both (Cyan + Magenta) - body class: ' + document.body.className;
|
||||||
|
console.log('Body classes:', document.body.classList.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
function testOff() {
|
||||||
|
document.body.className = '';
|
||||||
|
document.getElementById('status').textContent = 'Status: No glow - body class: (empty)';
|
||||||
|
console.log('Body classes:', document.body.classList.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-test on load
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log('=== EDGE GLOW TEST ===');
|
||||||
|
console.log('If you see a CYAN border around the screen, the glow is working!');
|
||||||
|
testDeckA();
|
||||||
|
}, 500);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user