[{"data":1,"prerenderedAt":1651},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Fdeveloper\u002Fcontributing":298,"\u002Fdocs\u002Fdeveloper\u002Fcontributing-surround":1646},[4,165],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Docs","\u002Fdocs","1.docs",[9,33,79,100,129,149],{"title":10,"path":11,"stem":12,"children":13,"icon":32},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[14,17,22,27],{"title":15,"path":11,"stem":12,"icon":16},"Introduction","i-lucide-house",{"title":18,"path":19,"stem":20,"icon":21},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":23,"path":24,"stem":25,"icon":26},"Usage Guide","\u002Fdocs\u002Fgetting-started\u002Fusage","1.docs\u002F1.getting-started\u002F3.usage","i-lucide-sliders",{"title":28,"path":29,"stem":30,"icon":31},"Configuration Reference","\u002Fdocs\u002Fgetting-started\u002Fconfiguration","1.docs\u002F1.getting-started\u002F4.configuration","i-lucide-settings",false,{"title":34,"icon":35,"path":36,"stem":37,"children":38,"page":32},"Features","i-lucide-star","\u002Fdocs\u002Ffeatures","1.docs\u002F2.features",[39,44,49,54,59,64,69,74],{"title":40,"path":41,"stem":42,"icon":43},"Video Sniffing","\u002Fdocs\u002Ffeatures\u002Fvideo-sniffing","1.docs\u002F2.features\u002F1.video-sniffing","i-lucide-video",{"title":45,"path":46,"stem":47,"icon":48},"Audio Capture","\u002Fdocs\u002Ffeatures\u002Faudio-capture","1.docs\u002F2.features\u002F2.audio-capture","i-lucide-music",{"title":50,"path":51,"stem":52,"icon":53},"Image Download","\u002Fdocs\u002Ffeatures\u002Fimage-download","1.docs\u002F2.features\u002F3.image-download","i-lucide-image",{"title":55,"path":56,"stem":57,"icon":58},"Privacy & Security","\u002Fdocs\u002Ffeatures\u002Fprivacy-security","1.docs\u002F2.features\u002F4.privacy-security","i-lucide-shield-check",{"title":60,"path":61,"stem":62,"icon":63},"Format Conversion","\u002Fdocs\u002Ffeatures\u002Fformat-conversion","1.docs\u002F2.features\u002F5.format-conversion","i-lucide-arrow-left-right",{"title":65,"path":66,"stem":67,"icon":68},"Batch Download","\u002Fdocs\u002Ffeatures\u002Fbatch-download","1.docs\u002F2.features\u002F6.batch-download","i-lucide-layers",{"title":70,"path":71,"stem":72,"icon":73},"Keyboard Shortcuts","\u002Fdocs\u002Ffeatures\u002Fkeyboard-shortcuts","1.docs\u002F2.features\u002F7.keyboard-shortcuts","i-lucide-keyboard",{"title":75,"path":76,"stem":77,"icon":78},"Search & Filter","\u002Fdocs\u002Ffeatures\u002Fsearch-filter","1.docs\u002F2.features\u002F8.search-filter","i-lucide-search",{"title":80,"icon":81,"path":82,"stem":83,"children":84,"page":32},"Advanced","i-lucide-book-open","\u002Fdocs\u002Fadvanced","1.docs\u002F3.advanced",[85,90,95],{"title":86,"path":87,"stem":88,"icon":89},"Online Tools","\u002Fdocs\u002Fadvanced\u002Fonline-tools","1.docs\u002F3.advanced\u002F1.online-tools","i-lucide-globe",{"title":91,"path":92,"stem":93,"icon":94},"Browser Compatibility","\u002Fdocs\u002Fadvanced\u002Fbrowser-compatibility","1.docs\u002F3.advanced\u002F2.browser-compatibility","i-lucide-monitor-check",{"title":96,"path":97,"stem":98,"icon":99},"Download Engine Architecture","\u002Fdocs\u002Fadvanced\u002Fdownload-engine","1.docs\u002F3.advanced\u002F3.download-engine","i-lucide-cpu",{"title":101,"icon":102,"path":103,"stem":104,"children":105,"page":32},"Use Cases","i-lucide-lightbulb","\u002Fdocs\u002Fusecases","1.docs\u002F4.usecases",[106,111,115,120,125],{"title":107,"path":108,"stem":109,"icon":110},"Online Course Video Downloader for Offline Learning","\u002Fdocs\u002Fusecases\u002Fonline-courses","1.docs\u002F4.usecases\u002F1.online-courses","i-lucide-graduation-cap",{"title":112,"path":113,"stem":114,"icon":43},"Video Platform Stream Downloader for Public Media","\u002Fdocs\u002Fusecases\u002Fvideo-platforms","1.docs\u002F4.usecases\u002F2.video-platforms",{"title":116,"path":117,"stem":118,"icon":119},"Live Replay Downloader for Large Streaming Videos","\u002Fdocs\u002Fusecases\u002Flive-replays","1.docs\u002F4.usecases\u002F3.live-replays","i-lucide-radio",{"title":121,"path":122,"stem":123,"icon":124},"Podcast and Audio Downloader for Offline Listening","\u002Fdocs\u002Fusecases\u002Fpodcasts-audio","1.docs\u002F4.usecases\u002F4.podcasts-audio","i-lucide-headphones",{"title":126,"path":127,"stem":128,"icon":53},"Bulk Image Downloader for Web Galleries and Wallpapers","\u002Fdocs\u002Fusecases\u002Fimage-galleries","1.docs\u002F4.usecases\u002F5.image-galleries",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":32},"Troubleshooting","i-lucide-wrench","\u002Fdocs\u002Ftroubleshooting","1.docs\u002F5.troubleshooting",[135,139,144],{"title":136,"path":137,"stem":138,"icon":131},"Common Issues Troubleshooting","\u002Fdocs\u002Ftroubleshooting\u002Fcommon-issues","1.docs\u002F5.troubleshooting\u002F1.common-issues",{"title":140,"path":141,"stem":142,"icon":143},"Known Limitations & Caveats","\u002Fdocs\u002Ftroubleshooting\u002Fknown-issues","1.docs\u002F5.troubleshooting\u002F2.known-issues","i-lucide-alert-triangle",{"title":145,"path":146,"stem":147,"icon":148},"FAQ","\u002Fdocs\u002Ftroubleshooting\u002Ffaq","1.docs\u002F5.troubleshooting\u002F3.faq","i-lucide-message-circle-question",{"title":150,"icon":151,"path":152,"stem":153,"children":154,"page":32},"Developer Docs","i-lucide-code","\u002Fdocs\u002Fdeveloper","1.docs\u002F6.developer",[155,160],{"title":156,"path":157,"stem":158,"icon":159},"Contributing Guide","\u002Fdocs\u002Fdeveloper\u002Fcontributing","1.docs\u002F6.developer\u002F1.contributing","i-lucide-git-pull-request",{"title":161,"path":162,"stem":163,"icon":164},"Project Architecture","\u002Fdocs\u002Fdeveloper\u002Farchitecture","1.docs\u002F6.developer\u002F2.architecture","i-lucide-box",{"title":166,"path":167,"stem":168,"children":169,"page":32},"Zh Hans","\u002Fzh-hans","zh-Hans",[170,189,226,243,268,285],{"title":171,"path":172,"stem":173,"children":174,"icon":32},"快速开始","\u002Fzh-hans\u002Fgetting-started","zh-Hans\u002F1.getting-started\u002F1.index",[175,177,181,185],{"title":176,"path":172,"stem":173,"icon":16},"简介",{"title":178,"path":179,"stem":180,"icon":21},"安装","\u002Fzh-hans\u002Fgetting-started\u002Finstallation","zh-Hans\u002F1.getting-started\u002F2.installation",{"title":182,"path":183,"stem":184,"icon":26},"使用方法","\u002Fzh-hans\u002Fgetting-started\u002Fusage","zh-Hans\u002F1.getting-started\u002F3.usage",{"title":186,"path":187,"stem":188,"icon":31},"配置参考","\u002Fzh-hans\u002Fgetting-started\u002Fconfiguration","zh-Hans\u002F1.getting-started\u002F4.configuration",{"title":190,"icon":35,"path":191,"stem":192,"children":193,"page":32},"功能特性","\u002Fzh-hans\u002Ffeatures","zh-Hans\u002F2.features",[194,198,202,206,210,214,218,222],{"title":195,"path":196,"stem":197,"icon":43},"视频嗅探","\u002Fzh-hans\u002Ffeatures\u002Fvideo-sniffing","zh-Hans\u002F2.features\u002F1.video-sniffing",{"title":199,"path":200,"stem":201,"icon":48},"音频捕获","\u002Fzh-hans\u002Ffeatures\u002Faudio-capture","zh-Hans\u002F2.features\u002F2.audio-capture",{"title":203,"path":204,"stem":205,"icon":53},"图片下载","\u002Fzh-hans\u002Ffeatures\u002Fimage-download","zh-Hans\u002F2.features\u002F3.image-download",{"title":207,"path":208,"stem":209,"icon":58},"隐私与安全","\u002Fzh-hans\u002Ffeatures\u002Fprivacy-security","zh-Hans\u002F2.features\u002F4.privacy-security",{"title":211,"path":212,"stem":213,"icon":63},"格式转换","\u002Fzh-hans\u002Ffeatures\u002Fformat-conversion","zh-Hans\u002F2.features\u002F5.format-conversion",{"title":215,"path":216,"stem":217,"icon":68},"批量下载","\u002Fzh-hans\u002Ffeatures\u002Fbatch-download","zh-Hans\u002F2.features\u002F6.batch-download",{"title":219,"path":220,"stem":221,"icon":73},"键盘快捷键","\u002Fzh-hans\u002Ffeatures\u002Fkeyboard-shortcuts","zh-Hans\u002F2.features\u002F7.keyboard-shortcuts",{"title":223,"path":224,"stem":225,"icon":78},"搜索与筛选","\u002Fzh-hans\u002Ffeatures\u002Fsearch-filter","zh-Hans\u002F2.features\u002F8.search-filter",{"title":227,"icon":81,"path":228,"stem":229,"children":230,"page":32},"高级指南","\u002Fzh-hans\u002Fadvanced","zh-Hans\u002F3.advanced",[231,235,239],{"title":232,"path":233,"stem":234,"icon":89},"在线工具","\u002Fzh-hans\u002Fadvanced\u002Fonline-tools","zh-Hans\u002F3.advanced\u002F1.online-tools",{"title":236,"path":237,"stem":238,"icon":94},"浏览器兼容性","\u002Fzh-hans\u002Fadvanced\u002Fbrowser-compatibility","zh-Hans\u002F3.advanced\u002F2.browser-compatibility",{"title":240,"path":241,"stem":242,"icon":99},"下载引擎架构","\u002Fzh-hans\u002Fadvanced\u002Fdownload-engine","zh-Hans\u002F3.advanced\u002F3.download-engine",{"title":244,"icon":102,"path":245,"stem":246,"children":247,"page":32},"使用场景","\u002Fzh-hans\u002Fusecases","zh-Hans\u002F4.usecases",[248,252,256,260,264],{"title":249,"path":250,"stem":251,"icon":110},"在线课程视频下载与离线学习","\u002Fzh-hans\u002Fusecases\u002Fonline-courses","zh-Hans\u002F4.usecases\u002F1.online-courses",{"title":253,"path":254,"stem":255,"icon":43},"视频平台流媒体下载与素材收集","\u002Fzh-hans\u002Fusecases\u002Fvideo-platforms","zh-Hans\u002F4.usecases\u002F2.video-platforms",{"title":257,"path":258,"stem":259,"icon":119},"直播回放下载与大文件流媒体保存","\u002Fzh-hans\u002Fusecases\u002Flive-replays","zh-Hans\u002F4.usecases\u002F3.live-replays",{"title":261,"path":262,"stem":263,"icon":124},"播客与网页音频下载","\u002Fzh-hans\u002Fusecases\u002Fpodcasts-audio","zh-Hans\u002F4.usecases\u002F4.podcasts-audio",{"title":265,"path":266,"stem":267,"icon":53},"图库与壁纸批量图片下载","\u002Fzh-hans\u002Fusecases\u002Fimage-galleries","zh-Hans\u002F4.usecases\u002F5.image-galleries",{"title":269,"icon":131,"path":270,"stem":271,"children":272,"page":32},"故障排除","\u002Fzh-hans\u002Ftroubleshooting","zh-Hans\u002F5.troubleshooting",[273,277,281],{"title":274,"path":275,"stem":276,"icon":131},"常见问题排查","\u002Fzh-hans\u002Ftroubleshooting\u002Fcommon-issues","zh-Hans\u002F5.troubleshooting\u002F1.common-issues",{"title":278,"path":279,"stem":280,"icon":143},"已知限制与注意事项","\u002Fzh-hans\u002Ftroubleshooting\u002Fknown-issues","zh-Hans\u002F5.troubleshooting\u002F2.known-issues",{"title":282,"path":283,"stem":284,"icon":148},"常见问题解答","\u002Fzh-hans\u002Ftroubleshooting\u002Ffaq","zh-Hans\u002F5.troubleshooting\u002F3.faq",{"title":286,"icon":151,"path":287,"stem":288,"children":289,"page":32},"开发者文档","\u002Fzh-hans\u002Fdeveloper","zh-Hans\u002F6.developer",[290,294],{"title":291,"path":292,"stem":293,"icon":159},"贡献指南","\u002Fzh-hans\u002Fdeveloper\u002Fcontributing","zh-Hans\u002F6.developer\u002F1.contributing",{"title":295,"path":296,"stem":297,"icon":164},"项目架构","\u002Fzh-hans\u002Fdeveloper\u002Farchitecture","zh-Hans\u002F6.developer\u002F2.architecture",{"id":299,"title":156,"body":300,"date":1639,"description":1640,"extension":1641,"lastModified":1639,"meta":1642,"navigation":1643,"path":157,"seo":1644,"stem":158,"__hash__":1645},"docs\u002F1.docs\u002F6.developer\u002F1.contributing.md",{"type":301,"value":302,"toc":1603},"minimark",[303,307,310,315,318,337,339,343,348,351,362,378,382,385,399,413,417,420,432,435,450,457,551,555,558,560,564,568,618,622,663,667,679,686,696,700,706,716,720,814,816,820,824,827,839,843,855,858,862,865,871,874,967,970,976,980,1012,1016,1036,1041,1094,1104,1106,1110,1114,1121,1125,1128,1191,1195,1219,1223,1230,1254,1257,1263,1281,1283,1287,1291,1294,1356,1361,1483,1487,1490,1496,1506,1508,1512,1542,1544,1548,1600],[304,305,306],"p",{},"Thank you for your interest in the FlowPick project. This document guides you on how to participate in project contributions, including code submissions, documentation improvements, and issue reporting.",[308,309],"hr",{},[311,312,314],"h2",{"id":313},"code-of-conduct","Code of Conduct",[304,316,317],{},"By participating in this project, you agree to follow these basic principles:",[319,320,321,325,328,331,334],"ul",{},[322,323,324],"li",{},"Use friendly and inclusive language",[322,326,327],{},"Respect different viewpoints and experiences",[322,329,330],{},"Accept constructive criticism gracefully",[322,332,333],{},"Focus on what's best for the community",[322,335,336],{},"Show empathy toward other community members",[308,338],{},[311,340,342],{"id":341},"ways-to-contribute","Ways to Contribute",[344,345,347],"h3",{"id":346},"reporting-bugs","Reporting Bugs",[304,349,350],{},"If you find a bug, please submit a report via GitHub Issues. A good bug report should include:",[352,353,358],"pre",{"className":354,"code":356,"language":357},[355],"language-text","Title: Brief description of problem\n\nDescription:\n- What is expected behavior?\n- What actually happened?\n\nSteps to Reproduce:\n1. Open '...'\n2. Click on '...'\n3. Scroll to '...'\n4. See error\n\nEnvironment Information:\n- OS: Windows 11 \u002F macOS 14 \u002F Ubuntu 24.04\n- Browser: Chrome 125 \u002F Edge 125\n- FlowPick version: v1.0.0\n- Extension version or online tools?\n\nAdditional Info:\n- Console error logs\n- Screenshots or recordings\n- Relevant streaming URL (if publicly accessible)\n","text",[359,360,356],"code",{"__ignoreMap":361},"",[363,364,365],"tip",{},[304,366,367,368,373,374,377],{},"Before submitting a bug, recommend running ",[369,370,372],"a",{"href":371},"\u002Fdocs\u002Ftroubleshooting\u002Fcommon-issues#generate-diagnostic-report","diagnostic report generator"," in Console first and include output. Also check ",[369,375,376],{"href":141},"Known Limitations"," to confirm if it's a documented known limitation.",[344,379,381],{"id":380},"feature-requests","Feature Requests",[304,383,384],{},"When submitting feature requests, please explain:",[319,386,387,390,393,396],{},[322,388,389],{},"What is your use case?",[322,391,392],{},"What problem does this feature solve?",[322,394,395],{},"What is your expected behavior?",[322,397,398],{},"Are there alternative solutions?",[400,401,402],"note",{},[304,403,404,405,408,409,412],{},"Before submitting feature requests, recommend understanding FlowPick's ",[369,406,407],{"href":162},"technical architecture"," and ",[369,410,411],{"href":141},"known limitations"," to ensure your requirements are technically feasible.",[344,414,416],{"id":415},"improving-documentation","Improving Documentation",[304,418,419],{},"Documentation improvement is the easiest way to contribute:",[421,422,423,426,429],"ol",{},[322,424,425],{},"Find a documentation page that needs improvement",[322,427,428],{},"Click \"Edit this page\" link at bottom of page (if available)",[322,430,431],{},"Edit directly on GitHub and submit Pull Request",[304,433,434],{},"Or:",[421,436,437,440,447],{},[322,438,439],{},"Fork repository",[322,441,442,443,446],{},"Find corresponding Markdown file under ",[359,444,445],{},"content\u002F"," directory",[322,448,449],{},"Make changes and submit Pull Request",[304,451,452,456],{},[453,454,455],"strong",{},"Common directions for documentation improvements",":",[458,459,460,476],"table",{},[461,462,463],"thead",{},[464,465,466,470,473],"tr",{},[467,468,469],"th",{},"Direction",[467,471,472],{},"Description",[467,474,475],{},"Reference",[477,478,479,493,507,520,536],"tbody",{},[464,480,481,485,488],{},[482,483,484],"td",{},"Fix errors",[482,486,487],{},"Inaccurate technical descriptions, incorrect configuration examples",[482,489,490,491],{},"Verify against ",[369,492,161],{"href":162},[464,494,495,498,501],{},[482,496,497],{},"Add details",[482,499,500],{},"Missing usage instructions or parameter explanations for features",[482,502,503,504],{},"Reference style of ",[369,505,506],{"href":41},"Feature Documentation",[464,508,509,512,515],{},[482,510,511],{},"Add examples",[482,513,514],{},"Missing code or operation examples for actual use cases",[482,516,517,518],{},"Reference writing style of ",[369,519,101],{"href":108},[464,521,522,525,528],{},[482,523,524],{},"Translation",[482,526,527],{},"Translate documents into other languages",[482,529,530,531,535],{},"Refer to ",[369,532,534],{"href":533},"#multilingual","Multilingual"," section",[464,537,538,541,544],{},[482,539,540],{},"Fix links",[482,542,543],{},"Broken cross-reference links or incorrect targets",[482,545,546,547,550],{},"Check links in ",[359,548,549],{},"::note"," blocks",[344,552,554],{"id":553},"contributing-code","Contributing Code",[304,556,557],{},"If you want to contribute code, please follow this workflow.",[308,559],{},[311,561,563],{"id":562},"development-environment-setup","Development Environment Setup",[344,565,567],{"id":566},"prerequisites","Prerequisites",[458,569,570,583],{},[461,571,572],{},[464,573,574,577,580],{},[467,575,576],{},"Tool",[467,578,579],{},"Minimum Version",[467,581,582],{},"Notes",[477,584,585,596,607],{},[464,586,587,590,593],{},[482,588,589],{},"Node.js",[482,591,592],{},"18.x",[482,594,595],{},"Recommend using nvm or fnm for version management",[464,597,598,601,604],{},[482,599,600],{},"pnpm",[482,602,603],{},"8.x",[482,605,606],{},"Package manager",[464,608,609,612,615],{},[482,610,611],{},"Git",[482,613,614],{},"2.x",[482,616,617],{},"Version control",[344,619,621],{"id":620},"clone-install","Clone & Install",[352,623,627],{"className":624,"code":625,"language":626,"meta":361,"style":361},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fezwebtools\u002Fflowpick.git\ncd flowpick-web\npnpm install\n","bash",[359,628,629,645,655],{"__ignoreMap":361},[630,631,634,638,642],"span",{"class":632,"line":633},"line",1,[630,635,637],{"class":636},"sBMFI","git",[630,639,641],{"class":640},"sfazB"," clone",[630,643,644],{"class":640}," https:\u002F\u002Fgithub.com\u002Fezwebtools\u002Fflowpick.git\n",[630,646,648,652],{"class":632,"line":647},2,[630,649,651],{"class":650},"s2Zo4","cd",[630,653,654],{"class":640}," flowpick-web\n",[630,656,658,660],{"class":632,"line":657},3,[630,659,600],{"class":636},[630,661,662],{"class":640}," install\n",[344,664,666],{"id":665},"start-development-server","Start Development Server",[352,668,670],{"className":624,"code":669,"language":626,"meta":361,"style":361},"pnpm dev\n",[359,671,672],{"__ignoreMap":361},[630,673,674,676],{"class":632,"line":633},[630,675,600],{"class":636},[630,677,678],{"class":640}," dev\n",[304,680,681,682,685],{},"Development server runs at ",[359,683,684],{},"http:\u002F\u002Flocalhost:3000"," by default.",[400,687,688],{},[304,689,690,691,695],{},"If you need to test FFmpeg WASM multithreading mode, ensure development server is configured with correct COEP\u002FCOOP response headers. See details at ",[369,692,694],{"href":693},"\u002Fdocs\u002Fadvanced\u002Fbrowser-compatibility#advanced-apis","Browser Compatibility — Advanced APIs",".",[344,697,699],{"id":698},"project-structure","Project Structure",[352,701,704],{"className":702,"code":703,"language":357},[355],"flowpick-web\u002F\n├── app\u002F                    # Application source code\n│   ├── assets\u002F             # Static assets (CSS)\n│   ├── components\u002F         # Vue components\n│   │   └── content\u002F        # Nuxt Content specific components\n│   ├── composables\u002F        # Composables\n│   │   ├── useFFmpeg.ts    # FFmpeg WASM integration\n│   │   ├── useStreamMerge.ts # Stream merge & download engine\n│   │   ├── useClarity.ts   # Microsoft Clarity analytics\n│   │   └── useGA4.ts       # Google Analytics\n│   ├── layouts\u002F            # Layout components\n│   ├── pages\u002F              # Page routes\n│   │   ├── docs\u002F           # Documentation pages\n│   │   ├── changelog\u002F      # Changelog pages\n│   │   ├── legal\u002F          # Legal pages\n│   │   ├── m3u8-downloader.vue  # M3U8 downloader\n│   │   ├── dash-downloader.vue  # DASH downloader\n│   │   └── index.vue       # Homepage\n│   ├── types\u002F              # TypeScript type declarations\n│   ├── app.config.ts       # Application configuration\n│   └── app.vue             # Root component\n├── content\u002F                # Nuxt Content documentation\n│   └── zh-Hans\u002F            # Simplified Chinese docs\n├── public\u002F                 # Public static assets\n│   ├── ffmpeg\u002F             # FFmpeg WASM core files\n│   └── ffmpeg-mt\u002F          # FFmpeg WASM multithread core files\n├── nuxt.config.ts          # Nuxt configuration\n├── package.json            # Project dependencies\n└── tsconfig.json           # TypeScript configuration\n",[359,705,703],{"__ignoreMap":361},[400,707,708],{},[304,709,710,711,713,714,695],{},"For detailed responsibilities of each module, data flow, and design decisions, see ",[369,712,161],{"href":162},". For complete technical implementation of download engine, see ",[369,715,96],{"href":97},[344,717,719],{"id":718},"tech-stack","Tech Stack",[458,721,722,732],{},[461,723,724],{},[464,725,726,729],{},[467,727,728],{},"Technology",[467,730,731],{},"Purpose",[477,733,734,742,750,758,766,774,782,790,798,806],{},[464,735,736,739],{},[482,737,738],{},"Nuxt 4",[482,740,741],{},"Full-stack framework",[464,743,744,747],{},[482,745,746],{},"Vue 3",[482,748,749],{},"UI framework",[464,751,752,755],{},[482,753,754],{},"Nuxt UI v4",[482,756,757],{},"Component library",[464,759,760,763],{},[482,761,762],{},"Nuxt Content v3",[482,764,765],{},"Documentation system",[464,767,768,771],{},[482,769,770],{},"Tailwind CSS v4",[482,772,773],{},"Styling",[464,775,776,779],{},[482,777,778],{},"TypeScript",[482,780,781],{},"Type safety",[464,783,784,787],{},[482,785,786],{},"@ffmpeg\u002Fffmpeg",[482,788,789],{},"Client-side media processing",[464,791,792,795],{},[482,793,794],{},"m3u8-parser",[482,796,797],{},"HLS manifest parsing",[464,799,800,803],{},[482,801,802],{},"mpd-parser",[482,804,805],{},"DASH manifest parsing",[464,807,808,811],{},[482,809,810],{},"streamsaver",[482,812,813],{},"Streaming file saving",[308,815],{},[311,817,819],{"id":818},"development-standards","Development Standards",[344,821,823],{"id":822},"code-style","Code Style",[304,825,826],{},"Project uses ESLint for code linting:",[352,828,830],{"className":624,"code":829,"language":626,"meta":361,"style":361},"pnpm lint\n",[359,831,832],{"__ignoreMap":361},[630,833,834,836],{"class":632,"line":633},[630,835,600],{"class":636},[630,837,838],{"class":640}," lint\n",[344,840,842],{"id":841},"type-checking","Type Checking",[352,844,846],{"className":624,"code":845,"language":626,"meta":361,"style":361},"pnpm typecheck\n",[359,847,848],{"__ignoreMap":361},[630,849,850,852],{"class":632,"line":633},[630,851,600],{"class":636},[630,853,854],{"class":640}," typecheck\n",[304,856,857],{},"Ensure type checking passes before submitting.",[344,859,861],{"id":860},"commit-message-convention","Commit Message Convention",[304,863,864],{},"Use Conventional Commits format:",[352,866,869],{"className":867,"code":868,"language":357},[355],"\u003Ctype>(\u003Cscope>): \u003Cdescription>\n\n[optional body]\n\n[optional footer]\n",[359,870,868],{"__ignoreMap":361},[304,872,873],{},"Types (type):",[458,875,876,885],{},[461,877,878],{},[464,879,880,883],{},[467,881,882],{},"Type",[467,884,472],{},[477,886,887,897,907,917,927,937,947,957],{},[464,888,889,894],{},[482,890,891],{},[359,892,893],{},"feat",[482,895,896],{},"New feature",[464,898,899,904],{},[482,900,901],{},[359,902,903],{},"fix",[482,905,906],{},"Bug fix",[464,908,909,914],{},[482,910,911],{},[359,912,913],{},"docs",[482,915,916],{},"Documentation update",[464,918,919,924],{},[482,920,921],{},[359,922,923],{},"style",[482,925,926],{},"Code formatting (no functional change)",[464,928,929,934],{},[482,930,931],{},[359,932,933],{},"refactor",[482,935,936],{},"Code refactoring",[464,938,939,944],{},[482,940,941],{},[359,942,943],{},"perf",[482,945,946],{},"Performance optimization",[464,948,949,954],{},[482,950,951],{},[359,952,953],{},"test",[482,955,956],{},"Test-related",[464,958,959,964],{},[482,960,961],{},[359,962,963],{},"chore",[482,965,966],{},"Build\u002Ftool changes",[304,968,969],{},"Example:",[352,971,974],{"className":972,"code":973,"language":357},[355],"feat(downloader): add concurrent segment download with configurable threads\n\nImplemented worker pool pattern for parallel segment downloading.\nConcurrency level can be configured between 1-8 threads.\n\nCloses #42\n",[359,975,973],{"__ignoreMap":361},[344,977,979],{"id":978},"branch-strategy","Branch Strategy",[319,981,982,988,994,1000,1006],{},[322,983,984,987],{},[359,985,986],{},"main",": Stable version, always deployable",[322,989,990,993],{},[359,991,992],{},"develop",": Development branch",[322,995,996,999],{},[359,997,998],{},"feat\u002Fxxx",": Feature branch",[322,1001,1002,1005],{},[359,1003,1004],{},"fix\u002Fxxx",": Bug fix branch",[322,1007,1008,1011],{},[359,1009,1010],{},"docs\u002Fxxx",": Documentation branch",[344,1013,1015],{"id":1014},"pull-request-workflow","Pull Request Workflow",[421,1017,1018,1021,1024,1030,1033],{},[322,1019,1020],{},"Fork repository and create feature branch",[322,1022,1023],{},"Develop, ensure code passes lint and typecheck",[322,1025,1026,1027,1029],{},"Submit PR to ",[359,1028,992],{}," branch",[322,1031,1032],{},"Describe changes and reasons in PR description",[322,1034,1035],{},"Wait for code review",[304,1037,1038,456],{},[453,1039,1040],{},"PR Review Focus Areas",[458,1042,1043,1052],{},[461,1044,1045],{},[464,1046,1047,1050],{},[467,1048,1049],{},"Focus Area",[467,1051,472],{},[477,1053,1054,1062,1070,1078,1086],{},[464,1055,1056,1059],{},[482,1057,1058],{},"Functional correctness",[482,1060,1061],{},"Does change implement expected functionality; are edge cases handled",[464,1063,1064,1067],{},[482,1065,1066],{},"Code quality",[482,1068,1069],{},"Does it follow existing code style; is there duplicate code",[464,1071,1072,1075],{},[482,1073,1074],{},"Performance impact",[482,1076,1077],{},"Does it introduce unnecessary overhead; are large file scenarios considered",[464,1079,1080,1083],{},[482,1081,1082],{},"Compatibility",[482,1084,1085],{},"Does it affect existing functionality; is browser compatibility considered",[464,1087,1088,1091],{},[482,1089,1090],{},"Security",[482,1092,1093],{},"Does it introduce security risks; is user data protected",[400,1095,1096],{},[304,1097,1098,1099,1101,1102,695],{},"For download engine performance considerations (concurrency control, memory management, retry strategy), see ",[369,1100,96],{"href":97},". For browser compatibility notes, see ",[369,1103,91],{"href":92},[308,1105],{},[311,1107,1109],{"id":1108},"documentation-writing-guide","Documentation Writing Guide",[344,1111,1113],{"id":1112},"document-structure","Document Structure",[304,1115,1116,1117,1120],{},"Documentation uses Nuxt Content v3, stored as Markdown files in ",[359,1118,1119],{},"content\u002Fzh-Hans\u002F"," directory.",[344,1122,1124],{"id":1123},"frontmatter","Frontmatter",[304,1126,1127],{},"Each document file must include following frontmatter:",[352,1129,1133],{"className":1130,"code":1131,"language":1132,"meta":361,"style":361},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ntitle: Document Title\ndescription: Document description (for SEO and list display)\nnavigation:\n  icon: i-lucide-xxx  # Lucide icon name\n---\n","yaml",[359,1134,1135,1140,1152,1162,1171,1186],{"__ignoreMap":361},[630,1136,1137],{"class":632,"line":633},[630,1138,1139],{"class":636},"---\n",[630,1141,1142,1146,1149],{"class":632,"line":647},[630,1143,1145],{"class":1144},"swJcz","title",[630,1147,456],{"class":1148},"sMK4o",[630,1150,1151],{"class":640}," Document Title\n",[630,1153,1154,1157,1159],{"class":632,"line":657},[630,1155,1156],{"class":1144},"description",[630,1158,456],{"class":1148},[630,1160,1161],{"class":640}," Document description (for SEO and list display)\n",[630,1163,1165,1168],{"class":632,"line":1164},4,[630,1166,1167],{"class":1144},"navigation",[630,1169,1170],{"class":1148},":\n",[630,1172,1174,1177,1179,1182],{"class":632,"line":1173},5,[630,1175,1176],{"class":1144},"  icon",[630,1178,456],{"class":1148},[630,1180,1181],{"class":640}," i-lucide-xxx",[630,1183,1185],{"class":1184},"sHwdD","  # Lucide icon name\n",[630,1187,1189],{"class":632,"line":1188},6,[630,1190,1139],{"class":636},[344,1192,1194],{"id":1193},"content-format","Content Format",[319,1196,1197,1200,1203,1206],{},[322,1198,1199],{},"Use standard Markdown syntax",[322,1201,1202],{},"Specify language in code blocks for syntax highlighting",[322,1204,1205],{},"Tables for comparison and reference information",[322,1207,1208,1209,1212,1213,1212,1215,1218],{},"Use Nuxt Content directives like ",[359,1210,1211],{},"::tip",", ",[359,1214,549],{},[359,1216,1217],{},"::warning",", etc.",[344,1220,1222],{"id":1221},"navigation-configuration","Navigation Configuration",[304,1224,1225,1226,1229],{},"Each document directory needs a ",[359,1227,1228],{},".navigation.yml"," file:",[352,1231,1233],{"className":1130,"code":1232,"language":1132,"meta":361,"style":361},"title: Category Name\nicon: i-lucide-xxx\n",[359,1234,1235,1244],{"__ignoreMap":361},[630,1236,1237,1239,1241],{"class":632,"line":633},[630,1238,1145],{"class":1144},[630,1240,456],{"class":1148},[630,1242,1243],{"class":640}," Category Name\n",[630,1245,1246,1249,1251],{"class":632,"line":647},[630,1247,1248],{"class":1144},"icon",[630,1250,456],{"class":1148},[630,1252,1253],{"class":640}," i-lucide-xxx\n",[344,1255,534],{"id":1256},"multilingual",[304,1258,1259,1260,1262],{},"Currently documentation primarily in Simplified Chinese (",[359,1261,168],{},"). To add other languages:",[421,1264,1265,1275,1278],{},[322,1266,1267,1268,1270,1271,1274],{},"Create corresponding language directory under ",[359,1269,445],{}," (e.g., ",[359,1272,1273],{},"en\u002F",")",[322,1276,1277],{},"Copy document structure and translate content",[322,1279,1280],{},"Keep file paths and naming consistent",[308,1282],{},[311,1284,1286],{"id":1285},"testing","Testing",[344,1288,1290],{"id":1289},"manual-testing-checklist","Manual Testing Checklist",[304,1292,1293],{},"Before submitting PRs involving download functionality, verify these scenarios:",[319,1295,1298,1308,1314,1320,1326,1332,1338,1344,1350],{"className":1296},[1297],"contains-task-list",[322,1299,1302,1307],{"className":1300},[1301],"task-list-item",[1303,1304],"input",{"disabled":1305,"type":1306},true,"checkbox"," Small file download (\u003C10MB)",[322,1309,1311,1313],{"className":1310},[1301],[1303,1312],{"disabled":1305,"type":1306}," Large file download (>500MB)",[322,1315,1317,1319],{"className":1316},[1301],[1303,1318],{"disabled":1305,"type":1306}," Encrypted HLS stream download",[322,1321,1323,1325],{"className":1322},[1301],[1303,1324],{"disabled":1305,"type":1306}," DASH stream download",[322,1327,1329,1331],{"className":1328},[1301],[1303,1330],{"disabled":1305,"type":1306}," Format conversion (TS → MP4)",[322,1333,1335,1337],{"className":1334},[1301],[1303,1336],{"disabled":1305,"type":1306}," Concurrent thread count switching",[322,1339,1341,1343],{"className":1340},[1301],[1303,1342],{"disabled":1305,"type":1306}," Download cancellation and retry",[322,1345,1347,1349],{"className":1346},[1301],[1303,1348],{"disabled":1305,"type":1306}," Chrome browser",[322,1351,1353,1355],{"className":1352},[1301],[1303,1354],{"disabled":1305,"type":1306}," Edge browser",[304,1357,1358,456],{},[453,1359,1360],{},"Verification Points for Each Test Scenario",[458,1362,1363,1376],{},[461,1364,1365],{},[464,1366,1367,1370,1373],{},[467,1368,1369],{},"Test Scenario",[467,1371,1372],{},"Verification Points",[467,1374,1375],{},"Reference Docs",[477,1377,1378,1390,1404,1418,1432,1445,1457,1471],{},[464,1379,1380,1383,1386],{},[482,1381,1382],{},"Small file download",[482,1384,1385],{},"Download integrity, speed display, progress bar",[482,1387,1388],{},[369,1389,96],{"href":97},[464,1391,1392,1395,1398],{},[482,1393,1394],{},"Large file download",[482,1396,1397],{},"Memory usage, streaming write, no crashes",[482,1399,1400],{},[369,1401,1403],{"href":1402},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#memory-safety-management","Download Engine Architecture — Memory Safety Management",[464,1405,1406,1409,1412],{},[482,1407,1408],{},"Encrypted HLS",[482,1410,1411],{},"AES-128 decryption, key fetch",[482,1413,1414],{},[369,1415,1417],{"href":1416},"\u002Fdocs\u002Ffeatures\u002Fvideo-sniffing#encrypted-streams-aes-128","Video Sniffing — Encrypted Streams",[464,1419,1420,1423,1426],{},[482,1421,1422],{},"DASH stream",[482,1424,1425],{},"A\u002FV separation, FMP4 reassembly",[482,1427,1428],{},[369,1429,1431],{"href":1430},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#dash-stream-special-handling","Download Engine Architecture — DASH Stream Special Handling",[464,1433,1434,1437,1440],{},[482,1435,1436],{},"Format conversion",[482,1438,1439],{},"FFmpeg loading, remuxing correctness",[482,1441,1442],{},[369,1443,1444],{"href":61},"Format Conversion — FFmpeg WASM Engine",[464,1446,1447,1450,1453],{},[482,1448,1449],{},"Concurrency switch",[482,1451,1452],{},"Thread count changes, speed comparison",[482,1454,1455],{},[369,1456,28],{"href":29},[464,1458,1459,1462,1465],{},[482,1460,1461],{},"Cancel & retry",[482,1463,1464],{},"AbortController, retry count",[482,1466,1467],{},[369,1468,1470],{"href":1469},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#retry-mechanism","Download Engine Architecture — Retry Mechanism",[464,1472,1473,1476,1479],{},[482,1474,1475],{},"Browser compatibility",[482,1477,1478],{},"Chrome\u002FEdge feature consistency",[482,1480,1481],{},[369,1482,91],{"href":92},[344,1484,1486],{"id":1485},"test-streaming-urls","Test Streaming URLs",[304,1488,1489],{},"Here are some publicly available streams for testing:",[352,1491,1494],{"className":1492,"code":1493,"language":357},[355],"# Basic HLS (no encryption)\nhttps:\u002F\u002Ftest-streams.mux.dev\u002Fx36xhzz\u002Fx36xhzz.m3u8\n\n# Multi-quality HLS\nhttps:\u002F\u002Ftest-streams.mux.dev\u002Fpts_shift\u002Fpts_shift.m3u8\n\n# Basic DASH\nhttps:\u002F\u002Fdash.akamaized.net\u002Fakamai\u002Fbbb_30fps\u002Fbbb_30fps.mpd\n",[359,1495,1493],{"__ignoreMap":361},[400,1497,1498],{},[304,1499,1500,1501,1503,1504,695],{},"For HLS and DASH stream detection principles and manifest structure, see ",[369,1502,40],{"href":41},". For how to use these test URLs in online tools, see ",[369,1505,86],{"href":87},[308,1507],{},[311,1509,1511],{"id":1510},"release-process","Release Process",[421,1513,1514,1519,1525,1533,1539],{},[322,1515,1516,1517,1029],{},"Complete development and testing on ",[359,1518,992],{},[322,1520,1521,1522],{},"Update changelog in ",[359,1523,1524],{},"content\u002Fzh-Hans\u002F4.changelog\u002F",[322,1526,1527,1528,1530,1531],{},"Merge ",[359,1529,992],{}," into ",[359,1532,986],{},[322,1534,1535,1536,1274],{},"Create version tag (e.g., ",[359,1537,1538],{},"v1.1.0",[322,1540,1541],{},"Build extension package and submit to Chrome Web Store",[308,1543],{},[311,1545,1547],{"id":1546},"related-documentation","Related Documentation",[319,1549,1550,1555,1560,1565,1570,1575,1580,1585,1590,1595],{},[322,1551,1552,1554],{},[369,1553,161],{"href":162}," — System design, module responsibilities, and data flow",[322,1556,1557,1559],{},[369,1558,96],{"href":97}," — Complete technical implementation of core download engine",[322,1561,1562,1564],{},[369,1563,40],{"href":41}," — HLS\u002FDASH manifest parsing and encryption detection",[322,1566,1567,1569],{},[369,1568,60],{"href":61}," — FFmpeg WASM engine and output formats",[322,1571,1572,1574],{},[369,1573,91],{"href":92}," — Browser API support and degradation strategies",[322,1576,1577,1579],{},[369,1578,86],{"href":87}," — Online tool usage and limitations",[322,1581,1582,1584],{},[369,1583,28],{"href":29}," — Concurrency, filter, and other settings",[322,1586,1587,1589],{},[369,1588,376],{"href":141}," — Current version technical limitations and edge cases",[322,1591,1592,1594],{},[369,1593,136],{"href":137}," — Diagnostic tools and troubleshooting steps",[322,1596,1597,1599],{},[369,1598,101],{"href":108}," — Usage documentation references by scenario",[923,1601,1602],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":361,"searchDepth":647,"depth":647,"links":1604},[1605,1606,1612,1619,1626,1633,1637,1638],{"id":313,"depth":647,"text":314},{"id":341,"depth":647,"text":342,"children":1607},[1608,1609,1610,1611],{"id":346,"depth":657,"text":347},{"id":380,"depth":657,"text":381},{"id":415,"depth":657,"text":416},{"id":553,"depth":657,"text":554},{"id":562,"depth":647,"text":563,"children":1613},[1614,1615,1616,1617,1618],{"id":566,"depth":657,"text":567},{"id":620,"depth":657,"text":621},{"id":665,"depth":657,"text":666},{"id":698,"depth":657,"text":699},{"id":718,"depth":657,"text":719},{"id":818,"depth":647,"text":819,"children":1620},[1621,1622,1623,1624,1625],{"id":822,"depth":657,"text":823},{"id":841,"depth":657,"text":842},{"id":860,"depth":657,"text":861},{"id":978,"depth":657,"text":979},{"id":1014,"depth":657,"text":1015},{"id":1108,"depth":647,"text":1109,"children":1627},[1628,1629,1630,1631,1632],{"id":1112,"depth":657,"text":1113},{"id":1123,"depth":657,"text":1124},{"id":1193,"depth":657,"text":1194},{"id":1221,"depth":657,"text":1222},{"id":1256,"depth":657,"text":534},{"id":1285,"depth":647,"text":1286,"children":1634},[1635,1636],{"id":1289,"depth":657,"text":1290},{"id":1485,"depth":657,"text":1486},{"id":1510,"depth":647,"text":1511},{"id":1546,"depth":647,"text":1547},"2026-07-08","How to contribute code, documentation, or report issues for the FlowPick project.","md",{},{"icon":159},{"title":156,"description":1640},"b2Kc0VMZty5glYafG6Tsj9fFd4-s8m2hbRNCNnFT33w",[1647,1649],{"title":145,"path":146,"stem":147,"description":1648,"icon":148,"children":-1},"High-frequency questions and answers for FlowPick usage, covering installation, download, format conversion, and troubleshooting scenarios.",{"title":161,"path":162,"stem":163,"description":1650,"icon":164,"children":-1},"Technical architecture details of FlowPick, including system design, module breakdown, data flow, and key design decisions.",1788792261412]