Chrome extension media sniffer
Skill AravindS-Wick/aravindhan-skills/skills/library/chrome-extension-media-sniffer
Implementation specifications for browser extension-based media sniffing, stream parsing (HLS/DASH), DOM scraping, and local/remote helper backends for video downloading.From its SKILL.md
npx -y skills add AravindS-Wick/aravindhan-skills --skill chrome-extension-media-snifferAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.4 KB, 770 tokens by cl100k_base, as published. Nobody here has run it
chrome-extension-media-sniffer
This skill defines the technical implementation guidelines for browser extension media sniffing, intercepting network requests, parsing playlist files (HLS/M3U8/DASH), resolving hidden high-resolution media source tags, and orchestrating downloads using a remote/local python helper backend.
📡 1. Network Interception (Request & Response Header Sniffing)
To sniff streaming and resource chunks reliably in MV3 extensions:
- Set up dynamic interceptors via the background
service-worker.js:chrome.webRequest.onBeforeRequest.addListener( (details) => { // Filter details.url for target media formats: .m3u8, .mpd, .mp4, .mp3, etc. }, { urls: ["<all_urls>"] } ); - Sniff headers to capture resource sizes (e.g.
content-length):chrome.webRequest.onHeadersReceived.addListener( (details) => { const contentLengthHeader = details.responseHeaders.find( (h) => h.name.toLowerCase() === "content-length" ); if (contentLengthHeader) { const sizeBytes = parseInt(contentLengthHeader.value); // Save resource size mapping to cache/storage } }, { urls: ["<all_urls>"] }, ["responseHeaders"] );
🔍 2. DOM Scraper & Dynamic Cleaners
Inject or run content scripts (content-script.js) to capture immediate elements:
- Videos/Audios: Gather all standard source files:
document.querySelectorAll('video, audio, source').forEach(el => { const url = el.src || el.currentSrc; // Save element sources }); - Images: Extract clean, high-resolution original URLs by stripping device or responsive-resizer parameters:
- Unsplash: Match
images.unsplash.comand replace query parameters with?q=85&fm=jpg. - Pexels: Replace resizer subpaths or queries with
?auto=compress&cs=tinysrgb&fit=crop&h=1200&w=1600or equivalent originals. - Wikimedia: Replace thumbnail paths (
/thumb/.../page.jpg/...px-page.jpg) with the direct file namespace.
- Unsplash: Match
- E-Commerce Elements: Scan page arrays, scripts, and product layout divs to find lazy-loaded variant details.
🎼 3. Stream & Playlist Playlist Parsing
For HLS (.m3u8) playlists:
- Fetch the playlist structure using clean HTTP request headers:
async function parseHlsPlaylists(url) { const res = await fetch(url); const content = await res.text(); // Parse bandwidth lines (e.g., #EXT-X-STREAM-INF:BANDWIDTH=...) to extract resolutions. }
💻 4. Python-Based Backend Helper (yt-dlp integration)
When client-side extraction is blocked, delegate downloading to a containerized Python backend running yt-dlp:
- Docker Setup: Ensure the container has
python3,ffmpeg, andyt-dlpinstalled. - Dynamic Config: Bind to
0.0.0.0and utilize thePORTenvironment variable:import os from flask import Flask app = Flask(__name__) port = int(os.environ.get("PORT", 8080)) - Fallback Directory: Ensure downloads are saved to a temporary directory writable inside server environments (e.g.
/tmportempfile.gettempdir()).
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most media documents skills give in 770 tokens
Counted across 157 of the 158 authors here whose files we hold, read 2026-08-07
- Provide posting time recommendationsin 7 of 157, across 5 files
- Track metrics over time to identify trendsin 6 of 157, across 2 files
- Read marketing context file before startingin 6 of 157, across 5 files
- Choose platforms based on audience presencein 6 of 157, across 4 files
- Adapt tone for each platformin 6 of 157, across 4 files
- Ensure data completeness before analysisin 5 of 157, across 1 file
- Compare metrics within same time periodsin 5 of 157, across 1 file
- Account for platform-specific benchmarksin 5 of 157, across 1 file
- Separate organic and paid metricsin 5 of 157, across 1 file
- Include context when interpreting resultsin 5 of 157, across 1 file
- Keep tweets under 280 charactersin 5 of 157, across 3 files
- Download top-K results with an attribution sidecarin 5 of 157, across 2 files
Said here and by no other author read
- intercept network requests for media formats
- capture resource sizes from response headers
- inject content scripts to scrape media sources
- strip image query parameters for original URLs
- fetch HLS playlists to extract resolutions
- delegate blocked downloads to Python backend
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.