diff --git a/manim/scene/scene.py b/manim/scene/scene.py index fc3d3ede54..4b43978d88 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -464,6 +464,9 @@ def add(self, *mobjects: Mobject): The same scene after adding the Mobjects in. """ + # Allow passing a generator or any iterable to self.add instead of comma separated arguments + mobjects = flatten_iterable_parameters(mobjects) + if config.renderer == RendererType.OPENGL: new_mobjects = [] new_meshes = [] diff --git a/manim/utils/parameter_parsing.py b/manim/utils/parameter_parsing.py index d3676c7301..8dff300a1a 100644 --- a/manim/utils/parameter_parsing.py +++ b/manim/utils/parameter_parsing.py @@ -25,8 +25,12 @@ def flatten_iterable_parameters( """ flattened_parameters: list[T] = [] for arg in args: - if isinstance(arg, (Iterable, GeneratorType)): + # Mobject is iterable as it has `__iter__()`, but it should be appended. + # To avoid cyclic import, we check for the `submobjects` attribute. + if isinstance(arg, (Iterable, GeneratorType)) and not hasattr( + arg, "submobjects" + ): flattened_parameters.extend(arg) else: - flattened_parameters.append(arg) + flattened_parameters.append(arg) # type: ignore[arg-type] return flattened_parameters