Spaces:
Building
Building
import os | |
import subprocess | |
from flask import Flask, request, send_file, jsonify | |
import uuid | |
app = Flask(__name__) | |
# Define directories for uploads and outputs | |
UPLOAD_FOLDER = 'uploads_gradio' | |
OUTPUT_FOLDER = 'outputs_gradio' | |
os.makedirs(UPLOAD_FOLDER, exist_ok=True) | |
os.makedirs(OUTPUT_FOLDER, exist_ok=True) | |
def animate(): | |
if 'image' not in request.files: | |
return jsonify({"error": "No image file provided."}), 400 | |
image_file = request.files['image'] | |
if image_file.filename == '': | |
return jsonify({"error": "Empty filename."}), 400 | |
# Save uploaded image | |
unique_id = str(uuid.uuid4()) | |
input_path = os.path.join(UPLOAD_FOLDER, unique_id + os.path.splitext(image_file.filename)[1]) | |
image_file.save(input_path) | |
# Prepare output directory | |
char_anno_dir = os.path.join(OUTPUT_FOLDER, f"{unique_id}_out") | |
os.makedirs(char_anno_dir, exist_ok=True) | |
try: | |
# Run the image_to_animation.py script | |
subprocess.run([ | |
'python', 'examples/image_to_animation.py', | |
input_path, char_anno_dir | |
], check=True) | |
# Path to the generated GIF | |
gif_path = os.path.join(char_anno_dir, "video.gif") | |
if not os.path.exists(gif_path): | |
return jsonify({"error": "Animation not generated. Ensure input image is a clear humanoid drawing."}), 500 | |
# Return the GIF as a response | |
# After returning, we can clean up if desired | |
return send_file(gif_path, mimetype="image/gif") | |
except subprocess.CalledProcessError as e: | |
return jsonify({"error": "Error during processing", "details": str(e)}), 500 | |
except Exception as e: | |
return jsonify({"error": "Unexpected error", "details": str(e)}), 500 | |
if __name__ == "__main__": | |
# Run the Flask app | |
app.run(host="0.0.0.0", port=7860, debug=False) |