[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C6M18V4DWQY41SAM8F1Y2B":3,"skill-same:01M6C6M18V4DWQY41SAM8F1Y2B":98},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6C6M18V4DWQY41SAM8F1Y2B","video-beat-glow",null,"Beat-synced edge glow for a video — beat tracking from a song, glow render, and a browser tuner page for the look. Use when making a video's edges pulse to music.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",60,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"Video","video beat glow","use","2026","when","synced","tuner","for","song","render","look","browser","pulse","tracking","read","page","music","Bash","edge","2026-11-10 10:12:30",false,"---\nname: video-beat-glow\ndescription: Beat-synced edge glow for a video — beat tracking from a song, glow render, and a browser tuner page for the look. Use when making a video's edges pulse to music.\nallowed-tools: Bash, Read\ncreated: 2026-10-29\nmodified: 2026-10-29\nreviewed: 2026-10-29\n---\n\n# Beat-Synced Edge Glow\n\nMake a video's edges glow on a song's beats, in each chapter's colour. Three\nscripts share one beat tracker and one envelope:\n\n| Script | Does |\n|---|---|\n| `beats.py` | Tempo and beats of a song; the per-frame pulse envelope |\n| `glow_tuner.py` | Writes a browser page that plays the video with the glow drawn live, for tuning by eye |\n| `beat_glow.py` | Renders the glow into the video |\n\nPorted from shoreline-recon's `work\u002Fkaraoke\u002F` (`beats.py`, the glow inside\n`karaoke.py`, `glow-tuner.template.html`), with the glow made standalone.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|---|---|\n| A video with a song under it should pulse with the music | Burning in lyrics — `video-karaoke`; glow first, then karaoke on the glowed video |\n| Choosing glow strength, width, decay, and which beats pulse | Checking a finished glow frame by frame — `video-frame-review` |\n\n## Execution\n\nScripts run with numpy only:\n`uv run -q --no-project --with numpy==2.5.4 python -I \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002F\u003Cscript>.py\"`.\n\n1. **Beats.** `beats.py song.m4a --json beats.json` prints the tempo, beat\n   count and gaps. On the shoreline-recon demo song it found **127.39 BPM, 492\n   beats over 231 s**. Sanity-check the tempo against the song before going on.\n2. **Tune by eye.** Mux the song under the video first (`video-add-music`), so\n   the page plays it, then write the tuner beside that video:\n\n   ```bash\n   uv run -q --no-project --with numpy==2.5.4 python -I \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fglow_tuner.py\" \\\n     video-music.mp4 --song song.m4a --margin-bottom 80 --accent splat=#14b8a6 --accent mesh=#f59e0b\n   ```\n\n   Pass `--song` with the original file. Beats taken from the muxed AAC drift\n   (127.43 BPM, 493 beats on the same song), and the tuner would then disagree\n   with the render. Hand the user the page path to open in a browser. Its\n   bottom line is `beat_glow.py`'s options, to paste back.\n3. **Render.**\n\n   ```bash\n   uv run -q --no-project --with numpy==2.5.4 python -I \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fbeat_glow.py\" \\\n     video.mp4 song.m4a out.mp4 --margin-bottom 80 --accent splat=#14b8a6 --accent mesh=#f59e0b \\\n     --intensity 0.54 --width 31 --decay 0.46 --floor 0.12 --every 2 --phase 2 --kick\n   ```\n\n   Preview a stretch first: `--start 45 --duration 20 --preset 10 --with-song`.\n   A preview carries no chapters.\n\n## Options\n\n| Option | Default | Effect |\n|---|---|---|\n| `--intensity` | `0.54` | Peak opacity on the strongest beat |\n| `--width` | `31` | px at 1920 wide for the glow to fall to 1\u002Fe from the nearest edge |\n| `--decay` | `0.46` | s for a pulse to fall to 1\u002Fe (30 ms rise into each beat) |\n| `--floor` | `0.12` | Steady glow between pulses, as a share of the peak |\n| `--every`, `--phase` | `2`, `2` | Pulse on beats where `(index - phase) % every == 0` |\n| `--kick` \u002F `--no-kick` | `--kick` | Scale each pulse by the kick's strength, or pulse at full height |\n| `--margin-bottom` | `0` | px at 1920 under the picture kept out of the glow (a timeline bar) |\n| `--accent KEY=COLOUR`, `--default-colour`, `--sep` | none, `#6366f1`, `\" · \"` | Chapter colours, the same rules as `video-timeline-bar` |\n| `--with-song` | off | Mux the song as AAC; otherwise the input's audio is copied |\n\nThe defaults are the values Lauri picked in the tuner for the shoreline-recon\ndemo (2026-10-28): a narrow glow on every second beat that lingers, over a faint\nfloor.\n\n## How It Works\n\n- **Beats:** onsets are the bass band's (35–160 Hz) spectral flux, the kick\n  drum. The tempo is the strongest autocorrelation lag between 90 and 180 BPM,\n  and beats are placed by dynamic programming (Ellis 2007). A beat's strength\n  is its peak flux over the 90th-percentile beat's, clipped to 1 and raised to\n  1.5; `--kick` scales each pulse by it.\n- **Glow:** `exp(-d \u002F width)` of the distance to the nearest edge,\n  screen-blended towards the chapter colour: `255 - (255 - f) * (1 - a * colour)`.\n  The tuner draws the same thing on a canvas with `mix-blend-mode: screen`.\n- **Agreement:** the tuner's JS pulse and the Python envelope agreed within\n  0.014 over 1003 frames of the real song (measured when the tuner was built).\n  `scripts\u002Ftests\u002Ftest_beat_glow.py` extracts `pulseAt` from the shipped\n  template and holds it to the envelope within `exp(-5)`. That is where the\n  two cut a pulse's tail.\n\n## Cost\n\nThe glow was the costly part of the original karaoke render: about 60 s of\n77 s at 1280 wide, from full-frame float maths. `beat_glow.py` computes only the\nedge bands where the glow can change an 8-bit value. Past\n`1 + width * ln(255 * intensity)` px from an edge the change is under one level,\nso the output is identical to the full-frame result (the test checks this pixel\nfor pixel). Measured on the 234 s, 1280x774 demo:\n\n| | Glow per frame | Whole render |\n|---|---|---|\n| Full frame | 7.44 ms | — |\n| Edge bands (103 px) | 2.94 ms | 49.0 s, against 31.0 s with the glow off |\n\n## Tuning a Look With the User\n\nThe glow's look cannot be judged from code, so the user drags the sliders\ninstead of the agent guessing constants. The tuner is an instance of\n`agent-patterns-plugin:expose-tunable-knob`: generate the page, let the user\nplay the video and adjust, take back the pasted settings line, and render with\nexactly those values.\n\n## Tests\n\n`scripts\u002Ftests\u002Ftest-beat-glow.sh` (needs `uv`; the JS check also needs `node`)\ncovers the envelope, band-equals-full-frame, accent rules, and the tuner's JS\npulse against the envelope.\n","# Beat-Synced Edge Glow\n\nMake a video's edges glow on a song's beats, in each chapter's colour. Three\nscripts share one beat tracker and one envelope:\n\n| Script | Does |\n|---|---|\n| `beats.py` | Tempo and beats of a song; the per-frame pulse envelope |\n| `glow_tuner.py` | Writes a browser page that plays the video with the glow drawn live, for tuning by eye |\n| `beat_glow.py` | Renders the glow into the video |\n\nPorted from shoreline-recon's `work\u002Fkaraoke\u002F` (`beats.py`, the glow inside\n`karaoke.py`, `glow-tuner.template.html`), with the glow made standalone.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|---|---|\n| A video with a song under it should pulse with the music | Burning in lyrics — `video-karaoke`; glow first, then karaoke on the glowed video |\n| Choosing glow strength, width, decay, and which beats pulse | Checking a finished glow frame by frame — `video-frame-review` |\n\n## Execution\n\nScripts run with numpy only:\n`uv run -q --no-project --with numpy==2.5.4 python -I \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002F\u003Cscript>.py\"`.\n\n1. **Beats.** `beats.py song.m4a --json beats.json` prints the tempo, beat\n   count and gaps. On the shoreline-recon demo song it found **127.39 BPM, 492\n   beats over 231 s**. Sanity-check the tempo against the song before going on.\n2. **Tune by eye.** Mux the song under the video first (`video-add-music`), so\n   the page plays it, then write the tuner beside that video:\n\n   ```bash\n   uv run -q --no-project --with numpy==2.5.4 python -I \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fglow_tuner.py\" \\\n     video-music.mp4 --song song.m4a --margin-bottom 80 --accent splat=#14b8a6 --accent mesh=#f59e0b\n   ```\n\n   Pass `--song` with the original file. Beats taken from the muxed AAC drift\n   (127.43 BPM, 493 beats on the same song), and the tuner would then disagree\n   with the render. Hand the user the page path to open in a browser. Its\n   bottom line is `beat_glow.py`'s options, to paste back.\n3. **Render.**\n\n   ```bash\n   uv run -q --no-project --with numpy==2.5.4 python -I \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fbeat_glow.py\" \\\n     video.mp4 song.m4a out.mp4 --margin-bottom 80 --accent splat=#14b8a6 --accent mesh=#f59e0b \\\n     --intensity 0.54 --width 31 --decay 0.46 --floor 0.12 --every 2 --phase 2 --kick\n   ```\n\n   Preview a stretch first: `--start 45 --duration 20 --preset 10 --with-song`.\n   A preview carries no chapters.\n\n## Options\n\n| Option | Default | Effect |\n|---|---|---|\n| `--intensity` | `0.54` | Peak opacity on the strongest beat |\n| `--width` | `31` | px at 1920 wide for the glow to fall to 1\u002Fe from the nearest edge |\n| `--decay` | `0.46` | s for a pulse to fall to 1\u002Fe (30 ms rise into each beat) |\n| `--floor` | `0.12` | Steady glow between pulses, as a share of the peak |\n| `--every`, `--phase` | `2`, `2` | Pulse on beats where `(index - phase) % every == 0` |\n| `--kick` \u002F `--no-kick` | `--kick` | Scale each pulse by the kick's strength, or pulse at full height |\n| `--margin-bottom` | `0` | px at 1920 under the picture kept out of the glow (a timeline bar) |\n| `--accent KEY=COLOUR`, `--default-colour`, `--sep` | none, `#6366f1`, `\" · \"` | Chapter colours, the same rules as `video-timeline-bar` |\n| `--with-song` | off | Mux the song as AAC; otherwise the input's audio is copied |\n\nThe defaults are the values Lauri picked in the tuner for the shoreline-recon\ndemo (2026-10-28): a narrow glow on every second beat that lingers, over a faint\nfloor.\n\n## How It Works\n\n- **Beats:** onsets are the bass band's (35–160 Hz) spectral flux, the kick\n  drum. The tempo is the strongest autocorrelation lag between 90 and 180 BPM,\n  and beats are placed by dynamic programming (Ellis 2007). A beat's strength\n  is its peak flux over the 90th-percentile beat's, clipped to 1 and raised to\n  1.5; `--kick` scales each pulse by it.\n- **Glow:** `exp(-d \u002F width)` of the distance to the nearest edge,\n  screen-blended towards the chapter colour: `255 - (255 - f) * (1 - a * colour)`.\n  The tuner draws the same thing on a canvas with `mix-blend-mode: screen`.\n- **Agreement:** the tuner's JS pulse and the Python envelope agreed within\n  0.014 over 1003 frames of the real song (measured when the tuner was built).\n  `scripts\u002Ftests\u002Ftest_beat_glow.py` extracts `pulseAt` from the shipped\n  template and holds it to the envelope within `exp(-5)`. That is where the\n  two cut a pulse's tail.\n\n## Cost\n\nThe glow was the costly part of the original karaoke render: about 60 s of\n77 s at 1280 wide, from full-frame float maths. `beat_glow.py` computes only the\nedge bands where the glow can change an 8-bit value. Past\n`1 + width * ln(255 * intensity)` px from an edge the change is under one level,\nso the output is identical to the full-frame result (the test checks this pixel\nfor pixel). Measured on the 234 s, 1280x774 demo:\n\n| | Glow per frame | Whole render |\n|---|---|---|\n| Full frame | 7.44 ms | — |\n| Edge bands (103 px) | 2.94 ms | 49.0 s, against 31.0 s with the glow off |\n\n## Tuning a Look With the User\n\nThe glow's look cannot be judged from code, so the user drags the sliders\ninstead of the agent guessing constants. The tuner is an instance of\n`agent-patterns-plugin:expose-tunable-knob`: generate the page, let the user\nplay the video and adjust, take back the pasted settings line, and render with\nexactly those values.\n\n## Tests\n\n`scripts\u002Ftests\u002Ftest-beat-glow.sh` (needs `uv`; the JS check also needs `node`)\ncovers the envelope, band-equals-full-frame, accent rules, and the tuner's JS\npulse against the envelope.\n",{"name":5,"created":48,"modified":48,"reviewed":48,"description":7,"allowed-tools":49},1793232000000,"Bash, Read","main","bdd0582f1a2ba53d21061835bfd72d45f2f954f4","video-plugin\u002Fskills\u002Fvideo-beat-glow",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-13 20:24:11",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add laurigates\u002Fclaude-plugins --skill video-beat-glow",{"tool":64,"command":65},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill video-beat-glow",{"tool":67,"command":68},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill video-beat-glow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002FSKILL.md",true,[72,78,82,86,90,94],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"scripts\u002Fbeat_glow.py","SCRIPT","脚本",11099,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002Fscripts\u002Fbeat_glow.py",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"scripts\u002Fbeats.py",6168,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002Fscripts\u002Fbeats.py",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"scripts\u002Fglow_tuner.py",4499,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002Fscripts\u002Fglow_tuner.py",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fglow-tuner.template.html",8606,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002Fscripts\u002Fglow-tuner.template.html",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Ftests\u002Ftest_beat_glow.py",6063,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002Fscripts\u002Ftests\u002Ftest_beat_glow.py",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002Ftests\u002Ftest-beat-glow.sh",586,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fvideo-plugin\u002Fskills\u002Fvideo-beat-glow\u002Fscripts\u002Ftests\u002Ftest-beat-glow.sh",[99,122,143,159,182,211],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":106,"publishedAt":43},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[105],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[107,108,109,110,111,112,113,114,115,116,26,28,41,117,118,119,120,121,27,38],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg","via",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":43},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[110,129,130,131,132,133,28,41,134,135,136,27,38,137,138,139,140,141,142,26],"kitty session persistence","session","persistence","false","snapshots","uname","reboot","terminal","write","edit","snapshot","macos","sessions","restore",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":43},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[150,151,110,152,153,112,154,155,113,156,157,26,28,158,41,118,119,136,27,38],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":43},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[166,167,168,169,170,171,172,173,174,175,26,28,41,176,117,177,178,179,180,181],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":197,"publishedAt":43},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[188,191,192],{"categoryNo":189,"categoryName":190,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":193,"categoryName":194,"taxonomyType":195,"taxonomyTypeDesc":196},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[198,199,200,24,172,201,38,202,138,203,204,205,26,41,117,206,207,28,208,209,210,121,27],"youtube upload","upload","youtube","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":212,"name":213,"nameZh":6,"description":214,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":215,"categories":216,"keywords":220,"publishedAt":43},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[217],{"categoryNo":218,"categoryName":219,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[221,222,223,224,200,24,35,225,226,227,228,38,229,230,231,232,26,233,28,119,234,27],"youtube studio share","share","youtube studio","studio","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]