| from flask import Flask, request, jsonify, send_file |
| from playwright.sync_api import sync_playwright |
| import tempfile |
| import time |
| import requests |
| import os |
|
|
| app = Flask(__name__) |
|
|
| |
| |
| |
| META_COOKIES = [ |
| { |
| "name": "datr", |
| "value": "qpUmasbNzVLrDaDwS4LXdXDq", |
| "domain": ".meta.ai", |
| "path": "/", |
| "httpOnly": False, |
| "secure": True, |
| "sameSite": "Lax" |
| }, |
| { |
| "name": "ecto_1_sess", |
| "value": "5ef8da02-93df-4c1f-babc-a2401171f154.v1%3AmkpAc8uOfJwaDaqf5KCGDSjF3ga4L4VgqInMrTsLJ__PL5ZSG-lfYhLfCM8_baLfCVSmMaL-MXr5s6qum4IAVBV8sM6tjhYhkXok9qhCKUCEjwXvPCSatiIdEa4zTsL-93K21Q1QB_QTT6WwtN7nfSKtpRxM6lB2EZ9yeLWRsOtwErDQqFAGp7bPXqa8bp80d2RtDkE2a2txGNHnCf541npmzXQ5_SgoAKStBko1t7mEVUVpeiKtCeFtngmEySoyQ-D7H2-Vj6-nHillF0oA2kyKgaVHhBxAghh4naE2bxsIuiQtC9idO6b_9hzd2NWGhW1GvU3ASNGlQmgRuEDhuUFl246LtmCBTHcINZDJje3uSVpQY97PiuTuTAgStIbpTR8RnCfCzBii-tc2FlSACzLfogaffx8Y8Jt3RKVlD2C82doS2scxSD3AIjRrtLQQDjk34T0zd-PlJXqu3Rij61gPAq9NUPo1zp8jRsqb0fWXfbiVRCosWgpR5XmGcZtjwQ%3AJFEueqKcSdHRbj-z%3AZKY7jfLHaHsnM19I7UzJrw.I4DGes0ksGkql66r1eCj1MdKvPBAVO-fqV_Gn1rTf7Y", |
| "domain": ".meta.ai", |
| "path": "/", |
| "httpOnly": True, |
| "secure": True, |
| "sameSite": "Lax" |
| } |
| ] |
|
|
| def generate_video(prompt): |
| with sync_playwright() as p: |
| browser = p.chromium.launch( |
| headless=True, |
| args=["--no-sandbox", "--disable-dev-shm-usage"] |
| ) |
|
|
| context = browser.new_context( |
| viewport={"width": 1280, "height": 720}, |
| user_agent="Mozilla/5.0" |
| ) |
|
|
| context.add_cookies(META_COOKIES) |
|
|
| page = context.new_page() |
|
|
| page.goto("https://www.meta.ai", wait_until="networkidle") |
|
|
| |
| selectors = [ |
| 'textarea[data-testid="ai-chat-input"]', |
| 'textarea', |
| '[contenteditable="true"]', |
| 'div[role="textbox"]' |
| ] |
|
|
| input_box = None |
|
|
| for selector in selectors: |
| try: |
| input_box = page.wait_for_selector(selector, timeout=5000) |
| break |
| except: |
| pass |
|
|
| if not input_box: |
| browser.close() |
| raise Exception("Input field not found") |
|
|
| input_box.fill(f"Create a video of {prompt}") |
| input_box.press("Enter") |
|
|
| print("Prompt sent") |
|
|
| video_url = None |
|
|
| |
| for _ in range(300): |
| try: |
| video = page.query_selector("video") |
|
|
| if video: |
| video_url = video.get_attribute("src") |
|
|
| if video_url: |
| break |
|
|
| except: |
| pass |
|
|
| time.sleep(1) |
|
|
| browser.close() |
|
|
| if not video_url: |
| raise Exception("Video not found") |
|
|
| return video_url |
|
|
| |
| |
| |
|
|
| @app.route("/generate", methods=["POST"]) |
| def generate(): |
| data = request.get_json() |
|
|
| prompt = data.get("prompt") |
|
|
| if not prompt: |
| return jsonify({ |
| "success": False, |
| "error": "Prompt required" |
| }), 400 |
|
|
| try: |
| video_url = generate_video(prompt) |
|
|
| |
| response = requests.get(video_url) |
|
|
| temp_file = tempfile.NamedTemporaryFile( |
| delete=False, |
| suffix=".mp4" |
| ) |
|
|
| temp_file.write(response.content) |
| temp_file.close() |
|
|
| return send_file( |
| temp_file.name, |
| mimetype="video/mp4", |
| as_attachment=True, |
| download_name="generated_video.mp4" |
| ) |
|
|
| except Exception as e: |
| return jsonify({ |
| "success": False, |
| "error": str(e) |
| }), 500 |
|
|
| |
| |
| |
|
|
| @app.route("/health", methods=["GET"]) |
| def health(): |
| return jsonify({ |
| "success": True, |
| "status": "healthy", |
| "service": "Meta AI Video Generator", |
| "message": "Server is running" |
| }) |
|
|
| |
| |
| |
|
|
| @app.route("/", methods=["GET"]) |
| def root(): |
| return jsonify({ |
| "service": "Meta AI Video Generator", |
| "endpoints": { |
| "POST /generate": "Generate video from prompt", |
| "GET /health": "Health check", |
| "GET /": "This info" |
| }, |
| "usage": { |
| "curl": "curl -X POST /generate -H 'Content-Type: application/json' -d '{\"prompt\": \"your prompt\"}' --output video.mp4" |
| } |
| }) |
|
|
| if __name__ == "__main__": |
| print(""" |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| β π¬ Meta AI Video Generator - Flask API β |
| β Cookies loaded! Ready to generate videos β |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| """) |
| print("π Endpoints:") |
| print(" POST /generate - Generate video") |
| print(" GET /health - Health check") |
| print(" GET / - API info") |
| print("") |
| print("π Server running on http://0.0.0.0:7860") |
| |
| app.run( |
| host="0.0.0.0", |
| port=7860, |
| debug=False |
| ) |