| name | loom-liberator |
| description | Bulk-export an entire Loom library (videos + transcripts) to Google Drive. Use when someone wants to leave Loom and take all their recordings with them. Handles library enumeration, throttle-safe downloading, Drive upload, and the on-demand-transcode "priming" that makes the videos actually play. |
Loom Liberator (skill)
Guide the user through moving their whole Loom library to Google Drive. You automate the mechanical parts; the user must do their own Loom login and Google Drive auth (you can't and shouldn't hold their credentials).
Read GOTCHAS.md before starting — it explains the non-obvious failure modes. Reference it when the user hits one.
Preconditions to check first
yt-dlp and rclone are installed (which yt-dlp rclone). If not, point the user at the install links in README.md; do not install without their say-so.
- The user has a Chromium browser logged into Loom, and a Google account with Drive space.
Steps
-
Enumerate. Have the user paste scripts/enumerate.js into their browser console on their Loom library page and run loomEnumerate(). It downloads loom_ids.txt. If it captures nothing or misses in-folder videos, walk them through the notes in the script header (Loom may have renamed the operation, or the default filter is hiding folders — GOTCHAS #1).
-
Set up rclone → Drive. Have the user run rclone config and create a drive remote named loom-drive with scope drive.file (least privilege). Confirm a destination folder exists in their Drive.
-
Download. Run python3 scripts/download.py loom_ids.txt ./videos. This is slow by design (Loom throttles). It's resumable — done-ness is files on disk — so if it dies, just re-run. Container is .mp4 or .webm; both are fine.
-
Upload. Run bash scripts/upload.sh ./videos "loom-drive:Loom Archive". Idempotent; safe to re-run.
-
Prime Drive. This is the step people skip and then think the upload failed. Google Drive transcodes on demand, so fresh uploads all show "still processing." Have the user set FOLDER_ID and TOKEN in scripts/prime_drive.js, run it from a drive.google.com tab, and call primeDrive(). ~90% become playable within minutes; the rest over a few days (Drive rate-limits big batches). Re-run to re-nudge stragglers.
Honesty rules for this skill
- The enumeration step uses Loom's private API and may break. If it does, say so plainly — it's not the user's fault, and the download/upload steps are unaffected.
- Videos over ~300 MB or above 1080p will not stream inline in Drive (download-only). That's a Google limit, not a bug. Tell the user rather than trying to "fix" it.
- An
ffprobe-valid video that won't play in Drive is almost always un-transcoded, not damaged (GOTCHAS #7). Don't declare content lost without comparing to Loom's own native download.
- Never enter the user's passwords or paste their OAuth tokens anywhere they'd be exposed.