Basic CLI options

Note

Source code of this section: _01_render_settings.py

Basic structure of an Animation

For a script to be renderable it must have the following structure:

# Import the manim library
from manim import *

# This is the way to define an Scene
class SCENE_NAME(Scene):
    def construct(self):
        # Here is all the code for your animation.
        pass

Cli options

                                DEFAULTS
=================================================================================
-p          PREVIEW                       Open the scene with your media player

-a          RENDER ALL SCENES
            IN THE FILE
            (DON'T USE IT WITH -p FLAG)

-ql         LOW QUALITY         480p    15 fps
-qm         MEDIUM QUALITY      720p    30 fps
-qh         HIGHT QUALITY       1080p   60 fps
-qp         PRODUCTION QUALITY  1440p   60 fps
-qk         4K                  2160p   60 fps
-s          RENDER PNG OF THE
            LAST FRAME

Shorts:
    -pql    PREVIEW IN LOW QUALITY
    -pqm    PREVIEW IN MEDIUM QUALITY
    -pqh    PREVIEW IN HIGHT QUALITY
    -pqp    PREVIEW IN PRODUCTION QUALITY
    -pqk    PREVIEW IN 4K QUALITY
    -ps     RENDER LAST FRAME AS PNG

                                CUSTOM
=================================================================================
-r H,W      RENDER WITH CUSTOM
            DIMENSIONS

            Example: -r 500,500

-o FILE_NAME

CLICK (Not all properties works fine yet)
-----------------------------------
[CLI]
# my config file
#save_as_gif = True
#background_color = WHITE
-----------------------------------

Use default settings

In the first file _01_render_settings.py you will find this code.

from manim import *

class Scene1(Scene):
    def construct(self):
        t = Text("SCENE 1")
        self.play(Write(t))
        self.wait()

class Scene2(Scene):
    def construct(self):
        t = Text("SCENE 2")
        self.play(FadeIn(t))
        self.wait()

class Scene3(Scene):
    def construct(self):
        t = Text("SCENE 3")
        self.play(GrowFromCenter(t))
        self.wait()

Each class that inherits from Scene is a separate animation. You can render the first one at 480p using:

manim tutorial/_01_render_settings.py Scene1 -p -ql

You will see something like this in the terminal:

Manim Community v0.5.0
[04/23/21 23:44:37] INFO     Animation 0 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/480p15/partial_
                            movie_files/Scene1/3163782
                            288_3424579518_1323973724.
                            mp4'}
                    INFO     Animation 1 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/480p15/partial_
                            movie_files/Scene1/1495979
                            052_1438405273_696553468.m
                            p4'}
                    INFO                                scene_file_writer.py:579
                            File ready at /Users/zavde
                            n/Downloads/ManimCE/media/
                            videos/_01_render_settings
                            /480p15/Scene1.mp4

                    INFO     Rendered Scene1                        scene.py:190
                            Played 2 animations
                    INFO     Previewed File at: /Users/zavden/Dow file_ops.py:99
                            nloads/ManimCE/media/videos/_01_rend
                            er_settings/480p15/Scene1.mp4

If you have installed Manim correctly, the animation will have automatically opened with your default player. In the highlighted lines you will see the full location of the file in mp4.

In general, to render any scene the command structure is

manim <scrip.py> <SCENE-NAME> <FLAGS>

In our case, we can join the -p and -ql flags to have the same result,

manim tutorial/_01_render_settings.py Scene1 -pql

Render all scenes

To render all scenes in a script use -a.

In our case, if we want all the scenes to be rendered at low resolution we would use -aql:

manim tutorial/_01_render_settings.py -aql

Warning

Don’t use -paql because if you have a lot of scenes they will open automatically when they finish rendering.

If we wanted them to be rendered at medium resolution we would use -aqm.

You can see all the predefined settings above.

Custom resolution

manim tutorial/_01_render_settings.py Scene1 -pql -r 900,600

Where 900 is the pixel height and 600 is the pixel width.

It doesn’t matter if you use -ql, -qm, -qh, or another resolution flag, the -r will overwrite the dimensions, if you change the resolution flags you would only change the fps.

Save as gif

Render animation as GIF using low resolution.

manim tutorial/_01_render_settings.py Scene1 -ql -i

Render animation as GIF using 900x600 resolution at 30 fps with preview:

manim tutorial/_01_render_settings.py Scene1 -pqm -r 900,600 -i

Render last frame

Render last frame at 1080p with preview:

manim tutorial/_01_render_settings.py Scene1 -ps

Start animation from

Copy this animation in your file:

class Scene4(Scene):
    def construct(self):
        t = Text("Hello world")
        square = Square()
        circle = Circle()
        triangle = Triangle()

        print("Start animations -------------")

        print("Add text")
        self.add(t)

        print("Wait 1 second")
        self.wait()

        print("Create square")
        self.play(Create(square))

        print("Wait 2 seconds")
        self.wait(2)

        print("Create circle")
        self.play(Create(circle))

        print("Wait 1.5 seconds")
        self.wait(1.5)

        print("Create triangle")
        self.play(Create(triangle))

        print("Last wait")
        self.wait()

If we render this video with:

manim tutorial/_01_render_settings.py Scene4 -pqm

You will see this output:

Manim Community v0.5.0
Start animations -------------
Add text
Wait 1 second
[04/24/21 00:40:26] INFO     Animation 0 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/6552404
                            68_1438405273_192487528.mp
                            4'}
Create square
                    INFO     Animation 1 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/1201832
                            484_1768192346_2074958280.
                            mp4'}
Wait 2 seconds
[04/24/21 00:40:27] INFO     Animation 2 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/1201832
                            484_2616472470_324434285.m
                            p4'}
Create circle
                    INFO     Animation 3 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/1201832
                            484_355446327_3071649543.m
                            p4'}
Wait 1.5 seconds
                    INFO     Animation 4 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/1201832
                            484_2941483014_474227006.m
                            p4'}
Create triangle
[04/24/21 00:40:28] INFO     Animation 5 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/1201832
                            484_3040797843_2557678564.
                            mp4'}
Last wait
                    INFO     Animation 6 : Partial      scene_file_writer.py:395
                            movie file written in {'/U
                            sers/zavden/Downloads/Mani
                            mCE/media/videos/_01_rende
                            r_settings/720p30/partial_
                            movie_files/Scene4/1201832
                            484_1438405273_4180111533.
                            mp4'}
                    INFO                                scene_file_writer.py:579
                            File ready at /Users/zavde
                            n/Downloads/ManimCE/media/
                            videos/_01_render_settings
                            /720p30/Scene4.mp4

                    INFO     Rendered Scene4                        scene.py:190
                            Played 7 animations
                    INFO     Previewed File at: /Users/zavden/Dow file_ops.py:99
                            nloads/ManimCE/media/videos/_01_rend
                            er_settings/720p30/Scene4.mp4

If we render this animation this time the output will be different:

Manim Community v0.5.0
Start animations -------------
Add text
Wait 1 second
[04/24/21 00:41:42] INFO     Animation 0 : Using cached     cairo_renderer.py:99
                            data (hash : 655240468_1438405
                            273_192487528)
Create square
                    INFO     Animation 1 : Using cached     cairo_renderer.py:99
                            data (hash : 1201832484_176819
                            2346_2074958280)
Wait 2 seconds
                    INFO     Animation 2 : Using cached     cairo_renderer.py:99
                            data (hash : 1201832484_261647
                            2470_324434285)
Create circle
                    INFO     Animation 3 : Using cached     cairo_renderer.py:99
                            data (hash : 1201832484_355446
                            327_3071649543)
Wait 1.5 seconds
                    INFO     Animation 4 : Using cached     cairo_renderer.py:99
                            data (hash : 1201832484_294148
                            3014_474227006)
Create triangle
                    INFO     Animation 5 : Using cached     cairo_renderer.py:99
                            data (hash : 1201832484_304079
                            7843_2557678564)
Last wait
                    INFO     Animation 6 : Using cached     cairo_renderer.py:99
                            data (hash : 1201832484_143840
                            5273_4180111533)
                    INFO                                scene_file_writer.py:579
                            File ready at /Users/zavde
                            n/Downloads/ManimCE/media/
                            videos/_01_render_settings
                            /720p30/Scene4.mp4

                    INFO     Rendered Scene4                        scene.py:190
                            Played 7 animations
                    INFO     Previewed File at: /Users/zavden/Dow file_ops.py:99
                            nloads/ManimCE/media/videos/_01_rend
                            er_settings/720p30/Scene4.mp4

Explanation: Manim renders each animation (each self.play) separately, and in the end it concatenates all the videos into one.

If the animations are simple, the compiler saves a hash that identifies each animation of a script, and if it does not detect changes, then it will not render it, it will simply copy it, so the rendering will be faster.

Note

If the animations are relatively complex, this won’t work (at least, for now).

In the highlighted lines you will see the number of each animation, in this example there are 7 animations (counting from 0).

This is because pauses are also considered animations, that is, Scene.wait and Scene.play are interpreted as animations. If you don’t understand why Scene.wait is considered an animation we will explain it in the updaters section with dt.

If we wanted to start the animation from the creation of the circle we would use:

manim tutorial/_01_render_settings.py Scene4 -pqm -n 3

If we wanted to start the animation from the creation of the square and ending in the creation of the circle we would use:

manim tutorial/_01_render_settings.py Scene4 -pqm -n 1,3

Change name

The animations will be rendered with the name of the class you defined, that is, if we render Scene1 the mp4 file will be called the same, if we want it to be called in another way we simply use -o Other_name.

manim tutorial/_01_render_settings.py Scene1 -pqm -o First_scene