A Shiny app to convert LLM Markdown exports to PDF with Quarto
Project description
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 Testing
- maybe add API-based direct fetching of conversations
- Improve Quarto template customization options
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
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 llmmd2pdf-0.1.2.tar.gz.
File metadata
- Download URL: llmmd2pdf-0.1.2.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ec6d2d125189ca536ff7ef49ef03fd0e42c571a184457611c4c18b62f563731
|
|
| MD5 |
a7565bf17ffe5be294aba46184d9fc35
|
|
| BLAKE2b-256 |
d6223a91d832d31eb9bb8dad23ebffcafd414b0ae54eaf6a47959ef280a46175
|
File details
Details for the file llmmd2pdf-0.1.2-py3-none-any.whl.
File metadata
- Download URL: llmmd2pdf-0.1.2-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5087da43171b5758d02072c5384a11d67f28dba3969cef82a4601a3a06421582
|
|
| MD5 |
9b41d8be6566dab4b0104f896fda7201
|
|
| BLAKE2b-256 |
9fff32283265100f46bd16b412c9501cea1f7504c79971b4ceca9fda4b4454d1
|