Manim-slides presentation framework with a generated web portal.
Project description
Simplex
A Manim-slides presentation framework with a generated web portal.
Authors write vanilla Manim (MathTex(...), VGroup(...).arrange(RIGHT)); Simplex configures defaults underneath via frozen theme tokens. A simplex new command scaffolds a new deck; simplex build renders every deck and produces a static portal for GitHub Pages.
The three repos
simplex is one of three packages that together make up the v0.2.0 toolkit:
| Repo | PyPI | Role |
|---|---|---|
manim-simplex |
manim-simplex |
The manim plugin: mobjects, theme, BaseSlide, the manim.plugins entry-point. |
simplex |
simplex-web |
The platform: CLI, deck discovery, render orchestration, web builder. Depends on manim-simplex. |
simplex-lectures-template |
-- | GitHub Template. Pre-wired user lectures repo. |
The PyPI slot simplex was already taken by an unrelated project, and PyPI's
name-similarity guard rejects short variants, so this distribution publishes
as simplex-web. The import name is still
simplex -- both wheels ship src/simplex/ without __init__.py and
Python's PEP 420 implicit namespace packages merge them at import time, so
from simplex.engine import Remove and from simplex.cli.commands import app
resolve regardless of which wheel ships the module.
Quick start
# Install from PyPI:
pip install simplex-web
# Bootstrap a fresh checkout (Linux / macOS):
./scripts/bootstrap.sh
# Or on Windows:
.\\scripts\\bootstrap.ps1
# Scaffold a new deck and render it:
uv run simplex new my-first-deck
uv run simplex render my-first-deck
# Generate the portal and preview it locally:
uv run simplex build
uv run simplex serve
Repository layout
simplex/
|-- src/simplex/ (no __init__.py -- PEP 420 namespace)
| |-- deck/ DeckConfig, discovery, scaffolder
| |-- render/ runner, reconcile, html/pdf/pptx, thumbnail
| |-- web/ markdown notes + Jinja portal + SSE reload
| `-- cli/ Typer entry point
|-- decks/ author content (one directory per deck)
`-- tests/
# Plugin half (mobjects, theme, slide bases) lives in manim-simplex.
Every directory ships a short README.md (<=50 lines) covering scope, public surface, and don'ts. Only this root README is long-form.
Authoring a deck
A deck is three files plus optional assets:
decks/my-deck/
|-- deck.toml slug, title, summary, tags, theme, scenes, quality
|-- slides.py vanilla Manim, subclassing simplex.slides.*
|-- notes.md English notes rendered into the portal
`-- assets/
Inside slides.py you write plain Manim -- the framework's only contribution is the base class plus a pure make_chrome factory:
from manim import MathTex, ORIGIN, Write
from simplex.slides import BaseSlide, make_chrome
from simplex.theme.context import get_active_theme
class FermatLittleTheorem(BaseSlide):
def setup(self) -> None:
super().setup()
chrome = make_chrome(get_active_theme(), self.region, header="Fermat's little theorem")
self.add_to_canvas(**chrome.mobjects)
self.region = chrome.body_region
def construct(self) -> None:
eq = MathTex(r"a^{p-1} \equiv 1 \pmod p")
self.region.place(eq, ORIGIN)
self.play(Write(eq))
self.next_slide() # bare first call -> MAIN named "Fermat Little Theorem"
No factories, no wrappers, no anti-corruption wall. The theme provides defaults, self.region provides bounded layout, and clear_scene(exclude=...) provides bulk fade-outs. Slide numbering / wall clock live in the RevealJS host (toggle via [web] in deck.toml), not the rendered frames.
Theme tokens
Presets are frozen Theme instances, not subclasses, so swapping the visual identity at runtime is one assignment:
from simplex.theme import active_theme, presets
with active_theme(presets.ACADEMIC_LIGHT):
# all slides constructed here pick up the light palette
...
LaTeX preamble lives on theme.latex.preamble. Fixed-width prose blocks use the TexPage mobject (default 20 cm, override via width_cm=… kwarg or a class attribute on a subclass).
Style + tooling
- Python 3.13+, env + lockfile via uv, lint + format via ruff, types via basedpyright --strict.
- Configuration through frozen Pydantic v2 models. No bare
dict[str, Any]. - See
STYLE.mdfor the full rule set.
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.0.tar.gz.
File metadata
- Download URL: simplex_web-0.2.0.tar.gz
- Upload date:
- Size: 792.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1ce03f6e5b2d462627be80a8781d0f076312fa62291997ef244c0be4ce9200a
|
|
| MD5 |
86e0b125cf5d19eb914b3f6b141da83e
|
|
| BLAKE2b-256 |
39a5955d12bafd3560c2a850d531266dcc77ab25e7bfa7caed194e32b1fd25c9
|
Provenance
The following attestation bundles were made for simplex_web-0.2.0.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.0.tar.gz -
Subject digest:
f1ce03f6e5b2d462627be80a8781d0f076312fa62291997ef244c0be4ce9200a - Sigstore transparency entry: 1624604482
- Sigstore integration time:
-
Permalink:
shlomi-perles/simplex@84d6f769619cb842d3b63d20b0a24af13567dadd -
Branch / Tag:
refs/heads/main - Owner: https://github.com/shlomi-perles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@84d6f769619cb842d3b63d20b0a24af13567dadd -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file simplex_web-0.2.0-py3-none-any.whl.
File metadata
- Download URL: simplex_web-0.2.0-py3-none-any.whl
- Upload date:
- Size: 801.2 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 |
8925b1f73e1e27317d4ec7d5ccbea6c8510732dfa88cb2b812a408304ad13ee5
|
|
| MD5 |
34713a309fe83383be9c010f44200bc0
|
|
| BLAKE2b-256 |
875f804a57c2523c0f5f1500bf50baf164c23972281bd00e6a64cf8661d978d0
|
Provenance
The following attestation bundles were made for simplex_web-0.2.0-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.0-py3-none-any.whl -
Subject digest:
8925b1f73e1e27317d4ec7d5ccbea6c8510732dfa88cb2b812a408304ad13ee5 - Sigstore transparency entry: 1624604497
- Sigstore integration time:
-
Permalink:
shlomi-perles/simplex@84d6f769619cb842d3b63d20b0a24af13567dadd -
Branch / Tag:
refs/heads/main - Owner: https://github.com/shlomi-perles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@84d6f769619cb842d3b63d20b0a24af13567dadd -
Trigger Event:
workflow_dispatch
-
Statement type: