🌊 FlowPick

August 10, 2026 Β· View on GitHub

Smart Media Sniffer Β· Preview & Download β€” Automatically capture video streams, audio, and images from web pages with built-in playback and instant download.

πŸ‡¨πŸ‡³ δΈ­ζ–‡ζ–‡ζ‘£ | πŸ‡¬πŸ‡§ English

License Stars Platform Website


🎯 Core Features

πŸ“‘ Universal Media Sniffing

Four-layer detection mechanism for precise media capture:

CategorySupported Formats
StreamingM3U8 (HLS), MPD (DASH), HTTP-FLV, MPEG-TS
VideoMP4, WebM, MKV, AVI, MOV, WMV, FLV, OGV, 3GP, 3G2, MPEG
AudioMP3, M4A, OGA, WEBA, WAV, FLAC, AAC, OGG
ImageGIF, JPG, PNG, WebP, SVG, BMP, ICO, data: URL (base64)
DocumentPDF and other document resources
SubtitleSRT, VTT, ASS and other subtitle files
  • Network Request Interception β€” Real-time monitoring via webRequest API
  • Content-Type Priority β€” Analyzes response headers first for accurate format detection
  • URL Pattern Matching β€” Smart recognition of media signatures in URL paths and parameters
  • Fetch/XHR Injection β€” Injected scripts capture dynamically loaded media requests
  • MSE Stream Capture β€” Intercepts MediaSource streams to capture videos with no direct URL (e.g. some web players); captured MSE streams can be downloaded
  • Platform-specific Adapters β€” Built-in scripts for Douyin and similar sites parse page JSON to extract multi-bitrate video/audio candidates; extensible to more platforms via the generic PlatformMediaTask interface

🎬 Built-in Playback & Preview

Preview media without leaving the extension panel:

  • Stream Playback β€” Built-in HLS.js / DASH.js / mpegts.js players supporting M3U8, MPD, HTTP-FLV, MPEG-TS with automatic error recovery
  • Stream Thumbnails β€” Auto-decodes the first frame of streams as list thumbnails, with LRU cache + concurrency control + retry
  • HLS Proxy Loader β€” Fetches segments via the background proxy with auth headers and Referer, bypassing CORS and hotlink protection
  • DRM Detection β€” Automatically detects Widevine / PlayReady DRM-protected content and warns it cannot be previewed
  • Live Recording β€” Record HTTP-FLV / MPEG-TS live streams while playing; auto-stops at the 500MB limit
  • Audio Spectrum β€” Real-time frequency visualization powered by Web Audio API
  • Image Preview β€” Full-screen lightbox with automatic dimension detection

πŸ” Smart Filtering

Quickly locate target resources:

  • Category Tabs β€” One-click switch between All / Stream / Video / Audio / Image
  • Format Filter β€” Filter by specific media format
  • Size Filter β€” Set min/max file size range
  • Resolution Filter β€” Filter by video resolution (8K/4K/1080P/720P, etc.)
  • Dimension Filter β€” Filter by image width and height
  • Regex Search β€” Toggle between plain and regex matching for URL search, with real-time regex validation
  • Time Sorting β€” Sort by detection time ascending/descending

βš™οΈ Flexible Sniffing Rules

Fine-grained control over sniffing behavior:

  • Per-type Toggle β€” Independently enable/disable sniffing for streaming/video/audio/image/document/subtitle
  • Minimum Capture Size β€” Set file size thresholds per type to filter out fragments
  • Domain Exclusion β€” Exclude specific domains to avoid unwanted captures
  • Hide Stream Segments β€” Hide HLS/DASH .ts/.m4s segments and show only the playlist entry (m3u8/mpd) to keep the list clean
  • data: Image Capture β€” Detect <img src="data:image/..."> inline base64 images, with a configurable min size to filter 1Γ—1 tracking pixels
  • Per-tab Item Limit β€” Configurable 10–5000 items per tab; oldest items are evicted automatically to avoid memory bloat

πŸ“Š Stream Manifest Parsing

Deep parsing of M3U8 / MPD manifests for complete metadata:

  • Multi-bitrate Variants β€” Lists all quality variants (resolution + bandwidth + label)
  • Audio Tracks β€” Identifies detached audio tracks (EXT-X-MEDIA)
  • Duration Estimation β€” Sums EXTINF or parses MPD mediaPresentationDuration
  • Size Estimation β€” Prefers byterange summation; otherwise multi-point segment sampling Γ— count (HEAD + Range probing, saves bandwidth)

πŸ“‹ Batch Operations

  • Select All β€” Quickly select all media items
  • Batch Download β€” Download multiple selected files at once
  • Copy URL β€” One-click copy media links to clipboard

🏷️ Rich Media Information

Automatically fetched and displayed:

  • File Size β€” Real-time file size display
  • Video Resolution β€” MediaInfo-powered width/height parsing with resolution labels
  • Audio Duration β€” Automatic duration detection
  • Image Dimensions β€” Automatic width/height recognition
  • Stream Duration/Size β€” Estimated total duration and size for VOD streams via manifest parsing

🌐 More Features

  • Side Panel Mode β€” Supports Chrome Side Panel and Firefox Sidebar for a more spacious panel, easier for long lists
  • Welcome Guide β€” First-run 6-step tutorial and 9 FAQ entries
  • Downloader Page Redirect β€” One-click jump to dedicated flowpick.net downloaders (m3u8 / dash / video) with multi-language routing
  • M3U8 Extension Integration β€” Detects and integrates with external M3U8 download extensions
  • Tab Isolation β€” Independent media list per browser tab
  • Badge Counter β€” Real-time capture count on the extension icon
  • Theme β€” System / Light / Dark themes
  • List Density β€” Compact / Comfortable display densities
  • i18n β€” English, Simplified Chinese, Traditional Chinese, Japanese, German, Spanish, Korean (7 languages, can follow system)
  • Keyboard Shortcuts β€” Configurable shortcut to open the panel

πŸ“¦ Installation

Install from Stores

BrowserLink
ChromeChrome Web Store
EdgeEdge Add-ons
FirefoxFirefox Add-ons

🌐 Website: flowpick.net

Build from Source

  1. Clone the repository:
git clone https://github.com/ezwebtools/flowpick.git
cd flowpick
  1. Install dependencies:
npm install
  1. Build for production:
# Chrome
npm run build

# Firefox
npm run build:firefox
  1. Load the extension:
    • Chrome/Edge: Go to chrome://extensions/, enable "Developer mode", click "Load unpacked", and select the .output/chrome-mv3 directory
    • Firefox: Go to about:debugging#/runtime/this-firefox, click "Load Temporary Add-on", and select .output/firefox-mv2/manifest.json

Development Mode

# Chrome (hot reload)
npm run dev

# Firefox (hot reload)
npm run dev:firefox

πŸš€ Usage

  1. Auto Sniffing β€” FlowPick automatically captures media requests as you browse
  2. View List β€” Click the extension icon to see all detected media for the current tab
  3. Filter & Sort β€” Use tabs and filters to quickly locate target resources
  4. Preview & Play β€” Click play to stream video/audio in-panel, or preview images full-screen
  5. Copy URL β€” One-click copy media URL to clipboard
  6. Download β€” Click download to save media files directly

πŸ’‘ Tip: Some videos must start playing on the page before they can be detected.


πŸ› οΈ Tech Stack

TechnologyPurpose
WXTModern web extension framework
Vue 3Composition API-driven UI
TypeScriptType safety
Tailwind CSS v4Utility-first styling
hls.jsHLS streaming playback / first-frame thumbnails
dash.jsDASH streaming playback / first-frame thumbnails
mpegts.jsHTTP-FLV / MPEG-TS live stream playback and recording
m3u8-parserM3U8 manifest parsing
mpd-parserMPD manifest parsing
mediainfo.jsMedia metadata parsing
ViteBuild tooling

πŸ“ Project Structure

flowpick/
β”œβ”€β”€ entrypoints/
β”‚   β”œβ”€β”€ background.ts      # Background: network monitoring, media detection, download, proxy fetch, DRM detection
β”‚   β”œβ”€β”€ content.ts         # Content script: page injection, message relay, MSE stream capture
β”‚   β”œβ”€β”€ douyin.content.ts  # Douyin platform adapter: parses page JSON for multi-bitrate candidates
β”‚   β”œβ”€β”€ injected.ts        # Injected script: Fetch/XHR interception, MSE interception
β”‚   β”œβ”€β”€ popup/             # Popup panel UI
β”‚   β”‚   β”œβ”€β”€ App.vue        # Main component: list, playback, settings (also drives the side panel)
β”‚   β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”‚   └── SettingsView.vue  # Settings panel component
β”‚   β”‚   β”œβ”€β”€ composables/
β”‚   β”‚   β”‚   β”œβ”€β”€ useMediaFilters.ts      # Filter/search/sort (incl. regex search)
β”‚   β”‚   β”‚   β”œβ”€β”€ useMediaStore.ts        # Media list state management
β”‚   β”‚   β”‚   β”œβ”€β”€ useMediaViewModels.ts   # Media view-model cache
β”‚   β”‚   β”‚   └── useStreamThumbnails.ts  # Stream first-frame thumbnails
β”‚   β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”‚   └── hlsProxyLoader.ts       # HLS background proxy loader
β”‚   β”‚   β”œβ”€β”€ main.ts        # Entry point
β”‚   β”‚   └── style.css      # Styles
β”‚   β”œβ”€β”€ sidepanel/         # Side panel entry (Chrome Side Panel / Firefox Sidebar)
β”‚   β”œβ”€β”€ welcome/           # Welcome guide: tutorial + FAQ
β”‚   β”œβ”€β”€ download/          # Download page
β”‚   β”‚   β”œβ”€β”€ App.vue        # Download progress component
β”‚   β”‚   └── index.html     # Download page entry
β”‚   └── options/           # Options page
β”‚       └── App.vue        # Settings component
β”œβ”€β”€ utils/
β”‚   β”œβ”€β”€ detect.ts          # Media format detection (Content-Type + URL pattern)
β”‚   β”œβ”€β”€ settings.ts        # Settings management (sniffing rules, domain exclusion, capture toggles)
β”‚   β”œβ”€β”€ storage.ts         # Storage management (per-tab data persistence)
β”‚   β”œβ”€β”€ stream-parser.ts   # M3U8/MPD manifest parsing (variants/duration/size estimation)
β”‚   β”œβ”€β”€ platform-media.ts  # Generic platform adapter interface (PlatformMediaTask)
β”‚   β”œβ”€β”€ useM3u8Ext.ts      # External M3U8 download extension integration
β”‚   └── i18n.ts            # i18n + theme/density management (7 languages)
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ _locales/          # Internationalization (en / zh_CN / zh_TW / ja / de / es / ko)
β”‚   β”œβ”€β”€ icon/              # Extension icons
β”‚   └── MediaInfoModule.wasm  # MediaInfo WASM module
β”œβ”€β”€ wxt.config.ts          # WXT configuration (permissions, Side Panel, Sidebar)
└── package.json           # Project dependencies

πŸ” Permissions

PermissionPurpose
storageStore detected media lists and user settings
tabsManage tab-specific media lists
webRequestMonitor network requests for media detection
declarativeNetRequestStrip Origin/Cookie headers during proxy fetch to bypass hotlink protection
downloadsEnable file download functionality
notificationsDownload completion and status notifications
sidePanelChrome side panel mode (Chromium only)
<all_urls>Access all URLs for media detection

🌍 Browser Support

  • Chrome / Edge / Chromium (Manifest V3)
  • Firefox (Manifest V2)

🀝 Contributing

Contributions are welcome! Feel free to submit a Pull Request.

πŸ“„ License

MIT License β€” see LICENSE for details.

πŸ™ Acknowledgments