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") |