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 (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

blogpack-0.1.3.tar.gz (67.8 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.3-py3-none-any.whl (28.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: blogpack-0.1.3.tar.gz
  • Upload date:
  • Size: 67.8 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.3.tar.gz
Algorithm Hash digest
SHA256 6f7895d99d2c56b40fe19400fb8354529912358111b09bb85b43c37d32cbbbff
MD5 32328027deee99dc804322883cfc9373
BLAKE2b-256 d27d5d1f029e26497dc600677caf20de35b49716d0abd0cbdcea8cd9e97d007f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blogpack-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 28.7 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6406f4099bdf9af6c21b1ff0d27e78cae9832a0c7d17098da4689d5aaae8de83
MD5 2bace515f726b481d0d5db7b1ae99687
BLAKE2b-256 2d2a2885a06cb9615c983fe2a13ae78401ed6e480ee3a4197720eb8f33617e37

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