Skip to main content

Configuration-based HTML presentation producer using Manim.

Project description

Manim present

This a template for manim-based presentations that is manipulated by a YAML configuration file. Mainly geared towards AI agents interactions. The outcome is an HTML presentation with metadata put in a package.json file.

[!NOTE] Producing fancy but linear presentations with this tool should be easy and requires no Python coding. But this is at very early stages of development, so expect things change frequently

manim-present repository provides an example presentation to showcase implemented features, but here are some design principles:

  1. The presentation flow is mostly linear. Often, the last rendered item is used as an anchor for the next one.
  2. The presentation layout is kept lean and clean; with a title and a logo at the top, and a footer that has author, date and the event description.
  3. You can segment the YAML configuration, as long as you include all relevant files in the main one:
    • It's recommended to configure Title and Thanks pages through a meta/config.yaml
    • It's also recommended to put default styling values in a default_styling/config.yaml
  4. The YAML configuration supports python code as values when it makes sense.
    • For example; an angle in radians can be set to angle: "PI/4"
    • And there is some special templating for important parameters:
      • {{ title }} refers to the slide's title
      • {{ last }} refers to last rendered item
      • {{ small_size }}, {{ mid_size }} and {{ big_size }} can be used for font size settings
  5. The YAML configuration supports two modes of slide population:
    • content through pre-defined steps listed below
    • hook which can read custom-made python functions to render Manim objects.
  6. If footer.slide_counter configuration item is True, a slide counter over the total count of slides will be displayed. It is recommended to keep this as False (default) and turn it on as the last iteration on the presentation. If this setting is turned on, there will be excessive re-rendering (cached animations get invalidated because the total number of slides changes as you add more). It gets increased on each reset_step.

The content steps

Content slides are composed by steps:

  • code: rendering code listings, supporting multi-step code reveals through modifications to specific code lines.
  • custom: accepts single-line python manim-like code to produce Mobjects to render
  • diagram: mostly-linear diagramming through rectangle nodes which can be grouped.
  • image: media rendering for raster image formats; from the images folder.
  • items: similar to Latex's enumerate, but needs an anchor object for positioning, with partial weighting and coloring
  • mathtex: a Tex environment specifically for math mode. This is similar to tex.
  • plot: simple scatter or line (or both) plotting. CSV files loaded from a data folder.
  • reset: resets the slide, keeping layout elements.
  • svg: media rendering for SVG objects, recommended for symbols and vector logos.
  • tex: Latex rendering, recommended only for equations.
  • text: simple text rendering, controlling font size and text color, with partial weighting and coloring
  • video: renders an MP4 file and can set its playback speed and control its rendered height. Video duration is automatically deduced using the ffmpeg package. Video files are stored in the images folder.

All slide components adhere to a common position scheme (These translate to Manim, in this order):

  • align_to: to align two objects in a direction. The target object can be the {{ last }} rendered item.
  • next_to: moves the object next to the target, and applies a translation in specified direction
  • shift: moves the object by the input vector (eg. 2*UP+RIGHT will move the object by (1, 2) units)
  • rotate: rotates an object around an axis (Z-axis by default) by an input angle (in radians)

The hooks system

# config.yaml
slides:
  - title: A slide made with a hook function
    number: "1.0"
    hook:
      name: section0 # arbitrary name
      filename: hooks/section0.py # python file that defines example_slide()
      functions: example_slide

This configuration will look for hooks/section0.py file and load-in the example_slide function. The example_slide function should look like:

# hooks/section0.py
SOME_LOCAL_VAR = True
# self: is the presentation class
# cfg: is the hook configuration from config.yaml
# so, cfg.name, cfg.filename, and cfg.functions are reserved
# context: is the local context for the hook function 
def example_slide(self, cfg, context):
    var = context.get("SOME_LOCAL_VAR")
    txt = Text(f"VAR was {var} here")
    self.play(FadeIn(txt, run_time=self.fadein_rt))
    self.next_slide()

There are a few important notes for writing hooks:

  • You get a Group of objects in self.layout including title (index 0), logo, and footer elements
  • If you want to remove everything on a slide but keep the layout, call self.keep_only_objects(self.layout)
  • Don't forget to set the run_time property for every animation you construct for a consistent behavior

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

manim_present-0.0.6.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

manim_present-0.0.6-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file manim_present-0.0.6.tar.gz.

File metadata

  • Download URL: manim_present-0.0.6.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for manim_present-0.0.6.tar.gz
Algorithm Hash digest
SHA256 d4556e5d93d13b60f7cb28eeada4bbdf82c0eef9f37ada09b721381a0c1e7031
MD5 f6eb6148f27a543ee24c5fe074e32122
BLAKE2b-256 854770cdf1444d0465670cf7f38360db95c30c065581f3ccd7f7ad3f911e14f2

See more details on using hashes here.

File details

Details for the file manim_present-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for manim_present-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b62d9185c3663b0b486b42ce9d569578b1132c4614b53850e5ceac6bb49ddaa8
MD5 1661f948836ee81bdebf63c5fff7cbb9
BLAKE2b-256 337d525aa3866733533badc9251b273939901b3a6c313696d652269330badae3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page