Skip to main content

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 (generates all formats by default)
blogpack https://www.cold-takes.com/ -o ./cold-takes

# Generate only EPUB
blogpack https://www.cold-takes.com/ -f epub

# Limit to 50 posts
blogpack https://www.cold-takes.com/ -o ./output

# Skip images for faster download
blogpack https://www.cold-takes.com/ --no-images

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

blogpack-0.1.0.tar.gz (62.5 kB view details)

Uploaded Source

Built Distribution

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

blogpack-0.1.0-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file blogpack-0.1.0.tar.gz.

File metadata

  • Download URL: blogpack-0.1.0.tar.gz
  • Upload date:
  • Size: 62.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for blogpack-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e64a3ddbc1125520ead6d5a15f07bc59738d8b8e0b406dfa8b6481d39ec8478d
MD5 cebb3f9abd9922582fe3d91741543e59
BLAKE2b-256 a9e1dd197dfa02113a5cf010413d13a4b073e6e344b0e7e468d4ae24e5229779

See more details on using hashes here.

File details

Details for the file blogpack-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: blogpack-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for blogpack-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 26c411151020bd232568e88b09ea7d4af3b9abde8ff8cfce59adf3afe6d0ef33
MD5 891203dc329b104687208548305ae8b8
BLAKE2b-256 4be724341215887682319011c28044e83d9cd3e1bedca10b1e27e69e25f3f49f

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