v0.19.0

Date:

January 20, 2025

Major Changes

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 installation docs to recommend using a new tool called 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.

Contributors

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

  • Aarush Deshpande

  • Abulafia

  • Achille Fouilleul +

  • Benjamin Hackl

  • CJ Lee +

  • Cameron Burdgick +

  • Chin Zhe Ning

  • Christopher Hampson +

  • ChungLeeCN +

  • Eddie Ruiz +

    1. Muenkel +

  • Francisco Manríquez Novoa

  • Geoo Chi +

  • Henrik Skov Midtiby +

  • Hugo Chargois +

  • Irvanal Haq +

  • Jay Gupta +

  • Laifsyn +

  • Larry Skuse +

  • Nemo2510 +

  • Nikhil Iyer

  • Nikhila Gurusinghe +

  • Rehmatpal Singh +

  • Romit Mohane +

  • Saveliy Yusufov +

  • Sir James Clark Maxwell

  • Sophia Wisdom +

  • Tristan Schulz

  • VPC +

  • Victorien

  • Xiuyuan (Jack) Yuan +

  • alembcke

  • anagorko +

  • czuzu +

  • fogsong233 +

  • jkjkil4 +

  • modjfy +

  • nitzanbueno +

  • yang-tsao +

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

  • Aarush Deshpande

  • Achille Fouilleul

  • Benjamin Hackl

  • Christopher Hampson

  • Eddie Ruiz

  • Francisco Manríquez Novoa

  • Henrik Skov Midtiby

  • Hugo Chargois

  • Irvanal Haq

  • Jay Gupta

  • Jérome Eertmans

  • Nemo2510

  • Nikhila Gurusinghe

  • OliverStrait

  • Saveliy Yusufov

  • Sir James Clark Maxwell

  • Tristan Schulz

  • VPC

  • Victorien

  • Xiuyuan (Jack) Yuan

  • alembcke

  • github-advanced-security[bot]

Pull requests merged

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

Highlights

  • #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.

  • #3518: Created a 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 HSV for a practical example.

  • #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 to ensure a consistent and reproducible environment.

  • #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.

  • #3966: VGroup can now be initialized with VMobject iterables

    Groups of Mobjects can now be created by passing an iterable to the VGroup constructors:

    my_group = VGroup(Dot() for _ in range(10))
    

Breaking changes

  • #3797: Replaced Code.styles_list with Code.get_styles_list()

    The styles_list attribute of the Code class has been replaced with a class method Code.get_styles_list(). This method returns a list of all available values for the formatter_style argument of Code.

  • #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=...)

  • #3922: Removed inner_radius and outer_radius from Sector constructor

    To construct a Sector, you now need to specify a radius (and an angle). In particular, AnnularSector still accepts both inner_radius and outer_radius arguments.

  • #3964: Allow SurroundingRectangle to accept multiple Mobjects

    This changes the signature of 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
    
  • #4115: Completely rewrite the implementation of the Code mobject

    This includes several breaking changes to the interface of the class to make it more consistent. See the documentation of Code for a detailed description of the new interface, and the description of the pull request #4115 for an overview of changes to the old keyword arguments.

New features

Enhancements

Optimizations

Fixed bugs

Type Hints

Internal Improvements and Automation

  • #3737: Fixed action for building downloadable documentation

  • #3761: Use --py39-plus in pre-commit

  • #3777: Add pyproject for ruff formatting

  • #3779: Switch pre-commit to use ruff for linting

  • #3795: Replace Pyupgrade with Ruff rule

  • #3812: Fix MacOS LaTeX CI

  • #3853: Change from tempconfig to a config fixture in tests

  • #3858: Update docker to use ENV x=y instead of ENV x y

  • #3872: Use ruff for pytest style

  • #3873: Use ruff instead of flake8-simplify

  • #3877: Fix pre-commit linting

  • #3780: Add Ruff Lint

  • #3781: Ignore Ruff format in git blame

  • #3881: Standardize docstrings with ruff pydocstyle rules

  • #3882: Change flake8-comprehensions and flake8-bugbear to ruff

  • #3887: Fix typo from HSV PR

  • #3923: Use Ruff pygrep rules

  • #3925: Use Github Markdown on README

  • #3955: Use subprocess instead of os.system.

  • #3956: Set AAC codec for audio in mp4 files, add transcoding utility

  • #4069: Include Noto fonts in Docker image

  • #4102: Remove PT004 from Ruff ignore rules

Dependencies

  • #3739: [pre-commit.ci] pre-commit autoupdate

  • #3746: Bump tqdm from 4.66.1 to 4.66.3

  • #3750: Bump jinja2 from 3.1.3 to 3.1.4

  • #3776: Bump requests from 2.31.0 to 2.32.0

  • #3784: [pre-commit.ci] pre-commit autoupdate

  • #3794: [pre-commit.ci] pre-commit autoupdate

  • #3796: Bump tornado from 6.4 to 6.4.1

  • #3801: [pre-commit.ci] pre-commit autoupdate

  • #3809: [pre-commit.ci] pre-commit autoupdate

  • #3810: Bump urllib3 from 2.2.1 to 2.2.2

  • #3823: [pre-commit.ci] pre-commit autoupdate

  • #3827: Fix docker build

  • #3834: [pre-commit.ci] pre-commit autoupdate

  • #3835: Bump docker/build-push-action from 5 to 6

  • #3841: Bump certifi from 2024.2.2 to 2024.7.4

  • #3844: [pre-commit.ci] pre-commit autoupdate

  • #3847: Bump zipp from 3.18.2 to 3.19.1

  • #3865: [pre-commit.ci] pre-commit autoupdate

  • #3880: [pre-commit.ci] pre-commit autoupdate

  • #3889: [pre-commit.ci] pre-commit autoupdate

  • #3895: Lock poetry.lock

  • #3896: [pre-commit.ci] pre-commit autoupdate

  • #3904: [pre-commit.ci] pre-commit autoupdate

  • #3911: [pre-commit.ci] pre-commit autoupdate

  • #3918: [pre-commit.ci] pre-commit autoupdate

  • #3929: [pre-commit.ci] pre-commit autoupdate

  • #3931: Bump cryptography from 43.0.0 to 43.0.1

  • #3987: [pre-commit.ci] pre-commit autoupdate

  • #4023: Bump tornado from 6.4.1 to 6.4.2

  • #4035: [pre-commit.ci] pre-commit autoupdate

  • #4037: Cap pyav version