From ca29979d3e98c568f65d2822149b731704fc05fe Mon Sep 17 00:00:00 2001 From: krassowski Date: Wed, 22 May 2019 16:10:54 +0100 Subject: [PATCH] Initial commit --- README.md | 70 ++++++++++++++- jupyter_manim/__init__.py | 155 ++++++++++++++++++++++++++++++++ requirements.txt | 2 + screenshots/cell_magic_demo.png | Bin 0 -> 57019 bytes setup.cfg | 2 + setup.py | 49 ++++++++++ 6 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 jupyter_manim/__init__.py create mode 100644 requirements.txt create mode 100644 screenshots/cell_magic_demo.png create mode 100644 setup.cfg create mode 100644 setup.py diff --git a/README.md b/README.md index 05fae52..b2a8571 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,70 @@ # jupyter-manim -%%mainm cell magic for IPython/Jupyter to show the output video +[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://choosealicense.com/licenses/mit/) + + +Integrates [manim](https://github.com/3b1b/manim) (animation engine for explanatory math videos) +with Jupyter displaying the resulting video when using `%%manim` cell magic to wrap a scene definition. + +### Quick preview + + + +The code in the example above comes from the excellent [manim tutorial](https://github.com/malhotra5/Manim-Tutorial). + +### Installation + +```sh +pip3 install jupyter-manim +``` + +### Usage + +Your arguments will be passed to manim, exactly as if these were command line options. + +For example, to render scene defined with class `Shapes(Scene)` use + +```python +%%manim Shapes +from manimlib.scene.scene import Scene +from manimlib.mobject.geometry import Circle +from manimlib.animation.creation import ShowCreation + +class Shapes(Scene): + + def construct(self): + circle = Circle() + self.play(ShowCreation(circle)) +``` + +NOTE: currently the code has to be self-contained as it will be run in a separate namespace. +Thus, all the imports have to be contained in your cell. + +In future, an option to export the current namespace (or specific variables) will be added. +It could be implemented by pickling the Python locals and globals and then pre-pending the cell with an un-pickling script (PRs welcome!). + +In the latest version of manimlib (not yet released) you will be able to import everything at once using: + +```python +from manimlib.imports import * +``` + + +To display manim help and options use: + +``` +%%manim -h +pass +``` + + + +The `%%manim` magic (by default) hides the progress bars as well as other logging messages generated by manim. +You can disable this behaviour using `--verbose` flag + +#### Video player control options + + - `--no-control` - hides the controls + - `--no-autoplay` - disables the autoplay feature + - `-r` or `--resolution` - control the height and width of the video player; + this option is shared with manim and requires the resolution in following format: + `height,width`, e.g. `%%manim Shapes -r 200,1000` diff --git a/jupyter_manim/__init__.py b/jupyter_manim/__init__.py new file mode 100644 index 0000000..2426ce8 --- /dev/null +++ b/jupyter_manim/__init__.py @@ -0,0 +1,155 @@ +from IPython.core.magic import Magics, magics_class, cell_magic +from unittest.mock import patch +from tempfile import NamedTemporaryFile +import manimlib +from IPython.display import HTML +import sys +from io import StringIO +from contextlib import ExitStack, suppress, redirect_stdout, redirect_stderr +from warnings import warn +from IPython import get_ipython +from pathlib import Path + +std_out = sys.stdout + + +def video(path, width=854, height=480, controls=True, autoplay=True): + return HTML(f""" + + """) + + +class StringIOWithCallback(StringIO): + + def __init__(self, callback, **kwargs): + super().__init__(**kwargs) + self.callback = callback + + def write(self, s): + super().write(s) + self.callback(s) + + +@magics_class +class ManimMagics(Magics): + path_line_start = 'File ready at ' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.defaults = { + 'autoplay': True, + 'controls': True, + 'silent': True, + 'width': 854, + 'height': 480 + } + + video_settings = {'width', 'height', 'controls', 'autoplay'} + magic_off_switches = { + 'verbose': 'silent', + 'no-controls': 'controls', + 'no-autoplay': 'autoplay' + } + + @cell_magic + def manim(self, line, cell): + # execute the code - won't generate any video, however it will introduce + # the variables into the notebook's namespace (enabling autocompletion etc); + # this also allows users to get feedback on some code errors early on + get_ipython().ex(cell) + + user_args = line.split(' ') + + # path of the output video + path = None + + settings = self.defaults.copy() + + # disable the switches as indicated by the user + for key, arg in self.magic_off_switches.items(): + if '--' + key in user_args: + user_args.remove('--' + key) + settings[arg] = False + + resolution_index = ( + user_args.index('-r') if '-r' in user_args else + user_args.index('--resolution') if '--resolution' in user_args else + None + ) + if resolution_index is not None: + # the resolution is passed as "height,width" + try: + h, w = user_args[resolution_index + 1].split(',') + settings['height'] = h + settings['width'] = w + except (IndexError, KeyError): + warn('Unable to retrieve dimensions from your resolution setting, falling back to the defaults') + + silent = settings['silent'] + + def catch_path_and_forward(lines): + nonlocal path + for line in lines.split('\n'): + if not silent: + print(line, file=std_out) + + if line.startswith(self.path_line_start): + path = line[len(self.path_line_start):].strip() + + with NamedTemporaryFile('w', suffix='.py') as f: + f.write(cell) + f.flush() + + args = ['manim', f.name, *user_args] + + stdout = StringIOWithCallback(catch_path_and_forward) + + with ExitStack() as stack: + + enter = stack.enter_context + + enter(patch.object(sys, 'argv', args)) + enter(suppress(SystemExit)) + enter(redirect_stdout(stdout)) + + if silent: + stderr = StringIO() + enter(redirect_stderr(stderr)) + + manimlib.main() + + if path: + path = Path(path) + assert path.exists() + + # To display a video in Jupyter, we need to have access to it + # so it has to be within the working tree. The absolute paths + # are usually outside of the accessible range. + relative_path = path.relative_to(Path.cwd()) + + video_settings = { + k: v + for k, v in settings.items() + if k in self.video_settings + } + + return video(relative_path, **video_settings) + else: + warn('Could not find path in the manim output') + + # If we were silent, some errors could have been silenced too. + if silent: + # Let's break the silence: + print(stdout.getvalue()) + print(stderr.getvalue(), file=sys.stderr) + + +ip = get_ipython() +ip.register_magics(ManimMagics) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8d85f5c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +IPython +manimlib diff --git a/screenshots/cell_magic_demo.png b/screenshots/cell_magic_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..98f23ec0d8f7f158b5915bdd3b14741fa0dcd48f GIT binary patch literal 57019 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