Upload files to "/"
This commit is contained in:
parent
ec1735b9e3
commit
5b900841eb
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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)
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue