| 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 |
|
|
| |
| 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}" |
|
|
| |
| 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() |
|
|
| |
| 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 🔥" |
|
|
| |
| 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()} |
|
|
| |
| 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) |