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¶
- PR #3501: Replaced external
ffmpegdependency withpyav This change removes the need to have
ffmpegavailable as a command line tool when using Manim. Whilepyavtechnically also usesffmpeginternally, the maintainers ofpyavdistribute it in their binary wheels.
- PR #3501: Replaced external
- PR #3930: Completely reworked the installation instructions
As a consequence of removing the need for the external
ffmpegdependency, 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.
- 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.
Breaking changes¶
- PR #3797: Replaced
Code.styles_listwithCode.get_styles_list() The
styles_listattribute of theCodeclass has been replaced with a class methodCode.get_styles_list(). This method returns a list of all available values for theformatter_styleargument ofCode.
- PR #3797: Replaced
- 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 nowManimColor.from_hex(hex_str=...)Scene.next_section(type=...)is nowScene.next_section(section_type=...)
- PR #3922: Removed
inner_radiusandouter_radiusfromSectorconstructor To construct a
Sector, you now need to specify aradius(and anangle). In particular,AnnularSectorstill accepts bothinner_radiusandouter_radiusarguments.
- PR #3922: Removed
- PR #3964: Allow
SurroundingRectangleto accept multiple Mobjects This changes the signature of
SurroundingRectangleto 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 #3964: Allow
- PR #4115: Completely rewrite the implementation of the
Codemobject This includes several breaking changes to the interface of the class to make it more consistent. See the documentation of
Codefor 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 #4115: Completely rewrite the implementation of the
New features¶
PR #3148: Added a
colorscaleargument toCoordinateSystem.plot()PR #3612: Add three animations that together simulate a typing animation
PR #3754: Add
@shorthand forAxes.coords_to_point()andAxes.point_to_coords()PR #3876: Add
Animation.set_default()class methodPR #3903: Preserve colors of LaTeX coloring commands
PR #3913: Added
DVIPSNAMESandSVGNAMEScolor palettesPR #3933: Added
ConvexHull,ConvexHull3D,LabelandLabeledPolygramPR #3992: Add darker, lighter and contrasting methods to
ManimColorPR #3997: Add a time property to scene (
Scene.time)PR #4039: Added the
delayparameter toturn_animation_into_updater()
Enhancements¶
PR #3829: Rewrite
get_quadratic_approximation_of_cubic()to produce smoother animated curvesPR #3855: Log execution time of sample scene in the
manim checkhealthcommandPR #3888: Significantly reduce rendering time with a separate thread for writing frames to stream
PR #3890: Better error messages for
DrawBorderThenFillPR #3901: Changed
Square.side_lengthattribute to a propertyPR #3965: Added the
scale_strokeboolean parameter toVMobject.scale()PR #3974: Made videos embedded in Google Colab by default
PR #3982: Refactored
run_timevalidation forAnimationandScene.wait()PR #4017: Allow animations with
run_time=0and implement convenienceAddanimationPR #4034: Draw more accurate circular
Arcmobjects for large anglesPR #4051: Add
__hash__method toManimColorPR #4108: Remove duplicate declaration of
__all__invectorized_mobject
Optimizations¶
PR #3760: Optimize
VMobject.pointwise_become_partial()PR #3766: Created and optimized Bézier splitting functions such as
partial_bezier_points()inmanim.utils.bezierPR #3767: Optimized
manim.utils.bezier.get_smooth_cubic_bezier_handle_points()PR #3768: Optimized
manim.utils.bezier.is_closed()PR #3960: Optimized
interpolate()andbezier()inmanim.utils.bezier
Fixed bugs¶
PR #3706: Fixed
Line.put_start_and_end_on()to use the actual end of anArrow3DPR #3732: Fixed infinite loop in OpenGL
BackgroundRectangle.get_color()PR #3756: Fix assertions and improve error messages when adding submobjects
PR #3778: Fixed
there_and_back_with_pause()rate function behaviour with differentpause_ratiovaluesPR #3786: Fix
DiGraphedges not fading correctly onFadeInandFadeOutPR #3790: Fixed the
get_nth_subpath()function expecting a numpy arrayPR #3832: Convert audio files to
.wavbefore passing to pydubPR #3680: Fixed behavior of
config.background_opacity < 1PR #3839: Fixed
ManimConfig.formatnot updating movie file extensionPR #3885: Fixed
OpenGLMobject.invert()not reassembling familyPR #3951: Call
Animation.finish()for animations in anAnimationGroupPR #4013: Fixed scene skipping for
ManimConfig.upto_animation_numberset to 0PR #4089: Fixed bug with opacity of
ImageMobjectPR #4091: Fixed
VMobject.add_points_as_corners()to safely handle emptypointsparameter
Type Hints¶
PR #3751: Added typehints to
manim.utils.iterablesPR #3803: Added typings to
OpenGLMobjectPR #3902: fixed a wrong type hint in
Scene.restructure_mobjects()PR #3916: fixed type hint in
DrawBorderThenFill.interpolate_submobject()PR #3926: Fixed some typehints of
ParametricFunctionPR #3940: Fixed
np.float_tonp.float64while using numpy versions above 2.0PR #3961: Added typehints to
manim.mobject.geometryPR #3980: Added new
PointNDandPointND_Arraytype aliasesPR #3999: Add type annotations to
manim.utilsPR #4006: Stopped ignoring
manim.pluginserrors inmypy.iniPR #4007: Added typings to
manim.__main__PR #4027: Rename
InternalPoint3DtoPoint3D,Point3DtoPoint3DLikeand other point-related type aliasesPR #4038: Fixed type hint of
Scene.play()to allowMobject.animate
Internal Improvements and Automation¶
PR #3737: Fixed action for building downloadable documentation
PR #3761: Use
--py39-plusin pre-commitPR #3777: Add pyproject for ruff formatting
PR #3779: Switch pre-commit to use
rufffor lintingPR #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
subprocessinstead ofos.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
Dependencies¶
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
pyavversion