import gradio as gr from gtts import gTTS import io import base64 import os import secrets import json from cryptography.fernet import Fernet from fastapi import FastAPI, HTTPException, Depends from fastapi.security import HTTPBearer from pydantic import BaseModel from typing import Literal # ================== API KEY SYSTEM ================== KEY_FILE = "keys.json" fernet = Fernet(os.getenv("FERNET_KEY", Fernet.generate_key().decode())) def load_keys(): if os.path.exists(KEY_FILE): with open(KEY_FILE) as f: return json.load(f) return {} def save_keys(data): with open(KEY_FILE, "w") as f: json.dump(data, f) keys_db = load_keys() def create_key(username: str): if username in keys_db: return "❌ Username already taken!" key = secrets.token_urlsafe(32) keys_db[username] = fernet.encrypt(key.encode()).decode() save_keys(keys_db) return f"✅ Tera API Key:\n{key}\n\nHeader mein use kar: Bearer {key}" # ================== TTS FUNCTION ================== def tts_generate(text: str, lang: Literal["ur", "hi"] = "ur"): t = gTTS(text=text, lang=lang, slow=False) buffer = io.BytesIO() t.write_to_fp(buffer) buffer.seek(0) return buffer.read() # ================== GRADIO FUNCTION ================== def gradio_tts(text, language): lang_code = "ur" if language == "Urdu" else "hi" audio_bytes = tts_generate(text, lang_code) return audio_bytes, "Ho gaya bhai 🔥" # ================== FASTAPI ================== app = FastAPI(title="Urdu/Hindi TTS – Never Fail") security = HTTPBearer() async def verify_key(credentials=Depends(security)): token = credentials.credentials for encrypted in keys_db.values(): try: if fernet.decrypt(encrypted.encode()).decode() == token: return True except: continue raise HTTPException(status_code=401, detail="Invalid API Key 😡") class TTSRequest(BaseModel): text: str lang: Literal["ur", "hi"] = "ur" @app.post("/tts") async def api_tts(req: TTSRequest, _: bool = Depends(verify_key)): audio = tts_generate(req.text, req.lang) return {"audio_base64": base64.b64encode(audio).decode()} # ================== GRADIO UI ================== with gr.Blocks(title="Urdu/Hindi TTS – Rocket Speed") as demo: gr.Markdown("# 🇵🇰🇮🇳 Urdu & Hindi TTS\nAb kabhi nahi rukega!") with gr.Tab("🔊 Bolo"): txt = gr.Textbox(label="Text", placeholder="سلام علیکم بھائی کیسے ہو؟ یا नमस्ते भाई", lines=5) lang = gr.Radio(["Urdu", "Hindi"], value="Urdu") audio_out = gr.Audio(label="Suno") gr.Button("🔥 Generate").click(gradio_tts, inputs=[txt, lang], outputs=[audio_out, gr.Textbox()]) with gr.Tab("🔑 API Key"): user = gr.Textbox(label="Username daal", placeholder="my_app_001") result = gr.Textbox(label="Tera Key", lines=5) gr.Button("Generate Key").click(create_key, user, result) gr.Markdown(""" ### API Use Karne Ka Tareeka ```bash curl -X POST "https://tera-space.hf.space/tts" \\ -H "Authorization: Bearer YOUR_KEY" \\ -H "Content-Type: application/json" \\ -d '{"text": "ہیلو دنیا", "lang": "ur"}' ``` """) demo.launch(server_name="0.0.0.0", server_port=7860)