Turn a slide deck (reveal.js or pptx) plus an optional scripted app demo into a single narrated MP4.
Project description
democast
Turn a slide deck (reveal.js HTML or PowerPoint .pptx) plus an optional scripted app demo into a single narrated MP4. Amazon Polly does the voice; Playwright drives the demo; ffmpeg stitches everything together.
narrate → Polly synthesises one MP3 per slide and per demo step
record_deck → Playwright records the reveal.js deck headed,
or LibreOffice → ffmpeg builds a video from pptx slides
record_demo → Playwright drives the app per the demo bundle (skipped if absent)
stitch → ffmpeg splices pre-deck → demo → post-deck → final.mp4
Quick start
pipx install democast
democast setup # one-time: download Playwright Chromium, audit tooling
democast init # in an empty project folder
# edit democast-config.json → point at your deck (.html or .pptx)
# (optional) edit democast-macro.json for the demo's actions/waits
democast run # → final.mp4
pipx is the recommended way to install Python CLIs because each tool
gets its own isolated venv. If you don't have pipx:
brew install pipx # macOS
apt-get install pipx # Linux
python -m pip install --user pipx
pip install democast also works — drop it into your venv of choice or
use pip install --user democast.
If you don't have pdftoppm and want pptx support, install with the
pymupdf extra:
pipx install 'democast[pymupdf]'
CLI
democast setup # one-time tooling check
democast init [--here <dir>] [--force] [--no-check] # scaffold config files
democast run [--config <path>] [--keep-intermediates]
System tooling
democast setup audits the toolchain. Full list:
| What | Required for | Install (macOS) | Install (Linux) | Verify |
|---|---|---|---|---|
| Python ≥ 3.11 | always | brew install python@3.12 |
distro package or pyenv |
python3 --version |
ffmpeg |
always | brew install ffmpeg |
apt-get install ffmpeg |
ffmpeg -version |
| AWS creds with Polly access | always | aws configure |
same | aws sts get-caller-identity |
| Playwright Chromium | reveal-format decks and any project with a demo segment | democast setup (or python -m playwright install chromium) |
same | democast setup will tell you |
| LibreOffice | only format: "pptx" decks |
brew install --cask libreoffice |
apt-get install libreoffice |
soffice --version |
pdftoppm (poppler) |
optional speedup for format: "pptx" (PyMuPDF fallback) |
brew install poppler |
apt-get install poppler-utils |
pdftoppm -v |
How it works
- Narrate. Reads the deck (HTML
<aside class="notes">per slide, or.pptxnotes pane). Sends each slide's narration text to Amazon Polly. Writes per-slide MP3s and a slides manifest. - Record deck. Either Playwright drives a reveal.js deck headed while the slide auto-advances, or LibreOffice + ffmpeg flatten the pptx into a video where each slide is held for its narration's duration.
- Record demo (optional). For each
demo.sequences[]entry, a fresh headless Chromium plays through the steps and writes one.webmper sequence. - Stitch. ffmpeg cuts the deck into slices around each
after_slide, encodes each slice + each demo, then concats:slides → demo → slides → demo → … → final.mp4.
Configuration
democast init scaffolds two files plus a comprehensive
democast-README.md reference:
| File | Purpose |
|---|---|
democast-config.json |
Engine config: deck path/format, voice, video size, output, and the demo block (app URL, secrets, required vars, sequences). |
democast-macro.json |
Reusable Playwright recipes — named actions and waits referenced from sequences. |
Omit the demo block in democast-config.json to skip the demo segment
and get a deck-only video.
The scaffolded democast-README.md is a self-contained authoring guide
covering the full schema, primitive reference, locator vocabulary,
predicate cookbook, validation rules, multi-sequence splicing, and a
worked end-to-end example. It's written so an LLM can read it once and
populate the two config files for any project.
License
MIT. See LICENSE.
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 democast-0.3.0.tar.gz.
File metadata
- Download URL: democast-0.3.0.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7421b8978987c86f385ade76b7f06e146093c83b0238d9fa1abded471ac81e31
|
|
| MD5 |
7137b8e047d752d2958dbae1a1edf315
|
|
| BLAKE2b-256 |
cfc03ea2b864eafa15156fbac996042c38c0161ac1bb60eb46a4cce244328995
|
File details
Details for the file democast-0.3.0-py3-none-any.whl.
File metadata
- Download URL: democast-0.3.0-py3-none-any.whl
- Upload date:
- Size: 40.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11decb31d8914122c9d415a37887e2801f4ede06232f0beb3ba48ba84a86b47b
|
|
| MD5 |
ddbe9e5a5e3c85428da143916fe750b9
|
|
| BLAKE2b-256 |
13473c37b394309e4eb675be98300d5f64e9fe227f92ff40058e5abc475b6445
|