Roost

unlisted

by Jesse Paterson

Sync your TikTok and X/Twitter bookmarks into the vault as notes, then auto-organize them with a local AI categorizer.

5 starsUpdated 2mo agoMIT
View on GitHub

Roost

Sync your socials (TikTok and X/Twitter bookmarks) into your Obsidian vault as markdown notes, then auto-organize them with a local AI categorizer.

Desktop only. Roost uses an Electron webview and local tools that aren't available on Obsidian mobile.

What it does

  • Sync bookmarks — opens your TikTok / X bookmarks in an in-app webview (on your action) and writes each into the vault as a note. You log in as yourself; Roost only reads your own bookmarks.
  • Smart Assign — categorizes notes by embedding similarity plus an optional LLM rerank, writing a roost_category field. Within a category, a second scoring pass can auto-assign a roost_subcategory (e.g. "Italian" inside "Cooking"), producing a two-level library tree.
  • Local video transcripts — caption-less TikTok videos can be transcribed locally (faster-whisper via the sidecar's /transcribe) so the recipe and other pipelines can read the speech; music/silent videos are skipped.
  • Gallery & library views — browse and filter your synced bookmarks.

Network use

Roost contacts third-party hosts in several situations:

HostWhenWhy
tiktok.com / x.com (webview)You start a syncRead your own bookmarks
api.anthropic.comOptional cloud LLM, only if you set an API keySmart Assign rerank
api.themoviedb.org, www.omdbapi.com, itunes.apple.com, openlibrary.org, api.jikan.moe, graphql.anilist.coMedia/book/anime enrichmentTitles + cover art
nominatim.openstreetmap.org, *.basemaps.cartocdn.comPlaces viewGeocoding + map tiles
abs.twimg.comX article backfillPart of X sync (see below)

"Where to listen/watch" links (Spotify, SoundCloud, YouTube, Letterboxd, …) are plain links you click — Roost fetches nothing from them, except the optional Spotify embed which loads from open.spotify.com when shown.

No telemetry, no analytics, no account.

Bookmark sync — how it works, and the risk

Syncing reads your own TikTok / X bookmarks by automating those sites inside an Obsidian webview: it observes and replays the sites' internal (non-public) requests using your logged-in session. This is against TikTok's and X's Terms of Service (which prohibit automated/scraped access, use of non-public interfaces, and reverse engineering), and could in principle lead to account limits or action. Roost shares your data with no one but those platforms — but you are choosing to automate them. Use at your own risk. Roost is an independent project, unaffiliated with TikTok or X.

Optional integrations (all off by default)

Roost never installs or launches anything. Enable an integration in the Roost Hub and Roost will use it if it's available, or show setup instructions if not:

IntegrationUnlocksYou provide
Ollama (localhost:11434)Embeddings + LLM rerank for Smart AssignRun Ollama yourself; ollama pull nomic-embed-text + a chat model
Embedding sidecar (localhost:11435)Fine-tuned embeddingsRun the bundled scripts/embed-sidecar.py
ffmpegVideo-frame vision in embeddingsffmpeg/ffprobe on your PATH
vault-search (Semantic Search)Semantic vault-search commandBundled — build with setup-integrations.sh --with-search

With no integrations enabled, sync and the gallery/library views work fully; Smart Assign is disabled until an embedding backend (Ollama or the sidecar) is enabled and detected.

Install

Install from source (recommended)

Roost is distributed as source. Clone the repo, build, and deploy to your vault with a single command:

git clone https://github.com/j-paterson/roost-obsidian.git
cd roost-obsidian
npm install
ROOST_DEV_VAULT=/path/to/your/vault npm run install:vault

Then enable Roost in Obsidian → Settings → Community plugins. Desktop only.

Manual install from a release

Download main.js, manifest.json, and styles.css from the latest release into <vault>/.obsidian/plugins/roost/.

Local AI sidecar (optional)

Deploying with npm run install:vault copies a self-contained setup system into the plugin's scripts/ dir, so the venv + sidecar live alongside the plugin and survive without a repo clone. To set up the embedding sidecar (and Ollama/ffmpeg detection), run setup from the plugin scripts dir:

cd <your-vault>/.obsidian/plugins/roost/scripts
./setup-integrations.sh --vault-root <your-vault>

On macOS this also installs a login-item LaunchAgent that auto-starts the sidecar (remove it with ./uninstall-sidecar-service.sh, or skip it with --skip-autostart).

Semantic Search — vault-search (optional)

The Semantic Search lego (vault-search) is bundled with Roost. To build it and put the vault-search CLI on your PATH, pass --with-search:

./setup-integrations.sh --vault-root <your-vault> --with-search

This compiles the TypeScript source and symlinks vault-search onto your PATH so Roost's Integrations panel detects it automatically.

Running backfills and pipelines

The Roost Hub has two one-click buttons:

  • Backfill all — runs the content backfills (media, transcripts, tweet bodies, threads, article bodies, playback) one at a time.
  • Run pipelines — runs the enabled category pipelines (recipe, place, media, …) over your notes.

Trademarks

"TikTok" and "X" and their logos are trademarks of their respective owners. Roost is an independent project and is not affiliated with, endorsed by, or sponsored by TikTok or X. Brand glyphs are from simple-icons (CC0).

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.