Download entire blogs for offline reading with working internal links
Project description
Blogpack
Download entire blogs for offline reading. Generates PDF, EPUB, and HTML with working internal links.
Features
- Downloads all posts from a blog
- Preserves internal links between posts
- Downloads and embeds images
- Multiple output formats: EPUB (e-readers), HTML (browsers), PDF
- Supports Ghost, Substack, and WordPress blogs
Installation
pip install blogpack
Note: PDF export requires additional system libraries. If PDF generation fails:
- Ubuntu/Debian:
sudo apt install libpango-1.0-0 libpangocairo-1.0-0 - macOS:
brew install pango - Windows: Install GTK3 from MSYS2
EPUB and HTML exports work without these dependencies.
CLI Usage
# Download a blog (saves to ./cold-takes/ by default)
blogpack https://www.cold-takes.com/
# Specify output directory
blogpack https://www.cold-takes.com/ -o ./my-folder
# Generate only EPUB
blogpack https://www.cold-takes.com/ -f epub
# Limit to 50 posts
blogpack https://www.cold-takes.com/ -n 50
# Skip images for faster download
blogpack https://www.cold-takes.com/ --no-images
# Disable SSL verification (for sites with certificate issues)
blogpack https://example.com/ --no-verify-ssl
Web App
A browser-based interface is included in blogpack-web/.
Run Locally
cd blogpack-web
pip install -r requirements.txt
uvicorn app:app --reload
# Open http://localhost:8000
Deploy with Docker
docker build -t blogpack-web .
docker run -p 8000:8000 blogpack-web
Output Structure
output/
├── html/
│ ├── index.html # Table of contents
│ ├── post-slug.html # Individual posts
│ └── images/ # Downloaded images
├── blog-archive.epub # For e-readers
└── blog-archive.pdf # Single PDF
Supported Platforms
| Platform | Status |
|---|---|
| Ghost | Supported |
| Substack | Supported |
| WordPress | Supported |
Documentation
See CLAUDE.md for detailed codebase documentation.
License
GPL-3.0 - See LICENSE for details.
Links
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 blogpack-0.1.2.tar.gz.
File metadata
- Download URL: blogpack-0.1.2.tar.gz
- Upload date:
- Size: 67.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b53bf32328be1f79402200ae743d5b129b3fb5f98d93c0dce161a5719ebad7fe
|
|
| MD5 |
9cb737c8d4af41155475aae073e60f18
|
|
| BLAKE2b-256 |
1bd19b32634ec4c88bbac5b3f4e116ff610d346c9b0f4560d2502672afd490f3
|
File details
Details for the file blogpack-0.1.2-py3-none-any.whl.
File metadata
- Download URL: blogpack-0.1.2-py3-none-any.whl
- Upload date:
- Size: 28.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29aaf8a9d3e0294771a096b97f861eb3a1cab8ed08cd6690363c5a8a2660c2d4
|
|
| MD5 |
beea8b28e137f73a2f24e6b1a1fb16d9
|
|
| BLAKE2b-256 |
881a030588eaa1ab91504b27fbc1bf04bcba1a2f613d1a32bdca9e09d98e0fa5
|