v0.19.0¶
- 日期:
2025年1月20日
主要变更¶
随着 Manim v0.19.0 的发布,我们在使 Manim 更易于安装方面取得了巨大进展!
此版本最大的变化之一是用 pyav
库替换了外部 ffmpeg
依赖。这意味着用户无需安装 ffmpeg
即可使用 Manim —— 他们只需 pip install manim
即可!
鉴于这一变化,我们还重写了安装文档,建议使用一个名为 uv 的新工具来安装 Manim。
注意
如果您之前通过 Homebrew、pip、Choco 或 Scoop 等方法安装了 Manim,请不要担心。这些方法仍然有效,并且没有被弃用。但是,现在推荐使用 uv 来安装 Manim。
贡献者¶
共有 54 人为本次发布贡献了力量。名字旁边带有“+”的人是首次贡献补丁。
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 +
此版本中包含的补丁已由以下贡献者审阅。
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]
合并的拉取请求¶
本次发布共合并了 138 个拉取请求。
亮点¶
- #3501:将外部
ffmpeg
依赖项替换为pyav
此更改消除了在使用 Manim 时需要将
ffmpeg
作为命令行工具的必要性。虽然pyav
技术上在内部也使用了ffmpeg
,但pyav
的维护者在其二进制 wheel 中分发了它。
- #3501:将外部
- #3930:完全重写了安装说明
由于移除了对外部
ffmpeg
依赖的需求,我们重新编写并极大简化了安装说明。考虑到用户编写的场景实际上是小型独立 Python 项目,新说明强烈建议使用 项目和依赖管理工具 uv 来确保一致且可复现的环境。
- #3967:增加了对 Python 3.13 的支持
这增加了对 Python 3.13 的支持,从而将当前支持的 Python 版本范围扩展到 3.9 – 3.13。
重大更改¶
- #3797:将
Code.styles_list
替换为Code.get_styles_list()
Code
类的styles_list
属性已被类方法Code.get_styles_list()
替换。此方法返回Code
的formatter_style
参数所有可用值的列表。
- #3797:将
- #3884:重命名与内置函数冲突的参数和变量
为了避免关键字参数与内置函数重名,对用户可见的函数进行了以下两项更改:
ManimColor.from_hex(hex=...)
现在是ManimColor.from_hex(hex_str=...)
Scene.next_section(type=...)
现在是Scene.next_section(section_type=...)
- #3922:从
Sector
构造函数中移除了inner_radius
和outer_radius
要构造一个
Sector
,您现在需要指定radius
(和angle
)。特别是,AnnularSector
仍然接受inner_radius
和outer_radius
参数。
- #3922:从
- #3964:允许
SurroundingRectangle
接受多个 Mobject 这改变了
SurroundingRectangle
的签名,使其接受 Mobject 序列而不是单个 Mobject。因此,以前可以作为位置参数指定的其他参数现在需要作为关键字参数指定。SurroundingRectangle(some_mobject, RED, 0.3) # raises error now SurroundingRectangle(some_mobject, color=RED, buff=0.3) # correct usage
- #3964:允许
新功能¶
#3148:为
CoordinateSystem.plot()
增加了colorscale
参数#3612:增加了三个动画,它们共同模拟了打字动画
#3754:为
Axes.coords_to_point()
和Axes.point_to_coords()
添加了@
简写#3876:添加了
Animation.set_default()
类方法#3903:保留 LaTeX 颜色命令的颜色
#3913:添加了
DVIPSNAMES
和SVGNAMES
调色板#3992:为
ManimColor
添加了变暗、变亮和对比方法#3997:为场景添加了时间属性(
Scene.time
)#4039:为
turn_animation_into_updater()
添加了delay
参数
改进¶
#3829:重写了
get_quadratic_approximation_of_cubic()
,以生成更平滑的动画曲线#3855:在
manim checkhealth
命令中记录示例场景的执行时间#3888:通过使用单独的线程将帧写入流,显著减少了渲染时间
#3890:改进了
DrawBorderThenFill
的错误消息#3901:将
Square.side_length
属性更改为属性(property)#3965:为
VMobject.scale()
添加了布尔参数scale_stroke
#3974:默认在 Google Colab 中嵌入视频
#3982:重构了
Animation
和Scene.wait()
的run_time
验证#4051:为
ManimColor
添加了__hash__
方法#4108:移除了
vectorized_mobject
中__all__
的重复声明
优化¶
#3766:创建并优化了 Bézier 分割函数,例如
manim.utils.bezier
中的partial_bezier_points()
#3767:优化了
manim.utils.bezier.get_smooth_cubic_bezier_handle_points()
#3960:优化了
manim.utils.bezier
中的interpolate()
和bezier()
修复的错误¶
#3706:修复了
Line.put_start_and_end_on()
,使其使用Arrow3D
的实际末端#3732:修复了 OpenGL
BackgroundRectangle.get_color()
中的无限循环#3756:修复了添加子对象时的断言并改进了错误消息
#3778:修复了
there_and_back_with_pause()
速率函数在不同pause_ratio
值下的行为#3790:修复了
get_nth_subpath()
函数期望 numpy 数组的问题#3832:在传递给 pydub 之前将音频文件转换为
.wav
格式#3680:修复了
config.background_opacity < 1
的行为#3839:修复了
ManimConfig.format
未更新电影文件扩展名的问题#3885:修复了
OpenGLMobject.invert()
未重新组装家族的问题#3951:为
AnimationGroup
中的动画调用Animation.finish()
#4013:修复了
ManimConfig.upto_animation_number
设置为 0 时场景跳过的问题#4089:修复了
ImageMobject
不透明度的问题#4091:修复了
VMobject.add_points_as_corners()
安全处理空points
参数的问题
类型提示¶
#3751:为
manim.utils.iterables
添加了类型提示#3803:为
OpenGLMobject
添加了类型注解#3902:修复了
Scene.restructure_mobjects()
中的一个错误类型提示#3916:修复了
DrawBorderThenFill.interpolate_submobject()
中的类型提示#3926:修复了
ParametricFunction
的一些类型提示#3940:修复了使用 numpy 2.0 以上版本时
np.float_
到np.float64
的问题#3961:为
manim.mobject.geometry
添加了类型提示#3980:添加了新的
PointND
和PointND_Array
类型别名#3999:为
manim.utils
添加了类型注解#4006:停止在
mypy.ini
中忽略manim.plugins
错误#4007:为
manim.__main__
添加了类型注解#4027:将
InternalPoint3D
重命名为Point3D
,将Point3D
重命名为Point3DLike
,以及其他与点相关的类型别名#4038:修复了
Scene.play()
的类型提示,以允许Mobject.animate
内部改进与自动化¶
#3737:修复了构建可下载文档的操作
#3761:在 pre-commit 中使用
--py39-plus
#3777:为 ruff 格式化添加 pyproject
#3779:将 pre-commit 切换为使用
ruff
进行 linting#3795:将 Pyupgrade 替换为 Ruff 规则
#3812:修复 MacOS LaTeX CI
#3853:在测试中将 tempconfig 更改为 config fixture
#3858:更新 Docker 以使用 ENV x=y 而不是 ENV x y
#3872:对 pytest 风格使用 ruff
#3873:使用 ruff 代替 flake8-simplify
#3877:修复 pre-commit linting
#3780:添加 Ruff Lint
#3781:在 git blame 中忽略 Ruff 格式
#3881:使用 ruff pydocstyle 规则标准化 docstrings
#3882:将 flake8-comprehensions 和 flake8-bugbear 更改为 ruff
#3887:修复 HSV PR 中的拼写错误
#3923:使用 Ruff pygrep 规则
#3925:在 README 上使用 Github Markdown
#3955:使用
subprocess
而不是os.system
。#3956:为 mp4 文件中的音频设置 AAC 编解码器,添加转码工具
#4069:在 Docker 镜像中包含 Noto 字体
#4102:从 Ruff 忽略规则中删除 PT004
依赖项¶
#3739:[pre-commit.ci] pre-commit 自动更新
#3746:将 tqdm 从 4.66.1 提升到 4.66.3
#3750:将 jinja2 从 3.1.3 提升到 3.1.4
#3776:将 requests 从 2.31.0 提升到 2.32.0
#3784:[pre-commit.ci] pre-commit 自动更新
#3794:[pre-commit.ci] pre-commit 自动更新
#3796:将 tornado 从 6.4 提升到 6.4.1
#3801:[pre-commit.ci] pre-commit 自动更新
#3809:[pre-commit.ci] pre-commit 自动更新
#3810:将 urllib3 从 2.2.1 提升到 2.2.2
#3823:[pre-commit.ci] pre-commit 自动更新
#3827:修复 docker 构建
#3834:[pre-commit.ci] pre-commit 自动更新
#3835:将 docker/build-push-action 从 5 提升到 6
#3841:将 certifi 从 2024.2.2 提升到 2024.7.4
#3844:[pre-commit.ci] pre-commit 自动更新
#3847:将 zipp 从 3.18.2 提升到 3.19.1
#3865:[pre-commit.ci] pre-commit 自动更新
#3880:[pre-commit.ci] pre-commit 自动更新
#3889:[pre-commit.ci] pre-commit 自动更新
#3895:锁定 poetry.lock
#3896:[pre-commit.ci] pre-commit 自动更新
#3904:[pre-commit.ci] pre-commit 自动更新
#3911:[pre-commit.ci] pre-commit 自动更新
#3918:[pre-commit.ci] pre-commit 自动更新
#3929:[pre-commit.ci] pre-commit 自动更新
#3931:将 cryptography 从 43.0.0 提升到 43.0.1
#3987:[pre-commit.ci] pre-commit 自动更新
#4023:将 tornado 从 6.4.1 提升到 6.4.2
#4035:[pre-commit.ci] pre-commit 自动更新
#4037:限制
pyav
版本