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