Manim-slides presentation framework with a generated web portal.
Project description
Simplex
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, andAnimation. - Use
manim-simplexslide bases, layout regions, theme tokens, and mobjects. - Organize decks under
decks/with a smalldeck.toml. - Build a static portal with deck pages, notes, citations, math rendering, thumbnails, RevealJS playback, 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. Both manim-simplex and
simplex-web intentionally use a PEP 420 namespace package so their modules
merge at runtime.
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 = "dastimator_dark"
quality = "high_quality"
entrypoints = ["slides.intro:Intro"]
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.slides import BaseSlide
from simplex.theme.context import 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.
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_URLSIMPLEX_GA_TAGSIMPLEX_BRANDSIMPLEX_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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file simplex_web-0.2.2.tar.gz.
File metadata
- Download URL: simplex_web-0.2.2.tar.gz
- Upload date:
- Size: 672.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dcec958ac39480d8de4a871569ae213861a9383c694621ee90051c341146245
|
|
| MD5 |
af8e0ea0797922b38890c66c9b76c16c
|
|
| BLAKE2b-256 |
80fda75d443737e34826fa14b76e55add7c9ee547c98bd6a675e5907461a3d31
|
Provenance
The following attestation bundles were made for simplex_web-0.2.2.tar.gz:
Publisher:
publish.yml on shlomi-perles/simplex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simplex_web-0.2.2.tar.gz -
Subject digest:
3dcec958ac39480d8de4a871569ae213861a9383c694621ee90051c341146245 - Sigstore transparency entry: 1625262375
- Sigstore integration time:
-
Permalink:
shlomi-perles/simplex@f1108463791109e05c3849b87fb071bda37ff338 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/shlomi-perles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f1108463791109e05c3849b87fb071bda37ff338 -
Trigger Event:
push
-
Statement type:
File details
Details for the file simplex_web-0.2.2-py3-none-any.whl.
File metadata
- Download URL: simplex_web-0.2.2-py3-none-any.whl
- Upload date:
- Size: 682.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab2f18ebfc0f409bdd36ae2ae9cf821b17e2b438a1bacc065aecc6263b83a30b
|
|
| MD5 |
20f52ca725e6cc3d863d8ab38886d815
|
|
| BLAKE2b-256 |
63ffea4f3d2422450f57359ca0935567f98d41fdbf90c90d273111949ea79393
|
Provenance
The following attestation bundles were made for simplex_web-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on shlomi-perles/simplex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simplex_web-0.2.2-py3-none-any.whl -
Subject digest:
ab2f18ebfc0f409bdd36ae2ae9cf821b17e2b438a1bacc065aecc6263b83a30b - Sigstore transparency entry: 1625262416
- Sigstore integration time:
-
Permalink:
shlomi-perles/simplex@f1108463791109e05c3849b87fb071bda37ff338 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/shlomi-perles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f1108463791109e05c3849b87fb071bda37ff338 -
Trigger Event:
push
-
Statement type: