Creating the Manim Scene#


The first thing you have to take care of is your Manim scene. You have to be aware of the different types each section can have. These types are defined by the Manim Editor and can be imported using from manim_editor import PresentationSectionType.

Four types (and four secondary types) are provided:

Types defined by the Manim Editor#




start, end, wait for continuation by user


start, end, immediately continue to next section


start, end, restart, immediately continue to next section when continued by user


start, end, restart, when user continues finish animation first


same as NORMAL but as sub section


same as SKIP but as sub section


same as LOOP but as sub section


same as COMPLETE_LOOP but as sub section

They are also explained in the interactive tutorial. Sub sections are sections that don’t get listed in the timeline. They belong to the slide of the last full section. If you don’t need sub sections you can simply ignore this feature. When there are no sub sections, sections and slides are synonymous.

With this information you can create a Manim scene with the correct types like this:

from manim import *
from manim_editor import PresentationSectionType

class Test(Scene):
    def construct(self):
        # play some animations...
        self.next_section("Names are still supported.", type=PresentationSectionType.SKIP)
        # play more animations...

When you have defined your scene, you have to render it like this:

manim --save_sections

It is essential that you use the --save_sections flag. Otherwise the Manim Editor won’t find anything to work with.

This creates a media directory in the current working directory (CWD).

You can create as many scenes as your heart desires, they should only be created in the media directory. That way they can be used together for the same project. Once you’re happy with your scene, you can create the Manim Editor project.

Minimal Example#

You can run the following minimal example, to get your first presentation. It results in this presentation.

from manim import *
from manim_editor import PresentationSectionType

def make_elements():  # only setting up the mobjects
    dots = VGroup(Dot(), Dot(), Dot(), Dot(), Dot(), Dot(), Dot(), z_index=0)
    moving_dot = Dot(color=ORANGE, z_index=1).scale(2.5)
    path = VGroup()
    path.add_updater(lambda x: x.become(Line(dots[0], moving_dot, stroke_width=10, z_index=1, color=ORANGE)))
    return dots, moving_dot, path

class MinimalPresentationExample(Scene):
    def construct(self):

        dots, moving_dot, path = make_elements()
        self.add(dots, moving_dot, path)

        self.next_section("A", PresentationSectionType.NORMAL)[1]), rate_func=linear)

        self.next_section("A.1", PresentationSectionType.SUB_NORMAL)[2]), rate_func=linear)

        self.next_section("B", PresentationSectionType.SKIP)[3]), rate_func=linear)

        self.next_section("C", PresentationSectionType.LOOP)[4]), rate_func=linear)

        self.next_section("D", PresentationSectionType.COMPLETE_LOOP)[5]), rate_func=linear)

        self.next_section("E", PresentationSectionType.NORMAL)[6]), rate_func=linear)