Skip to content

Flask-based web app that automatically archives Zoom cloud recordings on a configurable schedule. Supports multiple Zoom accounts via Server-to-Server OAuth, organizes downloads by date, and provides a web dashboard for managing accounts, viewing logs, and browsing archived recordings.

Notifications You must be signed in to change notification settings

payown/Zoom-Capture

Repository files navigation

Zoom Capture

Flask-based web app that automatically archives Zoom cloud recordings on a configurable schedule. Supports multiple Zoom accounts via Server-to-Server OAuth, organizes downloads by date, and provides a web dashboard for managing accounts, viewing logs, and browsing archived recordings.

Requirements

  • Python 3.10+
  • Zoom Account with admin or owner access
  • Zoom Server-to-Server OAuth App — see ZOOM_SETUP.md for step-by-step instructions
  • Sufficient disk space for storing audio recordings (M4A format)

Zoom API Scopes

Your Zoom S2S OAuth app needs the following scopes:

Scope Purpose
cloud_recording:read:list_user_recordings List recordings for a user
cloud_recording:read:list_recording_files Access recording file download URLs
user:read:user Connection testing

Setup

  1. Clone the repository

    git clone https://github.com/payown/Zoom-Capture.git
    cd Zoom-Capture
  2. Create a virtual environment (recommended)

    python -m venv venv
    source venv/bin/activate        # Linux/macOS
    venv\Scripts\activate           # Windows
  3. Install dependencies

    pip install -r requirements.txt

    This installs:

    • Flask — web framework
    • APScheduler — background job scheduling
    • requests — HTTP client for the Zoom API
    • mutagen — M4A file validation
    • filelock — thread-safe config file access
  4. Create your Zoom S2S OAuth app

    Follow the instructions in ZOOM_SETUP.md to create an app and obtain your Account ID, Client ID, and Client Secret.

Running

Start the application:

python app.py

The web dashboard will be available at http://localhost:5000.

First-Time Configuration

  1. Open the dashboard and go to Settings.
  2. Set the Archive Path — the directory where recordings will be saved.
  3. Set the Log Path — the directory for daily log files.
  4. Set the Run Time — the daily time (24-hour format) when the scheduler automatically downloads new recordings.
  5. Go to Accounts and click Add Account to enter your Zoom S2S OAuth credentials.
  6. Use Test Connection to verify your credentials work.

Dashboard Features

  • Dashboard — overview of scheduler status, account count, and archive stats
  • Accounts — add, edit, enable/disable, test, and delete Zoom accounts
  • Settings — configure archive path, log path, and daily run time
  • Logs — view and download daily log files, filter by errors/warnings
  • Manual Run — trigger downloads on demand for specific dates or all available recordings

Running as a Service

Service configuration files are included for running Zoom Capture as a background service:

  • Linux (systemd): services/zoom-archival.service
  • macOS (launchd): services/zoom-archival.plist

Project Structure

├── app.py                 # Flask application and API routes
├── config_manager.py      # Thread-safe config with file locking
├── scheduler.py           # APScheduler-based download job
├── zoom_api.py            # Zoom S2S OAuth client
├── file_manager.py        # File download, validation, and organization
├── requirements.txt       # Python dependencies
├── config.json            # Local config (git-ignored, contains credentials)
├── templates/             # Jinja2 HTML templates
├── static/                # CSS and JavaScript
├── services/              # systemd and launchd service files
└── ZOOM_SETUP.md          # Zoom OAuth app setup guide

About

Flask-based web app that automatically archives Zoom cloud recordings on a configurable schedule. Supports multiple Zoom accounts via Server-to-Server OAuth, organizes downloads by date, and provides a web dashboard for managing accounts, viewing logs, and browsing archived recordings.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors