May 02, 2021


A total of 40 people contributed to this release. People with a ‘+’ by their names authored a patch for the first time.

  • Abel Aebker

  • Abhijith Muthyala

  • Adam Ryczkowski +

  • Alex Lembcke +

  • Anton Ballmaier

  • Aron

  • Benjamin Hackl

  • Darylgolden

  • Deniz Hasler +

  • Devin Neal

  • Elisha Hollander +

  • Erik Tastepe +

  • Jan-Hendrik Müller

  • Jason Villanueva

  • Laith Bahodi

  • Mark Miller

  • Mohammad Al-Fetyani

  • Naveen M K

  • Newell Jensen +

  • Nidhal Baccouri +

  • Nikhil Garuda +

  • Peilonrayz +

  • Raghav Goel

  • Ricky Chon +

  • friedkeenan

  • kamilczerwinski22 +

  • sparshg

The patches included in this release have been reviewed by the following contributors.

  • Aathish Sivasubrahmanian

  • Abel Aebker

  • Abhijith Muthyala

  • Adam Ryczkowski

  • Alex Lembcke

  • Anton Ballmaier

  • Aron

  • Benjamin Hackl

  • Darylgolden

  • Deniz Hasler

  • Devin Neal

  • Elisha Hollander

  • GameDungeon

  • Hugues Devimeux

  • Jan-Hendrik Müller

  • Jason Villanueva

  • KingWampy

  • Laith Bahodi

  • Mark Miller

  • Mohammad Al-Fetyani

  • Naveen M K

  • Nidhal Baccouri

  • Nikhil Garuda

  • Oliver

  • Philipp Imhof

  • Raghav Goel

  • Ricky Chon

  • friedkeenan

  • sparshg

Pull requests merged

A total of 112 pull requests were merged for this release.

Breaking changes

  • #1347: Restructure vector_field module and add documentation

    :class`~.VectorField` is renamed to ArrowVectorField and a new class VectorField is added as a superclass for ArrowVectorField and StreamLines. AnimatedStreamLines is removed. It’s functionality is moved to StreamLines. Added a lot of new options when working with vector fields. ShowPassingFlashWithThinningStrokeWidth was moved to the indication module.

  • #1161: Upgrades to CoordinateSystem and graphing.

    Breaking changes were introduced to Axes, ThreeDAxes, NumberPlane and NumberLine All the above now use lists to construct their ranges as opposed to explicitly defining these values. x_range has replaced x_min, x_max and defining the step is much easier with x_step –> x_range : [x_min, x_max, x_step]. There were also many upgrades to these classes which improve their functionality and appearance.

    NumberLineOld was introduced to continue support for GraphScene, although we are moving away from GraphScene and intend to deprecate it in a future release.

  • #1013: Refactored the Command Line Interface to use Click instead of Argparse

    This change breaks the CLI API to organize the structure of Manim Community’s commands, options, and arguments.

    To be more in line with POSIX compliant CLI conventions, options for commands are given BEFORE their arguments. In Argparse: manim basic.py -p -ql With Click: manim -p -ql basic.py

    Although this is primarily a refactor and most of the common options are still there, some options have been added/removed. Use the manim command’s --help option, or simply run the command without providing options/arguments to view the help page with the full list of subcommands/options/arguments.

    • Added a --fps/--frame_rate option which allows for custom fps that don’t have to be integer (i.e. 29.97, 23.98, etc.). Users no longer have to specify the FPS from within a config file. Additionally, the --webgl_renderer_fps option has been removed. Use --fps or --frame_rate instead.

    • Added a --renderer option which you can use to select your choice of renderer (e.g. --renderer=opengl). There are currently THREE renderers to choose from!

    • Removed the --background_color option. Reassigned the --background_color option’s shorthand -c to --config_file.

    • Removed the --leave_progress_bars option. Use --progress_bars=leave instead.

    • Removed the deprecated render quality flags, in particular: -l, -m, -h, -k.

    • Removed the --sound option. It lost support long ago with the removal of SoX.

Deprecated classes and functions

  • #1431: Fix CLI bugs
    • Fixed conflict with -f which was previously assigned to both --show_in_file_browser and --format by removing -f from --format. A warning is issued that -f will soon move to --format.

    • Added back in flags to render the files as gif/last frame. Deprecated them in favor of --format.

    • Fixed the broken --output_file/-o option.

    • Fixed an issue where the -qh quality option was interpreted as -q -h, prompting the help page.

  • #1354: Refactored a few functions in space_ops.py, deprecated angle_between()

  • #1370: Remove TexMobject and TextMobject

    TexMobject and TextMobject have been deprecated for a while, they are now fully removed. Use Tex or MathTex instead.

  • #1349: Removed the deprecated SmallDot mobject

  • #1259: Removed deprecated CairoText class

New features

  • #1386: Implement utility methods for adding/removing vertices and edges of graphs; allow custom mobjects as vertices

  • #1385: Added get_line_graph() for plotting a line graph

    Added get_line_graph() that returns a line graph from lists of points along x, y and z (optional) axes.

  • #1381: Hot reloading for the OpenGL renderer

    Rerun scene when the input file is modified

  • #1383: Overhaul of the indication module interfaces
    • Added class Circumscribe combining functionality of CircleIndicate, AnimationOnSurroundingRectangle, ShowPassingFlashAround, ShowCreationThenDestructionAround, ShowCreationThenFadeAround, which have all been deprecated.

    • Changes to Flash: flash_radius parameter now defines inner radius of the animation. Added new parameter time_width.

    • ShowCreationThenDestruction has been deprecated in favor of ShowPassingFlash

    • Changes to ApplyWave: New implementation giving more flexibility with new parameters wave_func, time_width and`ripples`

    • Renamed WiggleOutThenIn to Wiggle (WiggleOutThenIn has been deprecated)

    • Added documentation and examples to all the above

    • Other minor enhancements and bug-fixes

  • #1348: Added Polyhedron, and platonic solids Tetrahedron, Octahedron, Icosahedron and Dodecahedron

  • #1285: Add interactive_embed() for OpenGL rendering

    interactive_embed() allows interaction with Scene via mouse and keyboard as well as dynamic commands via an iPython terminal.

  • #1261: Render image automatically if no animation is played in a scene
    • If no animations in scene and asked to preview/render a video, preview/render an image instead of raising a confusing error.

  • #1200: Add text and SVG mobjects to OpenGL

    Added OpenGL-compatible text and SVG mobjects


  • #1398: Fix and enhance Mobject.arrange_in_grid

    arrange_in_grid now actually arranges submobjects in a grid. Added new parameters buff, cell_alignment, row_alignments, col_alignments, row_heights, col_widths, flow_order.

  • #1407: Fix bug and rename vector_coordinate_label() to coordinate_label() and move it to geometry.py

  • #1380: Allow image objects as background images

  • #1391: Add path_arc support to .animate syntax

    The parameter path_arc of Transform now works with the .animate syntax

  • #1364: Added match_points()
    • Added match_points(), which transforms the points, positions and submobjects of a Mobject to match that of the other while keeping style unchanged.

  • #1363: Change of TeX compiler and output file format

  • #1359: Make FILE a required argument
    • Make FILE a required argument, manim/cli/render/commands.py:L30

  • #1304: Improve Tex string splitting at double braces: only split for double brace groups

  • #1340: Add OpenGL support to the new transform animations

    Made FadeTransform, FadeTransformPieces, TransformMatchingShapes and TransformMatchingTex compatible with OpenGL rendering.

  • #1343: Make TexTemplate() simple, but keep Tex()’s default template

    TexTemplate() now returns a simple tex template.

  • #1321: Add OpenGL support to AnimationGroup

  • #1302: Raise appropriate errors in point_from_proportion()
    • Raise an error if the alpha argument is not between 0 and 1.

    • Raise an error if the VMobject has no points.

  • #1315: Fix performance issues with get_arc_length(), stemming from #1274

  • #1320: Add jpeg extension to the default image extensions

  • #1234: Added new method get_midpoint()

    Implemented get_midpoint() to return the point that is the middle of the stroke line of an mobject.

  • #1237: Notify user if they are using an outdated version of Manim

  • #1308: Improved ManimBanner animations

  • #1275: Add SVG <line> element support to SVGMobject

  • #1238: Add parameter about_point for rotate()

  • #1260: Change Brace from Tex to SVG (#1258)

  • #1122: Support for specifying the interpolation algorithms for individual ImageMobjects

  • #1283: Set default value of keyword random_seed in Scene to None (was 0 and fixed before)

  • #1220: Added sanity checks to add_to_back() for Mobjects

    Add Mobject add_to_back sanity checks: - Raises ValueError when Mobject tries to add itself - Raises TypeError when a non-Mobject is added - Filters out incoming duplicate submobjects if at least one instance of that submobject exists in the list

  • #1249: Set corners of Rectangle in counterclockwise direction

    This improves the look of transformations between rectangles and other simple mobjects.

  • #1248: Add Copy function to TexTemplate

Fixed bugs

Changes concerning the testing system

  • #1299: Red pixels (different value) now appear over green pixels (same value) in GraphicalUnitTest

Changes to our development infrastructure

  • #1436: Cache poetry venv with pyproject.toml hash in key

    Cache poetry venv with pyproject.toml hash in key

  • #1435: CI: Update poetry cache when new version is released

    Fix test_version failure in CI when using cached poetry venv

  • #1427: Add URL’s to pyproject.toml

  • #1421: Updated changelog generator’s labels and removed pre-commit bot from changelog

  • #1339: CI: Fix macOS installation error from creating file in read-only file system

  • #1257: CI: Caching ffmpeg, tinytex dependencies and poetry venv

    CI: Caching ffmpeg, tinytex dependencies and poetry venv

  • #1294: Added mixed-line-ending to .pre-commit-config.yaml

  • #1278: Fixed flake8 errors and removed linter/formatter workflows

  • #1270: Added isort to pre_commit file

  • #1263: CI: Turn off experimental installer for poetry to fix installation errors
    • Turn off experimental installer for poetry to prevent manim installation errors for packages.

    • Downgrade py39 to py38 for flake checks as pip does not enjoy py39, along with poetry.

  • #1255: CI: Fix macOS pipeline failure

    Update ci.yml to update and upgrade brew if necessary before installing dependencies, and remove the unsupported dvisvgm.86_64-darwin package.

  • #1254: Removed the comment warning that GitHub doesn’t allow uploading video in the issue templates.

  • #1216: Use actions/checkout for cloning repository; black-checks

  • #1235: Fixed version of decorator at <5.0.0

Code quality improvements and similar refactors

  • #1411: Change Union[float, int] to just float according to PEP 484

  • #1241: Type Annotations: Fixing errors showing up in static type checking tool mypy

  • #1319: Fix mean/meant typo

    Fix typo in docs

  • #1313: Singular typo fix on the Quickstart page in documentation

  • #1292: Remove unnecessary imports from files

    Imports reduced in a bunch of files

  • #1295: Fix grammar and typos in the CODE OF CONDUCT

  • #1293: Minor fixes - reduce lines

    Remove unnecessary lines

  • #1281: Remove all Carriage Return characters in our files

  • #1178: Format Imports using Isort

  • #1233: Fix deprecation warning for --use_opengl_renderer and --use_webgl_renderer

  • #1282: Fix typing hints in vectorized_mobject.py based on mypy

New releases