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 +
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 withpyav
This change removes the need to have
ffmpeg
available as a command line tool when using Manim. Whilepyav
technically also usesffmpeg
internally, the maintainers ofpyav
distribute it in their binary wheels.
- #3501: Replaced external
- #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.
Breaking changes¶
- #3797: Replaced
Code.styles_list
withCode.get_styles_list()
The
styles_list
attribute of theCode
class has been replaced with a class methodCode.get_styles_list()
. This method returns a list of all available values for theformatter_style
argument ofCode
.
- #3797: Replaced
- #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 nowManimColor.from_hex(hex_str=...)
Scene.next_section(type=...)
is nowScene.next_section(section_type=...)
- #3922: Removed
inner_radius
andouter_radius
fromSector
constructor To construct a
Sector
, you now need to specify aradius
(and anangle
). In particular,AnnularSector
still accepts bothinner_radius
andouter_radius
arguments.
- #3922: Removed
- #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
- #3964: Allow
- #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.
- #4115: Completely rewrite the implementation of the
New features¶
#3148: Added a
colorscale
argument toCoordinateSystem.plot()
#3612: Add three animations that together simulate a typing animation
#3754: Add
@
shorthand forAxes.coords_to_point()
andAxes.point_to_coords()
#3876: Add
Animation.set_default()
class method#3903: Preserve colors of LaTeX coloring commands
#3913: Added
DVIPSNAMES
andSVGNAMES
color palettes#3933: Added
ConvexHull
,ConvexHull3D
,Label
andLabeledPolygram
#3992: Add darker, lighter and contrasting methods to
ManimColor
#3997: Add a time property to scene (
Scene.time
)#4039: Added the
delay
parameter toturn_animation_into_updater()
Enhancements¶
#3829: Rewrite
get_quadratic_approximation_of_cubic()
to produce smoother animated curves#3855: Log execution time of sample scene in the
manim checkhealth
command#3888: Significantly reduce rendering time with a separate thread for writing frames to stream
#3890: Better error messages for
DrawBorderThenFill
#3901: Changed
Square.side_length
attribute to a property#3965: Added the
scale_stroke
boolean parameter toVMobject.scale()
#3974: Made videos embedded in Google Colab by default
#3982: Refactored
run_time
validation forAnimation
andScene.wait()
#4017: Allow animations with
run_time=0
and implement convenienceAdd
animation#4034: Draw more accurate circular
Arc
mobjects for large angles#4051: Add
__hash__
method toManimColor
#4108: Remove duplicate declaration of
__all__
invectorized_mobject
Optimizations¶
#3760: Optimize
VMobject.pointwise_become_partial()
#3766: Created and optimized Bézier splitting functions such as
partial_bezier_points()
inmanim.utils.bezier
#3767: Optimized
manim.utils.bezier.get_smooth_cubic_bezier_handle_points()
#3768: Optimized
manim.utils.bezier.is_closed()
#3960: Optimized
interpolate()
andbezier()
inmanim.utils.bezier
Fixed bugs¶
#3706: Fixed
Line.put_start_and_end_on()
to use the actual end of anArrow3D
#3732: Fixed infinite loop in OpenGL
BackgroundRectangle.get_color()
#3756: Fix assertions and improve error messages when adding submobjects
#3778: Fixed
there_and_back_with_pause()
rate function behaviour with differentpause_ratio
values#3786: Fix
DiGraph
edges not fading correctly onFadeIn
andFadeOut
#3790: Fixed the
get_nth_subpath()
function expecting a numpy array#3832: Convert audio files to
.wav
before passing to pydub#3680: Fixed behavior of
config.background_opacity < 1
#3839: Fixed
ManimConfig.format
not updating movie file extension#3885: Fixed
OpenGLMobject.invert()
not reassembling family#3951: Call
Animation.finish()
for animations in anAnimationGroup
#4013: Fixed scene skipping for
ManimConfig.upto_animation_number
set to 0#4089: Fixed bug with opacity of
ImageMobject
#4091: Fixed
VMobject.add_points_as_corners()
to safely handle emptypoints
parameter
Type Hints¶
#3751: Added typehints to
manim.utils.iterables
#3803: Added typings to
OpenGLMobject
#3902: fixed a wrong type hint in
Scene.restructure_mobjects()
#3916: fixed type hint in
DrawBorderThenFill.interpolate_submobject()
#3926: Fixed some typehints of
ParametricFunction
#3940: Fixed
np.float_
tonp.float64
while using numpy versions above 2.0#3961: Added typehints to
manim.mobject.geometry
#3980: Added new
PointND
andPointND_Array
type aliases#3999: Add type annotations to
manim.utils
#4006: Stopped ignoring
manim.plugins
errors inmypy.ini
#4007: Added typings to
manim.__main__
#4027: Rename
InternalPoint3D
toPoint3D
,Point3D
toPoint3DLike
and other point-related type aliases#4038: Fixed type hint of
Scene.play()
to allowMobject.animate
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 ofos.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