Markdown to PDF Converter (llmmd2pdf)
A local Python application built with Shiny for Python that allows you to paste Markdown text, preprocess it, and convert it to PDF using Quarto.
Currently, markdown input needs to be generated by other programs, such as SaveYourChat or manual copy-pasting from LLM chat windows (e.g., ChatGPT, Gemini, Claude).
Features
- GUI Interface: Clean Shiny layout for text input and settings.
- Smart Preprocessing: Cleans "Gemini Apps Activity" footers, removes profile placeholders, and cleans artifact tags.
- Native Directory Picker: Robustly handles native macOS file dialogs via a subprocess.
- Quarto Integration: High-quality PDF conversion.
- Metadata & Config: Autosaves your favorite models, author name, and stores them in the standard OS configuration path.
Prerequisites
- Python 3.9+
- Quarto CLI: Required for PDF generation.
- Download Quarto
- Verify: quarto --version
Option 1: Installation via PyPI (Recommended)
This is the easiest way to use the tool.
-
Install the package:
pip install llmmd2pdf -
Run the app:
llmmd2pdfThe app will open in your browser automatically.
Option 2: Installation from Source (GitHub)
Use this if you want to modify the code or contribute.
-
Clone the repository:
git clone [https://github.com/yourusername/llmmd2pdf.git\](https://github.com/yourusername/llmmd2pdf.git)
cd llmmd2pdf -
Install in editable mode:
pip install -e . -
Run the app:
llmmd2pdf
Configuration
The application stores settings in the standard Application Support folder for your OS.
- macOS: ~/Library/Application Support/llmmd2pdf/config.toml
- Windows: %APPDATA%/llmmd2pdf/config.toml
- Linux: ~/.config/llmmd2pdf/config.toml
This file is automatically created when you run the app. You can modify it to set default models, your name, or the server port.
Default Config:
models = [ "Claude Haiku 4.5", "Claude Opus 4.5", "Claude Sonnet 4.5", "GPT-4o", "GPT-4o mini", "GPT-5", "GPT-5.1", "Gemini 3 Pro"]
author = "Karl Dafoe"
port = 5555 # Change this to run on a different port
Changing the Port
You can change the port by editing the port value in the config file above. The next time you run llmmd2pdf, it will bind to that port.
Roadmap
- Add unit tests for preprocessing functions
- maybe add API-based direct fetching of conversations
- Improve Quarto template customization options
Metadata
Release files for llmmd2pdf 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| llmmd2pdf-0.1.3.tar.gz | 22.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| llmmd2pdf-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.7 kB
Release files / llmmd2pdf-0.1.3.tar.gz
| Download URL | llmmd2pdf-0.1.3.tar.gz |
|---|---|
| Size | 22.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da74bc8f68ae956054617492593f58f444a089f408550ac0a9e1e5ecb2d34025
|
|
BLAKE2b-256 checksum How to use checksums |
5ee59f2d9ec874454d1aaf96edfa0c9f072788ed7ab45a7e9f73821fcbfb7aaa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / llmmd2pdf-0.1.3-py3-none-any.whl
| Download URL | llmmd2pdf-0.1.3-py3-none-any.whl |
|---|---|
| Size | 21.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c12f792f4eeade8fb989876393b65fb4a2900b518a45c49c9d7f0464ece59825
|
|
BLAKE2b-256 checksum How to use checksums |
c2cf1fcfadb62f814c59c1b9efaec3a942fd5dffbeb72a91273694679123a033
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Security for llmmd2pdf 0.1.3
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.