PyReveal is a Python library for building Reveal.js presentations programmatically. It bundles reveal.js 6.x and exports standalone HTML decks.
- Two-class API: build
Slideobjects, add them toPresentation - No HTML required:
title,text,bullets,code,image, fragments, notes - Typed choices:
Theme,Transition,Plugin,FragmentEffect, and more - Reorderable vertical slides:
slide.vertical = [child_a, child_b] - Themes, transitions, backgrounds (color, image, video, iframe, gradient)
- Plugins: notes, highlight, markdown, math (KaTeX/MathJax), search, zoom
configure()for Reveal.js options (hash URLs, progress bar, scroll view, etc.)- Export self-contained HTML with bundled reveal.js assets
- Python 3.10+
- uv (recommended) or pip
After cloning, initialize the reveal.js submodule:
git submodule update --init --recursivepip install pyrevealOr with uv:
uv add pyrevealFor local development:
uv sync --devfrom pyreveal import Plugin, Presentation, Slide, Theme, Transition
intro = Slide()
intro.title = "Welcome"
intro.subtitle("Build decks in Python")
intro.vertical = [
Slide.make_text("First point"),
Slide.make_text("Second point"),
]
(
Presentation("My Presentation", theme=Theme.WHITE, transition=Transition.SLIDE)
.configure(hash=True, progress=True, slideNumber="c/t")
.plugins(Plugin.NOTES)
.add(intro)
.save("my_presentation.html")
)Define slides with Slide(), add them with Presentation.add(). PyReveal is an alias for Presentation.
from pyreveal import BackgroundSize, FragmentEffect, Presentation, Slide, Theme
welcome = Slide()
welcome.title = "Agenda"
welcome.fragment("Introduction", effect=FragmentEffect.GROW)
welcome.bullets(["One", "Two", "Three"])
chart = Slide()
chart.heading("Chart")
chart.image("chart.png")
chart.bg("bg.jpg", size=BackgroundSize.COVER)
Presentation("Demo", theme=Theme.BLACK).add(welcome, chart)Backgrounds accept color strings ("#222"), image paths, or dicts. No extra classes needed.
Presentation("Demo").animate(
[
{"title": "Before"},
{"title": "After"},
]
)Versioned documentation is published with Zensical and mike:
https://tavallaie.github.io/pyreveal/
Preview locally:
uv sync --group docs
uv run zensical serveSee docs/development/versioning.md for publishing new doc versions.
uv sync --dev
uv run pytest
uv build- Documentation: https://tavallaie.github.io/pyreveal/
- Issues: https://github.com/tavallaie/pyreveal/issues
- Source: https://github.com/tavallaie/pyreveal
MIT. See LICENSE.