Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
Save profiles, posts, stories and highlights from instagram.com into a local folder, skipping media you already have.
PluginsJavaScript · CSSGitHub @underw8OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Chrome extension that saves profiles, posts, stories and highlights from instagram.com into a local folder. No tracking, nothing leaves your device.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Save profiles, posts, stories and highlights from instagram.com into a local collection.
Framestash is not affiliated with, endorsed by or sponsored by Instagram or Meta.
Status: Framestash downloads profiles, single posts, grid and feed items, stories and highlights into an existing collection. All saving happens in a Framestash side panel, which holds the folder once for every tab and runs a download queue. The extension is in extension/; history and test results are in the git log. Specs are in docs/.Read the full README ↗Save profiles, posts, stories and highlights from instagram.com into a local collection.
Install from the Chrome Web Store
Framestash is not affiliated with, endorsed by or sponsored by Instagram or Meta.
MIT licence · Privacy policy · Security policy · Releasing
Status: Framestash downloads profiles, single posts, grid and feed items, stories and highlights into an existing collection. All saving happens in a Framestash side panel, which holds the folder once for every tab and runs a download queue. The extension is in extension/; history and test results are in the git log. Specs are in docs/.
Install. Add it from the Chrome Web Store, or, to run the source, go to chrome://extensions, turn on Developer mode, click Load unpacked, and choose the extension/ folder. Pin Framestash to the toolbar.
Choose the folder. Click the Framestash icon to open the side panel. The first time, it shows a "Before you start" notice with the Use responsibly points below; click I understand to dismiss it (it won't come back, and nothing downloads until you do). Then Choose and pick the root folder of your collection: the one that contains the account folders, e.g. IG. It's remembered across tabs and restarts. After a browser restart, one click on Allow access restores it.
Download from Instagram. Framestash adds buttons in the bottom-right corner, above Instagram's Messages button, plus a download icon in Instagram's own action rows:
/p/…, /reel/…, /reels/…): Save post saves every slide into <root>/<owner>/./stories/<user>/) or highlight page (/stories/highlights/<id>/): saves those stories. Stories go to <root>/<user>/stories/; with Highlights in their own folders on, each highlight goes to stories/<highlight title or id>/. The download icon in the story viewer's header, next to ⋯, saves only the item on screen. Downloading never marks a story as seen.Every button sends a job to the panel's queue, opening the panel first if it's closed, and the status card shows the job's progress.
Re-run any time. A job run again only fetches what's missing. A profile re-run stops listing after 12 already-saved posts in a row (pinned posts aside), once a previous run of it listed to the end; posts deleted from disk below that point come back only with List every post. An interrupted profile (Stop, closed panel, error) picks up its listing where it stopped instead of starting again from page 1. Failed items are listed in the panel's DevTools console.
After updating Framestash, reload open Instagram tabs. Chrome only adds the new scripts to pages loaded after the update, and Framestash tells you when this is needed.
<root>/<username>/<username>_<taken_at>_<id>.<ext>, the format existing collections already use (collection-format.md)..framestash.json, written the first time Framestash saves there.
_<ownerId> in their file names.<username>_<userId>/..error.txt and corrupt files already in a collection are reported by the check, never deleted.Not yet: DASH video quality (dash-video.md).
When Instagram changes something, re-run playbook steps 1–5 (playbook.md) and update instagram-api.md before changing code.
Open work lives in TASKS.md. The saved workflow fs-task (.claude/workflows/fs-task.js) takes one task per run:
T2), or the first one with status todo.CLAUDE.md and docs/.needs-check, with the live checks only you can do (reloads, real clicks, folder picks).Start it in Claude Code by asking it to run the fs-task workflow, optionally naming the task. To run several tasks back to back, use fs-tasks (.claude/workflows/fs-tasks.js) with a list of task ids; it stops at the first task that doesn't end in a commit, and the live checks collect in TASKS.md for later.
Plan, Build and Review run on the session's model, because they carry the security and compatibility rules. Pick and Finish are mechanical and run on smaller models.
--hover-overlay hover.design/; render-icons.sh rebuilds the PNGs, including the light and dark wordmarks at the top of this README. wordmark.svg is the brand master; the panel and the status card draw the wordmark in CSS.design/hero/hero.html: put screenshots you have the rights to in design/hero/shots/ and run design/hero/render.sh.Run from the repo root:
node test/naming.test.js # naming, dedup keys, routing, owner inference, file sniffing, queue entries
node test/collection.test.js # folder resolution (renames, reused usernames, conflicts) and the collection check
node test/pacer.test.js # pacing, budgets, block-signal classification and cool-downs
framestash/
├── extension/ the MV3 extension (load unpacked)
├── design/ logo sources + render-icons.sh; hero/ holds the README cover
├── test/ node checks (naming, collection, pacer)
├── scripts/ package.sh: runs the checks, then zips extension/ into dist/; check-manifest.js validates the manifest
├── docs/ collection format, Instagram API, probes, design notes, privacy policy
├── .github/ CI, release, CodeQL, Dependabot, store publish (docs/releasing.md)
├── TASKS.md open work, consumed by the fs-task workflow
├── .claude/workflows/ fs-task.js (one task), fs-tasks.js (several in order)
├── README.md this file
├── LICENSE MIT licence
├── SECURITY.md how to report a vulnerability
└── CLAUDE.md ground rules for working here
isTrusted), so page scripts can't trigger downloads.sidePanel, plus host access to instagram.com and Instagram's CDN so the panel can fetch media.