Skip to main content

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
  • .frppt project format — save, share, and reload your whole deck as a JSON file
  • Decompile any HTML — every generated .html embeds the full source; recover it with one command
  • Autosave — writes to ~/.frostppt_autosave.frppt on every change and on ^C
  • Mouse-reactive border — border opacity responds to cursor proximity
  • Keyboard navigation<- -> Space to advance, Esc to 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

frostppt-1.0.0.tar.gz (51.1 kB view details)

Uploaded Source

Built Distribution

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

frostppt-1.0.0-py3-none-any.whl (47.7 kB view details)

Uploaded Python 3

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

Hashes for frostppt-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9d21556de22ece8e0b67f6292319efca791aa14249c5f925ff2a492018f162af
MD5 1bc6ba0d5f3f896933ba22c5b4dd7a63
BLAKE2b-256 e3594bdf66112d28a5bb39f14eed155a999ee2a2e1b30f8ce8c30faa21323562

See more details on using hashes here.

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

Hashes for frostppt-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 db69d4ef9ccbb2dff3207ec6e59ec6081304c653f99ef53e472b2dc85168a202
MD5 2e1496caee852880b629216aab0f10f6
BLAKE2b-256 f78ec70aa69b25107078c0b77abdfcd41c42d5dbc6d1921f50e415773ac86b8e

See more details on using hashes here.

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