diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d92cc048e0..d432c948a2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-toml name: Validate Poetry - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.1 + rev: v0.9.2 hooks: - id: ruff name: ruff lint diff --git a/.readthedocs.yml b/.readthedocs.yml index afc76e5597..9b66a51cf3 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,4 +1,8 @@ version: 2 + +sphinx: + configuration: docs/source/conf.py + build: os: ubuntu-22.04 diff --git a/CITATION.cff b/CITATION.cff index 9bce914e14..9f5fd91613 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,10 +4,10 @@ authors: - name: "The Manim Community Developers" cff-version: "1.2.0" -date-released: 2024-04-28 +date-released: 2025-01-20 license: MIT 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." title: Manim – Mathematical Animation Framework url: "https://www.manim.community/" -version: "v0.18.1" +version: "v0.19.0" ... diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index f2afb6cfd8..2e99ef32cb 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -9,6 +9,7 @@ releases since v0.18.0) are documented on our .. toctree:: + changelog/0.19.0-changelog changelog/0.18.0-changelog changelog/0.17.3-changelog changelog/0.17.2-changelog diff --git a/docs/source/changelog/0.19.0-changelog.rst b/docs/source/changelog/0.19.0-changelog.rst new file mode 100644 index 0000000000..f0ff567f5b --- /dev/null +++ b/docs/source/changelog/0.19.0-changelog.rst @@ -0,0 +1,587 @@ +******* +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 :ref:`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 + +* F. 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 ``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. + + +* :pr:`3518`: Created a :class:`.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 :class:`.HSV` for a practical example. + + +* :pr:`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. + + +* :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. + + +* :pr:`3966`: :class:`.VGroup` can now be initialized with :class:`.VMobject` iterables + Groups of Mobjects can now be created by passing an iterable to the :class:`.VGroup` + constructors:: + + my_group = VGroup(Dot() for _ in range(10)) + + +Breaking changes +---------------- + +* :pr:`3797`: Replaced ``Code.styles_list`` with :meth:`.Code.get_styles_list` + The ``styles_list`` attribute of the :class:`.Code` class has been replaced with + a class method :meth:`.Code.get_styles_list`. This method returns a list of all + available values for the ``formatter_style`` argument of :class:`.Code`. + + +* :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 now ``ManimColor.from_hex(hex_str=...)`` + - ``Scene.next_section(type=...)`` is now ``Scene.next_section(section_type=...)`` + + +* :pr:`3922`: Removed ``inner_radius`` and ``outer_radius`` from :class:`.Sector` constructor + To construct a :class:`.Sector`, you now need to specify a ``radius`` (and an ``angle``). + In particular, :class:`.AnnularSector` still accepts both ``inner_radius`` and ``outer_radius`` + arguments. + + +* :pr:`3964`: Allow :class:`.SurroundingRectangle` to accept multiple Mobjects + This changes the signature of :class:`.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 + + +* :pr:`4115`: Completely rewrite the implementation of the :class:`.Code` mobject + This includes several breaking changes to the interface of the class to make it + more consistent. See the documentation of :class:`.Code` for 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. + + +New features +------------ + +* :pr:`3148`: Added a ``colorscale`` argument to :meth:`.CoordinateSystem.plot` + + +* :pr:`3612`: Add three animations that together simulate a typing animation + + +* :pr:`3754`: Add ``@`` shorthand for :meth:`.Axes.coords_to_point` and :meth:`.Axes.point_to_coords` + + +* :pr:`3876`: Add :meth:`.Animation.set_default` class method + + +* :pr:`3903`: Preserve colors of LaTeX coloring commands + + +* :pr:`3913`: Added :mod:`.DVIPSNAMES` and :mod:`.SVGNAMES` color palettes + + +* :pr:`3933`: Added :class:`.ConvexHull`, :class:`.ConvexHull3D`, :class:`.Label` and :class:`.LabeledPolygram` + + +* :pr:`3992`: Add darker, lighter and contrasting methods to :class:`.ManimColor` + + +* :pr:`3997`: Add a time property to scene (:attr:`.Scene.time`) + + +* :pr:`4039`: Added the ``delay`` parameter to :func:`.turn_animation_into_updater` + + +Enhancements +------------ + +* :pr:`3829`: Rewrite :func:`~.bezier.get_quadratic_approximation_of_cubic` to produce smoother animated curves + + +* :pr:`3855`: Log execution time of sample scene in the ``manim checkhealth`` command + + +* :pr:`3888`: Significantly reduce rendering time with a separate thread for writing frames to stream + + +* :pr:`3890`: Better error messages for :class:`.DrawBorderThenFill` + + +* :pr:`3893`: Improve line rendering performance of :class:`.Cylinder` + + +* :pr:`3901`: Changed :attr:`.Square.side_length` attribute to a property + + +* :pr:`3965`: Added the ``scale_stroke`` boolean parameter to :meth:`.VMobject.scale` + + +* :pr:`3974`: Made videos embedded in Google Colab by default + + +* :pr:`3982`: Refactored ``run_time`` validation for :class:`.Animation` and :meth:`.Scene.wait` + + +* :pr:`4017`: Allow animations with ``run_time=0`` and implement convenience :class:`.Add` animation + + +* :pr:`4034`: Draw more accurate circular :class:`.Arc` mobjects for large angles + + +* :pr:`4051`: Add ``__hash__`` method to :class:`.ManimColor` + + +* :pr:`4108`: Remove duplicate declaration of ``__all__`` in :mod:`.vectorized_mobject` + + +Optimizations +------------- + +* :pr:`3760`: Optimize :meth:`.VMobject.pointwise_become_partial` + + +* :pr:`3765`: Optimize :class:`.VMobject` methods which append to ``points`` + + +* :pr:`3766`: Created and optimized Bézier splitting functions such as :func:`~.utils.bezier.partial_bezier_points()` in :mod:`manim.utils.bezier` + + +* :pr:`3767`: Optimized :func:`manim.utils.bezier.get_smooth_cubic_bezier_handle_points()` + + +* :pr:`3768`: Optimized :func:`manim.utils.bezier.is_closed` + + +* :pr:`3960`: Optimized :func:`~.bezier.interpolate` and :func:`~.bezier.bezier` in :mod:`manim.utils.bezier` + + + +Fixed bugs +---------- + +* :pr:`3706`: Fixed :meth:`.Line.put_start_and_end_on` to use the actual end of an :class:`.Arrow3D` + + +* :pr:`3732`: Fixed infinite loop in OpenGL :meth:`.BackgroundRectangle.get_color` + + +* :pr:`3756`: Fix assertions and improve error messages when adding submobjects + + +* :pr:`3778`: Fixed :func:`.there_and_back_with_pause` rate function behaviour with different ``pause_ratio`` values + + +* :pr:`3786`: Fix :class:`.DiGraph` edges not fading correctly on :class:`.FadeIn` and :class:`.FadeOut` + + +* :pr:`3790`: Fixed the :func:`.get_nth_subpath` function expecting a numpy array + + +* :pr:`3832`: Convert audio files to ``.wav`` before passing to pydub + + +* :pr:`3680`: Fixed behavior of ``config.background_opacity < 1`` + + +* :pr:`3839`: Fixed :attr:`.ManimConfig.format` not updating movie file extension + + +* :pr:`3885`: Fixed :meth:`.OpenGLMobject.invert` not reassembling family + + +* :pr:`3951`: Call :meth:`.Animation.finish` for animations in an :class:`.AnimationGroup` + + +* :pr:`4013`: Fixed scene skipping for :attr:`ManimConfig.upto_animation_number` set to 0 + + +* :pr:`4089`: Fixed bug with opacity of :class:`.ImageMobject` + + +* :pr:`4091`: Fixed :meth:`.VMobject.add_points_as_corners` to safely handle empty ``points`` parameter + + +Documentation-related changes +----------------------------- + +* :pr:`3669`: Added a :mod:`manim.typing` guide + + +* :pr:`3715`: Added docstrings to Brace + + +* :pr:`3745`: Underline tag should be ```` in the documentation + + +* :pr:`3818`: Automatically document usages of :class:`typing.TypeVar` + + +* :pr:`3849`: Fix incorrect ``versionadded`` version number in plugin section in docs + + +* :pr:`3851`: Rename ``manim.typing.Image`` type aliases to :class:`.PixelArray` to avoid conflict with ``PIL.Image`` + + +* :pr:`3857`: Update installation instructions for MacOS (via dedicated brew formula) + + +* :pr:`3878`: Fixed typehint in ``types.rst`` and replaced outdated reference to ``manim.typing.Image`` with :class:`manim.typing.PixelArray` + + +* :pr:`3924`: Fix ``SyntaxWarning`` when building docs + use Python 3.13 for readthedocs build + + +* :pr:`3958`: Fix: ``.to_edge``'s example demonstration in docs + + +* :pr:`3972`: Refining documentations for :mod:`.moving_camera_scene` module + + +* :pr:`4032`: Bump version and create changelog for ``v0.19.0`` + + +* :pr:`4044`: Added support for autodocumenting type aliases that use the ``type`` syntax + + +* :pr:`4065`: Polish documentation of :mod:`.utils.color.core` and remove ``interpolate_array`` function + + +* :pr:`4077`: Update README and documentation landing page, improve way how 3b1b is credited + + +* :pr:`4100`: Add wavy square example to :class:`.Homotopy` + + +* :pr:`4107`: Corrected a typo in the deep dive guide + + +* :pr:`4116`: Fix broken link to Poetry installation in contribution docs + + +Type Hints +---------- + +* :pr:`3751`: Added typehints to :mod:`manim.utils.iterables` + + +* :pr:`3803`: Added typings to :class:`.OpenGLMobject` + + +* :pr:`3902`: fixed a wrong type hint in :meth:`.Scene.restructure_mobjects` + + +* :pr:`3916`: fixed type hint in :meth:`.DrawBorderThenFill.interpolate_submobject` + + +* :pr:`3926`: Fixed some typehints of :class:`.ParametricFunction` + + +* :pr:`3940`: Fixed ``np.float_`` to ``np.float64`` while using numpy versions above 2.0 + + +* :pr:`3961`: Added typehints to :mod:`manim.mobject.geometry` + + +* :pr:`3980`: Added new :class:`.PointND` and :class:`.PointND_Array` type aliases + + +* :pr:`3988`: Added type hints to :mod:`manim.cli` module + + +* :pr:`3999`: Add type annotations to :mod:`manim.utils` + + +* :pr:`4006`: Stopped ignoring :mod:`manim.plugins` errors in ``mypy.ini`` + + +* :pr:`4007`: Added typings to :mod:`manim.__main__` + + +* :pr:`4027`: Rename ``InternalPoint3D`` to :class:`~.typing.Point3D`, ``Point3D`` to :class:`~.Point3DLike` and other point-related type aliases + + +* :pr:`4038`: Fixed type hint of :meth:`.Scene.play` to allow :attr:`.Mobject.animate` + + +Internal Improvements and Automation +------------------------------------ + +* :pr:`3737`: Fixed action for building downloadable documentation + + +* :pr:`3761`: Use ``--py39-plus`` in pre-commit + + +* :pr:`3777`: Add pyproject for ruff formatting + + +* :pr:`3779`: Switch pre-commit to use ``ruff`` for linting + + +* :pr:`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 ``subprocess`` instead of ``os.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 ``pyav`` version diff --git a/docs/source/index.rst b/docs/source/index.rst index 11bf0d6bf8..d88eb9a854 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -22,7 +22,9 @@ in the right place! .. note:: Please be aware that there are different, incompatible versions of Manim available. - ManimCE was forked from 3b1b/manim, originally created and open-sourced by Grant Sanderson, creator of [3Blue1Brown](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw) educational math videos. + This version, the Community Edition of Manim (`ManimCE `_), + is a separate project maintained by the community, but it was forked from `3b1b/manim `_, + the original Manim created and open-sourced by Grant Sanderson, creator of `3Blue1Brown `_ educational math videos. Check our :ref:`installation FAQ ` to learn more! diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index fc4caae1ee..6ad3ece777 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -2309,6 +2309,31 @@ def split(self) -> list[Self]: return result + self.submobjects def get_family(self, recurse: bool = True) -> list[Self]: + """Lists all mobjects in the hierarchy (family) of the given mobject, + including the mobject itself and all its submobjects recursively. + + Parameters + ---------- + recurse + Just for consistency with get_family method in OpenGLMobject. + + Returns + ------- + list + A list of mobjects in the family of the given mobject. + + Examples + -------- + :: + + >>> from manim import Square, Rectangle, VGroup, Group, Mobject, VMobject + >>> s, r, m, v = Square(), Rectangle(), Mobject(), VMobject() + >>> vg = VGroup(s, r) + >>> gr = Group(vg, m, v) + >>> gr.get_family() + [Group, VGroup(Square, Rectangle), Square, Rectangle, Mobject, VMobject] + + """ sub_families = [x.get_family() for x in self.submobjects] all_mobjects = [self] + list(it.chain(*sub_families)) return remove_list_redundancies(all_mobjects) diff --git a/poetry.lock b/poetry.lock index 5fcae2825b..d93a272bc8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "alabaster" @@ -2894,13 +2894,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.50" description = "Library for building powerful interactive command lines in Python" optional = true -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, ] [package.dependencies] @@ -3058,13 +3058,13 @@ urllib3 = ">=1.26.0" [[package]] name = "pyglet" -version = "2.1.0" +version = "2.1.1" description = "pyglet is a cross-platform games and multimedia package." optional = false python-versions = ">=3.8" files = [ - {file = "pyglet-2.1.0-py3-none-any.whl", hash = "sha256:ed2ff5b9eeacf845d019f9768b01c811ebe167372dcb699146e59da2c4666e0b"}, - {file = "pyglet-2.1.0.tar.gz", hash = "sha256:50c5a82203f1ffd56990d225315035b37aacba7510f8f65c4b10a7301be788c8"}, + {file = "pyglet-2.1.1-py3-none-any.whl", hash = "sha256:30562bfe9971a9ebeb6bb826f2c0d1649dd3d41bc8109ecc103425621f54c802"}, + {file = "pyglet-2.1.1.tar.gz", hash = "sha256:47f49890a00e9fefc4d0ea74dc5b9d6b9be1c5455bb5746b2df118012cfa3124"}, ] [[package]] @@ -4825,4 +4825,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.9" -content-hash = "8be7f23224cbc3e1f01562c0a17e83deb11c7146862e332cd0d8f0dff54becde" +content-hash = "b2e04bd19d8d9cc94b4b3f09e36007460b06766274cc13feeddec10763ee6a70" diff --git a/pyproject.toml b/pyproject.toml index da095bbc0a..1e99f00a07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "manim" -version = "0.18.1" +version = "0.19.0" description = "Animation engine for explanatory math videos." authors = ["The Manim Community Developers ", "3b1b "] license="MIT" @@ -66,7 +66,7 @@ skia-pathops = ">=0.7.0" srt = ">=3.0.0" svgelements = ">=1.8.0" tqdm = ">=4.0.0" -typing-extensions = ">=4.0.0" +typing-extensions = ">=4.12.0" watchdog = ">=2.0.0" beautifulsoup4 = ">=4.12"