docs/source/changelog/0.19.0-changelog.rst
v0.19.0
:Date: January 20, 2025
With the release of Manim v0.19.0, we've made lots of progress with making Manim easier to install!
One of the biggest changes in this release is the replacement of the external
ffmpeg dependency with the pyav library. This means that users no longer
have to install ffmpeg in order to use Manim - they can just pip install manim
and it will work!
In light of this change, we also rewrote our :ref:installation docs <local-installation>
to recommend using a new tool called uv <https://docs.astral.sh/uv/>_ to install Manim.
.. note::
Do not worry if you installed Manim with any previous methods, like homebrew, pip,
choco, or scoop. Those methods will still work, and are not deprecated. However,
the recommended way to install Manim is now with uv <https://docs.astral.sh/uv/>_.
A total of 54 people contributed to this release. People with a '+' by their names authored a patch for the first time.
The patches included in this release have been reviewed by the following contributors.
A total of 138 pull requests were merged for this release.
:pr:3501: Replaced external ffmpeg dependency with pyav
This change removes the need to have ffmpeg available as a command line tool
when using Manim. While pyav technically also uses ffmpeg internally,
the maintainers of pyav distribute it in their binary wheels.
:pr:3518: Created a :class:.HSV color class, and added support for custom color spaces
This extends the color system of Manim and adds support to implement custom color spaces.
See the implementation of :class:.HSV for a practical example.
:pr:3930: Completely reworked the installation instructions
As a consequence of removing the need for the external ffmpeg dependency,
we have reworked and massively simplified the installation instructions. Given
that practically, user-written scenes are effectively small self-contained Python
projects, the new instructions strongly recommend using the
project and dependency management tool uv <https://docs.astral.sh/uv/>__ to ensure
a consistent and reproducible environment.
:pr:3967: Added support for Python 3.13
This adds support for Python 3.13, which brings the range of currently supported
Python versions to 3.9 -- 3.13.
:pr:3966: :class:.VGroup can now be initialized with :class:.VMobject iterables
Groups of Mobjects can now be created by passing an iterable to the :class:.VGroup
constructors::
my_group = VGroup(Dot() for _ in range(10))
:pr:3797: Replaced Code.styles_list with :meth:.Code.get_styles_list
The styles_list attribute of the :class:.Code class has been replaced with
a class method :meth:.Code.get_styles_list. This method returns a list of all
available values for the formatter_style argument of :class:.Code.
:pr:3884: Renamed parameters and variables conflicting with builtin functions
To avoid having keyword arguments named after builtin functions, the following
two changes were made to user-facing functions:
ManimColor.from_hex(hex=...) is now ManimColor.from_hex(hex_str=...)Scene.next_section(type=...) is now Scene.next_section(section_type=...):pr:3922: Removed inner_radius and outer_radius from :class:.Sector constructor
To construct a :class:.Sector, you now need to specify a radius (and an angle).
In particular, :class:.AnnularSector still accepts both inner_radius and outer_radius
arguments.
:pr:3964: Allow :class:.SurroundingRectangle to accept multiple Mobjects
This changes the signature of :class:.SurroundingRectangle to accept
a sequence of Mobjects instead of a single Mobject. As a consequence, other
arguments that could be specified as positional ones before now need to be
specified as keyword arguments::
SurroundingRectangle(some_mobject, RED, 0.3) # raises error now
SurroundingRectangle(some_mobject, color=RED, buff=0.3) # correct usage
:pr:4115: Completely rewrite the implementation of the :class:.Code mobject
This includes several breaking changes to the interface of the class to make it
more consistent. See the documentation of :class:.Code for a detailed description
of the new interface, and the description of the pull request :pr:4115 for
an overview of changes to the old keyword arguments.
:pr:3148: Added a colorscale argument to :meth:.CoordinateSystem.plot
:pr:3612: Add three animations that together simulate a typing animation
:pr:3754: Add @ shorthand for :meth:.Axes.coords_to_point and :meth:.Axes.point_to_coords
:pr:3876: Add :meth:.Animation.set_default class method
:pr:3903: Preserve colors of LaTeX coloring commands
:pr:3913: Added :mod:.DVIPSNAMES and :mod:.SVGNAMES color palettes
:pr:3933: Added :class:.ConvexHull, :class:.ConvexHull3D, :class:.Label and :class:.LabeledPolygram
:pr:3992: Add darker, lighter and contrasting methods to :class:.ManimColor
:pr:3997: Add a time property to scene (:attr:.Scene.time)
:pr:4039: Added the delay parameter to :func:.turn_animation_into_updater
:pr:3829: Rewrite :func:~.bezier.get_quadratic_approximation_of_cubic to produce smoother animated curves
:pr:3855: Log execution time of sample scene in the manim checkhealth command
:pr:3888: Significantly reduce rendering time with a separate thread for writing frames to stream
:pr:3890: Better error messages for :class:.DrawBorderThenFill
:pr:3893: Improve line rendering performance of :class:.Cylinder
:pr:3901: Changed :attr:.Square.side_length attribute to a property
:pr:3965: Added the scale_stroke boolean parameter to :meth:.VMobject.scale
:pr:3974: Made videos embedded in Google Colab by default
:pr:3982: Refactored run_time validation for :class:.Animation and :meth:.Scene.wait
:pr:4017: Allow animations with run_time=0 and implement convenience :class:.Add animation
:pr:4034: Draw more accurate circular :class:.Arc mobjects for large angles
:pr:4051: Add __hash__ method to :class:.ManimColor
:pr:4108: Remove duplicate declaration of __all__ in :mod:.vectorized_mobject
:pr:3760: Optimize :meth:.VMobject.pointwise_become_partial
:pr:3765: Optimize :class:.VMobject methods which append to points
:pr:3766: Created and optimized Bézier splitting functions such as :func:~.utils.bezier.partial_bezier_points() in :mod:manim.utils.bezier
:pr:3767: Optimized :func:manim.utils.bezier.get_smooth_cubic_bezier_handle_points()
:pr:3768: Optimized :func:manim.utils.bezier.is_closed
:pr:3960: Optimized :func:~.bezier.interpolate and :func:~.bezier.bezier in :mod:manim.utils.bezier
:pr:3706: Fixed :meth:.Line.put_start_and_end_on to use the actual end of an :class:.Arrow3D
:pr:3732: Fixed infinite loop in OpenGL :meth:.BackgroundRectangle.get_color
:pr:3756: Fix assertions and improve error messages when adding submobjects
:pr:3778: Fixed :func:.there_and_back_with_pause rate function behaviour with different pause_ratio values
:pr:3786: Fix :class:.DiGraph edges not fading correctly on :class:.FadeIn and :class:.FadeOut
:pr:3790: Fixed the :func:.get_nth_subpath function expecting a numpy array
:pr:3832: Convert audio files to .wav before passing to pydub
:pr:3680: Fixed behavior of config.background_opacity < 1
:pr:3839: Fixed :attr:.ManimConfig.format not updating movie file extension
:pr:3885: Fixed :meth:.OpenGLMobject.invert not reassembling family
:pr:3951: Call :meth:.Animation.finish for animations in an :class:.AnimationGroup
:pr:4013: Fixed scene skipping for :attr:ManimConfig.upto_animation_number set to 0
:pr:4089: Fixed bug with opacity of :class:.ImageMobject
:pr:4091: Fixed :meth:.VMobject.add_points_as_corners to safely handle empty points parameter
:pr:3669: Added a :mod:manim.typing guide
:pr:3715: Added docstrings to Brace
:pr:3745: Underline tag should be <u></u> in the documentation
:pr:3818: Automatically document usages of :class:typing.TypeVar
:pr:3849: Fix incorrect versionadded version number in plugin section in docs
:pr:3851: Rename manim.typing.Image type aliases to :class:.PixelArray to avoid conflict with PIL.Image
:pr:3857: Update installation instructions for MacOS (via dedicated brew formula)
:pr:3878: Fixed typehint in types.rst and replaced outdated reference to manim.typing.Image with :class:manim.typing.PixelArray
:pr:3924: Fix SyntaxWarning when building docs + use Python 3.13 for readthedocs build
:pr:3958: Fix: .to_edge's example demonstration in docs
:pr:3972: Refining documentations for :mod:.moving_camera_scene module
:pr:4032: Bump version and create changelog for v0.19.0
:pr:4044: Added support for autodocumenting type aliases that use the type syntax
:pr:4065: Polish documentation of :mod:.utils.color.core and remove interpolate_array function
:pr:4077: Update README and documentation landing page, improve way how 3b1b is credited
:pr:4100: Add wavy square example to :class:.Homotopy
:pr:4107: Corrected a typo in the deep dive guide
:pr:4116: Fix broken link to Poetry installation in contribution docs
:pr:3751: Added typehints to :mod:manim.utils.iterables
:pr:3803: Added typings to :class:.OpenGLMobject
:pr:3902: fixed a wrong type hint in :meth:.Scene.restructure_mobjects
:pr:3916: fixed type hint in :meth:.DrawBorderThenFill.interpolate_submobject
:pr:3926: Fixed some typehints of :class:.ParametricFunction
:pr:3940: Fixed np.float_ to np.float64 while using numpy versions above 2.0
:pr:3961: Added typehints to :mod:manim.mobject.geometry
:pr:3980: Added new :class:.PointND and :class:.PointND_Array type aliases
:pr:3988: Added type hints to :mod:manim.cli module
:pr:3999: Add type annotations to :mod:manim.utils
:pr:4006: Stopped ignoring :mod:manim.plugins errors in mypy.ini
:pr:4007: Added typings to :mod:manim.__main__
:pr:4027: Rename InternalPoint3D to :class:~.typing.Point3D, Point3D to :class:~.Point3DLike and other point-related type aliases
:pr:4038: Fixed type hint of :meth:.Scene.play to allow :attr:.Mobject.animate
:pr:3737: Fixed action for building downloadable documentation
:pr:3761: Use --py39-plus in pre-commit
:pr:3777: Add pyproject for ruff formatting
:pr:3779: Switch pre-commit to use ruff for linting
:pr:3795: Replace Pyupgrade with Ruff rule
:pr:3812: Fix MacOS LaTeX CI
:pr:3853: Change from tempconfig to a config fixture in tests
:pr:3858: Update docker to use ENV x=y instead of ENV x y
:pr:3872: Use ruff for pytest style
:pr:3873: Use ruff instead of flake8-simplify
:pr:3877: Fix pre-commit linting
:pr:3780: Add Ruff Lint
:pr:3781: Ignore Ruff format in git blame
:pr:3881: Standardize docstrings with ruff pydocstyle rules
:pr:3882: Change flake8-comprehensions and flake8-bugbear to ruff
:pr:3887: Fix typo from HSV PR
:pr:3923: Use Ruff pygrep rules
:pr:3925: Use Github Markdown on README
:pr:3955: Use subprocess instead of os.system.
:pr:3956: Set AAC codec for audio in mp4 files, add transcoding utility
:pr:4069: Include Noto fonts in Docker image
:pr:4102: Remove PT004 from Ruff ignore rules
:pr:3739: [pre-commit.ci] pre-commit autoupdate
:pr:3746: Bump tqdm from 4.66.1 to 4.66.3
:pr:3750: Bump jinja2 from 3.1.3 to 3.1.4
:pr:3776: Bump requests from 2.31.0 to 2.32.0
:pr:3784: [pre-commit.ci] pre-commit autoupdate
:pr:3794: [pre-commit.ci] pre-commit autoupdate
:pr:3796: Bump tornado from 6.4 to 6.4.1
:pr:3801: [pre-commit.ci] pre-commit autoupdate
:pr:3809: [pre-commit.ci] pre-commit autoupdate
:pr:3810: Bump urllib3 from 2.2.1 to 2.2.2
:pr:3823: [pre-commit.ci] pre-commit autoupdate
:pr:3827: Fix docker build
:pr:3834: [pre-commit.ci] pre-commit autoupdate
:pr:3835: Bump docker/build-push-action from 5 to 6
:pr:3841: Bump certifi from 2024.2.2 to 2024.7.4
:pr:3844: [pre-commit.ci] pre-commit autoupdate
:pr:3847: Bump zipp from 3.18.2 to 3.19.1
:pr:3865: [pre-commit.ci] pre-commit autoupdate
:pr:3880: [pre-commit.ci] pre-commit autoupdate
:pr:3889: [pre-commit.ci] pre-commit autoupdate
:pr:3895: Lock poetry.lock
:pr:3896: [pre-commit.ci] pre-commit autoupdate
:pr:3904: [pre-commit.ci] pre-commit autoupdate
:pr:3911: [pre-commit.ci] pre-commit autoupdate
:pr:3918: [pre-commit.ci] pre-commit autoupdate
:pr:3929: [pre-commit.ci] pre-commit autoupdate
:pr:3931: Bump cryptography from 43.0.0 to 43.0.1
:pr:3987: [pre-commit.ci] pre-commit autoupdate
:pr:4023: Bump tornado from 6.4.1 to 6.4.2
:pr:4035: [pre-commit.ci] pre-commit autoupdate
:pr:4037: Cap pyav version