Changelog

Unreleased

Added

  • Added firebase_sync.html template to enable realtime slide syncing via Firebase Realtime Database, including a usage guide in the templates directory. @liuktc #638

  • Added support for named built-in templates. Now manim-slides convert accepts the template name without the full path. @liuktc #638

v5.6.0

Added

Chore

  • Changed default RevealJS version to 6.0.1. Updated the templates accordingly, and removed the use of minified versions, as they are no longer provided by the CDN. #618

Fixed

v5.5.4

Chore

Fixed

v5.5.3

Changed

  • Sort the scenes alphabetically when listing scenes (e.g., when prompting for scenes with manim-slides present). @msaadsbr #573

Chore

  • Update the comparison table in the README. #560

  • Update the template in the Customize your RevealJS slides section. #565

  • Fix spelling mistakes in the installation.md regarding Qt backend. @strniko #580

Fixed

  • Fixed black videos on macOS (Qt player) by forcing absolute paths for video files. @albertocasagrande #575

  • Pinned sphinx to <9 to avoid breakage with sphinx-click and the Sphinx v9 release. #581

  • Fixed bug cause when reading files from a path containing special characters. @candreuv #572

v5.5.2

Added

  • manim-slides render now exits with the same return code as the one returned by manim render or manimgl. @chrjabs #545

Chore

  • Moved docs and tests extras, as well as dev-dependencies, inside groups in dependency-groups. This could break existing code when using one of those extras, but as they were not part of the public API, we do not consider this to be a breaking change. #542

  • Added example in the research section of the gallery. @mmcilree #552

  • Added example in the school work section of the gallery. @casperalgera #556

  • Added example in the school work section of the gallery. @amstrdm #557

  • Fixed some tests that were failing. #550

  • Pinned setuptools<81 for manimgl extra, as setuptools>=81 dropped support for its API. #550

Fixed

  • Fixed potential import issue of ManimGL, importing manimlib will parse sys.argv to initialize the config, which can lead to surprising behavior when using the library with different command line arguments that are not meant to be used by ManimGL. #550

v5.5.1

Changed

  • HTML template now always includes the notes plugin so that the speaker view is always available. Previously, it was only included if the slides had notes. #538

  • Pressing SPACE key now pauses the slides, instead of skipping it. Previously, it was not possible to pause HTML slides, which can be very annoying when trying to explain something. #539

v5.5.0

Added

  • Added max_duration_before_split_reverse and num_processes class variables. #439

  • Added src = ... filepath argument to allow inserting external videos as slides. #526

Changed

  • Automatically split large video animations into smaller chunks for lightweight (and potentially faster) reversed animations generation. #439

Chore

  • Trimmed whitespaces in HTML template. #443

  • Bumped RevealJS’ version to 5.2 to allow video playing in speaker view. #536

v5.4.2

Fixed

  • Fixed start_skip_animations to actually pass argument to ManimCE, otherwise video animations were still rendered, just excluded from the final output. #524

v5.4.1

Added

  • Added start_skip_animations and stop_skip_animations methods. #523

v5.4.0

Added

Chore

  • Bumped Manim to >=0.19, as it fixed OpenGL renderer issue. #522

Fixed

  • Fixed OpenGL renderer having no partial movie files with Manim bindings. #522

  • Fixed ConvertExample example as manim>=0.19 changed the Code class. #522

v5.3.1

Fixed

  • Fixed HTML template to avoid missing slides when exporting with --one-file. @Rapsssito #515

v5.3.0

Added

  • Added CSS and JS inline for manim-slides convert if --offline and --one-file (-cone_file) are used for HTML output. @Rapsssito #505

Changed

  • Deprecate -cdata_uri in favor of -cone_file for manim-slides convert. @Rapsssito #505

  • Changed template to avoid micro-stuttering with --one-file in HTML presentation. @Rapsssito #508

v5.2.0

Changed

  • The info window is now only shown in presentations when there are multiple monitors. However, the --show-info-window option was added to manim-slides present to force the info window. When there are multiple monitors, the info window will no longer be on the same monitor as the main window, unless overridden. @taibeled #482

Chore

  • Bumped ManimGL to >=1.7.1, to remove conflicting dependencies with Manim’s. #499

  • Bumped ManimGL to >=1.7.2, to remove pyrr from dependencies, and to avoid complex code for supporting both 1.7.1 and >=1.7.2, as the latter includes many breaking changes. #506

v5.1.10

Added

  • Added --offline option to manim-slides convert for offline HTML presentations. #440

  • Added documentation to config option to manim-slides convert when using --show-config. #485

Changed

  • Allow multiple slide reverses by going backward @taibeled. #488

Fixed

  • Fixed PyAV issue by pinning its version to <14. A future release will contain a fix that supports both av>=14 and av<14, as their syntax differ, but the former doesn’t provide binary wheels for Python 3.9. #494

  • Fixed blank web page when converting multiple slides into HTML. #497

v5.1.9

Chore

  • Fixed failing docker builds. #481

v5.1.8

Added

  • Added manim-slides checkhealth command to easily obtain important information for debug purposes. #458

  • Added support for disable_caching and flush_cache options from Manim, and also the possibility to configure them through class options. #452

  • Added --to=zip convert format to generate an archive with HTML output and asset files. #470

Chore

  • Pinned rtoml==0.9.0 on Windows platforms, see #398, until samuelcolvin/rtoml#74 is solved. #432

  • Removed an old validation check that prevented setting loop=True with auto_next=True on next_slide() #445

  • Improved (and fixed) tests for Manim(GL), bumped minimal ManimCE version, improved coverage, and override dependency conflicts. #447

  • Improved issue templates. #456

  • Enhanced the error message when the slides folder does not exist. #462

  • Fixed deprecation warnings. #467

  • Documented potential fix for PPTX issue. #475

  • Changed project manager from Rye to uv. #476

Fixed

  • Fix combining assets from multiple scenes to avoid filename collision. #429

  • Fixed whitespace issue in default RevealJS template. #442

  • Fixed black screen issue on recent Qt versions and device loss detected, thanks to @taibeled! #465

Removed

  • Removed full-gl extra, because it does not make sense to ship both manimgl and manim together. #447

v5.1.7

Chore

  • Improved the CI for bumping the version and README rendering on PyPI. #425

v5.1.6

Added

  • Added options to skip the Manim Slides Sphinx directive. #423

Chore

  • Added an examples gallery. #422

v5.1.5

Chore

  • Added CI for broken HTML links and fixed, plus spell checking. #417

  • Create FAQ page and clear FAQ from README.md. #418

  • Used Rye instead of PDM for faster development. #420

Fixed

  • Fixed broken --show-config command. #419

v5.1.4

Added

  • Added audio output to manim-slides present. #382

Changed

  • Added --info-window-screen option and change --screen-number to not move the info window. #389

Chore

  • Created a favicon for the website/documentation. #399

  • Documented the Nixpkg installation. #404

  • Updated the default RevealJS version to 5.1.0. #412

  • Removed the opencv-python dependency. #415

Fixed

  • Fixed the retrieval of background_color with ManimCE. #414

  • Fixed #390 issue caused by empty media created by ManimCE. #416

v5.1.3

Chore

  • Fix link in documentation. #368

  • Warn users if not using recommended Qt bindings. #373

v5.1.2

Chore

  • Fix ReadTheDocs version flyout in iframes. #367

v5.1.1

Chore

  • Move documentation to ReadTheDocs for better versioning. #365

v5.1

Added

  • Added the --hide-info-window option to manim-slides present. #313

  • Added the manim-slides render command to render slides using correct Manim installation. #317

  • Added the playback-rate and reversed-playback-rate options to slide config. #320

  • Added the speaker notes option. #322

  • Added auto option for conversion format, which is the default. This is somewhat a breaking change, but changes to the CLI API are not considered to be very important. #325

  • Added return_animation option to slide animations self.wipe and self.zoom. #331

  • Created a Docker image, published on GitHub. #355

  • Added :template: and :config_options options to the Sphinx directive. #357

Modified

  • Modified the internal logic to simplify adding configuration options. #321

  • Remove reversed file assets when exporting to HTML, as it was not used. #336

Chore

  • Removed subrocess calls to FFmpeg with direct libav bindings using the av Python module. This should enhance rendering speed and security. #335

  • Changed build backend to PDM and reflected on docs. #354

  • Dropped Python 3.8 support. #350

  • Made Qt backend optional and support PyQt6 too. #350

  • Documentated how to create and use a custom HTML template. #357

v5

Prior to v5, there was no real CHANGELOG other than the GitHub releases, with most of the content automatically generated by GitHub from merged pull requests.

In an effort to better document changes, this CHANGELOG document is now created.

Added

  • Added the following option aliases to manim-slides present: -F and --full-screen for fullscreen, -H for --hide-mouse, and -S for --screen-number. #243

  • Added a full screen key binding (defaults to F) in the presenter. #243

  • Added support for including code from a file in Manim Slides Sphinx directive. #261

  • Added the manim_slides.slide.animation module and created the Wipe and Zoom classes, that return a new animation. #285

  • Added two environ variables, MANIM_API and FORCE_MANIM_API, to specify the MANIM_API to be used: manim and manimce will import manim, while manimgl and manimlib will import manimlib. If one of the two APIs is already imported, use FORCE_MANIM_API=1 to override this. #285

  • Added a working ThreeDSlide class compatible with manimlib. #285

  • Added loop option to Slide’s next_slide method. Calling next_slide will never fail anymore. #294

  • Added Slide.next_section for compatibility with manim’s Scene.next_section method. #295

  • Added --next-terminates-loop option to manim-slides present for turn a looping slide into a normal one, so that it ends nicely. This is useful to have a smooth transition with the next slide. #299

  • Added --playback-rate option to manim-slides present for testing purposes. #300

  • Added auto_next option to Slide’s next_slide method to automatically play the next slide upon terminating. Supported by present and convert --to=html commands. #304

Changed

  • Automatically concatenate all animations from a slide into one. This is a breaking change because the config file format is different from the previous one. For migration help, see associated PR. #242

  • Changed the player interface to only use PySide6, and not a combination of PySide6 and OpenCV. A few features have been removed (see removed section), but the new player should be much easier to maintain and more performant, than its predecessor. #243

  • Changed the slide config format to exclude unnecessary information. StypeType is removed in favor to one boolean loop field. This is a breaking change and one should re-render the slides to apply changes. #243

  • Renamed key bindings in the config. This is a breaking change and one should either manually rename them (see list below) or re-init a config. List of changes: CONTINUE to NEXT, BACK to PREVIOUS, and REWIND to REPLAY. #243

  • Conversion to HTML now uses Jinja2 templating. The template file has been modified accordingly, and old templates will not work anymore. This is a breaking change. #271

  • Bumped RevealJS’ default version to v4.6.1, and added three new themes. #272

  • Changed the logger such that make_logger is called at module import, and we do not use Manim’s logger anymore. #285

  • Changed Slide.wipe and Slide.zoom to automatically call self.play. This is a breaking change as calling self.play(self.wipe(...)) now raises an error (because None is not an animation). #285

  • Changed the manim_slides.slide module to contain submodules, i.e., slide.manim, slide.manimlib, slide.animation. Only slide.animation is part of the public API. Rules for choosing the Manim API (either manim or manimlib) has changed, and defaults to the currently imported module, with a preference for manim. #285

Fixed

  • Patched enums in manim_slides/convert.py to correctly call str’s __str__ method, and not the Enum one. This bug was discovered by @alexanderskulikov in #253, caused by Python 3.11’s change in how Enum work. #257.

  • Fixed potential non-existing parent path issue in manim convert’s destination path. #262

Removed

  • Removed --start-at-animation-number option from manim-slides present. #242

  • Removed the following options from manim-slides present: --resolution, --record-to, --resize-mode, and --background-color. #243

  • Removed PERF verbosity level because not used anymore. #245

  • Remove Slide’s method start_loop and self.end_loop in favor to self.next_slide(loop=True). This is a breaking change. #294