A markdown-powered desktop presentation tool
Project description
Slide Viewer
A markdown-powered desktop presentation tool built with Python, PyQt6, and Chromium-based rendering.
Create, edit, and present slide decks using standard markdown. Features a live editor with real-time preview, AI assistant integration, customizable themes, and PowerPoint export.
Features
- Full Markdown Rendering -- headings, bold, italic, lists, tables, code blocks with syntax highlighting, blockquotes, links, images, horizontal rules
- Live Editor -- real-time slide preview with syntax highlighting as you type
- AI Assistant -- built-in chat panel powered by OpenAI GPT-4o-mini for rewriting, improving, or generating slide content
- 5 Preset Themes -- Default Light, Dark Pro, Academic, Minimal, Ocean -- plus full color, font, and font size customization
- Per-Slide Theme Overrides -- override the global theme on any slide with
<!-- theme: bg=#000 text=#fff -->comments - Image Support -- insert images with multiple layout options (right half, left half, full with caption, inline centered); drag-and-drop repositioning and resizing in the preview
- Table & Column Editors -- visual editors for inserting and editing tables and multi-column layouts
- Full Markdown Panel -- edit the entire deck as one markdown document with bidirectional sync
- Slide Sorter -- drag-and-drop reordering of all slides
- Overflow Detection -- checks if content fits the presentation size (1920x1080) and flags slides that would scroll
- Presentation Mode -- fullscreen slide show with arrow key / click / Space navigation
- Presenter Mode -- fullscreen slides with speaker notes, next slide preview, and a presentation timer
- PowerPoint Export -- export slides as .pptx files
- Speaker Notes -- add
notes:on its own line within a slide to include speaker notes - Copy LLM Instructions -- one-click copy of the slide format guide for use with any AI assistant
- Autosave & Recent Files -- automatic saving and quick access to recently opened files
Requirements
- Python 3.10+
- PyQt6 with WebEngine support
Installation
From the project directory:
pip install .
Or install dependencies manually:
pip install -r requirements.txt
Usage
# As a package
python -m slide_viewer
# Or via the CLI entry point (after pip install)
slide-viewer
The application opens with a sample slide deck. From there you can:
- Load a file -- File > Load from File (Ctrl+O) supports
.mdand.txt - Paste markdown -- File > Load from Code (Ctrl+Shift+O) to paste raw markdown
- Edit slides -- use the left editor panel; changes preview in real time
- Navigate -- Prev/Next buttons, arrow keys, or click slides in the navigator
- Add / insert / delete slides -- toolbar buttons for managing slides
- Customize theme -- right dock panel with color pickers, fonts, and preset themes
- Save -- File > Save to File (Ctrl+S) exports as a single
.mdfile - Export to PowerPoint -- File > Export to PowerPoint (Ctrl+Shift+E)
- Present -- F5 for presentation mode, Shift+F5 for presenter mode with notes
Slide Format
Slides are separated by slide# on its own line with blank lines before and after:
# Title Slide
### Subtitle
slide#
## Second Slide
- Bullet point one
- Bullet point two
slide#
## Third Slide
More content here.
Speaker Notes
Add notes: on its own line within any slide. Everything below becomes speaker notes:
## My Slide
Content visible in the presentation.
notes:
These notes are only visible in Presenter Mode and exported to PPTX.
Using AI to Generate Slides
- Click the Copy LLM Instructions button in the toolbar
- Open your preferred AI assistant (ChatGPT, Claude, Gemini, etc.)
- Paste the instructions and ask the AI to create slides on your topic
- Copy the AI's markdown output
- Paste into the Full Markdown panel (Ctrl+M) or use File > Load from Code (Ctrl+Shift+O)
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+O | Load from File |
| Ctrl+Shift+O | Load from Code |
| Ctrl+S | Save to File |
| Ctrl+Shift+E | Export to PowerPoint |
| Ctrl+E | Toggle Editor Panel |
| Ctrl+T | Toggle Style Panel |
| Ctrl+M | Toggle Markdown Panel |
| Ctrl+F | Find/Replace (Full Markdown panel) |
| F5 | Presentation Mode |
| Shift+F5 | Presenter Mode (with notes) |
| F1 | User Guide |
| Left / Up | Previous slide |
| Right / Down | Next slide |
| Space | Next slide (presentation mode) |
| Esc | Exit presentation / presenter mode |
AI Assistant
The bottom-left panel provides an AI chat powered by OpenAI's GPT-4o-mini. Enter your API key in the field at the bottom of the chat panel -- it persists between sessions.
The AI has context about your full presentation and the current slide. Ask it to rewrite, improve, or restructure slides, and use the Replace or Insert buttons to apply changes. An Undo button lets you revert the last AI edit.
License
This project is licensed under the MIT License. See LICENSE for details.
Citation
If you use Slide Viewer in your work, please see CITATION.cff for citation information.
Project details
Release history Release notifications | RSS feed
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 slide_viewer-1.0.0.tar.gz.
File metadata
- Download URL: slide_viewer-1.0.0.tar.gz
- Upload date:
- Size: 52.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ce00cbe3b20ba4bab7959e9511400b0f00855080085d22d840bc467caba3ac2
|
|
| MD5 |
bd0bb22843c8c07a723865d9d8522790
|
|
| BLAKE2b-256 |
3d603370a3d98b6f3962c68b5f319165b2b1ff3724ebd3d8a0e5064f110933ca
|
File details
Details for the file slide_viewer-1.0.0-py3-none-any.whl.
File metadata
- Download URL: slide_viewer-1.0.0-py3-none-any.whl
- Upload date:
- Size: 55.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1efc2cc16282f147a58274a1c94454afba648596f3338c3bf9c053a3a53c7c57
|
|
| MD5 |
564aa4dccbd50de6db2020daf5b5efa8
|
|
| BLAKE2b-256 |
9b88289dd9f698a6a245845dcc4147ba5aa4c73919ea5761ac8a49032517242f
|