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.2.tar.gz (67.7 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.2-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

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

Hashes for blogpack-0.1.2.tar.gz
Algorithm Hash digest
SHA256 b53bf32328be1f79402200ae743d5b129b3fb5f98d93c0dce161a5719ebad7fe
MD5 9cb737c8d4af41155475aae073e60f18
BLAKE2b-256 1bd19b32634ec4c88bbac5b3f4e116ff610d346c9b0f4560d2502672afd490f3

See more details on using hashes here.

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

Hashes for blogpack-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 29aaf8a9d3e0294771a096b97f861eb3a1cab8ed08cd6690363c5a8a2660c2d4
MD5 beea8b28e137f73a2f24e6b1a1fb16d9
BLAKE2b-256 881a030588eaa1ab91504b27fbc1bf04bcba1a2f613d1a32bdca9e09d98e0fa5

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