Herramienta web para renderizar animaciones de curvas paramétricas generadas con Manim. El usuario ingresa una curva f(t) en LaTeX junto con sus límites [a, b], selecciona las escenas que desea y el sistema genera los videos correspondientes.
Proyecto desarrollado por Francisco Manríquez Novoa como parte de su memoria de título y donado a la comunidad Linux y Open Source USM (LyOSS) tras su defensa, con el objetivo de mantenerlo vivo y de libre uso para docentes y estudiantes.
La página está pensada para que un docente la use en sus clases de curvas paramétricas o un estudiante pueda repasar y experimentar por su cuenta con los ejemplos vistos en clases o en textos.
Este proyecto se entrega a la comunidad como una donación:
- A Francisco Manríquez Novoa, autor de la herramienta, por compartirla con LyOSS y la comunidad open source.
- A chopan050/manimator-usm, el repositorio original del que deriva este trabajo y cuya idea y estructura base se retomaron.
- A la comunidad LyOSS, por difundir y mantener vivos los principios del software libre dentro de la USM.
- A Manim y su comunidad, por poner a disposición un motor de animación matemática tan potente.
- Renderizado asíncrono de curvas paramétricas 2D y 3D.
- Seis escenas animadas: trazado, rotación, derivada (vector velocidad), recta tangente, recta/plano normal y longitud de arco.
- Entrada de curva y límites en notación LaTeX, procesada simbólicamente con SymPy (incluye derivación automática).
- Interfaz bilingüe (español/inglés) con reproducción de video integrada.
- Cache de resultados: los videos ya generados no se vuelven a renderizar.
El proyecto es un stack full-stack orquestado con Docker Compose:
flowchart TD
F[Frontend: React + Vite / nginx<br/>:3000 -> :80]
B[Backend: FastAPI + Uvicorn<br/>:8000]
R[(Redis<br/>broker y backend de Celery)]
W[Worker: Celery<br/>renderiza con Manim]
V[/media/videos/720p30<br/>volumen compartido/]
F -- "/api, /videos (proxy)" --> B
B -- "encola tarea / consulta estado" --> R
R <--> W
W -- "escribe .mp4" --> V
Flujo de una petición:
- El frontend envía
f(t),a,b, las escenas seleccionadas y la configuración al backend. - El backend encola una tarea en Celery a través de Redis y devuelve un
task_id. - El worker renderiza cada escena seleccionada con Manim y guarda los
.mp4en el volumenmedia. - El frontend hace polling cada 2 segundos a
/status/{task_id}y muestra los videos a medida que quedan listos.
- Docker y Docker Compose (v2 o superior).
docker compose up --build| Servicio | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend | http://localhost:8000 |
| API docs | http://localhost:8000/docs |
Para detener: docker compose down.
- Escribir la curva paramétrica en LaTeX, por ejemplo
(\cos(t), \sin(t)). - Definir los límites
ayb(aceptan expresiones como0y2\pi). - (Opcional) Activar "Usar la misma escala en todos los ejes" para preservar la relación de aspecto de la curva.
- Seleccionar las escenas deseadas y pulsar Renderizar.
- Esperar la generación y reproducir los videos en las pestañas.
| Clave | Escena |
|---|---|
tracing |
Trazado de la curva con punto animado. |
rotation |
Rotación de 360° (3D). |
tangentvector |
Derivada y vector velocidad. |
tangentline |
Recta tangente. |
normal |
Recta normal (2D) o plano normal (3D). |
arclength |
Longitud de arco (animación lenta). |
| Capa | Tecnologías |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS 4, shadcn/ui + Radix UI, React Compiler |
| Backend | Python 3.14, FastAPI, Celery, Redis, Manim, SymPy, Uvicorn |
| DevOps | Docker, Docker Compose, Nginx |
.
├── backend/ # API FastAPI, worker Celery y generador de escenas Manim
├── frontend/ # SPA en React + TypeScript + Vite
├── docker-compose.yml # Orquestación de servicios
└── media/ # Videos generados (volumen compartido, ignorado por git)
- La escena de longitud de arco es la más costosa y puede tardar varios minutos.
- En la escena normal 3D existe un bug conocido al pasar de un círculo a un cuadrilátero (queda una copia del círculo), documentado en el código.
- El backend asume la ruta
/manim/mediapara el directorio de salida; elDockerfileincluye un TODO pendiente para ejecutar como usuario no root. - Solo se renderiza
720p30(calidad media de Manim). - El programa no se comporta bien ante discontinuidades de la curva.
Ideas mencionadas por el autor para seguir desarrollando el proyecto:
- Soporte para superficies paramétricas.
- Soporte para funciones por tramos o múltiples funciones a la vez.
- Corregir el comportamiento en discontinuidades.
Código escrito por Francisco Manríquez Novoa, basado en el trabajo original de chopan050/manimator-usm, con el apoyo de la comunidad lyoss-usm.
Este proyecto es de código abierto, publicado para uso educativo y de la comunidad. Si reutilizas o modificas el código, considera dar crédito al autor original y a este repositorio.