Laciii / app.py
Akwbw's picture
Update app.py
a68d2ad verified
Raw
History Blame Contribute Delete
3.43 kB
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)