Tgjson123 / app.py
gopallikehack's picture
Update app.py
bf51ec0 verified
Raw History Blame
4.18 kB
import os
import requests
import json
import base64
import time
from flask import Flask, request, jsonify, send_file
app = Flask(__name__)
# ===== SECRETS =====
AGNES_API_KEY = os.environ.get("AGNES_API_KEY")
HF_TOKEN = os.environ.get("HF_TOKEN")
if not AGNES_API_KEY:
print("⚠️ AGNES_API_KEY not set! Get from video.lichuanyang.top")
# ===== AGNES API (Multiple endpoints to try) =====
AGNES_ENDPOINTS = [
"https://video.lichuanyang.top/api/generate",
"https://video.lichuanyang.top/v1/generate",
"https://video.lichuanyang.top/generate"
]
def generate_video_agnes(prompt, duration=45):
"""Generate video using Agnes AI API"""
headers = {
"Authorization": f"Bearer {AGNES_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"prompt": prompt,
"duration": min(duration, 60)
}
for endpoint in AGNES_ENDPOINTS:
try:
print(f"🔄 Trying Agnes endpoint: {endpoint}")
response = requests.post(endpoint, json=payload, headers=headers, timeout=120)
if response.status_code == 200:
data = response.json()
# Check for video URL or base64
video_url = data.get("video_url") or data.get("url") or data.get("output")
if video_url:
return video_url
video_b64 = data.get("video_base64") or data.get("data")
if video_b64:
return f"data:video/mp4;base64,{video_b64}"
# If response is direct video bytes
if response.headers.get("content-type", "").startswith("video/"):
video_b64 = base64.b64encode(response.content).decode('utf-8')
return f"data:video/mp4;base64,{video_b64}"
print(f"⚠️ No video data in response: {data}")
else:
print(f"❌ Agnes endpoint {endpoint} failed: {response.status_code} - {response.text[:100]}")
except Exception as e:
print(f"❌ Agnes endpoint error: {str(e)}")
raise Exception("All Agnes endpoints failed")
# ===== HUGGING FACE TTS (optional audio) =====
def generate_audio_hf(text, lang, voice):
try:
if not HF_TOKEN:
return None
model = "facebook/mms-tts-hin" if lang == 'hi' else "facebook/mms-tts-eng"
url = f"https://api-inference.huggingface.co/models/{model}"
headers = {
"Authorization": f"Bearer {HF_TOKEN}",
"Content-Type": "application/json"
}
response = requests.post(
url,
headers=headers,
json={"inputs": text[:500], "parameters": {"voice": voice, "speed": 1.0}},
timeout=45
)
if response.status_code == 200:
audio_b64 = base64.b64encode(response.content).decode('utf-8')
return f"data:audio/mp3;base64,{audio_b64}"
return None
except:
return None
# ===== ROUTES =====
@app.route('/')
def index():
return send_file('index.html')
@app.route('/generate-video', methods=['POST'])
def generate_video():
try:
data = request.json
prompt = data.get('prompt')
language = data.get('language', 'en')
duration = int(data.get('duration', 45))
voice_en = data.get('voice_en', 'en-US-JennyNeural')
voice_hi = data.get('voice_hi', 'hi-IN-SwaraNeural')
if not prompt:
return jsonify({'error': 'Prompt is required'}), 400
if not AGNES_API_KEY:
return jsonify({'error': 'AGNES_API_KEY not configured'}), 500
# Generate video
video_url = generate_video_agnes(prompt, duration)
# Generate audio (optional)
audio_url = generate_audio_hf(prompt, language, voice_en if language == 'en' else voice_hi)
return jsonify({
'success': True,
'video_url': video_url,
'audio_url': audio_url or ''
})
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=False)