Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

Monster-ZeroX/ZoomReco

Repository files navigation

Zoom Recorder (Dockerized, Open Source)

Record a Zoom web meeting on a headless Ubuntu server by joining via Chrome in a container and capturing the video (Xvfb) + audio (PulseAudio null sink) to an MP4 with ffmpeg.

⚠️ Legal/ToS: Record only meetings you are authorized to record. Comply with Zoom's Terms of Service and local laws.

Features

  • Headless Chrome (via Selenium + undetected-chromedriver)
  • Xvfb virtual display, PulseAudio null sink
  • ffmpeg screen + system audio capture
  • Dockerfile + docker-compose for reproducible deploys
  • Configurable via data/config.yaml
  • Open-source (MIT)

Quick Start

1) Prepare

  • Ensure Docker + Docker Compose are installed on your Ubuntu server.
  • On your local machine, export your Zoom cookies (use a Chrome extension like "EditThisCookie") and save them to data/cookies.json.

2) Configure

Edit data/config.yaml:

zoom_url: "https://zoom.us/wc/join/MEETING_ID?pwd=OPTIONAL_PASSWORD"
cookies_file: "/app/data/cookies.json"
output_file: "/app/data/meeting_recording.mp4"
headless: true
display: ":99"
resolution: "1280x720"
fps: 25
pulse_source: "ZoomSink.monitor"

3) Build & Run

docker compose up --build

The container will start Chrome, join the Zoom meeting, and begin recording to data/meeting_recording.mp4.

  • Stop with CTRL+C or docker stop zoomrec.
  • Logs are printed to your console; ffmpeg runs as a child process.

Tips

  • Use Zoom's web client join link format (/wc/join/MEETING_ID); the app join flow is not supported.
  • If prompted with "Open Zoom Meetings?" the script tries clicking "Join from your browser" automatically.
  • The script attempts to click "Join with Computer Audio"; if it misses, increase timeouts.join_audio_button.

Troubleshooting

  • Blank video / black screen: Ensure Xvfb is running (docker logs zoomrec), and that resolution matches ffmpeg args.
  • No audio: Verify pulse_source is ZoomSink.monitor (default) and ffmpeg is capturing -f pulse -i ZoomSink.monitor.
  • Cookie issues: Make sure your cookies are for .zoom.us and not expired. Re-export and replace data/cookies.json.

Dev Notes

  • Running Chrome in a container uses flags (--no-sandbox, --disable-dev-shm-usage) for stability.
  • We avoid host audio device passthrough by using a null sink in PulseAudio and recording its monitor.
  • You can change output codec options in utils/recorder.py.

License

MIT — see LICENSE.

About

ZoomReco

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published