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/ -n 50

# 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.1.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.1-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: blogpack-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 153ad222dbe2de2001af3d904beaf4a63a41d9c6c2e461ec33331f62409c086c
MD5 8298ffb52a132f0b14f91ce0553775d3
BLAKE2b-256 902ad6f056fc89d91e829451fb85cd6e57f175727361200812eb85723241d729

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blogpack-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7c64de09ffe0abe453d078249586481275d45d39906ba6a7aacc26c82be4545e
MD5 1ddf075274996f169dc09e2f2aedfccb
BLAKE2b-256 861fb05c55ae43a33b59a3a1c1ac8656255fa57294ae85d9373b4fd8f38a354c

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