*p5.brush
p5.brush.js is a versatile library for the p5.js ecosystem, tailored for artists, designers, and hobbyists who wish to explore natural textures in generative art. This library extends the drawing capa
Improve Instagram on PC with follow-back checks, photo music, downloads, full-size profile photos and chat themes. Free, open source and unofficial.
PluginsJavaScript · CSSGitHub @pedropablochavezOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
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
Unofficial browser extension for instagram.com: full-size profile pictures and downloads for posts, videos and stories. Passive, no data collection. Not affiliated with Meta.
Loading the full README.
Read the full README ↗A small, unofficial browser extension for Chromium-based browsers (Brave, Chrome, Edge) for instagram.com:
Unofficial project. Not affiliated with, endorsed by, or sponsored by Instagram or Meta Platforms, Inc. "Instagram" is a trademark of Meta Platforms, Inc. and is used here only to describe which website the extension works on.
Esc or click outside to close.usePolarisUnfollowMutation for those accounts from the completed scan. Requests
run one at a time, 4–4.8 seconds apart, with an extra 5-minute break every 5 accounts (separate from
scan pacing). Cancel remaining stops the rest; a request already sent may still complete.
Only explicit relationship confirmations remove an account from the results. Limits, blocks,
errors or uncertain responses stop the batch without retrying. Check an uncertain outcome on
Instagram before trying again. Following a private account again may require its owner's approval.
Add to whitelist beside an account adds it to your whitelist (accounts you follow on purpose, such as brands or
public figures): whitelisted accounts are never listed again, by account id, even after a rename.
Verified accounts are left out unless you turn on Show verified accounts, next to Start scan (also
available on the results). The Whitelist button is always in the panel. The list and the CSV
export show what remains, with a "Not shown" count. The whitelist (up to 5,000 accounts) and this choice are
saved in the extension's own storage on your computer, which instagram.com cannot read.Visit the installation website for a small extension-only ZIP, browser-specific instructions and privacy policy. The site currently offers manual installation. Once an approved Chrome Web Store listing is linked, its main button will open the store's normal confirmed install flow, including in Brave. The extension has not been submitted to the store yet.
Requires a Chromium-based browser using Chromium 116 or newer.
manifest.json directly at its root.brave://extensions (or chrome://extensions).manifest.json.Tip: open profiles by navigating inside the site (search, links) rather than pasting a URL; that is when the page loads the full-size picture data the extension reads.
The extension uses the media data the site loads while you browse. Downloads and music playback load the selected media file directly from the site's media servers. For a photo post on or just below the screen (or one you download) whose song or full video file the feed did not include, it asks the site for that post's details, the same request the site makes when you open the post, so the song is ready when you reach it. One post at a time, closest to the screen first, with recent lookups deduplicated. Caches retain up to 500 recent profiles, posts and story items each; an evicted post can be loaded again when revisited. Automatic lookups are capped per minute (20 ahead of the screen, 30 in total), requests time out, and the extension stops its own requests after HTTP 429 (1–15 minutes) or for 15 minutes after a block, verification or "try again later" answer, with no automatic retry. Large response copies are skipped without affecting the website's original response.
intercept.js runs in the page and reads the responses the site already downloads for you while you
browse normally, looking only for profile picture, post, story and post music URLs, and asks for a
post's details when the feed lacks them. It also reads song / original audio credits and whether a
user follows you from those same responses; displaying them does not make additional requests.
When you open a conversation, it turns on the flag in the site's own conversation request that
asks Instagram to include the chat's theme (the website has this feature but may leave it off).
No extra request is made; only that request's theme flag changes.
When you start a non-followers scan on your own profile, it requests the pages of your own
Followers / Following lists (/api/v1/friendships/<your id>/followers/ and /following/), one at a
time, and shares the post-detail lookups' queue and 429 cooldown. Confirmed selected unfollows
use the website's GraphQL mutation in the same queue; they do not start merely from scanning,
selecting accounts, opening the confirmation view or adding accounts to the whitelist.content.js shows the buttons, audio credits, the follows-you label, chat themes, the
non-followers panel and the viewer, using the data for the profile or post you are looking at.music-player.js first uses page audio, then switches to an extension-owned player if the page
returns NotAllowedError. It keeps the same volume, clip position and play / pause controls.offscreen.html / offscreen.js provide that player using the browser's offscreen API with the
AUDIO_PLAYBACK purpose. The document is bundled with the extension and loads only the selected
audio file from the site's media servers. No website is embedded in it.mp4fix.js adjusts the frame timing of small 1 fps "photo + music" story videos before they are saved.
Normal videos download directly without buffering a full copy in the tab. A fetched small story's
bytes are reused even if no repair is needed, avoiding a duplicate full-file download.background.js saves requested downloads and routes audio commands from Instagram tabs to the
internal player. Only one tab owns that player at a time; an old tab cannot stop a newer owner's song.It only works with content the site itself sends to your browser, so it cannot reveal anything you could not already see (your own Followers / Following lists are visible to you in those dialogs), and it does not bypass private accounts or any other access restriction. Profile pictures are publicly visible on Instagram, and the official mobile app already lets you view them in a larger size.
Run python scripts/build_distribution.py (Python 3.9+) to build dist/ig-tools-v2.6.2.zip and
dist/site/. The package contains only extension runtime assets, the license and privacy policy.
The GitHub Pages workflow builds this same ZIP and deploys the static site on main pushes. The
website has no analytics, third-party fonts or scripts, and no backend. GitHub serves the public site
and download, under its own hosting privacy policy.
Store submission text, original sample graphics and the remaining account steps are in
store/PUBLISHING.md. Set the real published store URL in distribution.json
after approval; the site then switches its primary CTA. No account, fee, agreement acceptance or
Chrome Web Store publication has been performed by the build scripts.
This extension collects no data at all:
www.instagram.com (to show the buttons), downloads (to save a file
when you ask it to), offscreen (to play a song in an internal extension document) and storage
(to remember the non-followers whitelist).See PRIVACY.md.
After changing the extension, reload it in brave://extensions, then reload Instagram. Put a photo
post with a song mostly in view. The extension chooses the eligible post with the largest visible
area in the feed column. A new post takes over at 60% of the viewport height; photos shorter than this
must be fully in view. The current song continues on small scrolls while its photo is still visible
and remains the largest visible post. It pauses when the photo leaves the viewport completely or
another post becomes dominant, including while the next post's own song is loading. Native videos,
reels and visible posts with audio also pause extension music when they dominate, even before their
post details are available or they reach the 60% start threshold. Navigating away or hiding the tab
also pauses it.
Hidden dialogs do not exclude the feed. Visibility is checked on scroll, photo
intersection changes and every 600 ms while the tab is visible, to catch layout shifts.
After updating to 2.3.0, reload the extension and Instagram, and leave a music post in view without
clicking ♪. If page playback is blocked, extension playback should start automatically. Scroll between
posts and switch / close tabs to check that the song changes or pauses. In the page console,
igtSongStatus() reports focus changes, playback attempts,
success and error names such as NotAllowedError. It also prints an asynchronous IG Tools music focus
snapshot with extension version, viewport size, eligible / dominant post, block / pause state,
last playback error, browser user activation and candidate photo visibility. Candidate top / bottom
and viewport-only visibility distinguish offscreen posts from ancestor clipping; clippedBy shows
the clipping boxes if a photo inside the viewport is incorrectly reduced to zero visible area.
These diagnostics stay in the tab; the layout checks make no network requests of their own.
audioEngine is page or extension. A failed fallback is reported as a playback error; it does not
change browser settings. A 1.5-second heartbeat renews a six-second playback lease. Losing the tab or
connection pauses immediately when detected; the lease stops any orphaned audio within six seconds.
The browser closes the internal document after 30 seconds without audio, per the
Offscreen API.
Run node --test tests/music-autoplay.test.js tests/extension-audio.test.js tests/resource-usage.test.js
for playback, bridge and resource regression tests (70 tests). The owner confirmed initial playback
without a click and stopping in Brave with v2.3.0, and audio credits with v2.3.1. Future playback changes
should also be checked in a logged-in browser. See Resource review for v2.3.2 limits,
validation and the scope of the checks. Playing music still uses data; usage depends on the source
files and the browser's buffering.
This software is provided "as is", without warranty of any kind, under the MIT License. The author is not responsible for how it is used. It may stop working at any time if the website changes. If you are a rights holder and have a concern about this project, please open an issue.