An OBS recording watcher for macOS built with Hammerspoon. Automatically uploads OBS recordings to Google Cloud Storage with instant shareable URLs. Optionally captures raw source files (screen, webcam, audio) for post-production editing.
- 👁️ Watch Directory: Monitors a folder for new OBS recordings
- 🚀 Instant URLs: Get a shareable link the moment OBS starts recording (HTML placeholder while processing)
- ⬆️ Auto-upload to GCS: Automatically upload finished recordings to your Google Cloud Storage bucket
- 🔗 Public URLs: Shareable links anyone can access (no login required)
- 📹 Source Capture (optional): Independently record screen, webcam, and audio while OBS records
- 🎛️ Menu Bar Interface: All settings accessible from the menu bar
- 📺 Device Selection: Choose screen, camera, and microphone for source capture
- OBS records → saves
.mp4to the watch directory - obs-loom detects the new file immediately
- Placeholder uploaded → HTML loading page uploaded to GCS, URL copied to clipboard
- Share instantly → paste the URL anywhere, viewers see "processing..." page
- Recording finishes → obs-loom detects file has stopped growing
- Real video uploaded → replaces the placeholder, viewers see the video
When enabled, obs-loom also captures raw source files alongside OBS:
screen.mp4— raw screen recording (FFmpeg)webcam.mp4— raw webcam recording (FFmpeg)audio.wav— raw audio recording (sox, Core Audio for quality)
These stay local for post-production editing — only the OBS composite is uploaded to GCS.
# Install Hammerspoon
brew install --cask hammerspoon
# Install Google Cloud SDK (for uploads)
brew install --cask google-cloud-sdk
# Optional: For source capture feature
brew install ffmpeg
brew install soxcd ~/Code
git clone <repository-url> obs-loomAdd to ~/.hammerspoon/init.lua:
dofile(os.getenv("HOME") .. "/Code/obs-loom/init.lua")Reload Hammerspoon: Menu bar → Hammerspoon → Reload Config
In menu bar: 🎬 → "☁️ GCS Bucket" → Enter your bucket name In menu bar: 🎬 → "📂 Watch Directory" → Set to your OBS recording output folder
Set OBS recording output to your watch directory:
- OBS → Settings → Output → Recording Path → Set to your watch directory
- OBS → Settings → Output → Recording Format → MP4
# Authenticate
gcloud auth login
# Create bucket
gsutil mb -l us-central1 gs://your-recordings
# Make bucket public for easy sharing
gsutil iam ch allUsers:objectViewer gs://your-recordings- Set your watch directory and GCS bucket in the menu bar
- Start recording in OBS
- obs-loom detects the new file and uploads a placeholder → URL in clipboard
- Stop recording in OBS
- obs-loom uploads the real video, replacing the placeholder
- Status: Shows current state (Watching / Recording detected / Uploading)
- 📂 Watch Directory: Set where OBS saves recordings
- ☁️ GCS Bucket: Set your GCS bucket name
- 📹 Source Capture: Toggle raw source file capture on/off
- 📂 Source Output: Where source files are saved
- 📺 Screen: Select which display to capture
- 📷 Camera: Select webcam (or "No Camera")
- 🎤 Audio: Select microphone
- 📁 Open Watch Directory: Open in Finder
- 📁 Open Source Files: Open source output in Finder
- 🔄 Refresh Devices: Re-scan screens, cameras, mics
- 🔄 Restart Watcher: Restart the file watcher
When source capture is enabled:
- Raw screen, webcam, and audio are captured automatically when OBS starts recording
- Captures stop automatically when OBS finishes
- Files saved to a timestamped subfolder in the source output directory:
~/OBSSourceFiles/sources_2026-02-13_14-30-25/ ├── screen.mp4 ├── webcam.mp4 └── audio.wav
- macOS 12.0+
- Hammerspoon
- Google Cloud SDK (
brew install --cask google-cloud-sdk) — for uploads - OBS Studio — for recording
- FFmpeg (
brew install ffmpeg) — only if using source capture - sox (
brew install sox) — only if using source capture
- System Settings → Privacy & Security → Screen Recording → Enable Hammerspoon
- System Settings → Privacy & Security → Camera → Enable Hammerspoon
- System Settings → Privacy & Security → Microphone → Enable Hammerspoon
- Verify OBS is saving to the watch directory configured in obs-loom
- Verify OBS output format is set to MP4
- Try "🔄 Restart Watcher" from the menu bar
# Authenticate with Google Cloud
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
# Verify bucket exists
gsutil ls gs://your-bucket-name
# Test upload
echo "test" > test.txt
gsutil cp test.txt gs://your-bucket-name/- Ensure FFmpeg and sox are installed:
which ffmpeg && which rec - Grant Hammerspoon permissions for Screen Recording, Camera, Microphone
- Check Hammerspoon Console for error messages
- All recordings stored locally first
- GCS upload requires your own bucket
- Public URLs are optional (depends on bucket configuration)
- Source files never leave your machine
MIT License