Reel Sloth 將 Instagram 已儲存的 Reels 整理成待辦清單
Reel Sloth: I saved 'for later' reels for years. Now a local Gemma sorts them while I sleep 🦥
開發者 Kuntal Gorai 開源 Reel Sloth,讓用戶輸入 Instagram 已儲存的 Reels 連結或匯入資料檔,整理成可勾選的清單。工具以 faster-whisper、Qwen2.5-VL 3B 和 Gemma 4 E2B 分別處理語音、畫面文字和分類,並在作者的 Windows 電腦上以 CPU 執行;該電腦有 16 GB RAM,沒有 GPU。
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
Everyone has a "Saved" folder on Instagram that is secretly a graveyard. A reel lists five books you must read, another shows a movie you have to watch, another one shows a Claude skill that will "change how you code". You tap save, think "later", and never open that folder again. The information is all there, it's just trapped inside videos.
Reel Sloth does the "later" part for you. You give it your saved reels and it hands back a tidy, checkable backlog:
- 🎬 Movies & shows to watch
- 📚 Books to read
- 🤖 AI tools & Claude skills to try
- 📍 Places to visit
- 🛒 Products to buy
- …plus recipes, fitness and "other" How it works for the user:
-
Give it links. Paste reel or post links into a small web page, or (the truly lazy way) point it at the Instagram data export (
saved_posts.json/ the downloaded .zip) and it picks up everything you ever saved, collections included. -
Go to sleep.
--overnightmode paces the downloads so Instagram doesn't block it, keeps Windows awake while it runs, retries politely, and can be stopped and resumed at any time because every reel is cached. -
Wake up to a list. Each item comes out with a category, an action (watch / read / try / visit / buy) and a link back to the reel. Copy it as Markdown or plain text, download
.md/.csv/.json, or let it sync into a 🦥 Reel Backlog database in Notion. - Check things off. That's the only effort left. It reads all three places a reel hides information: the caption, what's said out loud, and the text on screen (lots of "top 5 books" reels only show titles as overlay text and never say them).
Who gets to be lazier: anyone who saves reels as a to-do list and never gets to the list. That's me, and probably you.
Demo
✏️
Here's a real run on 6 of my own saved posts (5 videos and a 6-photo carousel): 15 clean backlog items out, namely 3 movies, 5 books, 5 Claude skills, 1 place (the A Moving Line comics exhibition at MAP Bengaluru) and 1 product (WinDock), with every model running on my PC's CPU.
Code
🦥 Reel Sloth
Save reels, do nothing, still end up organized.
Reel Sloth takes the Instagram reels you saved "for later" and turns them into a tidy backlog movies to watch, books to read, Claude skills and AI tools to try, recipes to cook. Everything is extracted and classified by open models running on your own machine.
Status: working end to end on real reels (6 sample posts → 19 items → Notion). See PLAN.md.
Setup (Windows, Python 3.11+)
cd D:\hacktoberfest-2026\reel-sloth python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt ollama pull qwen2.5vl # on-screen text (already pulled on KUNTAL-PC) ollama pull gemma4 # classification (already pulled on KUNTAL-PC)
The first run downloads the Whisper small model (~460 MB). After that it works offline,
except for downloading the reels themselves.
Run
Web page (easiest):
python -m reel_sloth.appPaste links, press Sort…
Repo: https://github.com/kuntal0901/reel-sloth (MIT license)
Python, about 1,600 lines, with 48 unit tests covering parsing, cleanup, the Instagram export import, overnight mode, Notion sync and export. Every model is set in one config.toml.
How I Built It
The open-source AI stack, all running locally:
| Job | Open piece | Notes |
|---|---|---|
| Download reel + caption | yt-dlp |
Optional browser cookies if Instagram asks for a login |
| Speech to text |
faster-whisper (small, int8, CPU), audio decoded with PyAV |
Works offline after a one-time 460 MB download |
| Read on-screen text |
Qwen2.5-VL 3B (qwen2.5vl:3b) via Ollama
|
Keyframes + carousel slides, one image per call |
| Sort into categories |
Gemma 4 E2B (gemma4:e2b) via Ollama |
Returns JSON: category, items, action, note |
| UI | Gradio | One page: paste, sort, copy |
links / Instagram export ──► yt-dlp ──► video + caption
│
┌────────────────────┼──────────────────────┐
▼ ▼ ▼
faster-whisper keyframes/slides caption text
(transcript) ► qwen2.5vl (overlay text)
└────────────────────┬──────────────────────┘
▼
gemma4:e2b ► JSON ► code-based cleanup + dedupe
▼
SQLite cache ─┬─► Markdown / TXT / CSV / JSON (copy mode)
└─► Notion "Reel Backlog" (optional)
My machine is a Windows PC with 16 GB of RAM and no GPU, so most of the work was making open models behave on modest hardware.
1. One model in RAM at a time
Whisper, a vision model and an LLM don't all fit comfortably in 16 GB. The pipeline runs the vision stage, then unloads Qwen2.5-VL (keep_alive=0) before Gemma loads. Slow and steady, but it never swaps.
2. Only look at the screen when it's worth it
Qwen2.5-VL on CPU takes about a minute per image, so my first real run of 6 posts took ~35 minutes. The fix was to be lazy on purpose:
- Fast mode (the default) only reads the screen for photo posts and for videos with under 40 spoken words. If someone talks through their list, the transcript is enough.
- Max 2 keyframes per video, near-duplicate frames skipped, at most 3 carousel slides.
- One image per call. Sending several frames at once overflowed the model's 4k context window, so each frame now gets its own request.
- Thorough mode reads every reel and every slide; Off skips vision completely. On the same 2 reels that took the pipeline from 711 s to 314 s (2.3× faster).
3. Don't trust a 2B model with the last mile
Gemma 4 E2B is great at the hard, fuzzy part: deciding that a reel is "about books" and pulling out the titles. It's less consistent at the boring details. Between runs it would misspell a title it had heard correctly, split a book from its author or subtitle so one book became two items, or add vague items that weren't really things to do. Tweaking the prompt to fix one of these made another one worse.
So instead of fighting the prompt, I let Gemma do the understanding and wrote plain code for the cleanup:
- titles are snapped to the spelling that was actually spoken in the reel (edit distance against the transcript),
- titles are put in title case,
- a subtitle or author that the model split off as its own item is folded back into the right book,
- generic "junk" titles are dropped and event details are folded into notes,
- near-duplicate items across reels are merged.
The JSON comes from Ollama's
format=json, then gets validated, with one repair retry if it's broken. My first full run on 6 posts gave 19 items, with duplicates and fragments. With the cleanup in place, the same 6 posts give 15 clean ones.
4. Built for the overnight run
Everything is cached in SQLite, so re-running costs nothing for reels you've already processed. Overnight mode waits a random 20–40 s between downloads, backs off for 10 minutes if Instagram pushes back, stops after 3 blocked links in a row, logs everything, and picks up where it left off next time. The Notion sync never duplicates rows, and things you've ticked Done are never touched.
Why Does Open Innovation Matter?
- Your saved feed is a diary. What you save says a lot about you: what you want to read, where you want to travel, what you worry about, what you want to buy. With Reel Sloth, the videos, transcripts and screen text are processed on my own machine. No hosted AI model ever sees them. Notion is optional, and the copy/export mode needs no account at all.
- It's free to run, so the lazy option is actually viable. The whole point is to throw hundreds of saved reels at it overnight. A closed API would bill per minute of audio, per image and per token, and an "every reel I ever saved" run would cost real money. Here it costs electricity.
- I could match the model to the job. Whisper for speech, a small vision model for overlay text, and Gemma for sorting, each picked to fit a CPU and 16 GB. I could unload one before loading the next, which is something you can't control with someone else's API.
-
Everything is swappable.
llm,vlmandwhisperinconfig.tomltake any Ollama tag or Whisper size. Got a GPU? Use a bigger Gemma and Whispermedium. A better small model comes out next month? Change one line. The categories are just a prompt you can edit. - It still works when the internet doesn't. Once the reels are downloaded, transcription, vision and sorting all run offline. Where open beat closed, concretely: a closed API would have been faster to start with, but it would have seen every reel I've saved, charged me for every overnight run, and left me no way to trade quality for speed the way Fast / Thorough / Off does.
My Agent Session
✏️
The Lazy Payoff
Before: open the Saved folder, rewatch a reel, pause it on the right frame, type the book title into a notes app, repeat. Roughly a minute or two per reel, which is exactly why I never did it.
After: paste links (or point it at the export), press one button or start it before bed, and wake up to a checklist. On my test batch, 6 saved posts turned into 15 items in my Notion backlog without me watching a single reel again, including five Claude skills and an exhibition in Bengaluru I'd saved and completely forgotten about.
Prize Categories
-
Best Use of Gemma. Gemma 4 E2B (
gemma4:e2b, via Ollama) is the brain of Reel Sloth. It reads the combined caption, transcript and on-screen text of every reel, decides what the reel is about, and extracts each movie, book, tool or place as structured JSON, entirely on a CPU-only laptop.
來源:DEV Community · dev.to