Skip to main content

Python-scripted live slide framework

Project description

Auditorium

PyPI - License PyPI - Python Version PyPI

Auditorium is a Python framework for live technical presentations. You write slides as async def functions in a plain .py file, and Auditorium runs them as a live presentation in your browser — complete with keypress-gated reveals, timed animations, LaTeX math, syntax-highlighted code, and flexible layouts.

from auditorium import Deck

deck = Deck(title="My Talk")

@deck.slide
async def hello(ctx):
    """# Hello, World!

    This is rendered from the **docstring**.
    """
    await ctx.step()
    await ctx.md("This appeared after pressing right arrow.")
auditorium run talk.py

How it works

Each slide is an async def decorated with @deck.slide. The docstring renders as Markdown when the slide loads. The function body is imperative Python that drives the presentation through awaitable primitives:

  • Content: show(html), hide(selector), replace(selector, html), set_class(selector, cls), remove_class(selector, cls)
  • Markdown: md(text), show_md(path)
  • Timing: step() (wait for keypress), sleep(seconds)
  • Layout: columns(sizing), rows(sizing), place(html, x, y)

A FastAPI server runs your slide functions and pushes DOM mutations over WebSocket to a minimal browser client. Each browser tab gets its own independent session — you can have multiple tabs on different slides simultaneously.

Installation

Requires Python 3.12+.

pip install auditorium

Or with uv:

uv add auditorium

Usage

Create a file (e.g. talk.py) with a Deck instance and @deck.slide functions, then run:

auditorium run talk.py

Options:

Flag Default Description
--host 127.0.0.1 Host to bind to
--port 8000 Port to bind to
--no-open (opens browser) Don't auto-open the browser
--no-watch (watches files) Disable hot reload

Hot reload is on by default — edit your .py file and the browser stays on the current slide while picking up changes. A small status dot in the bottom-left corner shows connection state (green = connected, red = disconnected, blinking orange = reconnecting).

Navigation

Key Action
Right arrow / Space Advance step, or next slide if no pending step
Page Down Skip to next slide (cancel remaining steps)
Left arrow Previous slide (re-runs from start)
r Restart current slide
Digits + Enter Jump to slide N

Layouts

Layout primitives return Region objects that scope insertion targets via async with:

@deck.slide
async def side_by_side(ctx):
    """## Two Columns"""
    left, right = await ctx.columns([2, 1])

    async with left:
        await ctx.md("Main content (2/3 width)")

    async with right:
        await ctx.md("Sidebar (1/3 width)")

Sizing accepts integers (proportional), or "auto" for natural content size:

@deck.slide
async def structured(ctx):
    """## Header / Body / Footer"""
    header, body, footer = await ctx.rows(["auto", 1, "auto"])

    async with header:
        await ctx.md("### Fixed Header")
    async with footer:
        await ctx.md("*Fixed footer*")
    async with body:
        await ctx.md("Body stretches to fill remaining space.")

Available: columns(sizing), rows(sizing), place(html, x, y). They nest freely.

Features

  • Markdown docstrings — slide content as prose, right next to the code
  • Progressive revealsawait ctx.step() pauses for a keypress
  • Timed animationsawait ctx.sleep(seconds) for automatic pacing
  • LaTeX math — KaTeX via CDN, use $...$ or $$...$$ in Markdown
  • Code highlighting — fenced code blocks highlighted by highlight.js
  • Flexible layoutscolumns, rows, place with "auto" sizing
  • Hot reload — edit and see changes instantly, staying on the same slide
  • Independent sessions — each browser tab runs its own slide independently
  • Reconnection — survives server restarts without losing your place
  • No build step — Tailwind, KaTeX, and highlight.js loaded via CDN

Example

See examples/demo_deck.py for a complete deck exercising every feature.

auditorium run examples/demo_deck.py

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

auditorium-1!2.0.1.tar.gz (56.2 kB view details)

Uploaded Source

Built Distribution

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

auditorium-1!2.0.1-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file auditorium-1!2.0.1.tar.gz.

File metadata

  • Download URL: auditorium-1!2.0.1.tar.gz
  • Upload date:
  • Size: 56.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for auditorium-1!2.0.1.tar.gz
Algorithm Hash digest
SHA256 c02b620506fbee344f942a1d66c914da35f9d2cc3eb9dbf538e0a262d8955e4c
MD5 a068198e3fcc45a988a970974b65165c
BLAKE2b-256 24c980be54b5d2754af9a93dee47787c91748f599583c2fa808487eb28caebfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for auditorium-1!2.0.1.tar.gz:

Publisher: deploy.yaml on apiad/auditorium

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

File details

Details for the file auditorium-1!2.0.1-py3-none-any.whl.

File metadata

  • Download URL: auditorium-1!2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 14.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for auditorium-1!2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 962cad0eb7a20f9dd959824a9f2030a158c4e93c0debe3d5446ecefb54b883a7
MD5 d29e102b4b279272549f98a67e75dc3d
BLAKE2b-256 17a6302cf72476dca8103fa81c532c206d37008484e9184716d7e505b7423732

See more details on using hashes here.

Provenance

The following attestation bundles were made for auditorium-1!2.0.1-py3-none-any.whl:

Publisher: deploy.yaml on apiad/auditorium

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