Skip to content

Repository files navigation

Filmroom

An MCP server that turns your Instagram saved posts and X bookmarks into text an agent can search. Agent only. There is no UI.

Pipeline

Instagram saved folder, or X bookmarks
      |  fetched through the private web APIs
      |  (cookies from your logged in browser)
      +-- audio --> Whisper on GPU --> transcript
      +-- images --> tesseract OCR, then a vision
      |              pass over the local claude CLI
      v
SQLite at ~/.cache/filmroom/transcripts.db
      |
      v
search: FTS5 keyword plus bge-small-en-v1.5 vectors,
merged by reciprocal rank fusion
      |
      v
your agent over MCP

Whisper uses CUDA libraries from the installed nvidia pip wheels. Set FILMROOM_CACHE to store the database somewhere else.

Install

One command. Needs Python 3.10 or newer, git, and Claude Code.

curl -fsSL https://raw.githubusercontent.com/nethum529/Filmroom/main/scripts/install.sh | sh

It clones the repo to ~/.local/share/filmroom, installs the server into its own virtual environment, registers it with Claude Code, and runs a health check. Safe to run again over an existing install.

You also need tesseract and ffmpeg:

sudo apt install tesseract-ocr ffmpeg

Update

~/.local/share/filmroom/scripts/update.sh

It fast forwards to origin main and reinstalls only what changed. It never touches your cache. It refuses to run if you have local changes. Restart Claude Code after updating.

Setup

Log into instagram.com and x.com in a Firefox family browser. Zen works. The server reads that profile's session cookies. No API keys.

The vision pass runs the local claude CLI. Be logged into Claude Code on the same machine.

The installer registers the server for you. To register a checkout by hand instead:

claude mcp add filmroom -s user /path/to/Filmroom/.venv/bin/filmroom

Tools

Tool Purpose
get_transcript Text of one post URL: caption, transcript, slide text.
get_transcripts_from_page Text for every post on a saved folder or profile page.
list_saved_folders Instagram saved folders with names, ids, and counts.
index_saved_folder Index one folder, or "all" for the whole library.
list_x_bookmark_folders X bookmark folders, if the account has them.
index_x_bookmarks Index all X bookmarks, or one folder by name.
run_vision_pass Describe post images with the local claude CLI.
search_cache Keyword, semantic, or hybrid; a folder name narrows results.
get_post Small brief: summary, up to 5 key points, quotes, section map.
get_post_section One named section in full, never summarized.
get_post_slide One carousel slide by number: alt text, OCR, vision text.
get_post_segments Timestamped speech segments for one video post.
reindex_search Rebuild keyword and vector indexes after new posts arrive.
health_check Report on ffmpeg, tesseract, CUDA, cookies, and the database.

index_saved_folder("all") keeps every post's folder ids, so search_cache can filter by saved folder across the whole library.

get_post is small on purpose. A 12 slide carousel holds about 28000 characters; its brief is about 800. Read the brief first, and call the section tools only when you truly need the full text.

Known limits

  • X bookmark folders are often not available. The API returns an authorization error for them. In that case index_x_bookmarks indexes all bookmarks instead and says so.

About

way to parse the content in reels and other short form media.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages