Session log — Vimeo library export, viewer, and a refresh launcher
Session log — Vimeo library export, viewer, and a refresh launcher
What happened, in order
1. The brief
Direct access was out, but the s2l.online server already has a Vimeo API token sitting inside the EP Courses plugin options (it is what powers the course-add flow). That token gave us a clean, server-side path to a full inventory of the account.
2. How to see Vimeo without seeing Vimeo
A small Python script at /root/scripts/vimeo-fetch.py on the server reads the token from the EP Courses options row, pages through the full /me/videos Vimeo API, and writes the normalised JSON to disk. The token never leaves the VPS, and the local laptop only ever sees the finished JSON.
The full account on the day: 1,962 videos. Roughly 465 of those have descriptions on Vimeo; the rest are bare titles. The single tag VodacomFibre is the only fibre-related tag in the account.
3. The spreadsheet
An Excel workbook with three tabs (Summary, All Videos, By Tag) was built from the JSON and saved into the iCloud 44 CLAUDE/Vimeo Stuff folder. The whole point of putting it in iCloud is that Hasmukh has it on every device, including offline.
4. The HTML viewer
A single self-contained HTML file (no external dependencies, embedded JSON inside the file) gives a card-grid view of the whole library: search across titles and tags, sortable, lazy-loaded, dark-mode aware. Sits next to the Excel file in the same iCloud folder. Open with a double click, no server, no account, no network round trip.
5. A double-click refresh launcher
A static HTML file cannot refresh itself when opened from disk. So a tiny .command launcher sits in the same folder; double-click it and it asks the server for a fresh JSON, rebuilds the HTML, and opens the page. The HTML is permanently up to date as of the last time the launcher ran.
6. A second pass: multi-tag filter and full descriptions
After a short break Hasmukh came back with two improvements he wanted in the viewer.
The tag filter became a multi-select with AND logic: a video has to carry every selected tag to show up. Selected tags appear as removable pill chips, with a Clear all link. Much more useful than a single-select for finding the intersection of two campaigns.
Each card now shows the Vimeo description below the title (when there is one), clamped to three lines by default with Show more / Show less. URLs in the descriptions render as live links. The server-side cap on description length was raised from 400 to 2,000 characters to fit the longest descriptions in the account (the longest on the day was around 1,070 characters).
vodac and 2024” are one click away, and the body of each video is readable inline.7. Going forward
The bigger question, which we deliberately deferred, is sharing this viewer with named managers at a client behind a login wall. There are five threads still open: the subdomain to publish under, the login style (browser popup, full custom login page, or email-link login), the first batch of manager names and passwords, the refresh schedule for the hosted version, and whether all managers see all videos or filtered subsets. None of that is built yet; it is the next session’s work.
Two smaller asides. About 1,500 of the videos have no Vimeo description; if any of those matter for the report, the edit happens on Vimeo itself, not in our pipeline. Worth a triage pass on the key Vodacom or s2l videos. And the only fibre-related tag is VodacomFibre; if Hasmukh expects a plain Fibre tag, it would need to be added or renamed on Vimeo.