Skip to main content

Manim-slides presentation framework with a generated web portal.

Project description

Simplex

PyPI version Python CI License

Simplex is a Manim presentation workflow with a generated static web portal. Write normal Manim scenes, mark slide boundaries with manim-slides, and let Simplex render the deck, reconcile slide metadata, build thumbnails, render notes, and publish a browsable site.

The PyPI distribution is simplex-web. It installs the simplex command and imports into the simplex.* namespace.

Why Simplex?

  • Author scenes with standard Manim objects such as MathTex, VGroup, Axes, and Animation.
  • Use manim-simplex slide bases, layout regions, theme tokens, and mobjects.
  • Organize decks under decks/ with a small deck.toml.
  • Build a static portal with deck pages, notes, citations, math rendering, thumbnails, RevealJS playback, title-based PDF downloads, and optional live reload.
  • Keep the rendered video frames clean; navigation chrome lives in the web viewer where it can be changed without re-rendering videos.

Packages

Simplex is split into a small toolkit:

Repository PyPI Purpose
manim-simplex manim-simplex Manim plugin, themes, slide bases, mobjects, and manifest schema.
simplex simplex-web CLI, deck discovery, render orchestration, static portal builder.
simplex-lectures-template - Starter lectures repository.

The import namespace is still simplex. manim-simplex provides the top-level authoring facade (from simplex import BaseSlide, Caption), while simplex-web contributes CLI and site-builder modules such as simplex.web.

Requirements

  • Python 3.13 or newer
  • FFmpeg
  • A LaTeX distribution
  • Manim's native dependencies, including Cairo and Pango on Linux

Typical system packages:

# Ubuntu / Debian
sudo apt-get install texlive-latex-extra texlive-fonts-recommended ffmpeg \
                     libcairo2-dev libpango1.0-dev
# Windows
winget install MiKTeX.MiKTeX
winget install Gyan.FFmpeg

After installation, run:

simplex doctor

Install

pip install simplex-web

With uv:

uv add simplex-web

For local development in this repository:

uv sync
uv run simplex doctor

Quick Start

Create a new deck in an existing project:

simplex new algorithms/hash-tables
simplex render hash-tables
simplex build
simplex serve

Then open:

http://localhost:8000

To start from the GitHub template instead:

simplex init my-lectures
cd my-lectures
simplex new first-deck
simplex build
simplex serve

Deck Layout

simplex new hash-tables creates a deck like this:

decks/hash-tables/
|-- deck.toml
|-- manim.cfg
|-- notes.md
|-- refs.bib
|-- assets/
`-- slides/
    |-- __init__.py
    `-- intro.py

The important fields in deck.toml are:

slug = "hash-tables"
title = "Hash Tables"
summary = "A one-line deck summary."
theme = "simplex_dark"
quality = "high_quality"
entrypoints = ["slides.intro:Intro", "slides.intro:KeyIdea"]

[slides."Key Idea"]
notes_anchor = "key-idea"

entrypoints points to scene classes inside the deck directory. Legacy scenes = ["Intro"] is still accepted for single-file slides.py decks, but entrypoints is the preferred layout.

Authoring Slides

A scene is ordinary Manim plus the Simplex slide base:

from manim import DOWN, ORIGIN, Tex, Write

from simplex import BaseSlide, get_active_theme


class Intro(BaseSlide):
    def construct(self) -> None:
        theme = get_active_theme()

        title = Tex("Hello, Simplex", font_size=theme.typography.h1)
        self.region.place(title, ORIGIN)

        subtitle = Tex(r"$e^{i\pi} + 1 = 0$", font_size=theme.typography.h2)
        subtitle.next_to(title, DOWN, buff=0.4)

        self.play(Write(title), Write(subtitle))
        self.next_slide()

BaseSlide comes from manim-simplex. It provides the default theme, bounded layout region, slide lifecycle helpers, and section metadata used by the web builder.

Notes And Site

Each deck can include notes.md. The site builder renders Markdown notes, inline math, display math, citations from refs.bib, and slide references. Prefer label-based slide refs such as [slide:key-idea]; numeric refs still work for quick drafts. When a TeX engine is available, builds also emit <title>-note.pdf for the deck download menu.

Theorem-style notes use Markdown blockquotes with TeX labels. Write > **Theorem.** \label{thm:first} and reference it with \ref{thm:first} or \autoref{thm:first}; the web preview numbers it automatically and the notes PDF emits matching amsthm environments.

Site-wide options live in site.toml:

brand = "Simplex"
tagline = "Manim presentations, rendered."

nav = [
  { label = "Decks", href = "/" },
  { label = "GitHub", href = "https://github.com/shlomi-perles/simplex" },
]

Links labeled GitHub are shown as the footer GitHub icon, next to the Built with Simplex mark.

Deployment-only settings are read from environment variables:

  • SIMPLEX_BASE_URL
  • SIMPLEX_GA_TAG
  • SIMPLEX_BRAND
  • SIMPLEX_PREVIEW

CLI

Command Purpose
simplex new <slug> Create decks/<slug>/ from the bundled template.
simplex new <section>/<slug> Create a deck inside a named section.
simplex init [dir] Create a lectures repo from the GitHub template.
simplex render <slug> Render one deck into site/decks/<slug>/.
simplex render <slug>::<Scene> Render one scene from a deck.
simplex build Render decks and build the static portal under site/.
simplex build --no-render Rebuild portal HTML from existing render output.
simplex serve [--watch] Serve site/ locally, optionally with live reload.
simplex test Smoke-render decks by rendering only the first animation.
simplex clean Remove generated site/ and media/ output.
simplex doctor Check required binaries on PATH.

Development

git clone https://github.com/shlomi-perles/simplex.git
cd simplex
uv sync
uv run ruff check .
uv run ruff format --check .
uv run basedpyright
uv run pytest -q

The release workflow uses GitHub Actions Trusted Publishing to upload simplex-web to PyPI. No PyPI API token is stored in the repository.

License

MIT.

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

simplex_web-0.2.4.tar.gz (682.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simplex_web-0.2.4-py3-none-any.whl (690.5 kB view details)

Uploaded Python 3

File details

Details for the file simplex_web-0.2.4.tar.gz.

File metadata

  • Download URL: simplex_web-0.2.4.tar.gz
  • Upload date:
  • Size: 682.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for simplex_web-0.2.4.tar.gz
Algorithm Hash digest
SHA256 c1eb136c7a014bee27ee48b8157558a1aa0f3f06f1d4e0c178719eef64a66294
MD5 6d98519222d2668ff517570d984be930
BLAKE2b-256 9b37e19194618ad1d6f7d2de025b7cecc6c71e034cef28eef042fdcd2483adc4

See more details on using hashes here.

Provenance

The following attestation bundles were made for simplex_web-0.2.4.tar.gz:

Publisher: publish.yml on shlomi-perles/simplex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simplex_web-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: simplex_web-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 690.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for simplex_web-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9727a29ee0a90710c55d3e0d0fcf3d722cddda860491b1618099af435a3c2297
MD5 ad0ba1dd7d09ae9b45c6d9336ccf48d9
BLAKE2b-256 d5379dc81c7de50ab4a71fd955c025afa4a26971d517449e7f29bad584ab9d01

See more details on using hashes here.

Provenance

The following attestation bundles were made for simplex_web-0.2.4-py3-none-any.whl:

Publisher: publish.yml on shlomi-perles/simplex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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