[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XD613WR67C8B6PDDF1JWVN":3,"skill-same:01M6XD613WR67C8B6PDDF1JWVN":82},{"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":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":13,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6XD613WR67C8B6PDDF1JWVN","browser-testing",null,"VERIFY your changes work. Measure CLS, detect theme flicker, test visual stability, check performance. 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\u002Ffix-visual-stability\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,37,38,39,40,41],"browser","browser testing","testing","work","fixes","changes","theme","detect","scripts","visual","ready","use","check","before and after","verify","run","test","stability","performance","2026-11-10 10:12:30",false,"---\nname: browser-testing\ndescription: \"VERIFY your changes work. Measure CLS, detect theme flicker, test visual stability, check performance. 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 |\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 |\n",{"name":5,"description":7},"main","7eeb258ada72b7f58119b0e7a2c00ea89d9beedd","tasks-no-skills\u002Ffix-visual-stability\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":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add Waaaalnut\u002Fskillsbench --skill browser-testing",{"tool":60,"command":61},"bunx","bunx skills add Waaaalnut\u002Fskillsbench --skill browser-testing",{"tool":63,"command":64},"pnpm","pnpm dlx skills add Waaaalnut\u002Fskillsbench --skill browser-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-visual-stability\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002FSKILL.md",true,[68,74,78],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"detect-flicker.ts","SCRIPT","脚本",3431,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-visual-stability\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002Fdetect-flicker.ts",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"measure-cls.ts",1963,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-visual-stability\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002Fmeasure-cls.ts",{"path":79,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":80,"sourceHtmlUrl":81},"measure.ts",2642,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-visual-stability\u002Fenvironment\u002Fskills\u002Fbrowser-testing\u002Fmeasure.ts",[83,97,112,137,158,177],{"skillNo":84,"name":85,"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":86,"categories":87,"keywords":93,"publishedAt":42},"01M6XEWMJ6VY3ZC53MPDCPG3GH","data-reconciliation","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fxlsx-recover-data\u002Fenvironment\u002Fskills\u002Fdata-reconciliation\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[94,95,96],"data reconciliation","reconciliation","data",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":42},"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",[],[104,105,106,107,108,109,110,111],"speech","text","speech to text","transcribe video","whisper","model","Video","transcribe",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":121,"publishedAt":42},"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",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[110,122,123,124,125,126,127,128,129,130,131,132,133,134,135,34,136],"processor","video processor","batch","create","reels","when","parts","segments","process","videos","you","segment","filter","ffmpeg","remove",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":144,"publishedAt":42},"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",[143],{"categoryNo":119,"categoryName":120,"taxonomyType":20,"taxonomyTypeDesc":21},[145,146,147,148,127,132,149,150,151,152,30,129,153,154,110,155,156,157,34],"detector","silence detector","title","slides","time","energy","at","recordings","find","Audio","analysis","start","setup",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":42},"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",[],[133,165,110,166,167,168,169,170,127,171,172,129,132,173,174,34,175,176],"segment combiner","detection","prepare","merge","video processing","for","outputs","combine","processing","consolidate","results","list",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":186,"publishedAt":42},"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",[183],{"categoryNo":184,"categoryName":185,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000034","行政与办公人员",[187,188,189,133,127,170,132,190,173,191,192,193,34,169,194,110,195,196,125],"generator","report generator","report","with","statistics","structured","reports","json","compression","generate"]