Skip to main content

Download General Conference talks as a complete audiobook (m4b) and epub with full transcripts

Project description

gencon-audiobook

CI PyPI version Python versions License: MIT

Download General Conference talks from churchofjesuschrist.org and produce:

  • A chaptered .m4b audiobook — one chapter per talk, with speaker name in the chapter title, cover art, and full metadata
  • An .epub companion — full transcripts, speaker photos, nested session/talk table of contents, and theme-safe CSS (dark mode, sepia, and accessibility modes all work)

Single pip install, no prerequisites beyond Python 3.10+. ffmpeg is located automatically — on your PATH if present, otherwise downloaded once via static-ffmpeg.

Inspired by General-Conference-to-Audiobook.

Disclaimer: This is an unofficial tool not affiliated with The Church of Jesus Christ of Latter-day Saints. General Conference content is copyright Intellectual Reserve, Inc. All rights reserved. This tool downloads content for personal, noncommercial use as permitted by the Church's Terms of Use.


Installation

pip install gencon-audiobook

Python 3.10 or newer is required. All other dependencies, including ffmpeg, are handled automatically. ffmpeg 1.0+ is required for per-file progress display during conversion; any ffmpeg from a package manager or the static-ffmpeg fallback exceeds this.

New to the terminal or Python? See the User Guide for step-by-step instructions.


Usage

# Download the most recent conference (both audiobook and epub)
gencon-audiobook

# Select a specific conference
gencon-audiobook --conference 2024-04

# Audiobook only (skip epub)
gencon-audiobook --audiobook-only

# EPUB only (skip audiobook and audio download)
gencon-audiobook --epub-only

# Custom output directory
gencon-audiobook --output ~/Books

# Rebuild existing output files
gencon-audiobook --overwrite

# Re-scrape fresh data from the Church website (bypass local cache)
gencon-audiobook --force-scrape

# Reduce file size (lower bitrate and sample rate)
gencon-audiobook --bitrate 32k --sample-rate 22050

# Show detailed progress in the terminal
gencon-audiobook --verbose

# Add paragraph numbers to EPUB transcripts (useful for study groups and citations)
gencon-audiobook --epub-paragraph-numbers

For the full options reference, file size guide, and platform compatibility notes, see the User Guide.


Output structure

~/gencon-audiobook/
  April 2024 General Conference/
    April 2024 General Conference.m4b    # Chaptered audiobook
    April 2024 General Conference.epub   # Transcript companion
    cover.jpg                            # Conference cover image
    conference.json                      # Cached conference metadata (skip re-scraping)
    audio/                               # Downloaded MP3 files
    speakers/                            # Speaker photos
    inline/                              # Inline body images embedded in the EPUB
    gencon-audiobook.log                 # Full DEBUG log for troubleshooting

Running the tool a second time skips files that already exist and loads conference metadata from conference.json instead of re-scraping the Church website. Use --overwrite to rebuild output files. Use --force-scrape to bypass the metadata cache and fetch fresh data from the Church website.


Documentation


Development

git clone https://github.com/XeroIP/gencon-audiobook.git
cd gencon-audiobook
pip install -e ".[dev]"

# Run unit tests (no network required)
pytest tests/ --ignore=tests/test_scraper_live.py --ignore=tests/test_integration.py

# Build source and wheel distributions
python -m build

# Run live smoke tests (hits the real website)
pytest tests/test_scraper_live.py -v -m live

# Run full end-to-end integration test (requires ffmpeg)
pytest tests/test_integration.py -v -m integration

Project layout

src/gencon_audiobook/
  cli.py            Click entry point
  scraper.py        Fetch and parse conference listings and talk pages
  downloader.py     Download MP3s, cover, speaker photos, and inline images (parallel)
  audio.py          Convert MP3 to AAC, assemble chaptered m4b
  epub_builder.py   Build EPUB 3 ZIP from transcripts and images
  ffmpeg_manager.py Locate ffmpeg/ffprobe (PATH first, static-ffmpeg fallback)
  cache.py          Save/load Conference metadata to conference.json (skip re-scraping)
  models.py         Conference / Session / Talk / InlineImage dataclasses
  progress.py       Custom Rich progress column (TimeRemainingWithLabel)
  utils.py          sanitize_filename(), validate_url()

tests/
  conftest.py             Shared helpers (ffmpeg discovery, silent MP3, JPEG)
  test_scraper.py         Unit tests against saved HTML fixtures
  test_downloader.py      Mocked HTTP tests
  test_audio.py           Audio pipeline with generated silent fixtures
  test_epub.py            EPUB structure and content validation
  test_cache.py           Cache serialization and version compatibility
  test_cli.py             CLI behavior (all external calls mocked)
  test_utils.py           Filename sanitization and URL validation
  test_ffmpeg_manager.py  ffmpeg/ffprobe discovery and caching
  test_scraper_live.py    Live smoke tests (@pytest.mark.live)
  test_integration.py     End-to-end test (@pytest.mark.integration)
  fixtures/               Saved HTML snapshots for scraper unit tests

Contributing

See CONTRIBUTING.md.


Legal

This tool accesses publicly available content using a transparent User-Agent string, respects robots.txt, and applies a rate-limiting delay between requests. It is intended for personal, noncommercial use only.

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

gencon_audiobook-0.1.8.tar.gz (285.5 kB view details)

Uploaded Source

Built Distribution

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

gencon_audiobook-0.1.8-py3-none-any.whl (55.5 kB view details)

Uploaded Python 3

File details

Details for the file gencon_audiobook-0.1.8.tar.gz.

File metadata

  • Download URL: gencon_audiobook-0.1.8.tar.gz
  • Upload date:
  • Size: 285.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gencon_audiobook-0.1.8.tar.gz
Algorithm Hash digest
SHA256 e1f9be68100a4ec5a22c858e5653650fbe75582ea194e0e7b2703a2f09bc2e3a
MD5 bdc828bfaf92c985d8148fc42ebb0a41
BLAKE2b-256 848b6e91dc7fe93b66300dba4d3fdb38932455ec83df4bb73da1d6582d91e651

See more details on using hashes here.

Provenance

The following attestation bundles were made for gencon_audiobook-0.1.8.tar.gz:

Publisher: publish.yml on XeroIP/gencon-audiobook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gencon_audiobook-0.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for gencon_audiobook-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 f926de6f8442d52a61ea1e131f4898283f0c03e695fb498c88119450f0074b18
MD5 b5bdb258dab3b6fb7e22b3f0a3c666d5
BLAKE2b-256 22d2130f757c0b09fea0e645130a3c672f2d6710b4a54eb00f45e33b2e9d5d2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gencon_audiobook-0.1.8-py3-none-any.whl:

Publisher: publish.yml on XeroIP/gencon-audiobook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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