[{"data":1,"prerenderedAt":957},["ShallowReactive",2],{"navigation":3,"blog":49,"\u002Fblog":62},[4,23],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11,"children":-1},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16,"children":-1},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21,"children":-1},"Usage","\u002Fdocs\u002Fgetting-started\u002Fusage","1.docs\u002F1.getting-started\u002F3.usage","i-lucide-sliders",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Features","i-lucide-star","\u002Fdocs\u002Fessentials","1.docs\u002F2.essentials",[29,34,39,44],{"title":30,"path":31,"stem":32,"icon":33,"children":-1},"Video Sniffing","\u002Fdocs\u002Fessentials\u002Fmarkdown-syntax","1.docs\u002F2.essentials\u002F1.markdown-syntax","i-lucide-video",{"title":35,"path":36,"stem":37,"icon":38,"children":-1},"Audio Capture","\u002Fdocs\u002Fessentials\u002Fcode-blocks","1.docs\u002F2.essentials\u002F2.code-blocks","i-lucide-music",{"title":40,"path":41,"stem":42,"icon":43,"children":-1},"Image Download","\u002Fdocs\u002Fessentials\u002Fprose-components","1.docs\u002F2.essentials\u002F3.prose-components","i-lucide-image",{"title":45,"path":46,"stem":47,"icon":48,"children":-1},"Privacy & Security","\u002Fdocs\u002Fessentials\u002Fimages-embeds","1.docs\u002F2.essentials\u002F4.images-embeds","i-lucide-shield-check",{"id":50,"title":51,"body":52,"description":53,"extension":54,"meta":55,"navigation":56,"path":58,"seo":59,"stem":60,"__hash__":61},"blog\u002F3.blog.yml","Blog",null,"Tips, tutorials, and updates from the FlowPick team.","yml",{},{"icon":57},"i-lucide-pencil","\u002Fblog",{"title":51,"description":53},"3.blog","Hqidzu2KDQ4kNgavgJ91X3x5sxo6iVFgykapShy0uUg",[63,274,647],{"id":64,"title":65,"authors":66,"body":72,"date":264,"description":265,"extension":266,"image":267,"meta":268,"navigation":269,"path":270,"seo":271,"stem":272,"__hash__":273},"articles\u002F3.blog\u002F1.hls-without-ffmpeg.md","How to Download M3U8\u002FHLS Streams Without FFmpeg",[67],{"name":68,"to":69,"avatar":70},"FlowPick Team","https:\u002F\u002Fgithub.com\u002Fnuxt-ui-templates\u002Fsaas",{"src":71},"https:\u002F\u002Fi.pravatar.cc\u002F120?img=1",{"type":73,"value":74,"toc":249},"minimark",[75,79,84,96,99,103,106,125,128,132,135,140,143,147,150,154,157,179,183,186,190,193,213,216,246],[76,77,78],"p",{},"Downloading M3U8\u002FHLS streams used to require FFmpeg, command-line tools, or desktop software. FlowPick changes that by handling everything inside your browser.",[80,81,83],"h2",{"id":82},"what-is-m3u8hls","What Is M3U8\u002FHLS?",[76,85,86,87,91,92,95],{},"HLS (HTTP Live Streaming) is the most widely used streaming protocol on the web. Instead of sending a single video file, the server breaks the video into small segments (",[88,89,90],"code",{},".ts"," files) and provides a playlist file (",[88,93,94],{},".m3u8",") that lists all segments.",[76,97,98],{},"When you watch a video on most streaming sites, your browser is constantly fetching these small segments and playing them in sequence. That's why you can't simply \"right-click → save\" a streaming video — there's no single file to save.",[80,100,102],{"id":101},"the-traditional-way-ffmpeg","The Traditional Way: FFmpeg",[76,104,105],{},"Before browser-based solutions, downloading HLS streams typically meant:",[107,108,109,113,116,122],"ol",{},[110,111,112],"li",{},"Find the M3U8 URL using browser DevTools",[110,114,115],{},"Install FFmpeg on your computer",[110,117,118,119],{},"Run a command like ",[88,120,121],{},"ffmpeg -i \"url.m3u8\" -c copy output.mp4",[110,123,124],{},"Wait for the download and merge to complete",[76,126,127],{},"This works, but it's cumbersome. You need to install FFmpeg (which is a large tool), use the command line, and manage the process manually.",[80,129,131],{"id":130},"the-flowpick-way-in-browser-merging","The FlowPick Way: In-Browser Merging",[76,133,134],{},"FlowPick eliminates all of that. Here's how it works:",[136,137,139],"h3",{"id":138},"_1-auto-detection","1. Auto-Detection",[76,141,142],{},"When you open a page with HLS content, FlowPick automatically detects the M3U8 manifest by monitoring network requests. No need to open DevTools or hunt for URLs.",[136,144,146],{"id":145},"_2-fragment-download","2. Fragment Download",[76,148,149],{},"Once you click \"Download\", FlowPick fetches all the TS segments in parallel using multiple threads. This is significantly faster than sequential downloading.",[136,151,153],{"id":152},"_3-in-browser-merging","3. In-Browser Merging",[76,155,156],{},"Instead of using FFmpeg, FlowPick uses the browser's built-in APIs to merge the fragments:",[158,159,160,167,173],"ul",{},[110,161,162,166],{},[163,164,165],"strong",{},"WebAssembly",": Handles the binary merging of TS segments",[110,168,169,172],{},[163,170,171],{},"Blob API",": Combines the segments into a single file in memory",[110,174,175,178],{},[163,176,177],{},"Download API",": Saves the final file to your computer",[136,180,182],{"id":181},"_4-quality-selection","4. Quality Selection",[76,184,185],{},"For adaptive bitrate streams (most modern HLS), FlowPick shows all available quality levels. Choose 1080p, 720p, or any resolution the stream offers.",[80,187,189],{"id":188},"privacy-advantage","Privacy Advantage",[76,191,192],{},"Since everything happens in your browser:",[158,194,195,201,207],{},[110,196,197,200],{},[163,198,199],{},"No server uploads",": Your video data never leaves your device",[110,202,203,206],{},[163,204,205],{},"No tracking",": We don't log what you download",[110,208,209,212],{},[163,210,211],{},"No accounts",": No sign-up required, no personal data collected",[80,214,5],{"id":215},"getting-started",[107,217,218,234,237,240,243],{},[110,219,220,221,228,229],{},"Install FlowPick from the ",[222,223,227],"a",{"href":224,"rel":225},"https:\u002F\u002Fchromewebstore.google.com\u002F",[226],"nofollow","Chrome Web Store"," or ",[222,230,233],{"href":231,"rel":232},"https:\u002F\u002Fmicrosoftedge.microsoft.com\u002Faddons\u002F",[226],"Edge Add-ons",[110,235,236],{},"Navigate to any page with streaming video",[110,238,239],{},"Click the FlowPick icon in your toolbar",[110,241,242],{},"Select the stream and quality level",[110,244,245],{},"Click \"Pick\" to start downloading",[76,247,248],{},"That's it — no FFmpeg, no command line, no hassle.",{"title":250,"searchDepth":251,"depth":251,"links":252},"",2,[253,254,255,262,263],{"id":82,"depth":251,"text":83},{"id":101,"depth":251,"text":102},{"id":130,"depth":251,"text":131,"children":256},[257,259,260,261],{"id":138,"depth":258,"text":139},3,{"id":145,"depth":258,"text":146},{"id":152,"depth":258,"text":153},{"id":181,"depth":258,"text":182},{"id":188,"depth":251,"text":189},{"id":215,"depth":251,"text":5},"2025-04-20","Learn how FlowPick detects and merges M3U8 streaming fragments entirely in your browser — no FFmpeg, no command line, no server uploads.","md","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1611162617474-5b21e879e113?auto=format&fit=crop&w=800&q=80",{},true,"\u002Fblog\u002Fhls-without-ffmpeg",{"title":65,"description":265},"3.blog\u002F1.hls-without-ffmpeg","34TZCPNfqfUbznTyoKV3xiUT3FKH9Gd8nxEijsmMFrg",{"id":275,"title":276,"authors":277,"body":281,"date":639,"description":640,"extension":266,"image":641,"meta":642,"navigation":269,"path":643,"seo":644,"stem":645,"__hash__":646},"articles\u002F3.blog\u002F2.hls-vs-dash.md","HLS vs DASH: Which Streaming Protocol Should You Download?",[278],{"name":68,"to":69,"avatar":279},{"src":280},"https:\u002F\u002Fi.pravatar.cc\u002F120?img=2",{"type":73,"value":282,"toc":628},[283,286,290,296,305,317,323,337,342,356,360,365,373,380,384,398,402,416,420,527,531,534,538,555,559,574,578,581,595,599,625],[76,284,285],{},"If you've ever tried to download streaming video, you've probably encountered two terms: HLS and DASH. Both are adaptive streaming protocols, but they have important differences. Here's what you need to know.",[80,287,289],{"id":288},"hls-http-live-streaming","HLS (HTTP Live Streaming)",[76,291,292,295],{},[163,293,294],{},"Created by",": Apple (2009)",[76,297,298,301,302,304],{},[163,299,300],{},"Manifest format",": ",[88,303,94],{}," (M3U playlist with UTF-8 encoding)",[76,306,307,301,310,312,313,316],{},[163,308,309],{},"Segment format",[88,311,90],{}," (MPEG-2 Transport Stream) or ",[88,314,315],{},".m4s"," (fMP4)",[76,318,319,322],{},[163,320,321],{},"Where it's used",":",[158,324,325,328,331,334],{},[110,326,327],{},"Apple ecosystem (Safari, iOS, Apple TV)",[110,329,330],{},"Most CDNs and video platforms",[110,332,333],{},"Live streaming events",[110,335,336],{},"YouTube (for Safari users)",[76,338,339,322],{},[163,340,341],{},"Key characteristics",[158,343,344,347,350,353],{},[110,345,346],{},"Broad device compatibility",[110,348,349],{},"Excellent live streaming support",[110,351,352],{},"Segments typically 6–10 seconds long",[110,354,355],{},"Widely supported by CDNs",[80,357,359],{"id":358},"dash-dynamic-adaptive-streaming-over-http","DASH (Dynamic Adaptive Streaming over HTTP)",[76,361,362,364],{},[163,363,294],{},": MPEG industry group (2012)",[76,366,367,301,369,372],{},[163,368,300],{},[88,370,371],{},".mpd"," (Media Presentation Description, XML-based)",[76,374,375,301,377,379],{},[163,376,309],{},[88,378,315],{}," (fragmented MP4)",[76,381,382,322],{},[163,383,321],{},[158,385,386,389,392,395],{},[110,387,388],{},"YouTube (for Chrome\u002FFirefox users)",[110,390,391],{},"Netflix",[110,393,394],{},"Premium content platforms",[110,396,397],{},"4K\u002FHDR content",[76,399,400,322],{},[163,401,341],{},[158,403,404,407,410,413],{},[110,405,406],{},"More efficient encoding options",[110,408,409],{},"Better DRM support (Widevine, PlayReady)",[110,411,412],{},"Typically shorter segments (2–4 seconds)",[110,414,415],{},"More flexible codec support",[80,417,419],{"id":418},"key-differences-at-a-glance","Key Differences at a Glance",[421,422,423,439],"table",{},[424,425,426],"thead",{},[427,428,429,433,436],"tr",{},[430,431,432],"th",{},"Feature",[430,434,435],{},"HLS",[430,437,438],{},"DASH",[440,441,442,458,473,483,494,505,516],"tbody",{},[427,443,444,448,453],{},[445,446,447],"td",{},"Manifest",[445,449,450,452],{},[88,451,94],{}," (text)",[445,454,455,457],{},[88,456,371],{}," (XML)",[427,459,460,463,469],{},[445,461,462],{},"Segments",[445,464,465,228,467],{},[88,466,90],{},[88,468,315],{},[445,470,471],{},[88,472,315],{},[427,474,475,477,480],{},[445,476,294],{},[445,478,479],{},"Apple",[445,481,482],{},"MPEG",[427,484,485,488,491],{},[445,486,487],{},"Live Streaming",[445,489,490],{},"Excellent",[445,492,493],{},"Good",[427,495,496,499,502],{},[445,497,498],{},"DRM",[445,500,501],{},"FairPlay",[445,503,504],{},"Widevine, PlayReady",[427,506,507,510,513],{},[445,508,509],{},"Latency",[445,511,512],{},"6–30s",[445,514,515],{},"2–10s",[427,517,518,521,524],{},[445,519,520],{},"Adoption",[445,522,523],{},"Very widespread",[445,525,526],{},"Growing",[80,528,530],{"id":529},"how-flowpick-handles-both","How FlowPick Handles Both",[76,532,533],{},"The good news? You don't need to worry about which protocol a site uses. FlowPick auto-detects both:",[136,535,537],{"id":536},"hls-detection-download","HLS Detection & Download",[107,539,540,546,549,552],{},[110,541,542,543,545],{},"Monitors network for ",[88,544,94],{}," manifest requests",[110,547,548],{},"Parses the playlist to find available quality levels",[110,550,551],{},"Downloads TS segments in parallel",[110,553,554],{},"Merges fragments into a single MP4 file",[136,556,558],{"id":557},"dash-detection-download","DASH Detection & Download",[107,560,561,565,568,571],{},[110,562,542,563,545],{},[88,564,371],{},[110,566,567],{},"Parses the XML manifest for adaptation sets",[110,569,570],{},"Downloads m4s segments in parallel",[110,572,573],{},"Merges audio and video tracks if separate",[136,575,577],{"id":576},"quality-selection","Quality Selection",[76,579,580],{},"Both protocols support adaptive bitrate, meaning multiple quality levels are available. FlowPick shows you all options:",[158,582,583,589],{},[110,584,585,588],{},[163,586,587],{},"Auto",": Best quality available",[110,590,591,594],{},[163,592,593],{},"Manual",": Pick your preferred resolution (1080p, 720p, 480p, etc.)",[80,596,598],{"id":597},"tips-for-best-results","Tips for Best Results",[107,600,601,607,613,619],{},[110,602,603,606],{},[163,604,605],{},"Let the video start playing"," before opening FlowPick — this ensures the manifest is loaded",[110,608,609,612],{},[163,610,611],{},"Higher quality = longer download"," — 1080p streams have more data to merge",[110,614,615,618],{},[163,616,617],{},"Don't close the page"," during download — the browser needs to maintain the connection",[110,620,621,624],{},[163,622,623],{},"Check for multiple streams"," — some pages have separate video and audio tracks (especially DASH)",[76,626,627],{},"FlowPick makes downloading from either protocol as simple as one click. Install it and try it yourself!",{"title":250,"searchDepth":251,"depth":251,"links":629},[630,631,632,633,638],{"id":288,"depth":251,"text":289},{"id":358,"depth":251,"text":359},{"id":418,"depth":251,"text":419},{"id":529,"depth":251,"text":530,"children":634},[635,636,637],{"id":536,"depth":258,"text":537},{"id":557,"depth":258,"text":558},{"id":576,"depth":258,"text":577},{"id":597,"depth":251,"text":598},"2025-04-18","Understand the differences between HLS and DASH streaming protocols, and how FlowPick handles both seamlessly.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1461749280684-dccba630e2f6?auto=format&fit=crop&w=800&q=80",{},"\u002Fblog\u002Fhls-vs-dash",{"title":276,"description":640},"3.blog\u002F2.hls-vs-dash","jLa_rGcQnxb_dfKEeFHOz0dbvs58DlUGt-Qvw8PnEUo",{"id":648,"title":649,"authors":650,"body":654,"date":949,"description":950,"extension":266,"image":951,"meta":952,"navigation":269,"path":953,"seo":954,"stem":955,"__hash__":956},"articles\u002F3.blog\u002F3.privacy-by-design.md","Why Your Browser Extension Should Never Collect Your Data",[651],{"name":68,"to":69,"avatar":652},{"src":653},"https:\u002F\u002Fi.pravatar.cc\u002F120?img=3",{"type":73,"value":655,"toc":932},[656,659,663,666,670,696,699,703,706,710,713,717,720,728,732,735,739,742,768,772,775,795,798,802,805,809,818,821,825,894,898,901,904,929],[76,657,658],{},"Browser extensions have a unique position in the privacy landscape. They run on every page you visit, see every request your browser makes, and can access sensitive data. That's why we built FlowPick with a strict zero-data-collection policy from day one.",[80,660,662],{"id":661},"the-problem-with-extension-privacy","The Problem with Extension Privacy",[76,664,665],{},"Browser extensions often request broad permissions. Some legitimately need them — a media sniffer needs to monitor network requests. But what happens with that data?",[136,667,669],{"id":668},"common-privacy-concerns","Common Privacy Concerns",[158,671,672,678,684,690],{},[110,673,674,677],{},[163,675,676],{},"Analytics tracking",": Many extensions embed Google Analytics or similar tools",[110,679,680,683],{},[163,681,682],{},"Data harvesting",": Some extensions collect browsing history and sell it",[110,685,686,689],{},[163,687,688],{},"Third-party scripts",": Ad SDKs and tracking pixels embedded in extensions",[110,691,692,695],{},[163,693,694],{},"Remote code execution",": Extensions that load code from external servers",[76,697,698],{},"A 2020 study by Princeton University found that hundreds of Chrome extensions were harvesting browsing data and sending it to third-party servers. Users had no idea this was happening.",[80,700,702],{"id":701},"our-approach-privacy-by-design","Our Approach: Privacy by Design",[76,704,705],{},"FlowPick is built differently. Here's what \"zero data collection\" actually means in practice:",[136,707,709],{"id":708},"no-analytics","No Analytics",[76,711,712],{},"We don't track how you use the extension. No event logging, no session tracking, no funnel analysis. We improve FlowPick based on GitHub issues and community feedback — not by surveilling users.",[136,714,716],{"id":715},"no-external-connections","No External Connections",[76,718,719],{},"FlowPick makes zero network requests to our servers. The only network activity is:",[107,721,722,725],{},[110,723,724],{},"Downloading media segments from the website you're browsing (that's the whole point)",[110,726,727],{},"Browser extension update checks (handled by the browser itself)",[136,729,731],{"id":730},"no-data-storage-on-servers","No Data Storage on Servers",[76,733,734],{},"Since we don't collect data, there's nothing to store. We have no databases, no logs, no user accounts. Your download history exists only in your browser's local storage and is cleared when you close the tab.",[136,736,738],{"id":737},"open-source-verification","Open Source Verification",[76,740,741],{},"Don't take our word for it — verify it yourself:",[107,743,744,750,756,762],{},[110,745,746,749],{},[163,747,748],{},"Review the source code"," on GitHub",[110,751,752,755],{},[163,753,754],{},"Monitor network activity"," using browser DevTools (Network tab)",[110,757,758,761],{},[163,759,760],{},"Check permissions"," in your browser's extension management page",[110,763,764,767],{},[163,765,766],{},"Use a firewall"," to confirm no unexpected connections",[80,769,771],{"id":770},"why-this-matters-for-a-media-downloader","Why This Matters for a Media Downloader",[76,773,774],{},"A media downloader is particularly sensitive because it knows:",[158,776,777,783,789],{},[110,778,779,782],{},[163,780,781],{},"What videos you watch",": The URLs and titles of detected media",[110,784,785,788],{},[163,786,787],{},"What you download",": Your download choices and history",[110,790,791,794],{},[163,792,793],{},"When you're active",": Timestamps of your activity",[76,796,797],{},"Imagine if this data were collected and correlated. It would create a detailed profile of your media consumption habits. We believe no extension should have that kind of insight into your life.",[80,799,801],{"id":800},"the-technical-implementation","The Technical Implementation",[76,803,804],{},"Here's how we ensure privacy at the code level:",[136,806,808],{"id":807},"local-only-processing","Local-Only Processing",[810,811,816],"pre",{"className":812,"code":814,"language":815},[813],"language-text","Media Detection → Browser Memory\nFragment Merging → WebAssembly (Browser)\nFile Saving → Download API (Browser)\nSettings → Local Storage (Browser)\n","text",[88,817,814],{"__ignoreMap":250},[76,819,820],{},"Every step happens on your machine. No data crosses the network.",[136,822,824],{"id":823},"minimal-permissions","Minimal Permissions",[421,826,827,840],{},[424,828,829],{},[427,830,831,834,837],{},[430,832,833],{},"Permission",[430,835,836],{},"Why We Need It",[430,838,839],{},"What We Don't Do",[440,841,842,855,868,881],{},[427,843,844,849,852],{},[445,845,846],{},[88,847,848],{},"activeTab",[445,850,851],{},"Detect media on current page",[445,853,854],{},"Read page content or DOM",[427,856,857,862,865],{},[445,858,859],{},[88,860,861],{},"webRequest",[445,863,864],{},"Monitor network for streams",[445,866,867],{},"Log or store request data",[427,869,870,875,878],{},[445,871,872],{},[88,873,874],{},"downloads",[445,876,877],{},"Save files to your device",[445,879,880],{},"Track download history",[427,882,883,888,891],{},[445,884,885],{},[88,886,887],{},"storage",[445,889,890],{},"Save your preferences",[445,892,893],{},"Transmit settings anywhere",[80,895,897],{"id":896},"the-bigger-picture","The Bigger Picture",[76,899,900],{},"We believe privacy isn't a feature — it's a fundamental right. As browser extensions become more powerful, developers have a responsibility to minimize data collection. FlowPick proves that a fully functional media downloader can work without collecting a single byte of user data.",[76,902,903],{},"If you care about your privacy, we encourage you to:",[107,905,906,912,918,923],{},[110,907,908,911],{},[163,909,910],{},"Review permissions"," before installing any extension",[110,913,914,917],{},[163,915,916],{},"Check for open source"," alternatives",[110,919,920,922],{},[163,921,754],{}," of your extensions",[110,924,925,928],{},[163,926,927],{},"Support developers"," who prioritize privacy",[76,930,931],{},"Your data belongs to you. Period.",{"title":250,"searchDepth":251,"depth":251,"links":933},[934,937,943,944,948],{"id":661,"depth":251,"text":662,"children":935},[936],{"id":668,"depth":258,"text":669},{"id":701,"depth":251,"text":702,"children":938},[939,940,941,942],{"id":708,"depth":258,"text":709},{"id":715,"depth":258,"text":716},{"id":730,"depth":258,"text":731},{"id":737,"depth":258,"text":738},{"id":770,"depth":251,"text":771},{"id":800,"depth":251,"text":801,"children":945},[946,947],{"id":807,"depth":258,"text":808},{"id":823,"depth":258,"text":824},{"id":896,"depth":251,"text":897},"2025-04-15","A deep dive into why FlowPick is built with zero data collection, and why privacy-by-design matters for browser extensions.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1510511459019-5dda7724fd87?auto=format&fit=crop&w=800&q=80",{},"\u002Fblog\u002Fprivacy-by-design",{"title":649,"description":950},"3.blog\u002F3.privacy-by-design","Tp6IL5U8dLElK54WU-F6X2PF8O6SLMToiSke3Grd1cQ",1778639528181]