Skip to main content

beampptx

License: MIT GitHub stars PyPI Python Version

Convert LaTeX Beamer slides to PowerPoint presentations with flawless vector graphics and embedded video support. Mostly vibe-coded using claude-cli and gemini-cli.

Why beampptx?

Converting Beamer slides to PowerPoint often results in blurry images or lost functionality. beampptx solves this by:

  • Vector Fidelity: Every slide is embedded as a full-bleed SVG vector graphic, ensuring perfect sharpness at any zoom level.
  • Dynamic Overlays: Supports Beamer transitions (\pause, \alt, <1->, etc.) by expanding them into individual static slides.
  • Clickable Navigation: Preserves internal Beamer links such as \hyperlink{target}{\beamergotobutton{Go}} as PowerPoint slide navigation.
  • Native Video: Automatically extracts videos included via the movie15 package's \includemovie or the multimedia package's \movie command and embeds them as native PowerPoint video shapes with support for autoplay, looping, and volume.
  • Bibliography Support: Handles complex LaTeX compilation passes (including biber and bibtex).

Installation

pip install beampptx

From GitHub

To install the latest development state directly from the repository:

pip install git+https://github.com/kocurvik/beampptx.git

Local Development

If you have the repository cloned:

pip install -e .

System Requirements

  • Python: 3.10+
  • LaTeX: A working distribution (MiKTeX, TeX Live) with pdflatex (default), xelatex, or lualatex.
  • Tools: biber or bibtex if using bibliographies.

Usage

Once installed, use the beampptx command:

Basic Conversion

beampptx presentation.tex

Convert from PDF directly

If you already have a compiled PDF:

beampptx presentation.pdf

Note that for this option, the videos will not be embedded correctly, but the rest of the content should be exported as vector graphics.

Advanced Options

# Specify output filename
beampptx presentation.tex -o final_talk.pptx

# Use a different LaTeX engine
beampptx presentation.tex --latex-engine xelatex

# Keep the temporary build files for debugging
beampptx presentation.tex --keep-build

# Skip internal navigation links
beampptx presentation.tex --no-links

# Build in a specific directory instead of a temp dir (never auto-deleted)
beampptx presentation.tex --build-dir ./build

# Run LaTeX from a different working directory than the .tex file
beampptx presentation.tex --latex-cwd ./src

# Show the installed version
beampptx --version

--build-dir implies --keep-build: the directory is created if missing and is never removed automatically, which makes it the easiest way to inspect the intermediate PDF and SVGs after a failed run. --latex-cwd controls how relative \input, \includegraphics, and \bibliography paths in the source resolve — it defaults to the directory containing the .tex file.

beampptx can also be run as a module: python -m beampptx presentation.tex.

Examples

The repository includes a test/ folder with several examples demonstrating different features. To try them out, clone the repository and run:

# Basic features (math, lists, etc.)
beampptx test/example.tex

# Overlays and transitions (\pause, \alt, etc.)
beampptx test/example_transitions.tex

# Image inclusion (PNG, JPEG, PDF)
beampptx test/example_images.tex

# Bibliography support (biblatex/biber)
beampptx test/example_bib.tex

# Internal navigation links (\hyperlink + \beamergotobutton) with video
beampptx test/example_links.tex

# Video with the movie15 package (\includemovie)
beampptx test/example_video.tex

# Multiple videos on a single slide
beampptx test/example_multi_video.tex

# Video with the multimedia package (\movie)
beampptx test/example_movie.tex

# Multiple videos on the same slide with the multimedia package (\movie)
beampptx test/example_multimedia.tex

# Custom theme with full-width colored title bars, logos and footnote citations
beampptx test/fmph_presentation.tex

Features in Detail

Beamer Overlays

beampptx detects frames with multiple slides (e.g., from \pause or <1->) and creates a separate PowerPoint slide for each state. This preserves the feeling of "animations" when clicking through the presentation.

Internal Beamer Navigation

Internal PDF destinations generated by Beamer are converted into PowerPoint click actions. For example, a button created with \hyperlink{details}{\beamergotobutton{Details}} will jump to the frame labelled details in slideshow mode. This also preserves internal links introduced by Beamer themes.

Note that themes drawing a navigation bar (Warsaw, Berlin, ...) emit one link per entry on every slide, which adds up to a lot of shapes on a long deck. Pass --no-links to skip the conversion entirely, or suppress the bar in the source with \beamertemplatenavigationsymbolsempty.

Videos

Two LaTeX packages are supported for video inclusion — pick whichever your source already uses. In both cases beampptx finds the call in your .tex source, locates the corresponding annotation in the compiled PDF, and embeds the video file directly into the .pptx as a native PowerPoint movie shape.

movie15 — \includemovie:

\usepackage{movie15}
...
\includemovie[autoplay, poster=image.png, repeat, volume=0.5]
              {width}{height}{video.mp4}

multimedia — \movie (ships with Beamer):

\usepackage{multimedia}
...
\movie[width=8cm, height=4.5cm, autostart, loop]
      {\includegraphics[width=8cm]{poster.png}}
      {video.mp4}

Recognised options:

Behaviour movie15 multimedia
Auto-play autoplay autostart
Loop repeat / palindrome loop / palindrome
Initial volume volume=0.0..1.0 (not supported by the package)
Poster image poster=file first arg (\includegraphics{file})

Note that currently, using pdfs for poster images is not supported. Likewise, the autoplay option requires activating the "next" slide for the videos to run. The palindrome option will just loop the video normally instead of reversing it for even playtroughs.

Release Notes

1.1.1

  • Fixed a thin white strip at the slide edges: PowerPoint drew the embedded slide graphics about 1 px narrower than the slide, so full-width backgrounds and colored title bars stopped just short of the left and right edges. Slides now fill the full width.
  • Added test/fmph_presentation.tex, an example with a custom theme (full-width colored title bars, logos and footnote citations).

1.1.0

  • Available on PyPI: beampptx can now be installed with pip install beampptx instead of only from GitHub.
  • Proper package layout: the code moved from a top-level generate_pptx.py module into a beampptx package. The beampptx command is unchanged, the converter can now also be run as python -m beampptx, and installing no longer places a generic generate_pptx module on your import path.
  • Preserved internal Beamer navigation: internal PDF destinations become PowerPoint click actions, contributed by @mefilippin in #1. Added --no-links to skip the conversion for themes that draw a navigation bar.
  • Requires Python 3.10+: this was always true of the code; the metadata previously claimed 3.6+.
  • Added --version, and fixed console output crashing on Windows when redirected to a file or pipe.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for beampptx 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for beampptx 1.1.1
File Size Uploaded
beampptx-1.1.1.tar.gz 23.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for beampptx 1.1.1
File Interpreter ABI Platform
beampptx-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 44.5 kB

Release files / beampptx-1.1.1.tar.gz

Download URL beampptx-1.1.1.tar.gz
Size 23.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c1c1e70a7b4ebb331a79b97af386c77bc1f2116a7d1453ded31238aa61ef5c02
BLAKE2b-256 checksum
How to use checksums
579cd88d20d2180c61afa9bd078527d27021b0eb686a58e770044421100fd7a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / beampptx-1.1.1-py3-none-any.whl

Download URL beampptx-1.1.1-py3-none-any.whl
Size 20.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ea2ccbffed52435edef651f9de4a34eb242f9371cb777b04d9467aa3b121206
BLAKE2b-256 checksum
How to use checksums
1c16e8d3cf308699d6c07e9db0423fdd0da417a63fe29c7a3ea8e95f77f39934
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page