CONFIG dictionary

What’s CONFIG

CONFIG dictionary is a feature of manim, which facilitates the inheritance and modification of parameters between parent and child classes.

CONFIG dictionary ‘s processing is in manimlib/utils/config_ops.py
It can convert the key-value pairs in the CONFIG dictionary into class attributes and values

Generally, the first line of the .__init__() method in some basic class (Mobject, Animation, etc.) will call this function digest_config(self, kwargs) to convert both the CONFIG dictionary and kwargs into attributes. Then it can be accessed directly through self., which simplifies the handling of inheritance between classes.

An example:

There are many class inheritance relationships in manimlib/mobject/geometry.py

# Line 279
class Circle(Arc):
    CONFIG = {
        "color": RED,
        "close_new_points": True,
        "anchors_span_full_range": False
    }
# Line 304
class Dot(Circle):
    CONFIG = {
        "radius": DEFAULT_DOT_RADIUS,
        "stroke_width": 0,
        "fill_opacity": 1.0,
        "color": WHITE
    }

The Circle class uses the key-value pair "color": RED in the CONFIG dictionary to add the attribute self.color.

At the same time, the Dot class also contains the key color in the CONFIG dictionary, but the value is different. At this time, the priority will modify the attribute self.color to WHITE.

CONFIG nesting

The CONFIG dictionary supports nesting, that is, the value of the key is also a dictionary, for example:

class Camera(object):
    CONFIG = {
        # configs
    }
class Scene(object):
    CONFIG = {
        "window_config": {},
        "camera_class": Camera,
        "camera_config": {},
        "file_writer_config": {},
        # other configs
    }

    def __init__(self, **kwargs):
        digest_config(self, kwargs)
        # some lines
        self.camera = self.camera_class(**self.camera_config)

The CONFIG dictionary of the Camera class contains many key-value pairs, and this class needs to be instantiated in the Scene class. For more convenient control, there is a special key-value pair in the Scene class "camera_config": {}, Its value is a dictionary, passed in as kwargs when initializing the Camera class to modify the value of the properties of the Camera class.

So the nesting of the CONFIG dictionary essentially passes in the value as kwargs.