Making Instagram work for me
Locally Generated Instagram Summaries with Ollama and Readwise
Locally Generated Instagram Summaries
I’ve been thinking for a while about how much I rely on Instagram to keep up with things I care about and how bad it is at that job. Posts disappear quickly, there’s no real structure, and the only way to stay up to date is to keep opening the app. After many years of using it without much issue, I also started to notice myself getting stuck in the app, opening it more often than I meant to and staying on it far longer than I planned.
I wanted something simpler, so I built a small tool that turns Instagram into a kind of newsletter. It gives me the parts I like from the platform without the parts I don’t.
The Idea
The goal was straightforward. Instead of scrolling, I wanted a periodic summary of recent posts from a handful of accounts I actually care about. Something I could read in one place, without the algorithm, and without needing to open Instagram at all. The project reads a list of Instagram profiles, pulls recent posts, extracts captions from the last few days, and runs that through a local LLM to generate a short newsletter-style summary. Then, because I couldn’t resist, it also generates a short poem based on the same content in the style of a poet I enjoy.
This tool is very much built around how I use Instagram. I don’t really use it to keep up with friends’ lives, and I don’t think it would work well for that. For me, Instagram is mostly a way to see what local businesses and community organizations are up to and to find events I might want to go to. That kind of information translates well into a summary format.
How It Works in Practice

The flow ended up being a little more layered than I first expected. The script starts by pulling recent captions from Instagram, but only if there isn’t already a cache from the last two days. Those captions get saved locally so the script does not need to keep making the same requests over and over.
From there, the script feeds each account’s captions into a local LLM to produce a per-account summary that pulls out the main events, dates, and locations. Those summaries are cached too. This intermediate step turned out to be really important. When I tried feeding one large blob of caption text from multiple accounts straight into the newsletter model, it was much more likely to blur sources together and attach one account’s event to another account. Summarizing each account separately first made the final output much cleaner and more faithful to what each account had actually posted.
Once those per-account summaries are ready, the newsletter model uses them to generate the final newsletter. After that, the newsletter text gets passed into the poem model to generate the poem. Subjectively, the poem results were much better when the model got the finished newsletter instead of raw caption text. All of these steps can be configured to use different models, but in practice I found I preferred Qwen3:8B for most of them.
Running Locally with Ollama
One of the more interesting parts of this project was running everything locally with Ollama. Instead of calling an external API, the script sends the extracted content to a model running on my own machine.
This makes the whole pipeline feel more self-contained, and avoids any dependency on cloud-based LLM models. It also means speed depends heavily on local hardware. I tried a few different models before settling on something that worked well.
Gemma tended to over-summarize in this setup and would drop useful details like dates or separate events. I tried giving it a much more detailed and constrained prompt, but the results didn’t improve much and felt brittle. In contrast, Qwen handled the same task with a much simpler prompt and produced more consistent results.
I also experimented with Qwen3:4B, which was great for quick iteration while I was testing things out. It was fast and responsive, which made it easy to tweak prompts and debug the pipeline. But once things were working, I preferred the output from Qwen3:8B. It preserved more detail and produced more consistent summaries, and on my hardware the extra time felt worth it.
I tried a larger Qwen model as well, but it took longer to generate output without a meaningful improvement in quality. More recently, I gave Gemma 4 a try once it became available in Ollama and saw similar behavior. It took longer to run than Qwen and still didn’t preserve detail as well as I wanted.
I ended up landing on Qwen3:8B as a good balance. The project is set up so it’s easy to swap out models if you want to experiment, and I expect the right choice will vary quite a bit depending on the machine you’re running on. One thing I did appreciate is how easy Ollama makes it to try different models locally without much setup.
Caching and Scale

Caching ended up being essential, not just for speed but for reliability. Instagram will start throttling requests once you send enough requests, and for me that became a real issue once I was watching more than about 16 accounts. Without caching, the script would make too many live requests in a run, which made it much more likely to hit throttling before it finished.
Caching the raw Instagram captions helped reduce repeated fetches, but caching the per-account summaries mattered just as much. Once I added that intermediate summarization step, I did not want to regenerate those summaries every time I built a newsletter, especially after moving from Qwen3:4B to Qwen3:8B. The larger model gave me better results, but it also made repeated processing more expensive in time.
With both layers cached, newsletter creation got much faster and more practical. The script only needs to do the heavier work when there is actually new Instagram data to process. That made it possible to keep the more structured pipeline, which improved output quality, without making each run feel sluggish.
Readwise Integration
I also added a small integration with Readwise, which is where this ended up fitting really naturally. Readwise is essentially a read-it-later tool, but it is especially good for people who like getting information through newsletters or other longer-form formats.
What I like most about it is the ability to annotate and revisit things. It is the opposite of mindless scrolling. Instead of quickly consuming and forgetting, it encourages slowing down and actually engaging with the material.
Having the newsletter output land there makes it much more likely that I’ll come back to it, highlight parts, check my calendar later and add an event I want to go to, or note a community organization I want to follow up on.
A Few Design Choices
I kept the whole thing intentionally simple. It runs as a local script instead of a service, can be scheduled with cron, and outputs plain text instead of trying to be a full UI. There’s optional image analysis, but I left it off by default since running vision models locally can be slow and most of the useful signal was already in the captions.
What I Like (and What Could Improve)
What I ended up liking most is how it changes the relationship to the content. Instead of checking Instagram, I just get a summary of what changed. It feels more like catching up than scrolling, and having everything distilled into a few paragraphs makes the signal-to-noise ratio much better.
There’s still a lot that could be improved—better grouping in the newsletter output, more control over what gets included, maybe nicer formatting—but I’m not in a rush to turn it into something bigger. It already does what I wanted, which is let me keep up with things I care about without relying on Instagram itself.
Example Output
Upcoming Events & Activities
-
Artemis II Lunar Flyby
- Date: April 6, 2026
- Location: (Global)
- Details: NASA's Artemis II mission will conduct a lunar flyby.
-
Litquake Poetry & Food Event
- Date: April 21–22, 2026
- Location: Book Society, Berkeley
- Details: Features poet Aimee Nezhukumatathil.
-
Ada Limón Event
- Date: April 2026 (specific date pending)
- Location: (TBD)
- Details: Discount code "LITQUAKE4" for $4 off tickets.
-
Hellyer Visitor Center Pop-up
- Date: April 11, 2026
- Location: Hellyer Park Visitor Center
- Details: "Super-Duper Spiders" themed event.
-
esfuerzo Wellness Festival
- Date: April 11, 2026
- Location: Arena Green West, San Jose
- Details: Free wellness and fitness activities.
-
Cornell Birds Virtual Event
- Date: April 9, 2026
- Location: Virtual
- Details: Free session on bird songs and identification.
-
Gamble Garden Open House
- Date: Daily (open year-round)
- Location: Gamble Garden
- Details: Free public access; open for over 35 years.
Announcements & Updates
-
Library Services
- Event: "Bohème Out of the Box" opera event at Crane Cove Park (free).
- Date: April 2026 (specific date pending).
-
NASA Ames
- Event: Artemis II lunar flyby on April 6, 2026.
-
tiat.place
- Details: Operates as a 501(c)(3) nonprofit art gallery in San Francisco.
- Event: Time exhibit in April.
-
USPS Recruitment
- Details: Active hiring for full-time, part-time, and seasonal roles.
-
Santa Clara County Parks
- Announcement: Condolences for Supervisor Rod Diridon, Sr.
-
Route 66 Stamps
- Details: Pre-order available for a 100th-anniversary stamp release.
Cultural & Artistic Highlights
-
Hakone Gardens
- Event: Night Viewing extended to April 10th; Rainbow Lights Week begins April 10.
-
V&A Museum
- Theme: "Easter in Full Bloom" exhibition featuring tulips, jonquils, and historical art.
-
Computer History Museum
- Topic: Discussion on hidden software credits and Easter eggs in early programming.
-
Ada Limón Event
- Details: Poetry and literary event with ticket discounts.
Local & Community Events
-
Morning Service
- Date: April 2026 (specific date pending)
- Location: Ballard
- Details: Includes local food vendors.
-
TDSF Meetup
- Date: April 11, 2026 at 5pm
- Location: 151 Powell St.
- Details: Tech and design-focused meetup.
-
Bird Quiz
- Details: Interactive quiz with a photo of a bird from Newfoundland and Labrador.
Key Dates
- April 6, 2026: Artemis II lunar flyby, Route 66 stamps pre-order, NASA Ames event.
- April 9, 2026: Cornell Birds virtual event.
- April 10, 2026: Hakone Gardens Rainbow Lights Week.
- April 11, 2026: Hellyer Visitor Center pop-up, esfuerzo festival, TDSF meetup.
This summary organizes the posts by category, highlighting events, announcements, and cultural highlights. Let me know if you need further details!
POEM (Emily Dickinson inspired):
A Moonlit Guess—unspools the Sky’s own Thread—
Spiders spin lace where Hellyer’s Pop-up Dances—
Cornell’s Birds hum free, unbound by Time’s strict Frame—
V&A’s Tulips blush beneath the Easter Sun—
Hidden Eggs in Code, where History’s Secrets Swim—
A Bird’s Photo, Newfoundland’s Whisper, waits to be Named.
Generated in 151.59 seconds
Newsletter model used: qwen3:8b
Poem model used: qwen3:8b
Poet inspiration: Emily Dickinson
Accounts checked: 50
Accounts with recent posts: 27