Where ideas crystallise.
Project description
❄ FrostPPT
Where ideas crystallise.
FrostPPT is a Python library and interactive CLI for building stunning frosted-glass HTML presentations — no design tools, no browser extensions, no dependencies beyond a standard Python install.
Built by D. Saahishnu Ram.
Features
- Frosted glass card with animated grain texture and crystallising frost effect
- Animated backgrounds — 53 gradient presets across moody darks and bright lights, plus fully custom
- Drifting orbs — 54 colour presets for soft ambient lighting
- 55 font pairings — every Google Font supported, auto-loaded from CDN
- Auto text contrast — detects card surface luminance and picks readable text automatically
- 6 slide types — Title, Content, Two Column, Quote, Media, Raw HTML
.frpptproject format — save, share, and reload your whole deck as a JSON file- Decompile any HTML — every generated
.htmlembeds the full source; recover it with one command - Autosave — writes to
~/.frostppt_autosave.frppton every change and on^C - Mouse-reactive border — border opacity responds to cursor proximity
- Keyboard navigation —
<-->Spaceto advance,Escto exit fullscreen - Zero runtime dependencies — pure Python 3.7+, single-file output opens in any modern browser
Installation
# From PyPI
pip install frostppt
# Or just drop both files into your project
frostppt.py
frostppt_cli.py
Quick Start
Interactive CLI
python frostppt_cli.py
Follow the prompts to choose a background, fonts, colours, and build your slides. When done, two files are saved side by side:
my_deck.html <- open in browser to present
my_deck.frppt <- editable project file
Python API
from frostppt import Presentation, Slide
prs = Presentation(
title="My Deck",
bg_color="#1a1428",
)
prs.add(Slide.title(
heading="Where Ideas Crystallise",
tagline="A FrostPPT presentation",
pills=["Python", "Open Source"],
))
prs.add(Slide.content(
heading="Why FrostPPT?",
body=["No PowerPoint. No Keynote. Just a terminal and a browser."],
stats=[("55", "font pairs"), ("53", "backgrounds"), ("0", "dependencies")],
))
prs.add(Slide.quote(
quote="Cold clarity.\nWarm presence.",
attribution="D. Saahishnu Ram",
))
prs.save("my_deck.html")
Slide Types
| Type | Method | Description |
|---|---|---|
| Title | Slide.title() |
Hero heading, tagline, body, pill tags |
| Content | Slide.content() |
Paragraphs, stat callouts, pill tags |
| Two Column | Slide.two_col() |
2x2 comparison grid |
| Quote | Slide.quote() |
Full-bleed centered quote |
| Media | Slide.media() |
Image / video / audio (local file or URL) |
| Raw HTML | Slide.raw() |
Full HTML control |
.frppt Project Files
FrostPPT saves your deck as a human-readable JSON .frppt file alongside every HTML export. Share it with collaborators, reload it, or edit it by hand.
# Resume an interrupted or crashed session
python frostppt_cli.py --resume
# Open a saved project file
python frostppt_cli.py --load my_deck.frppt
# Recover a project from a previously exported HTML
python frostppt_cli.py --decompile my_deck.html
# Show all flags
python frostppt_cli.py --help
Every generated HTML embeds the full source JSON invisibly in a <meta name="frppt-source"> tag, so decompilation is always lossless — even if you lose the .frppt file.
Presentation Controls
| Key / Action | Effect |
|---|---|
<- -> or Space |
Navigate slides |
| Hover bottom-left corner | Show nav HUD (arrows, dots, counter) |
| Move mouse near card | Border glows toward cursor |
Esc |
Exit fullscreen |
Presentation Parameters
Presentation(
title = "My Deck",
bg_color = "#1a1428", # base background hex
gradient = { # optional animated gradient
"type": "linear-diagonal", # linear-diagonal | linear-horizontal
"colors": ["#1a1428","#0d1f3c"], # | linear-vertical | radial
"duration": 10, # animation loop in seconds
},
orb_colors = ["#c084fc88", ...], # 2-7 semi-transparent hex colours
heading_font = "Playfair Display", # any Google Font or web-safe name
body_font = "Inter",
heading_color = None, # None = auto-selected from bg luminance
body_color = None,
card_width = 700, # px
card_min_height = 420, # px floor (card auto-grows to fit content)
grain_opacity = 0.28, # 0.0-1.0
frost_duration = 1800, # ms for crystallise animation
shatter_duration = 1100, # ms for shatter exit animation
)
Project Structure
frostppt.py <- library (Presentation + Slide classes)
frostppt_cli.py <- interactive CLI
README.md
LICENSE
Contributing
Contributions are welcome. Fork the repo, make your changes, and open a pull request. All modifications to FrostPPT source files must remain open source under the same licence (MPL-2.0) and must preserve credit to the original author.
Licence
This project is licensed under the Mozilla Public License 2.0 (MPL-2.0).
You are free to:
- Use it in personal and commercial projects
- Modify and redistribute it
- Include it in larger projects, even proprietary ones
You must:
- Keep credit to the original author — D. Saahishnu Ram
- Open source any modifications to FrostPPT files under the same MPL-2.0 licence
- Include the licence notice in any distribution
See LICENSE for the full text.
Author
D. Saahishnu Ram
"Where ideas crystallise."
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 frostppt-1.0.0.tar.gz.
File metadata
- Download URL: frostppt-1.0.0.tar.gz
- Upload date:
- Size: 51.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d21556de22ece8e0b67f6292319efca791aa14249c5f925ff2a492018f162af
|
|
| MD5 |
1bc6ba0d5f3f896933ba22c5b4dd7a63
|
|
| BLAKE2b-256 |
e3594bdf66112d28a5bb39f14eed155a999ee2a2e1b30f8ce8c30faa21323562
|
File details
Details for the file frostppt-1.0.0-py3-none-any.whl.
File metadata
- Download URL: frostppt-1.0.0-py3-none-any.whl
- Upload date:
- Size: 47.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db69d4ef9ccbb2dff3207ec6e59ec6081304c653f99ef53e472b2dc85168a202
|
|
| MD5 |
2e1496caee852880b629216aab0f10f6
|
|
| BLAKE2b-256 |
f78ec70aa69b25107078c0b77abdfcd41c42d5dbc6d1921f50e415773ac86b8e
|