File size: 2,839 Bytes
37ea118
80ffb94
364101e
 
a7b775c
364101e
c78dcc3
364101e
c78dcc3
364101e
c78dcc3
38e2e5b
364101e
 
80ffb94
38e2e5b
c78dcc3
38e2e5b
 
 
 
 
 
 
364101e
 
a7b775c
364101e
38e2e5b
4ed0744
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80ffb94
a7b775c
364101e
 
80ffb94
364101e
38e2e5b
c78dcc3
a7b775c
 
 
c78dcc3
a7b775c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import streamlit as st
import streamlit.components.v1 as components
from bs4 import BeautifulSoup
import markdown
import re

# --- PAGE CONFIG ---
st.set_page_config(
    page_title="Lexical Tools",
    page_icon="⚡",
    layout="centered",
    initial_sidebar_state="expanded"
)

# --- SIDEBAR ---
st.sidebar.title("Navigation")
query_params = st.query_params
default_index = 1 if query_params.get("mode") == "downloader" else 0

app_mode = st.sidebar.radio(
    "Choose Tool:",
    ["Webmaster Toolkit", "YouTube Downloader"],
    index=default_index
)

# ==========================================
# VIEW 1: YOUTUBE DOWNLOADER (Swarm Mode)
# ==========================================
if app_mode == "YouTube Downloader":
    # main.py
# Hugging Face Space: YouTube → MP3 API + UI
# Works on CPU, no API key, no login

import os
import uuid
from fastapi import FastAPI
from fastapi.responses import FileResponse
import yt_dlp
import gradio as gr

OUTPUT_DIR = "downloads"
os.makedirs(OUTPUT_DIR, exist_ok=True)

app = FastAPI()


def download_mp3(youtube_url: str):
    uid = str(uuid.uuid4())
    out_file = os.path.join(OUTPUT_DIR, f"{uid}.mp3")

    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': out_file.replace('.mp3', '.%(ext)s'),
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'quiet': True,
        'noplaylist': True,
    }

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([youtube_url])

    return out_file


# ---------- API ENDPOINT ----------
@app.get("/mp3")
def mp3_api(url: str):
    mp3_path = download_mp3(url)
    return FileResponse(mp3_path, filename="audio.mp3", media_type="audio/mpeg")


# ---------- UI ----------
def ui_download(url):
    mp3_path = download_mp3(url)
    return mp3_path

ui = gr.Interface(
    fn=ui_download,
    inputs=gr.Textbox(label="YouTube URL"),
    outputs=gr.File(label="Download MP3"),
    title="YouTube → MP3 Converter",
    description="Paste YouTube link and get MP3 audio"
)


if __name__ == "__main__":
    ui.launch(server_name="0.0.0.0", server_port=7860)

# -----------------------------
# requirements.txt (create this file manually):
# fastapi
# uvicorn
# yt-dlp
# gradio
# ffmpeg-python

        
        components.html(html_code, height=350)

# ==========================================
# VIEW 2: WEBMASTER TOOLKIT (Server Side)
# ==========================================
elif app_mode == "Webmaster Toolkit":
    st.title("⚡ Webmaster's Toolkit")
    # ... (Keep your existing toolkit logic here if needed) ...
    tab1, tab2 = st.tabs(["📝 Text Cleaner", "🖼️ Media Optimizer"])
    # Just a placeholder for the logic you already have
    with tab1:
        st.write("Text Cleaner Active")