I had around 470 saved Instagram posts and reels: recipes, restaurants, startup ideas, clothes, technology, travel, and anything else that looked useful. The problem was that I almost never returned to them. Instagram is good at saving content, but not at finding it again.
I also wanted the option to leave Instagram without losing the collection I had built over the years. So I made Curator, a self-hosted application that turns saved publications into a private, searchable library.
What Curator does
Curator imports Instagram reels, posts, and carousels from their URLs. It downloads the media, extracts audio and representative frames, transcribes speech, and analyzes each publication before adding it to the library.
The result is more useful than a folder of downloaded videos. Curator creates titles, summaries, categories, entities, and structured details based on the content:
- Recipes can include ingredients, steps, style, and nutrition goals.
- Restaurants can include cuisine, budget, and location hints found in the post.
- Fitness content can include exercises, goals, and muscle groups.
- Startup content can become ideas, principles, and possible next actions.
Everything remains searchable and filterable, with a review queue for results that need a human check.
How the pipeline works
Instagram URL
↓
durable SQLite queue
↓
yt-dlp / gallery-dl
↓
FFmpeg audio + frames
↓
Whisper transcription
↓
Codex structured analysis
↓
searchable library + review queue
Imports are normalized and idempotent, so submitting the same publication twice does not create duplicates. Download, extraction, transcription, and analysis failures are stored with their stage and can be retried from the interface.
Built for self-hosting
SQLite is the source of truth, while downloaded media stays on the local filesystem. I run my instance at home behind Tailscale, but the project also ships as a multi-architecture Docker image.
The application uses the OpenAI Whisper API for transcription. For content analysis it can use an existing Codex subscription, avoiding a separate per-publication AI bill. Supporting a strong local transcription model is one of the improvements I would most like to add.
Building it with Codex
Codex wrote almost all of the application code during two intense days. My work was defining the product, choosing the architecture and workflows, breaking the work into tasks, testing it against my real Instagram library, finding bugs, and repeatedly guiding both the implementation and interface.
I did not write the codebase line by line, but this was not a single prompt that magically produced a finished app either. The product emerged through a tight loop of decisions, tests, reviews, and changes in direction.
Current status
Curator is early software, but I already use it with my own library and the main pipeline is working. Instagram access relies on cookies and unofficial download tools, so upstream changes can still break extraction.
The project is open source under AGPL-3.0. Contributions are especially welcome around local transcription, new content types, extractors, and easier setup. Longer-term, I would like restaurants to become an actual map and recipes to become a proper recipe collection instead of remaining analyzed reels.