{"id":26370095,"url":"https://github.com/concaption/google_meet_bot","last_synced_at":"2025-08-13T18:35:05.652Z","repository":{"id":281257892,"uuid":"944721757","full_name":"concaption/google_meet_bot","owner":"concaption","description":"bot to capture google meet recording","archived":false,"fork":false,"pushed_at":"2025-03-07T21:18:26.000Z","size":424,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-07T22:23:25.763Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/concaption.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-07T21:12:05.000Z","updated_at":"2025-03-07T21:18:30.000Z","dependencies_parsed_at":"2025-03-07T22:33:31.203Z","dependency_job_id":null,"html_url":"https://github.com/concaption/google_meet_bot","commit_stats":null,"previous_names":["concaption/google_meet_bot"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/concaption%2Fgoogle_meet_bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/concaption%2Fgoogle_meet_bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/concaption%2Fgoogle_meet_bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/concaption%2Fgoogle_meet_bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/concaption","download_url":"https://codeload.github.com/concaption/google_meet_bot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243945569,"owners_count":20372897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-16T23:17:58.571Z","updated_at":"2025-03-16T23:17:59.027Z","avatar_url":"https://github.com/concaption.png","language":"Python","readme":"# Google Meet Guest Joiner - Simplified Implementation\n\nThis repository contains a simplified, standalone implementation for joining Google Meet sessions as a guest. The implementation incorporates all the fixes and improvements developed throughout the project.\n\n## Features\n\n- Single-file, easy-to-understand implementation\n- Focused solely on guest joining functionality\n- Multiple fallback strategies for handling UI variations\n- Optional meeting recording capability using FFmpeg\n- Captures screenshots for debugging\n- Requires no configuration files\n\n## Requirements\n\n- Python 3.7+\n- Selenium\n- webdriver-manager (optional but recommended)\n- Chrome browser installed\n- FFmpeg (optional, required for recording)\n\n## Installation\n\nInstall required Python packages:\n\n```bash\npip install selenium webdriver-manager\n```\n\nIf you want to use the recording feature, you'll also need to install FFmpeg:\n\n### Windows\n1. Download from [FFmpeg.org](https://ffmpeg.org/download.html) or install via [Chocolatey](https://chocolatey.org/): `choco install ffmpeg`\n2. Add FFmpeg to your PATH environment variable\n\n### macOS\n```bash\nbrew install ffmpeg\n```\n\n### Linux (Ubuntu/Debian)\n```bash\nsudo apt update\nsudo apt install ffmpeg\n```\n\n## Usage\n\nTo use the simplified Google Meet guest joiner:\n\n```bash\npython google_meet_guest.py \u003cmeet_url\u003e \"\u003cyour_display_name\u003e\" [options]\n```\n\n### Examples\n\nJoin a meeting with URL:\n```bash\npython google_meet_guest.py https://meet.google.com/abc-def-ghi \"John Doe\"\n```\n\nJoin a meeting with just the code:\n```bash\npython google_meet_guest.py abc-def-ghi \"John Doe\"\n```\n\nJoin with visible browser (debug mode):\n```bash\npython google_meet_guest.py abc-def-ghi \"John Doe\" --debug\n```\n\nJoin and record the meeting:\n```bash\npython google_meet_guest.py abc-def-ghi \"John Doe\" --record\n```\n\n### Command-line Options\n\n- `--duration N` - Stay in the meeting for N minutes (default: 60)\n- `--debug` - Run in debug mode (browser window is visible)\n- `--record` - Record the meeting (requires FFmpeg)\n- `--recording-dir DIR` - Directory to save recordings (default: ./recordings)\n\n## Docker Support\n\nYou can run the Google Meet Bot in a Docker container without installing any dependencies locally.\n\n### Requirements for Docker usage\n- Docker installed on your system\n\n### Build Docker image\n\n```bash\ndocker build -t google-meet-bot .\n```\n\n### Running with Docker\n\n```bash\ndocker run --rm \\\n  -v \"$(pwd)/recordings:/app/recordings\" \\\n  -v \"$(pwd)/screenshots:/app/screenshots\" \\\n  google-meet-bot https://meet.google.com/abc-def-ghi \"Your Name\" --record\n```\n\n### Using Docker helper scripts\n\n#### Linux/macOS\n```bash\n# Make the script executable\nchmod +x docker-run.sh\n\n# Join and record a meeting\n./docker-run.sh --record https://meet.google.com/abc-def-ghi \"Your Name\"\n```\n\n#### Windows\n```batch\ndocker-run.bat --record https://meet.google.com/abc-def-ghi \"Your Name\"\n```\n\n### Using Docker with Make\n\n```bash\n# Build the Docker image\nmake docker-build\n\n# Join a meeting in Docker\nmake docker-run URL=https://meet.google.com/abc-def-ghi NAME=\"Your Name\" RECORD=1\n```\n\n## How It Works\n\nThe script works in these steps:\n\n1. Initialize Chrome browser with anti-detection features\n2. Navigate to the Google Meet URL\n3. Find and fill the name input field using multiple strategies\n4. Turn off microphone and camera\n5. Click the \"Ask to join\" button\n6. Start recording the meeting (if enabled)\n7. Stay in the meeting for the specified duration\n8. Stop recording and leave the meeting cleanly\n\n## Recording Features\n\nThe meeting recording functionality uses FFmpeg to capture both screen and audio:\n\n### Required Setup for Audio Recording\n\nTo properly record system audio during meetings, additional setup may be required:\n\n#### Windows\n1. **Enable Stereo Mix**: \n   - Right-click sound icon in taskbar -\u003e Sound settings\n   - Go to Input -\u003e Enable Stereo Mix\n   - If Stereo Mix is not available, try these alternatives:\n     - Install a virtual audio device like [VB-Cable](https://vb-audio.com/Cable/)\n     - Use a software mixer like [Voicemeeter](https://vb-audio.com/Voicemeeter/)\n\n#### macOS\n1. **Install audio routing software**:\n   - [BlackHole](https://github.com/ExistentialAudio/BlackHole) (recommended)\n   - [Soundflower](https://github.com/mattingalls/Soundflower) (alternative)\n   - [Loopback](https://rogueamoeba.com/loopback/) (paid option)\n\n#### Linux\n1. **Setup PulseAudio loopback**:\n   - Use `pavucontrol` to direct audio to a monitor source\n   - Or use `pactl load-module module-loopback`\n\n### Detecting Available Audio Devices\n\nRun the included helper script to list available audio devices on your system:\n\n```bash\npython detect_audio_devices.py\n```\n\n### Troubleshooting Recording Issues\n\nIf recording starts but stops immediately:\n\n1. Check if any audio devices are available:\n   - Run `detect_audio_devices.py` to list devices\n   - Ensure an audio loopback device is set up\n\n2. Try recording without audio:\n   - The script will automatically fall back to video-only recording if audio fails\n   - Recording errors will be shown in the log\n\n3. Verify FFmpeg is working:\n   - Run `ffmpeg -version` to check installation\n   - Try a simple test recording: `ffmpeg -f gdigrab -i desktop -c:v libx264 test.mp4`\n\n## Audio Extraction\n\nBy default, when you use the recording feature, the script will:\n1. Record the meeting as an MP4 video file\n2. Automatically extract the audio to a separate MP3 file\n\nIf you want to manually extract audio from an existing recording:\n\n```bash\n# Extract audio from the latest recording\nmake extract-audio\n```\n\nYou can also extract audio from any video using FFmpeg directly:\n\n```bash\nffmpeg -i \"recordings/your-recording.mp4\" -vn -acodec libmp3lame -q:a 4 \"recordings/your-recording.mp3\"\n```\n\n## Recording Implementation\n\nThe meeting recording functionality:\n\n- Uses FFmpeg for efficient video/audio capture with minimal CPU usage\n- Records both screen and audio\n- Automatically detects system configuration\n- Saves recordings with timestamped filenames\n- Handles graceful start and stop of recording process\n\n## Screenshots and Recordings\n\n- Screenshots are saved to `./screenshots/` directory\n- Recordings are saved to `./recordings/` (or specified directory)\n\n## Screenshots\n\nThe script saves screenshots at important steps to the `./screenshots` directory to help with debugging:\n\n- `01-initial-page.png` - The initial Google Meet page\n- `01a-name-filled-js.png` - After filling name with JavaScript\n- `01b-name-filled-selenium.png` - After filling name with Selenium\n- `01c-name-filled-xpath.png` - After filling name with XPath\n- `02-before-join-click.png` - Before clicking join button\n- `02a-join-clicked-js.png` - After clicking join button with JavaScript\n- `02b-join-clicked-selenium.png` - After clicking join button with Selenium\n- `02c-join-clicked-xpath.png` - After clicking join button with XPath\n- `03-after-join.png` - After joining the meeting\n- Various error screenshots if problems occur\n\n## Differences from Main Implementation\n\nThis simplified implementation:\n- Combines all functionality in one file for easier understanding\n- Focuses exclusively on guest joining (no login required)\n- Has more extensive debugging features\n- Is designed to be standalone (doesn't rely on other modules)\n\n## Recent Improvements\n\n- Added specific targeting for the Google Meet \"Ask to join\" button using exact class names and structure\n- Enhanced JavaScript button detection to locate buttons by nested span elements\n- Added more precise XPath queries to handle the current Google Meet UI structure\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconcaption%2Fgoogle_meet_bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconcaption%2Fgoogle_meet_bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconcaption%2Fgoogle_meet_bot/lists"}