Known Limitations & Caveats

Technical limitations, known issues, and edge case documentation for the current version of FlowPick.

This document summarizes technical limitations and known issues of the current FlowPick version. Understanding these limitations helps avoid unexpected situations during use.


Limitation Level Explanation

Each limitation in this document is classified into three levels based on impact:

LevelIconMeaningExample
Hard Limitation🔴Cannot bypass, not supported by current versionDRM protected content, Blob mode 1.5GB limit
Soft Limitation🟡Has limitation but with workaround availableCORS cross-origin (can bypass with extension), FFmpeg performance (optional TS output)
Caveat🔵Doesn't affect functionality but worth knowing aboutSlower first load, segment URLs may expire

File Size Limitations

Blob Mode Hard Limit

When browser doesn't support File System Access API or StreamSaver.js, FlowPick degrades to Blob mode for file writing. This mode has a hard size limit:

Limit TypeThresholdBehavior
Warning threshold800MBConsole outputs warning, UI shows prompt
Hard limit1.5GBDownload rejected, user prompted to switch browser

Cause: Blob mode requires loading entire file into memory; exceeding 1.5GB may cause browser crash or page unresponsiveness.

Solution: Use Chrome 86+ or Edge 86+, which support File System Access API for streaming writes of any file size.

For complete comparison of three-tier write strategy and degradation logic, see Download Engine Architecture — Strategy Comparison Summary. For large file download failure troubleshooting steps, see Common Issues Troubleshooting — Large File Download Failure. For FSA API support status across browsers, see Browser Compatibility — Feature Support Matrix.

Memory Pressure

Even when using streaming write, these factors still consume memory:

  • Concurrently downloaded segment data (each segment typically 1-10MB)
  • FFmpeg WASM runtime memory (approximately 200-400MB)
  • Page UI and other components

Recommendations:

  • When downloading very large files (>5GB), reduce concurrent thread count to 1-2
  • Close other tabs consuming memory
  • Avoid running multiple FFmpeg remuxing tasks simultaneously
For complete memory safety management mechanism (size estimation, threshold checking, runtime monitoring), see Download Engine Architecture — Memory Safety Management. For concurrency configuration methods, see Configuration Reference.

Streaming Protocol Limitations

DRM Protected Content

FlowPick cannot handle the following types of protected content:

Protection TechnologyCommon PlatformsStatus
WidevineNetflix, Disney+Not Supported
PlayReadySome Windows platformsNot Supported
FairPlayApple TV+Not Supported
ClearKeySome test streamsNot Supported

Detection Method: When <ContentProtection> tag appears in DASH manifest, downloader explicitly indicates unsupported.

Why Can't DRM Be Supported?

The core of DRM systems is Content Decryption Module (CDM), a built-in closed-source binary component in browsers. CDM is deeply bound to OS and hardware, responsible for decrypting protected content and outputting decoded frames directly to GPU; application layer cannot intercept or read decrypted data. This is DRM's design goal—ensuring content isn't intercepted throughout the entire chain from decryption to display.

For DRM stream detection prompts and UI behavior, see Video Sniffing — DASH Streams. For troubleshooting failure to detect DRM content, see Common Issues Troubleshooting — Extension Cannot Detect Any Media.

AES-128 Encryption

FlowPick supports HLS AES-128 segment encryption, but with these limitations:

  • Only supports METHOD=AES-128, not SAMPLE-AES
  • Key files must be accessible via HTTP(S) directly
  • Does not support key URLs requiring Cookie authentication (online tool mode)
For complete technical implementation of AES-128 decryption (Web Crypto API, IV handling), see Download Engine Architecture — AES-128 Decryption. For encrypted stream detection process, see Video Sniffing — Encrypted Streams.

Live Streams

FlowPick is primarily designed for VOD (Video on Demand) content:

  • Live HLS streams can download cached segments, but cannot fetch future segments
  • Live stream segment lists continuously update; downloader doesn't automatically track new segments
  • Recommend waiting for live broadcast to end before downloading complete replay

Actual Effect of Live Stream Downloads:

During live broadcast (30 minutes played):
  M3U8 manifest contains last ~30 seconds of segments
  → Downloader can only get this 30 seconds of content
  → Cannot get previous or future segments

After broadcast ends:
  M3U8 manifest contains complete segment list
  → Downloader can get all content
  → Equivalent to VOD download
For complete scenario documentation for live replay downloads, see Live Replay Download. For HLS live stream manifest structure, see Video Sniffing — HLS Streams.

Separated Audio/Video Streams

Some DASH streams separate video and audio into independent AdaptationSets:

  • Downloader will list video and audio streams separately
  • Need to manually select matching video and audio streams
  • Merge requires FFmpeg WASM, takes longer time
  • If A/V duration mismatched, merge result may have A/V desync
For DASH stream A/V separation handling process and FMP4 reassembly, see Download Engine Architecture — DASH Stream Special Handling. For A/V desync troubleshooting and repair, see Common Issues Troubleshooting — Audio/Video Desync After Merge.

Browser Limitations

File System Access API

BrowserSupport Status
Chrome 86+Full support
Edge 86+Full support
FirefoxNot Supported
SafariNot Supported

On unsupported browsers, all downloads use Blob mode, subject to 1.5GB size limit.

For complete feature support matrix across browsers and browser selection recommendations, see Browser Compatibility. For troubleshooting when FSA API unavailable, see Common Issues Troubleshooting — File System Access API Unavailable.

SharedArrayBuffer

FFmpeg WASM multithreading mode requires SharedArrayBuffer, which requires website to set these HTTP response headers:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

If these headers aren't set, FFmpeg automatically degrades to single-thread mode; merge speed reduced by approximately 40-60%.

For SharedArrayBuffer browser support details and self-deployment configuration, see Browser Compatibility — Advanced APIs. For single-thread vs multi-thread performance comparison data, see Format Conversion — Multithreading Mode.

Service Worker

StreamSaver.js depends on Service Worker. Following situations cause StreamSaver unavailability:

  • Browser private browsing mode (some browsers restrict Service Worker)
  • Enterprise policy disables Service Worker
  • Website didn't correctly deploy mitm.html and streamsaver-sw.js
For StreamSaver.js degradation behavior and write strategy priority, see Download Engine Architecture — File Write Module. For corporate network environment special restrictions, see Common Issues Troubleshooting — Corporate Network Environment.

Network Limitations

CORS Cross-Origin Restrictions

Online tool mode (/m3u8-downloader, /dash-downloader) restricted by browser same-origin policy:

  • If streaming server doesn't set Access-Control-Allow-Origin response header, requests will be blocked
  • Some CDNs check Referer or Origin request headers
  • Extension version not subject to this restriction because it uses extension permissions for requests

CORS Error Technical Principles:

Online tool (flowpick.app) requesting CDN (cdn.example.com):

Browser sends request → CDN returns segment data
                      ↓
              Browser checks response headers:
              Does Access-Control-Allow-Origin include flowpick.app?
                      ↓
              No → Browser blocks JavaScript from reading response
              Yes → Normal read

Extension version:
Extension makes requests via chrome.webRequest / chrome.fetch
→ Not subject to same-origin policy
→ Can read responses from any origin
For CORS error troubleshooting and solutions, see Common Issues Troubleshooting — Download Fails Midway. For functional differences between extension and online tools, see Online Tools.

Request Rate Limiting

Some CDNs throttle high-frequency requests:

  • High concurrent thread count may trigger 429 (Too Many Requests) errors
  • Recommend keeping concurrency at 4 or below
  • If encountering throttling, reduce concurrency and retry
For relationship between concurrency and performance (including diminishing returns analysis), see Download Engine Architecture — Concurrency vs Performance. For slow download speed diagnostic flow, see Common Issues Troubleshooting — Slow Download Speed.

Segment URL Expiration

Segment URLs from some streaming services contain time-sensitive tokens:

  • Segments cannot be downloaded after token expiration
  • Expiration time typically ranges from minutes to hours
  • Recommend starting download promptly after obtaining manifest
  • If download interrupted too long, may need to re-fetch manifest

Typical Expiration Scenarios:

Service TypeTypical Expiration TimeRecommendation
Online course platforms2-4 hoursDownload immediately after obtaining manifest
Live replays30 min - 2 hoursComplete quickly, avoid interruption
Short video platforms5-15 minutesSingle download usually sufficient
Paid streaming services1-5 minutesVery short window, must complete fast
For troubleshooting download midway failures (including HTTP 403 error handling), see Common Issues Troubleshooting — Download Fails Midway. For download engine retry mechanism, see Download Engine Architecture — Retry Mechanism.

Format Conversion Limitations

FFmpeg WASM Performance

FFmpeg runs as WebAssembly in browser, performance far below native version:

OperationNative FFmpegFFmpeg WASM (Single-thread)FFmpeg WASM (Multi-thread)
TS → MP4 (1GB)~5 sec~60-90 sec~30-50 sec
A/V merge (1GB)~10 sec~120-180 sec~60-90 sec

Reasons for Performance Difference:

  1. WASM execution overhead: WebAssembly runs in browser sandbox, instruction execution efficiency approximately 70-80% of native
  2. SIMD limitations: FFmpeg heavily uses SIMD instruction optimization; WASM SIMD support less comprehensive than native
  3. Memory access: WASM linear memory model differs from native memory management
  4. I/O bottleneck: Virtual filesystem read/write speed far below native filesystem
For complete technical implementation of FFmpeg WASM (loading, multi-thread detection, command execution), see Format Conversion — FFmpeg WASM Engine. For how to skip FFmpeg by selecting TS output, see Format Conversion — Output Format Selection.

Unsupported Conversions

Following conversion paths currently unsupported:

  • Any format → AVI, MOV, MKV, WebM
  • Video codec conversion (e.g., H.264 → H.265)
  • Audio codec conversion (e.g., AAC → MP3)
  • Resolution scaling
  • Adding watermarks or subtitles

FlowPick's FFmpeg integration focuses on container format conversion (remuxing), without involving encoding/decoding.

Remuxing vs Transcoding:

Remuxing (FlowPick supports):
  TS container → Extract H.264 video stream + AAC audio stream → Package into MP4 container
  Characteristics: No codec change, fast speed, lossless

Transcoding (FlowPick doesn't support):
  H.264 video stream → Decode → Re-encode as H.265 → Package
  Characteristics: Codec change, slow speed, lossy, CPU-intensive
For distinction between containers and codecs, see Format Conversion — Containers & Codecs. For TS and MP4 format player compatibility, see Format Conversion — Output Format Selection.

Extension Version Limitations

Manifest V3 Limitations

FlowPick extension uses Chrome Manifest V3, subject to these platform limitations:

  • Service Worker lifecycle limited (terminates after ~30 seconds idle)
  • Cannot use persistent background page
  • Network request monitoring relies on webRequest API

Impact of Manifest V3 on FlowPick:

LimitationImpactMitigation
Service Worker 30-second timeoutLong downloads may be interruptedMaintain heartbeat during download to prevent SW sleep
No persistent backgroundCannot continuously monitor in backgroundActivate detection when user opens popup
webRequest changed to read-onlyCannot modify request headersDoesn't affect FlowPick (only reads, doesn't modify)
For extension installation and activation steps, see Installation Guide. For permissions requested by extension and their purposes, see Privacy & Security — Permission Explanation.

Detection Scope

Extension's media detection relies on network request monitoring:

  • Can only detect requests initiated after extension activation
  • Page refresh allows re-detection
  • Some websites using WebSocket or MSE may not have media URLs detected
  • Media in iframes may be undetectable (depends on iframe's cross-origin policy)
For media detection technical principles and HLS/DASH manifest parsing, see Video Sniffing. For troubleshooting steps when media undetected, see Common Issues Troubleshooting — Media Detection Issues.

Known Bugs

Large File Blob Download May Hang

Symptom: When downloading files approaching 1.5GB in Blob mode, browser may become unresponsive for extended periods.

Cause: new Blob([...]) construction requires copying all data; memory allocation and copying for large files takes considerable time.

Workaround: Use Chrome browser to enable streaming write.

For Blob mode memory limits and alternatives, see Download Engine Architecture — Strategy Three: Blob Fallback.

Slow First FFmpeg Load

Symptom: First time using format conversion feature, FFmpeg loading takes 10-30 seconds.

Cause: FFmpeg WASM core files (~8MB) need to be downloaded from network and compiled.

Note: This is normal behavior; subsequent uses leverage browser cache, significantly improving load speed.

Load Time Breakdown:

First load:
  Download WASM file (~8MB)   →  2-5 seconds (depends on network speed)
  WASM compilation            →  5-15 seconds (depends on CPU)
  Initialize virtual FS       →  1-3 seconds
  Total                      →  10-30 seconds

Subsequent loads (cache hit):
  Read WASM from cache        →  <1 second
  WASM compilation (may cache) →  1-3 seconds
  Total                      →  2-5 seconds
For FFmpeg WASM loading flow and multi-thread detection, see Format Conversion — FFmpeg WASM Engine.

Occasional CDN Segment Download Failures

Symptom: Individual segments return 503 or network errors during download.

Cause: CDN node temporary failure or network fluctuation.

Note: FlowPick has built-in 3-retry mechanism (exponential backoff); usually auto-recovers. If all retries fail, segment is skipped and logged.

For detailed retry mechanism strategy (exponential backoff schedule, cases that don't trigger retry), see Download Engine Architecture — Retry Mechanism.