| # from fastapi import FastAPI | |
| # from fastapi.responses import FileResponse | |
| # import os | |
| # import subprocess | |
| # from manim import * | |
| # app = FastAPI() | |
| # @app.get("/") | |
| # def read_root(): | |
| # return {"message": "Welcome to the Manim API on HuggingFace!"} | |
| # @app.get("/generate") | |
| # def generate_animation(): | |
| # class PointMovingOnShapes(Scene): | |
| # def construct(self): | |
| # # Define the circle and dot | |
| # circle = Circle(radius=1, color=BLUE) | |
| # dot = Dot() | |
| # dot2 = dot.copy().shift(RIGHT) | |
| # self.add(dot) | |
| # # Create a line | |
| # line = Line([3, 0, 0], [5, 0, 0]) | |
| # self.add(line) | |
| # # Animate the circle, dot, and line | |
| # self.play(GrowFromCenter(circle)) | |
| # self.play(Transform(dot, dot2)) | |
| # self.play(MoveAlongPath(dot, circle), run_time=2, rate_func=linear) | |
| # self.play(Rotating(dot, about_point=[2, 0, 0]), run_time=1.5) | |
| # self.wait() | |
| # # Directory to save rendered video | |
| # output_dir = "/tmp/manim_output" | |
| # os.makedirs(output_dir, exist_ok=True) | |
| # # Rendering the scene to a video file | |
| # scene = PointMovingOnShapes() | |
| # scene.render(directory=output_dir) | |
| # # Path to the rendered video file (manim by default saves as .mp4) | |
| # video_path = os.path.join(output_dir, "media", "videos", "PointMovingOnShapes", "1080p60", "PointMovingOnShapes.mp4") | |
| # # Return the video file as a response | |
| # if os.path.exists(video_path): | |
| # return FileResponse(video_path) | |
| # else: | |
| # return {"message": "Error: Animation rendering failed."} | |
| from fastapi import FastAPI | |
| from fastapi.responses import JSONResponse | |
| import os | |
| from manim import * | |
| from pyuploadcare import Uploadcare | |
| import shutil | |
| app = FastAPI() | |
| UPLOADCARE_PUBLIC_KEY = os.environ.get("key") | |
| UPLOADCARE_SECRET_KEY = os.environ.get("secret") | |
| uploadcare = Uploadcare(public_key=UPLOADCARE_PUBLIC_KEY, secret_key=UPLOADCARE_SECRET_KEY) | |
| def read_root(): | |
| return {"message": "Welcome to the Manim API on HuggingFace!"} | |
| def generate_animation(): | |
| class PointMovingOnShapes(Scene): | |
| def construct(self): | |
| # Define the circle and dot | |
| circle = Circle(radius=1, color=BLUE) | |
| dot = Dot() | |
| dot2 = dot.copy().shift(RIGHT) | |
| self.add(dot) | |
| # Create a line | |
| line = Line([3, 0, 0], [5, 0, 0]) | |
| self.add(line) | |
| # Animate the circle, dot, and line | |
| self.play(GrowFromCenter(circle)) | |
| self.play(Transform(dot, dot2)) | |
| self.play(MoveAlongPath(dot, circle), run_time=2, rate_func=linear) | |
| self.play(Rotating(dot, about_point=[2, 0, 0]), run_time=1.5) | |
| self.wait() | |
| # Directory to save rendered video | |
| # output_dir = "/tmp/manim_output" | |
| # os.makedirs(output_dir, exist_ok=True) | |
| # Rendering the scene to a video file | |
| scene = PointMovingOnShapes() | |
| # scene.render(directory=output_dir) | |
| scene.render() | |
| # Path to the rendered video file (Manim saves as .mp4) | |
| video_path = os.path.join("/tmp/", "media", "videos", "PointMovingOnShapes", "1080p60", "PointMovingOnShapes.mp4") | |
| if os.path.exists(video_path): | |
| try: | |
| # Upload the video file to Uploadcare | |
| uploaded_file = uploadcare.upload(video_path) | |
| # Get the CDN URL of the uploaded file | |
| file_url = uploaded_file.cdn_url | |
| # Return the URL as a JSON response | |
| return JSONResponse(content={"file_url": file_url}) | |
| except Exception as e: | |
| return JSONResponse(content={"error": f"Upload failed: {str(e)}"}, status_code=500) | |
| else: | |
| return JSONResponse(content={"message": "Error: Animation rendering failed."}, status_code=500) | |