Skip to main content

Download slides from public DocSend decks as PNG images

Project description

docsend-dl

Save any public DocSend deck as a PDF — one command, full quality.

PyPI version Python versions License: MIT

Quickstart

pip install docsend-dl && playwright install chromium
docsend-dl https://docsend.com/view/XXXXXX

That's it. You'll get a PDF named after the deck in your current directory.

Demo

$ docsend-dl https://dbx.docsend.com/view/n43v89r
Found deck: "docsend-n43v89r" (21 slides)
Got 21/21 image URLs
  Downloading slides ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21/21 0:00:00
╭──────────────────────── Done in 32.2s ─────────────────────────╮
│ Slides saved: 21/21                                            │
│ PDF size: 9.5 MB                                               │
│ Output: /home/user/docsend-n43v89r.pdf                         │
╰────────────────────────────────────────────────────────────────╯

Features

  • PDF by default — slides are assembled into a single PDF at full resolution with no re-encoding
  • PNG export — pass --images to save individual slide images instead
  • Smart output paths — pass a .pdf filename, a directory, or let it default to {deck title}.pdf
  • Fast — downloads all slides in parallel with automatic retries
  • Works with both docsend.com and dbx.docsend.com URLs
  • Headless — runs in the background by default; use --no-headless to watch the browser

Installation

You need the package itself plus a Chromium browser for Playwright:

pip install docsend-dl
playwright install chromium

Or if you use uv:

uv tool install docsend-dl
uv run playwright install chromium

Usage

CLI

# Download as PDF (default)
docsend-dl https://docsend.com/view/XXXXXX

# Save PDF to a specific path
docsend-dl https://docsend.com/view/XXXXXX --output "My Deck.pdf"

# Save PDF into a directory (uses deck title as filename)
docsend-dl https://docsend.com/view/XXXXXX --output ./downloads

# Download as individual PNG images instead
docsend-dl https://docsend.com/view/XXXXXX --images

# Show the browser window during download
docsend-dl https://dbx.docsend.com/view/XXXXXX --no-headless

Python API

import asyncio
from docsend_dl import download_deck

# Download as PDF (default)
result = asyncio.run(download_deck(
    url="https://docsend.com/view/XXXXXX",
))
print(f"Saved PDF to {result.output_path} ({result.total_bytes} bytes)")

# Download as individual images
result = asyncio.run(download_deck(
    url="https://docsend.com/view/XXXXXX",
    output="My Deck",
    images_only=True,
))
print(f"Saved {result.successes}/{result.slide_count} slides")

For finer control you can call the extraction and download steps separately:

import asyncio
from pathlib import Path
from docsend_dl import extract_slide_urls, download_slides

async def main():
    deck_info = await extract_slide_urls(url="https://docsend.com/view/XXXXXX")
    result = await download_slides(
        urls=deck_info.image_urls,
        output_dir=Path("slides"),
    )
    print(f"Downloaded {result.successes} slides")

asyncio.run(main())

How It Works

  1. Opens the DocSend page in a headless Chromium browser (via Playwright)
  2. Extracts each slide's image URL from the page data
  3. Downloads all slide images in parallel (via httpx)
  4. Assembles the images into a single PDF (via img2pdf) or saves them as PNGs

Limitations

  • Only works with public decks — email-gated and passcode-protected decks are not supported
  • Requires Chromium to be installed via playwright install chromium

Contributing

# Clone and install dev dependencies
git clone https://github.com/captivus/docsend-dl.git
cd docsend-dl
uv sync

# Run unit tests (fast, no network needed)
uv run pytest -m "not integration"

# Run integration tests (downloads real decks, verifies checksums)
uv run pytest tests/test_integration.py

# Run everything
uv run pytest

Bug reports and pull requests are welcome on GitHub.

License

MIT

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

docsend_dl-0.1.0.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

docsend_dl-0.1.0-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: docsend_dl-0.1.0.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for docsend_dl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 32655d49be3ae3f134febabbbe1e9f836adaea280337a276091f62618a97634b
MD5 8d9c36d7a8e6d99210a080f585a5683c
BLAKE2b-256 d10c24ca72fc58083c2cca74584d19a58fa32af81f88c6d9915a657d0b889f06

See more details on using hashes here.

File details

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

File metadata

  • Download URL: docsend_dl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for docsend_dl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9987ed09c8950fbd221a99dee5ed176711c6711f83490666d90b312783b1566b
MD5 0338487e708de5c283b8ed06ace8822d
BLAKE2b-256 7dd69265a0a98acb8e81371cd1adb397b5154423214baa806b22ba91b845c5e0

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