Primera Animación
— RayuelaAndábamos sin buscarnos pero sabiendo que andábamos para encontrarnos.
— Julio Cortázar
Ahora que ya tenemos Manim instalado y funcionando, es hora de ponerlo en marcha.
Nuestra primera animación
Sección titulada «Nuestra primera animación»Abrimos nuestro editor de texto favorito e introducimos el siguiente código:
from manim import *
class MyFirstAnimation(Scene): def construct(self): square = Square() self.play( Write(square) )Seguidamente, vamos a nuestra terminal:
uv run manim first_animation.py -pEsto va a generar el siguiente video:
¿Qué ha pasado? ¿Qué hemos hecho?
Sección titulada «¿Qué ha pasado? ¿Qué hemos hecho?»Vamos a estudiar en orden qué hemos hecho y que ha pasado.
En el código
Sección titulada «En el código»A python le hemos dicho:
-
De la librería
Manim, tráete todo todito lo que tengas.first_animation.py from manim import *class MyFirstAnimation(Scene):def construct(self):square = Square()self.play(Write(square)) -
Crea una clase llamada
MyFirstAnimationque herede deScenefirst_animation.py from manim import *class MyFirstAnimation(Scene):def construct(self):square = Square()self.play(Write(square)) -
Sobreescribe el método
constructpara que instancie unSquarey le aplique la animaciónWritefirst_animation.py from manim import *class MyFirstAnimation(Scene):def construct(self):square = Square()self.play(Write(square))
En la terminal
Sección titulada «En la terminal»En la terminal hemos dicho:
-
¡Eh, tú,
uv, llama aManim!Ventana de terminal uv run manim first_animation.py -p -
Ahora,
Manim, renderiza lo que sea que haya en el archivofirst_animation.py.Ventana de terminal uv run manim first_animation.py -p -
¡Y quiero previsualizar!
Ventana de terminal uv run manim first_animation.py -p
Resultado
Sección titulada «Resultado»El resultado es el video tan chulo que hemos visto más arriba junto con otra serie de archivos:
Directoriomanim-workshop
- first_animation.py
Directoriomedia
Directoriovideos
Directoriofirst_animation
Directorio1080p60
Directoriopartial_movie_files
DirectorioMyFirstAnimation
<hash>.mp4- partial_movie_file_list.txt
- MyFirstAnimation.mp4
Manim ha generado una carpeta media dentro de la que hay otra llamada videos. Allí ha creado una carpeta usando el nombre de nuestro archivo python: first_animation.
Dentro de esa, otra carpeta con la calidad del video, en este caso 1080p60 dentro de la cual tenemos un video con el nombre de la clase que hemos creado y otra carpeta con fragmentos de la animación.
Conforme avancemos el taller iremos llenando esta carpeta con más cosas. Por lo general Manim genera archivos bastante comprimidos, pero os recomiendo ir haciendo limpieza de vez en cuando.
Editando la animación
Sección titulada «Editando la animación»Vamos ahora a crear otro archivo llamado second_animations.py. Dentro de él vamos a hacer modificaciones a nuestra animación inicial.
Primero de todo, vamos a copiar el contenido de first_animation.py pero modificando el nombre de la clase a SecondAnimation. Luego, vamos a darle un poco de color a este cuadrado tan soso.
from manim import *
class MyFirstAnimation(Scene):class MySecondAnimation(Scene): def construct(self): square = Square() square = Square(fill_color=GREEN, fill_opacity=1) self.play( Write(square) )Y, de nuevo, vamos a renderizar nuestra animación:
uv run manim second_animations.py -pVamos con otro cambio, venga, nuestra tercera animación. Agregamos esto al código para hacer una animación en la que el cuadrado gire en lugar de dibujarse.
class MyThirdAnimation(Scene): def construct(self): square = Square(fill_color=GREEN, fill_opacity=1) self.play( Write(square) ) self.play( Rotate(square) )Si volvemos a llamar a Manim desde la terminal veremos algo nuevo:
$ uv run manim second_animations.py -pManim Community v0.21.0
1: MySecondAnimation2: MyThirdAnimation
Choose number corresponding to desired scene/arguments.(Use comma separated list for multiple entries or use "*" to select all scenes.)Choice(s):$ 2Aquí Manim ha detectado que tenemos dos clases que heredan de Scene en nuestro archivo second_animations.py, así que nos está preguntando cuál de las dos queremos renderizar. Le metemos el numerito correspondiente, en este caso el 2, y ahora sí que nos renderiza la animación nueva.
¡Menuda chulada!