Skip to content

Commit d1eea48

Browse files
behacklpre-commit-ci[bot]chopan050
authored
Prepare new release, v0.20.0 (#4599)
* fix: resolve parameter shadowing bug in release script changelog command * chore: bump version to v0.20.0, regenerate lockfile, update citation * generate v0.20.0 changelog, first round * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * a bit of copyediting, second pass * include newly merged PR, apply suggestions from review * Update docs/source/changelog/0.20.0-changelog.md Co-authored-by: Francisco Manríquez Novoa <49853152+chopan050@users.noreply.github.com> --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Francisco Manríquez Novoa <49853152+chopan050@users.noreply.github.com>
1 parent 9504757 commit d1eea48

6 files changed

Lines changed: 100 additions & 8 deletions

File tree

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ authors:
44
-
55
name: "The Manim Community Developers"
66
cff-version: "1.2.0"
7-
date-released: 2026-01-17
7+
date-released: 2026-02-20
88
license: MIT
99
message: "We acknowledge the importance of good software to support research, and we note that research becomes more valuable when it is communicated effectively. To demonstrate the value of Manim, we ask that you cite Manim in your work."
1010
title: Manim – Mathematical Animation Framework
1111
url: "https://www.manim.community/"
12-
version: "v0.19.2"
12+
version: "v0.20.0"
1313
...

docs/source/changelog.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ This page contains a list of changes made between releases.
77
.. toctree::
88
:maxdepth: 1
99

10+
changelog/0.20.0-changelog
1011
changelog/0.19.2-changelog
1112
changelog/0.19.1-changelog
1213
changelog/0.19.0-changelog
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
short-title: v0.20.0
3+
description: Changelog for v0.20.0
4+
---
5+
6+
# v0.20.0
7+
8+
Date
9+
: February 20, 2026
10+
11+
12+
## What's Changed
13+
### Breaking Changes 🚨
14+
* Fix `ImageMobject` 3D rotation/flipping and remove resampling algorithms `lanczos` (`antialias`), `box` and `hamming` by {user}`chopan050` in {pr}`4266`
15+
* Fix `YELLOW_C` and add `PURE_CYAN`, `PURE_MAGENTA` and `PURE_YELLOW` by {user}`chopan050` in {pr}`4562`
16+
17+
### Highlights 🌟
18+
* Rewrite MathTex to make it more robust regarding splitting by {user}`henrikmidtiby` in {pr}`4515`
19+
20+
The MathTex implementation has been updated to make it more robust and fix a number of issues.
21+
A beneficial side effect is that named groups in svg files can now be accessed through SVGMobject.
22+
23+
* Add new Animation Builder `Mobject.always` by {user}`JasonGrace2282` in {pr}`4594`
24+
25+
This new feature is a convenience wrapper around `add_updater` that allows adding
26+
updaters to a mobject in an intuitive and easy-to-read way. Example usage in a scene:
27+
```python
28+
d = Dot()
29+
s = Square()
30+
d.always.next_to(s, UP)
31+
self.add(s, d)
32+
self.play(s.animate.to_edge(LEFT))
33+
```
34+
35+
36+
### New Features ✨
37+
* Add a `seed` config option + `--seed` CLI option for reproducible randomness in rendered scenes by {user}`arnaud-ma` in {pr}`4532`
38+
39+
### Enhancements 🚀
40+
* Enable `strict=True` for `zip()` where safe by {user}`Oll-iver` in {pr}`4547`
41+
42+
### Bug Fixes 🐛
43+
* using `color` instead of `fill_color` with MathTeX for node labels by {user}`Schefflera-Arboricola` in {pr}`4501`
44+
* fix: infinite recursion caused by accessing color of a highlighted Ta… by {user}`BHearron` in {pr}`4435`
45+
* Prevent potential `UnboundLocalError` in `PolarPlane` by {user}`RinZ27` in {pr}`4557`
46+
* Fixed division by 0 in `turn_animation_into_updater` by {user}`SoldierSacha` in {pr}`4567`
47+
* Fix TOCTOU Race Conditions when creating directories by {user}`SoldierSacha` in {pr}`4587`
48+
* Resolve more race conditions potentially happening during directory creation by {user}`SoldierSacha` in {pr}`4589`
49+
* Fix `c2p`/`coords_to_point` method call with single flat list or 1D array input by {user}`danielalanbates` in {pr}`4596`
50+
51+
### Documentation 📚
52+
* Enable rendered documentation of `RandomColorGenerator` by {user}`arnaud-ma` in {pr}`4533`
53+
* Remove pin to Python 3.13 in installation docs by {user}`chopan050` in {pr}`4534`
54+
* Fix broken aquabeam OpenGL link using Wayback Machine by {user}`behackl` in {pr}`4545`
55+
* Add type annotations and docstrings in `opengl_renderer.py` by {user}`arnaud-ma` in {pr}`4537`
56+
* docs: improve `TransformFromCopy` docstring by {user}`GoThrones` in {pr}`4597`
57+
58+
### Infrastructure & Build 🔨
59+
* Install missing dependencies in release pipeline by {user}`behackl` in {pr}`4531`
60+
61+
### Code Quality & Refactoring 🧹
62+
* Rework and consolidate release changelog script, add previously skipped changelog entries by {user}`behackl` in {pr}`4568`
63+
* Remove `__future__.annotations` from required imports by {user}`JasonGrace2282` in {pr}`4571`
64+
* Cleaned up `mypy.ini` by {user}`henrikmidtiby` in {pr}`4584`
65+
* Add `py.typed` to declare manim as having type hints by {user}`Timmmm` in {pr}`4553`
66+
* Fix assertion in `ImageMobjectFromCamera.interpolate_color()` by {user}`chopan050` in {pr}`4593`
67+
* Reduce dependency on scipy - replace `scipy.special.comb` with `math.comb` by {user}`fmuenkel` in {pr}`4598`
68+
69+
### Type Hints 📝
70+
* Add type annotations to `rotation.py` by {user}`fmuenkel` in {pr}`4535`
71+
* Add type annotations to `opengl_compatibility.py` by {user}`fmuenkel` in {pr}`4585`
72+
* Add type annotations to `image_mobject.py` by {user}`henrikmidtiby` in {pr}`4458`
73+
* Add type annotations to `opengl_image_mobject.py` by {user}`fmuenkel` in {pr}`4536`
74+
* Add type annotations to `point_cloud_mobject.py` by {user}`fmuenkel` in {pr}`4586`
75+
76+
## New Contributors
77+
* {user}`arnaud-ma` made their first contribution in {pr}`4533`
78+
* {user}`Schefflera-Arboricola` made their first contribution in {pr}`4501`
79+
* {user}`BHearron` made their first contribution in {pr}`4435`
80+
* {user}`RinZ27` made their first contribution in {pr}`4557`
81+
* {user}`SoldierSacha` made their first contribution in {pr}`4567`
82+
* {user}`Oll-iver` made their first contribution in {pr}`4547`
83+
* {user}`GoThrones` made their first contribution in {pr}`4597`
84+
* {user}`danielalanbates` made their first contribution in {pr}`4596`
85+
86+
**Full Changelog**: [Compare view](https://github.com/ManimCommunity/manim/compare/v0.19.2...v0.20.0)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "manim"
3-
version = "0.19.2"
3+
version = "0.20.0"
44
description = "Animation engine for explanatory math videos."
55
authors = [
66
{name = "The Manim Community Developers", email = "contact@manim.community"},

scripts/release.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,15 +346,20 @@ def cli(ctx: click.Context, dry_run: bool) -> None:
346346
)
347347
@click.option("--head", default="main", help="Head ref for comparison (default: main)")
348348
@click.option("--title", help="Custom changelog title (default: vX.Y.Z)")
349-
@click.option("--update-citation", is_flag=True, help="Also update CITATION.cff")
349+
@click.option(
350+
"--update-citation",
351+
"also_update_citation",
352+
is_flag=True,
353+
help="Also update CITATION.cff",
354+
)
350355
@click.pass_context
351356
def changelog(
352357
ctx: click.Context,
353358
base: str,
354359
version: str,
355360
head: str,
356361
title: str | None,
357-
update_citation: bool,
362+
also_update_citation: bool,
358363
) -> None:
359364
"""Generate changelog for an upcoming release.
360365
@@ -375,7 +380,7 @@ def changelog(
375380
click.echo()
376381
click.secho("[DRY RUN]", fg="yellow", bold=True)
377382
click.echo(f" Would save: {CHANGELOG_DIR / f'{version}-changelog.md'}")
378-
if update_citation:
383+
if also_update_citation:
379384
click.echo(f" Would update: {CITATION_FILE}")
380385
click.echo()
381386
click.echo("--- Generated changelog ---")
@@ -385,7 +390,7 @@ def changelog(
385390
filepath = save_changelog(version, content)
386391
click.secho(f" ✓ Saved: {filepath}", fg="green")
387392

388-
if update_citation:
393+
if also_update_citation:
389394
citation_path = update_citation(version)
390395
click.secho(f" ✓ Updated: {citation_path}", fg="green")
391396

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)