TikTok Vault
Saved videos become structured notes. 1,684 of them, parsed locally, filed by the collection they were already in.
A saved video is a bookmark with the idea locked inside it. You cannot search it, the caption usually says nothing, and the part you actually wanted is three seconds of on-screen text at 0:11. Eighty three collections and nearly seventeen hundred saves later, the library is write-only.
This turns them into notes. It pulls the catalogue into SQLite, downloads each video, reads the on-screen text with the macOS Vision framework, transcribes the speech with Whisper, and hands caption plus OCR plus transcript to a local model that fills in the fields that particular kind of video needs. A recipe and a Blender tutorial want different fields, so they get different schemas.
The routing is the part I like. It does not try to classify anything: which collection Jack already dragged the video into decides which lane it belongs to and which vault folder it lands in. The filing signal already existed and was free, and a classifier would have been worse at it while costing money.
Everything runs on the machine. OCR, transcription and extraction are all local, which is what makes it reasonable to run nightly over a library this size instead of paying per video to find out that a third of them were not worth keeping.
Details worth knowing
- 01Five stages, run nightly: collect, route, enrich, extract, publish. 300 notes written so far across twenty lanes.
- 02The on-screen text matters more than the audio for most of these, so OCR runs through the macOS Vision framework rather than a cloud API.
- 03Never point a Chrome launched from a background process at a real profile. A launchd session has no keychain access, so Chrome cannot decrypt the cookie jar and overwrites what it cannot read: a test profile went from 3,638 cookies to 11. It launches into the GUI session now.
- 04Headless does not work, and fails dishonestly. TikTok returns 403 on its content endpoints in headless mode while every other authenticated endpoint returns 200, so it reads as an auth failure and is not one.
- 05It feeds something real: 78 of the 130 places on the Japan trip planner's map carry a source that came out of this pipeline rather than being typed in.