[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XDMEW24AKESYVN4V19FC6H":3,"skill-same:01M6XDMEW24AKESYVN4V19FC6H":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":13,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6XDMEW24AKESYVN4V19FC6H","browser-testing",null,"VERIFY your changes work. Measure performance, CLS. Use BEFORE and AFTER making changes to confirm fixes. Includes ready-to-run scripts: measure-cls.ts, detect-flicker.ts","Waaaalnut\u002Fskillsbench","Waaaalnut","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F103995656?v=4","01M6XCS9K1V51EY3JMB7DGMX24","01M6XCS9Q4WPW88W62C55G1H44",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Freact-performance-debugging\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36],"testing","browser","browser testing","performance","run","verify","before and after","work","use","ready","scripts","detect","changes","fixes","2026-11-10 10:12:30",false,"---\nname: browser-testing\ndescription: \"VERIFY your changes work. Measure performance, CLS. Use BEFORE and AFTER making changes to confirm fixes. Includes ready-to-run scripts: measure-cls.ts, detect-flicker.ts\"\n---\n\n# Performance Measurement with Playwright CDP\n\nDiagnose performance issues by measuring actual load times and network activity.\n\n**Playwright is pre-installed.** Just use the measurement script.\n\n## Quick Start\n\nA `measure.ts` script is included in this skill's directory. Find it and run:\n\n```bash\n# Measure a page (outputs JSON with waterfall data)\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure.ts http:\u002F\u002Flocalhost:3000\n\n# Measure an API endpoint\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure.ts http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts\n```\n\nThe script is in the same directory as this SKILL.md file.\n\n## Understanding the Output\n\nThe script outputs JSON with:\n\n```json\n{\n  \"url\": \"http:\u002F\u002Flocalhost:3000\",\n  \"totalMs\": 1523,\n  \"requests\": [\n    { \"url\": \"http:\u002F\u002Flocalhost:3000\u002F\", \"ms\": 45.2 },\n    { \"url\": \"http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts\", \"ms\": 512.3 },\n    { \"url\": \"http:\u002F\u002Flocalhost:3000\u002Fapi\u002Ffeatured\", \"ms\": 301.1 }\n  ],\n  \"metrics\": {\n    \"JSHeapUsedSize\": 4521984,\n    \"LayoutCount\": 12,\n    \"ScriptDuration\": 0.234\n  }\n}\n```\n\n### Reading the Waterfall\n\nThe `requests` array shows network timing. Look for **sequential patterns**:\n\n```\nBAD (sequential - each waits for previous):\n  \u002Fapi\u002Fproducts    |████████|                        512ms\n  \u002Fapi\u002Ffeatured             |██████|                 301ms  (starts AFTER products)\n  \u002Fapi\u002Fcategories                  |████|            201ms  (starts AFTER featured)\n  Total: 1014ms\n\nGOOD (parallel - all start together):\n  \u002Fapi\u002Fproducts    |████████|                        512ms\n  \u002Fapi\u002Ffeatured    |██████|                          301ms  (starts SAME TIME)\n  \u002Fapi\u002Fcategories  |████|                            201ms  (starts SAME TIME)\n  Total: 512ms (just the slowest one)\n```\n\n### Key Metrics\n\n| Metric | What it means | Red flag |\n|--------|---------------|----------|\n| `totalMs` | Total page load time | > 1000ms |\n| `JSHeapUsedSize` | Memory used by JS | Growing over time |\n| `LayoutCount` | Layout recalculations | > 50 per page |\n| `ScriptDuration` | Time in JS execution | > 0.5s |\n\n## What to Look For\n\n| Symptom | Likely Cause | Fix |\n|---------|--------------|-----|\n| Requests in sequence | Sequential `await` statements | Use `Promise.all()` |\n| Same URL requested twice | Fetch before cache check | Check cache first |\n| Long time before response starts | Blocking operation before sending | Make it async\u002Fnon-blocking |\n| High LayoutCount | Components re-rendering | Add `React.memo`, `useMemo` |\n\n## Measuring API Endpoints Directly\n\nFor quick API timing without browser overhead:\n\n```typescript\nasync function measureAPI(url: string) {\n  const start = Date.now();\n  const response = await fetch(url);\n  const elapsed = Date.now() - start;\n  return { url, time_ms: elapsed, status: response.status };\n}\n\n\u002F\u002F Example\nconst endpoints = [\n  'http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts',\n  'http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts?cache=false',\n  'http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fcheckout',\n];\n\nfor (const endpoint of endpoints) {\n  const result = await measureAPI(endpoint);\n  console.log(`${endpoint}: ${result.time_ms}ms`);\n}\n```\n\n## How the Measurement Script Works\n\nThe script uses Chrome DevTools Protocol (CDP) to intercept browser internals:\n\n1. **Network.requestWillBeSent** - Event fired when request starts, we record timestamp\n2. **Network.responseReceived** - Event fired when response arrives, we calculate duration\n3. **Performance.getMetrics** - Returns Chrome's internal counters (memory, layout, script time)\n\nThis gives you the same data as Chrome DevTools Network tab, but programmatically.\n\n## Visual Stability Measurement\n\n### Measure CLS (Cumulative Layout Shift)\n\n```bash\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure-cls.ts http:\u002F\u002Flocalhost:3000\n```\n\nOutput:\n```json\n{\n  \"url\": \"http:\u002F\u002Flocalhost:3000\",\n  \"cls\": 0.42,\n  \"rating\": \"poor\",\n  \"shifts\": [\n    {\n      \"value\": 0.15,\n      \"hadRecentInput\": false,\n      \"sources\": [\n        {\"nodeId\": 42, \"previousRect\": {...}, \"currentRect\": {...}}\n      ]\n    }\n  ]\n}\n```\n\n### CLS Thresholds\n\n| CLS Score | Rating | Action |\n|-----------|--------|--------|\n| \u003C 0.1 | Good | No action needed |\n| 0.1 - 0.25 | Needs Improvement | Review shift sources |\n| > 0.25 | Poor | Fix immediately |\n\n### Detect Theme Flicker\n\n```bash\nnpx ts-node \u003Cpath-to-this-skill>\u002Fdetect-flicker.ts http:\u002F\u002Flocalhost:3000\n```\n\nDetects if dark theme flashes white before loading. Sets localStorage theme before navigation and checks background color at first paint.\n\n### Accurate CLS Measurement\n\nCLS only measures shifts **within the viewport**. Content that loads below the fold doesn't contribute until you scroll. For accurate measurement:\n\n**Recommended testing sequence:**\n1. Load page\n2. Wait 3 seconds (let late-loading content appear)\n3. Scroll to bottom\n4. Wait 2 seconds\n5. Trigger 1-2 UI actions (theme toggle, filter click, etc.)\n6. Wait 2 seconds\n7. Read final CLS\n\n```bash\n# Basic measurement (may miss shifts from late content)\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure-cls.ts http:\u002F\u002Flocalhost:3000\n\n# With scrolling (catches more shifts)\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure-cls.ts http:\u002F\u002Flocalhost:3000 --scroll\n```\n\n**Why measurements vary:**\n- Production vs development builds have different timing\n- Viewport size affects what's \"in view\" during shifts\n- setTimeout delays vary slightly between runs\n- Network conditions affect when content loads\n\nThe relative difference (before\u002Fafter fix) matters more than absolute values.\n\n### Common CLS Causes\n\n| Shift Source | Likely Cause | Fix |\n|--------------|--------------|-----|\n| `\u003Cimg>` elements | Missing width\u002Fheight | Add dimensions or use `next\u002Fimage` |\n| Theme wrapper | Hydration flicker | Use inline script before React |\n| Skeleton loaders | Size mismatch | Match skeleton to final content size |\n| Dynamic banners | No reserved space | Add `min-height` to container |\n| Late-loading sidebars | Content appears and pushes main content | Reserve space with CSS or show placeholder |\n| Pagination\u002Fresults bars | UI element appears after data loads | Show immediately with loading state |\n| Font loading | Custom fonts cause text reflow | Use `font-display: swap` or preload fonts |","# Performance Measurement with Playwright CDP\n\nDiagnose performance issues by measuring actual load times and network activity.\n\n**Playwright is pre-installed.** Just use the measurement script.\n\n## Quick Start\n\nA `measure.ts` script is included in this skill's directory. Find it and run:\n\n```bash\n# Measure a page (outputs JSON with waterfall data)\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure.ts http:\u002F\u002Flocalhost:3000\n\n# Measure an API endpoint\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure.ts http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts\n```\n\nThe script is in the same directory as this SKILL.md file.\n\n## Understanding the Output\n\nThe script outputs JSON with:\n\n```json\n{\n  \"url\": \"http:\u002F\u002Flocalhost:3000\",\n  \"totalMs\": 1523,\n  \"requests\": [\n    { \"url\": \"http:\u002F\u002Flocalhost:3000\u002F\", \"ms\": 45.2 },\n    { \"url\": \"http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts\", \"ms\": 512.3 },\n    { \"url\": \"http:\u002F\u002Flocalhost:3000\u002Fapi\u002Ffeatured\", \"ms\": 301.1 }\n  ],\n  \"metrics\": {\n    \"JSHeapUsedSize\": 4521984,\n    \"LayoutCount\": 12,\n    \"ScriptDuration\": 0.234\n  }\n}\n```\n\n### Reading the Waterfall\n\nThe `requests` array shows network timing. Look for **sequential patterns**:\n\n```\nBAD (sequential - each waits for previous):\n  \u002Fapi\u002Fproducts    |████████|                        512ms\n  \u002Fapi\u002Ffeatured             |██████|                 301ms  (starts AFTER products)\n  \u002Fapi\u002Fcategories                  |████|            201ms  (starts AFTER featured)\n  Total: 1014ms\n\nGOOD (parallel - all start together):\n  \u002Fapi\u002Fproducts    |████████|                        512ms\n  \u002Fapi\u002Ffeatured    |██████|                          301ms  (starts SAME TIME)\n  \u002Fapi\u002Fcategories  |████|                            201ms  (starts SAME TIME)\n  Total: 512ms (just the slowest one)\n```\n\n### Key Metrics\n\n| Metric | What it means | Red flag |\n|--------|---------------|----------|\n| `totalMs` | Total page load time | > 1000ms |\n| `JSHeapUsedSize` | Memory used by JS | Growing over time |\n| `LayoutCount` | Layout recalculations | > 50 per page |\n| `ScriptDuration` | Time in JS execution | > 0.5s |\n\n## What to Look For\n\n| Symptom | Likely Cause | Fix |\n|---------|--------------|-----|\n| Requests in sequence | Sequential `await` statements | Use `Promise.all()` |\n| Same URL requested twice | Fetch before cache check | Check cache first |\n| Long time before response starts | Blocking operation before sending | Make it async\u002Fnon-blocking |\n| High LayoutCount | Components re-rendering | Add `React.memo`, `useMemo` |\n\n## Measuring API Endpoints Directly\n\nFor quick API timing without browser overhead:\n\n```typescript\nasync function measureAPI(url: string) {\n  const start = Date.now();\n  const response = await fetch(url);\n  const elapsed = Date.now() - start;\n  return { url, time_ms: elapsed, status: response.status };\n}\n\n\u002F\u002F Example\nconst endpoints = [\n  'http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts',\n  'http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fproducts?cache=false',\n  'http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fcheckout',\n];\n\nfor (const endpoint of endpoints) {\n  const result = await measureAPI(endpoint);\n  console.log(`${endpoint}: ${result.time_ms}ms`);\n}\n```\n\n## How the Measurement Script Works\n\nThe script uses Chrome DevTools Protocol (CDP) to intercept browser internals:\n\n1. **Network.requestWillBeSent** - Event fired when request starts, we record timestamp\n2. **Network.responseReceived** - Event fired when response arrives, we calculate duration\n3. **Performance.getMetrics** - Returns Chrome's internal counters (memory, layout, script time)\n\nThis gives you the same data as Chrome DevTools Network tab, but programmatically.\n\n## Visual Stability Measurement\n\n### Measure CLS (Cumulative Layout Shift)\n\n```bash\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure-cls.ts http:\u002F\u002Flocalhost:3000\n```\n\nOutput:\n```json\n{\n  \"url\": \"http:\u002F\u002Flocalhost:3000\",\n  \"cls\": 0.42,\n  \"rating\": \"poor\",\n  \"shifts\": [\n    {\n      \"value\": 0.15,\n      \"hadRecentInput\": false,\n      \"sources\": [\n        {\"nodeId\": 42, \"previousRect\": {...}, \"currentRect\": {...}}\n      ]\n    }\n  ]\n}\n```\n\n### CLS Thresholds\n\n| CLS Score | Rating | Action |\n|-----------|--------|--------|\n| \u003C 0.1 | Good | No action needed |\n| 0.1 - 0.25 | Needs Improvement | Review shift sources |\n| > 0.25 | Poor | Fix immediately |\n\n### Detect Theme Flicker\n\n```bash\nnpx ts-node \u003Cpath-to-this-skill>\u002Fdetect-flicker.ts http:\u002F\u002Flocalhost:3000\n```\n\nDetects if dark theme flashes white before loading. Sets localStorage theme before navigation and checks background color at first paint.\n\n### Accurate CLS Measurement\n\nCLS only measures shifts **within the viewport**. Content that loads below the fold doesn't contribute until you scroll. For accurate measurement:\n\n**Recommended testing sequence:**\n1. Load page\n2. Wait 3 seconds (let late-loading content appear)\n3. Scroll to bottom\n4. Wait 2 seconds\n5. Trigger 1-2 UI actions (theme toggle, filter click, etc.)\n6. Wait 2 seconds\n7. Read final CLS\n\n```bash\n# Basic measurement (may miss shifts from late content)\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure-cls.ts http:\u002F\u002Flocalhost:3000\n\n# With scrolling (catches more shifts)\nnpx ts-node \u003Cpath-to-this-skill>\u002Fmeasure-cls.ts http:\u002F\u002Flocalhost:3000 --scroll\n```\n\n**Why measurements vary:**\n- Production vs development builds have different timing\n- Viewport size affects what's \"in view\" during shifts\n- setTimeout delays vary slightly between runs\n- Network conditions affect when content loads\n\nThe relative difference (before\u002Fafter fix) matters more than absolute values.\n\n### Common CLS Causes\n\n| Shift Source | Likely Cause | Fix |\n|--------------|--------------|-----|\n| `\u003Cimg>` elements | Missing width\u002Fheight | Add dimensions or use `next\u002Fimage` |\n| Theme wrapper | Hydration flicker | Use inline script before React |\n| Skeleton loaders | Size mismatch | Match skeleton to final content size |\n| Dynamic banners | No reserved space | Add `min-height` to container |\n| Late-loading sidebars | Content appears and pushes main content | Reserve space with CSS or show placeholder |\n| Pagination\u002Fresults bars | UI element appears after data loads | Show immediately with loading state |\n| Font loading | Custom fonts cause text reflow | Use `font-display: swap` or preload fonts |",{"name":5,"description":7},"main","7eeb258ada72b7f58119b0e7a2c00ea89d9beedd","tasks-no-skills\u002Freact-performance-debugging\u002Fenvironment\u002Fskills\u002Fbrowser-testing","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench","https:\u002F\u002Fgithub.com\u002FWaaaalnut","student of Zhejiang University","2026-04-21 23:16:23",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add Waaaalnut\u002Fskillsbench --skill browser-testing",{"tool":55,"command":56},"bunx","bunx skills add Waaaalnut\u002Fskillsbench --skill browser-testing",{"tool":58,"command":59},"pnpm","pnpm dlx skills add Waaaalnut\u002Fskillsbench --skill browser-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Freact-performance-debugging\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002FSKILL.md",true,[63,69],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"measure-cls.ts","SCRIPT","脚本",1963,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Freact-performance-debugging\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002Fmeasure-cls.ts",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"measure.ts",2642,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Freact-performance-debugging\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002Fmeasure.ts",[74,88,103,128,149,168],{"skillNo":75,"name":76,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":37},"01M6XEWMJ6VY3ZC53MPDCPG3GH","data-reconciliation","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fxlsx-recover-data\u002Fenvironment\u002Fskills\u002Fdata-reconciliation\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[85,86,87],"data reconciliation","reconciliation","data",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":37},"01M6XEW8MNPMF1KRXV6ATGFRQF","speech-to-text","Transcribe video to timestamped text using Whisper tiny model (pre-installed).","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-tutorial-indexer\u002Fenvironment\u002Fskills\u002Fspeech-to-text\u002FSKILL.md",[],[95,96,97,98,99,100,101,102],"speech","text","speech to text","transcribe video","whisper","model","Video","transcribe",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":112,"publishedAt":37},"01M6XEW3FQZP0T1RKQQJFXVY9T","video-processor","Process videos by removing segments and concatenating remaining parts. Use when you need to remove detected pauses\u002Fopenings from videos, create highlight reels, or batch process segment removals using ffmpeg filter_complex.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fvideo-processor\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[101,113,114,115,116,117,118,119,120,121,122,123,124,125,126,31,127],"processor","video processor","batch","create","reels","when","parts","segments","process","videos","you","segment","filter","ffmpeg","remove",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":135,"publishedAt":37},"01M6XEVXJ5KZ0NTY3XZKRY4AS1","silence-detector","Detect initial silence segments in audio\u002Fvideo using energy-based analysis. Use when you need to find low-energy periods at the start of recordings (title slides, setup time, pre-roll silence).","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fsilence-detector\u002FSKILL.md",[134],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},[136,137,138,139,118,123,140,141,142,143,34,120,144,145,101,146,147,148,31],"detector","silence detector","title","slides","time","energy","at","recordings","find","Audio","analysis","start","setup",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":37},"01M6XEVT3NGRN1FT7JPMAPXS6M","segment-combiner","Combine multiple segment detection results into a unified list. Use when you need to merge segments from different detectors, prepare removal lists for video processing, or consolidate detection outputs.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fsegment-combiner\u002FSKILL.md",[],[124,156,101,157,158,159,160,161,118,162,163,120,123,164,165,31,166,167],"segment combiner","detection","prepare","merge","video processing","for","outputs","combine","processing","consolidate","results","list",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":177,"publishedAt":37},"01M6XEVMPVASGS2KX86QK4FMT7","report-generator","Generate compression reports for video processing. Use when you need to create structured JSON reports with duration statistics, compression ratios, and segment details after video processing.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Freport-generator\u002FSKILL.md",[174],{"categoryNo":175,"categoryName":176,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000034","行政与办公人员",[178,179,180,124,118,161,123,181,164,182,183,184,31,160,185,101,186,187,116],"generator","report generator","report","with","statistics","structured","reports","json","compression","generate"]