尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证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.
翻译准备中
正在加载完整 README。
查看完整 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.