[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71EWNFQFZK7QQH01YVV76FQ":3,"skill-same:01M71EWNFQFZK7QQH01YVV76FQ":96},{"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":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":60,"commitSha":61,"skillDirectory":62,"forksCount":63,"repositoryHtmlUrl":64,"repositoryHomepageUrl":65,"ownerHtmlUrl":66,"ownerBlogUrl":67,"ownerDescription":68,"updatedAt":69,"install":70,"resources":83},"01M71EWNFQFZK7QQH01YVV76FQ","audio-loop",null,"Prepare an existing audio bed for website looping: normalize loudness, optionally balance stereo, encode FLAC and provide Web Audio playback. Use for web ambience or loop-boundary diagnosis; source discontinuities require separate editing.","coroboros\u002Fagent-skills","coroboros","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F276246903?v=4","01M71EW9FC462PB6BEAC5P9JK1","Coroboros","01M71EW9G1KB3SQM769D2JMXXZ",5,"MIT","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Faudio-loop\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"audio loop","loop","Audio","loops","verification","wind","browser","api","architecture","Bash","hero","when","local","atmosphere","iteration","scope","crossfade","mixing","Video","bed","2026-11-10 10:12:30",false,"---\nname: audio-loop\ndescription: 'Prepare an existing audio bed for website looping: normalize loudness, optionally balance stereo, encode FLAC and provide Web Audio playback. Use for web ambience or loop-boundary diagnosis; source discontinuities require separate editing.'\nwhen_to_use: When the user has an audio clip that needs to loop without audible artifacts on a web page, or when `\u003Caudio loop>` is producing an audible gap or tick at each iteration. Keywords — audio, loop, ambient, hero, background, breeze, wind, rain, atmosphere, soundscape, seamless, gapless, flac, web audio, loudness, lufs, normalize, stereo balance, ffmpeg. For video loops use `\u002Fvideo-loop` (sibling — parallel architecture, crossfade + MP4\u002FWebM encode). Skip for composing, mixing, or mastering music\u002Fpodcasts, and for transcription — looping an existing music bed for a page stays in scope.\nargument-hint: \"\u003Cinput.wav> [options] — e.g. \u002Faudio-loop breeze.wav -t -28\"\nallowed-tools: Bash(ffmpeg *) Bash(ffprobe *) Bash(command *) Bash(bash *) Bash(stat *) Read\nlicense: MIT\ncompatibility: \"Requires bash, FFmpeg and ffprobe for local encoding. Playback verification requires a browser with Web Audio and FLAC decoding; the script does not repair source discontinuities.\"\nmetadata:\n  author: coroboros\n  sources: \"ffmpeg.org; developer.mozilla.org\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Audio_API\"\n---\n\n# Audio Loop\n\nPrepare a source that already joins continuously for Web Audio playback: optionally balance stereo, normalize loudness and encode FLAC. The pipeline does not repair source discontinuities; inspect the join before promising a seamless result.\n\nAll ffmpeg work happens in `scripts\u002Faudio-loop.sh` — this skill validates the source, orchestrates the pipeline, and turns the script's summary into a report plus a ready-to-paste JS snippet.\n\n## Parameters\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `-t \u003CLUFS>` | `-28` | Integrated loudness target (ambient web default) |\n| `-v \u003C0..1>` | `0.6` | Target volume baked into the emitted JS snippet |\n| `-o \u003Cdir>` | input dir | Output directory |\n| `-s` | off | Save to `~\u002F.agents\u002Foutput\u002F{project}\u002Faudio-loop\u002F{slug}\u002F` |\n| `-S` | off | Force no-save |\n| `-B` | off | Disable stereo balance auto-correction |\n\n**Where each flag is handled.** `-t`, `-o`, and `-B` pass through to `scripts\u002Faudio-loop.sh`. `-v` is skill-only — the agent reads it from `$ARGUMENTS` and interpolates it into the `TARGET` constant of the emitted JS snippet; the script never sees it. `-s` \u002F `-S` follow the repo save-mode convention — the agent translates `-s` into an `-o \u003Csave_path>` passed to the script, where `\u003Csave_path>` is `~\u002F.agents\u002Foutput\u002F{project}\u002Faudio-loop\u002F{slug}\u002F` (`{project}` = kebab-cased basename of the git toplevel, else cwd; create it `$HOME`-expanded, report the fully-expanded absolute path — no tilde, no magic).\n\n**Deliberately no crossfade flag.** If the source WAV has a real sample-level discontinuity at the loop boundary, that's source editing — outside this skill's scope. If the user is hearing a bump with FLAC + Web Audio, see **Diagnostic by negative result** below.\n\n## Workflow\n\n### 1. Validate tools\n\n`command -v ffmpeg ffprobe`. Missing → stop and ask the user to install (macOS: `brew install ffmpeg`, Debian\u002FUbuntu: `sudo apt install ffmpeg`). Never auto-install.\n\n### 2. Probe the source\n\nThe script reads duration, sample rate, channel count, and per-channel RMS via `astats`. Surface these early — the user sees the starting point before any processing.\n\n### 3. Diagnose stereo imbalance (stereo sources only)\n\nThe script uses 1 dB RMS as its chosen correction threshold, applying a `pan` filter unless `-B` is set. Use `-B` to preserve intentional stereo asymmetry:\n\n```\npan=stereo|c0=FL|c1=\u003Cgain>*FR     # if R is louder\npan=stereo|c0=\u003Cgain>*FL|c1=FR     # if L is louder\n```\n\nWhere `gain = 10^(-|delta_dB| \u002F 20)`. The script computes `delta_dB` from the astats pass, picks the right direction, and wires the filter accordingly. At or below the chosen 1 dB threshold no filter is applied. This is a workflow default, not a universal perceptual guarantee.\n\n### 4. Run the pipeline\n\n`$SKILL_DIR` = this skill's folder — `${CLAUDE_SKILL_DIR}` in Claude Code, the directory containing this SKILL.md elsewhere.\n\n```bash\nbash \"$SKILL_DIR\"\u002Fscripts\u002Faudio-loop.sh \u003Cinput> [flags]\n```\n\nThe script chains: probe → (optional pan correction) → `loudnorm=I=\u003Ctarget>:TP=-2:LRA=7` → `aresample=\u003Csource_rate>` → `asetnsamples=n=4608:p=0` (bounded frames without padding) → encode FLAC (`-c:a flac -compression_level 8`). It emits `RESULT: key=value` lines on stdout.\n\n### 5. Report\n\nParse `RESULT:` lines and compose:\n\n- Size comparison (source → FLAC, MB)\n- Final integrated loudness + true peak\n- Per-channel RMS confirming the balance is centred\n- A drop-in Web Audio JS snippet tuned to the file's URL and the `-v` target\n\n**Report template:**\n\n```\n| File | Size | Codec | Integrated LUFS | True peak |\n|------|------|-------|-----------------|-----------|\n| `\u003Cstem>.flac` | X MB | FLAC | -28.0 | -2.0 dBFS |\n\nStereo balance: L -19.70 dB \u002F R -19.71 dB — centred (Δ 0.01 dB)\nDuration: 6.50 s · Sample rate: 48 kHz · Channels: 2\n```\n\n**Web Audio snippet (paste-in-page):**\n\n```html\n\u003Cscript>\n(() => {\n  const AUDIO_URL = '\u002Faudio\u002F\u003Cstem>.flac'; \u002F\u002F adjust to where you serve the file\n  const TARGET = \u003Cv-value>;\n  const FADE_MS = 700;\n\n  let ctx, gain, bufferPromise, entered = false;\n\n  function preload() {\n    if (ctx) return;\n    const Ctor = window.AudioContext || window.webkitAudioContext;\n    if (!Ctor) return;\n    ctx = new Ctor();\n    gain = ctx.createGain();\n    gain.gain.value = 0;\n    gain.connect(ctx.destination);\n    bufferPromise = fetch(AUDIO_URL)\n      .then(r => r.arrayBuffer())\n      .then(ab => ctx.decodeAudioData(ab));\n  }\n\n  async function unlock() {\n    if (entered || !ctx) return;\n    try { await ctx.resume(); } catch { return; }\n    if (ctx.state !== 'running') return;\n    let buf;\n    try { buf = await bufferPromise; } catch { return; }\n    if (entered) return; \u002F\u002F second guard — a concurrent unlock() may have finished during the await\n    const src = ctx.createBufferSource();\n    src.buffer = buf;\n    src.loop = true;\n    src.connect(gain);\n    src.start(0);\n    entered = true;\n    const now = ctx.currentTime;\n    gain.gain.setValueAtTime(0, now);\n    gain.gain.linearRampToValueAtTime(TARGET, now + FADE_MS \u002F 1000);\n  }\n\n  const IGNORED = new Set(['Shift','Control','Alt','Meta','Tab','Escape','CapsLock']);\n  const onKeydown = e => {\n    if (IGNORED.has(e.key)) return;\n    document.removeEventListener('keydown', onKeydown, { capture: true });\n    unlock();\n  };\n  preload();\n  document.addEventListener('pointerdown', () => unlock(), { capture: true, once: true });\n  document.addEventListener('keydown', onKeydown, { capture: true });\n})();\n\u003C\u002Fscript>\n```\n\nFor scroll-tied volume or any multi-channel control surface on top of the baseline, see `references\u002Fscroll-tied-pattern.md` — it documents the multiplicative factors architecture (`gain = TARGET × fadeInFactor × scrollVolumeFactor`) so additional control dimensions compose cleanly.\n\n## Verify the loop boundary\n\nWeb Audio loops a decoded buffer; codec decoding and the original signal both matter. FLAC preserves the processed PCM, not the original WAV after normalization or balance changes. `decodeAudioData` may resample to the AudioContext rate: see [MDN](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FBaseAudioContext\u002FdecodeAudioData).\n\nInspect decoded endpoints and listen across repeated joins in the target browser before claiming seamless playback. A failed or worsening crossfade does not prove a codec defect: source discontinuity, fade placement, processing and playback can all contribute. Compare lossless source and decoded output to isolate the cause. Report size from actual files rather than predicting a compression ratio.\n\n### Diagnostic by negative result\n\nTreat a worse crossfade as evidence against that attempted edit, not a definitive diagnosis. If the source itself does not join, identify the required source edit and continue only within the user's authorized scope. The bundled script has no crossfade operation.\n\n## Browser autoplay constraint\n\nModern browsers block audible playback without a prior user gesture. The emitted snippet attaches one-time `pointerdown` and filtered `keydown` listeners on `document` — any real interaction anywhere on the page unlocks the audio, no splash screen or dedicated button required. `mousemove`, `scroll`, and `wheel` are **not** gestures per the spec; don't try to hook into them. `pointermove` isn't either. On reload the unlock must happen again — this is a per-navigation browser constraint with no workaround short of the user granting the origin autoplay privilege explicitly.\n\n## Rules\n\n- NEVER re-encode an already-encoded output — always start from the original WAV (or lossless source). Re-encoding FLAC→FLAC is pointless; re-encoding AAC→FLAC doesn't recover what AAC threw away.\n- Preserve the source sample rate after dynamic `loudnorm`, which can upsample to 192 kHz. Bound encoder frame size without padding; verify duration\u002Fsample count when changing that stage.\n- FLAC is the only encoded output the skill produces. The opinion is deliberate — the \"AAC is fine for short loops\" habit is the failure mode this skill prevents.\n- Stereo correction uses the chosen Δ > 1 dB default; it does not establish perceptual centering for every source.\n- Default loudness target is `-28 LUFS` for ambient web audio (quiet-enough-to-not-intrude, loud-enough-to-hear over UI sounds). Louder targets (e.g. `-18` for hero music) are a user call — pass `-t` explicitly.\n- Report source\u002Foutput sizes and playback verification; retain already-authorized encoding scope.\n- Mono sources skip the balance step (stereo-only concern); everything else (loudnorm, encode) proceeds as normal.\n- When the output path would overwrite the input (FLAC reprocessed in its own directory), the script exits with a clear error — pass `-o \u003Cdir>` to write elsewhere.\n","# Audio Loop\n\nPrepare a source that already joins continuously for Web Audio playback: optionally balance stereo, normalize loudness and encode FLAC. The pipeline does not repair source discontinuities; inspect the join before promising a seamless result.\n\nAll ffmpeg work happens in `scripts\u002Faudio-loop.sh` — this skill validates the source, orchestrates the pipeline, and turns the script's summary into a report plus a ready-to-paste JS snippet.\n\n## Parameters\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `-t \u003CLUFS>` | `-28` | Integrated loudness target (ambient web default) |\n| `-v \u003C0..1>` | `0.6` | Target volume baked into the emitted JS snippet |\n| `-o \u003Cdir>` | input dir | Output directory |\n| `-s` | off | Save to `~\u002F.agents\u002Foutput\u002F{project}\u002Faudio-loop\u002F{slug}\u002F` |\n| `-S` | off | Force no-save |\n| `-B` | off | Disable stereo balance auto-correction |\n\n**Where each flag is handled.** `-t`, `-o`, and `-B` pass through to `scripts\u002Faudio-loop.sh`. `-v` is skill-only — the agent reads it from `$ARGUMENTS` and interpolates it into the `TARGET` constant of the emitted JS snippet; the script never sees it. `-s` \u002F `-S` follow the repo save-mode convention — the agent translates `-s` into an `-o \u003Csave_path>` passed to the script, where `\u003Csave_path>` is `~\u002F.agents\u002Foutput\u002F{project}\u002Faudio-loop\u002F{slug}\u002F` (`{project}` = kebab-cased basename of the git toplevel, else cwd; create it `$HOME`-expanded, report the fully-expanded absolute path — no tilde, no magic).\n\n**Deliberately no crossfade flag.** If the source WAV has a real sample-level discontinuity at the loop boundary, that's source editing — outside this skill's scope. If the user is hearing a bump with FLAC + Web Audio, see **Diagnostic by negative result** below.\n\n## Workflow\n\n### 1. Validate tools\n\n`command -v ffmpeg ffprobe`. Missing → stop and ask the user to install (macOS: `brew install ffmpeg`, Debian\u002FUbuntu: `sudo apt install ffmpeg`). Never auto-install.\n\n### 2. Probe the source\n\nThe script reads duration, sample rate, channel count, and per-channel RMS via `astats`. Surface these early — the user sees the starting point before any processing.\n\n### 3. Diagnose stereo imbalance (stereo sources only)\n\nThe script uses 1 dB RMS as its chosen correction threshold, applying a `pan` filter unless `-B` is set. Use `-B` to preserve intentional stereo asymmetry:\n\n```\npan=stereo|c0=FL|c1=\u003Cgain>*FR     # if R is louder\npan=stereo|c0=\u003Cgain>*FL|c1=FR     # if L is louder\n```\n\nWhere `gain = 10^(-|delta_dB| \u002F 20)`. The script computes `delta_dB` from the astats pass, picks the right direction, and wires the filter accordingly. At or below the chosen 1 dB threshold no filter is applied. This is a workflow default, not a universal perceptual guarantee.\n\n### 4. Run the pipeline\n\n`$SKILL_DIR` = this skill's folder — `${CLAUDE_SKILL_DIR}` in Claude Code, the directory containing this SKILL.md elsewhere.\n\n```bash\nbash \"$SKILL_DIR\"\u002Fscripts\u002Faudio-loop.sh \u003Cinput> [flags]\n```\n\nThe script chains: probe → (optional pan correction) → `loudnorm=I=\u003Ctarget>:TP=-2:LRA=7` → `aresample=\u003Csource_rate>` → `asetnsamples=n=4608:p=0` (bounded frames without padding) → encode FLAC (`-c:a flac -compression_level 8`). It emits `RESULT: key=value` lines on stdout.\n\n### 5. Report\n\nParse `RESULT:` lines and compose:\n\n- Size comparison (source → FLAC, MB)\n- Final integrated loudness + true peak\n- Per-channel RMS confirming the balance is centred\n- A drop-in Web Audio JS snippet tuned to the file's URL and the `-v` target\n\n**Report template:**\n\n```\n| File | Size | Codec | Integrated LUFS | True peak |\n|------|------|-------|-----------------|-----------|\n| `\u003Cstem>.flac` | X MB | FLAC | -28.0 | -2.0 dBFS |\n\nStereo balance: L -19.70 dB \u002F R -19.71 dB — centred (Δ 0.01 dB)\nDuration: 6.50 s · Sample rate: 48 kHz · Channels: 2\n```\n\n**Web Audio snippet (paste-in-page):**\n\n```html\n\u003Cscript>\n(() => {\n  const AUDIO_URL = '\u002Faudio\u002F\u003Cstem>.flac'; \u002F\u002F adjust to where you serve the file\n  const TARGET = \u003Cv-value>;\n  const FADE_MS = 700;\n\n  let ctx, gain, bufferPromise, entered = false;\n\n  function preload() {\n    if (ctx) return;\n    const Ctor = window.AudioContext || window.webkitAudioContext;\n    if (!Ctor) return;\n    ctx = new Ctor();\n    gain = ctx.createGain();\n    gain.gain.value = 0;\n    gain.connect(ctx.destination);\n    bufferPromise = fetch(AUDIO_URL)\n      .then(r => r.arrayBuffer())\n      .then(ab => ctx.decodeAudioData(ab));\n  }\n\n  async function unlock() {\n    if (entered || !ctx) return;\n    try { await ctx.resume(); } catch { return; }\n    if (ctx.state !== 'running') return;\n    let buf;\n    try { buf = await bufferPromise; } catch { return; }\n    if (entered) return; \u002F\u002F second guard — a concurrent unlock() may have finished during the await\n    const src = ctx.createBufferSource();\n    src.buffer = buf;\n    src.loop = true;\n    src.connect(gain);\n    src.start(0);\n    entered = true;\n    const now = ctx.currentTime;\n    gain.gain.setValueAtTime(0, now);\n    gain.gain.linearRampToValueAtTime(TARGET, now + FADE_MS \u002F 1000);\n  }\n\n  const IGNORED = new Set(['Shift','Control','Alt','Meta','Tab','Escape','CapsLock']);\n  const onKeydown = e => {\n    if (IGNORED.has(e.key)) return;\n    document.removeEventListener('keydown', onKeydown, { capture: true });\n    unlock();\n  };\n  preload();\n  document.addEventListener('pointerdown', () => unlock(), { capture: true, once: true });\n  document.addEventListener('keydown', onKeydown, { capture: true });\n})();\n\u003C\u002Fscript>\n```\n\nFor scroll-tied volume or any multi-channel control surface on top of the baseline, see `references\u002Fscroll-tied-pattern.md` — it documents the multiplicative factors architecture (`gain = TARGET × fadeInFactor × scrollVolumeFactor`) so additional control dimensions compose cleanly.\n\n## Verify the loop boundary\n\nWeb Audio loops a decoded buffer; codec decoding and the original signal both matter. FLAC preserves the processed PCM, not the original WAV after normalization or balance changes. `decodeAudioData` may resample to the AudioContext rate: see [MDN](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FBaseAudioContext\u002FdecodeAudioData).\n\nInspect decoded endpoints and listen across repeated joins in the target browser before claiming seamless playback. A failed or worsening crossfade does not prove a codec defect: source discontinuity, fade placement, processing and playback can all contribute. Compare lossless source and decoded output to isolate the cause. Report size from actual files rather than predicting a compression ratio.\n\n### Diagnostic by negative result\n\nTreat a worse crossfade as evidence against that attempted edit, not a definitive diagnosis. If the source itself does not join, identify the required source edit and continue only within the user's authorized scope. The bundled script has no crossfade operation.\n\n## Browser autoplay constraint\n\nModern browsers block audible playback without a prior user gesture. The emitted snippet attaches one-time `pointerdown` and filtered `keydown` listeners on `document` — any real interaction anywhere on the page unlocks the audio, no splash screen or dedicated button required. `mousemove`, `scroll`, and `wheel` are **not** gestures per the spec; don't try to hook into them. `pointermove` isn't either. On reload the unlock must happen again — this is a per-navigation browser constraint with no workaround short of the user granting the origin autoplay privilege explicitly.\n\n## Rules\n\n- NEVER re-encode an already-encoded output — always start from the original WAV (or lossless source). Re-encoding FLAC→FLAC is pointless; re-encoding AAC→FLAC doesn't recover what AAC threw away.\n- Preserve the source sample rate after dynamic `loudnorm`, which can upsample to 192 kHz. Bound encoder frame size without padding; verify duration\u002Fsample count when changing that stage.\n- FLAC is the only encoded output the skill produces. The opinion is deliberate — the \"AAC is fine for short loops\" habit is the failure mode this skill prevents.\n- Stereo correction uses the chosen Δ > 1 dB default; it does not establish perceptual centering for every source.\n- Default loudness target is `-28 LUFS` for ambient web audio (quiet-enough-to-not-intrude, loud-enough-to-hear over UI sounds). Louder targets (e.g. `-18` for hero music) are a user call — pass `-t` explicitly.\n- Report source\u002Foutput sizes and playback verification; retain already-authorized encoding scope.\n- Mono sources skip the balance step (stereo-only concern); everything else (loudnorm, encode) proceeds as normal.\n- When the output path would overwrite the input (FLAC reprocessed in its own directory), the script exits with a clear error — pass `-o \u003Cdir>` to write elsewhere.\n",{"name":5,"license":15,"metadata":54,"description":7,"when_to_use":56,"allowed-tools":57,"argument-hint":58,"compatibility":59},{"author":9,"sources":55},"ffmpeg.org; developer.mozilla.org\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Audio_API","When the user has an audio clip that needs to loop without audible artifacts on a web page, or when `\u003Caudio loop>` is producing an audible gap or tick at each iteration. Keywords — audio, loop, ambient, hero, background, breeze, wind, rain, atmosphere, soundscape, seamless, gapless, flac, web audio, loudness, lufs, normalize, stereo balance, ffmpeg. For video loops use `\u002Fvideo-loop` (sibling — parallel architecture, crossfade + MP4\u002FWebM encode). Skip for composing, mixing, or mastering music\u002Fpodcasts, and for transcription — looping an existing music bed for a page stays in scope.","Bash(ffmpeg *) Bash(ffprobe *) Bash(command *) Bash(bash *) Bash(stat *) Read","\u003Cinput.wav> [options] — e.g. \u002Faudio-loop breeze.wav -t -28","Requires bash, FFmpeg and ffprobe for local encoding. Playback verification requires a browser with Web Audio and FLAC decoding; the script does not repair source discontinuities.","main","5ff268fdc77fdf345ffe3ba808e74c82023839f8","skills\u002Faudio-loop",0,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills","https:\u002F\u002Fcoroboros.com","https:\u002F\u002Fgithub.com\u002Fcoroboros","https:\u002F\u002Fcoroboros.com\u002F","Branch-stable systems.","2026-11-11 14:33:57",{"source":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add coroboros\u002Fagent-skills --skill audio-loop",{"tool":76,"command":77},"bunx","bunx skills add coroboros\u002Fagent-skills --skill audio-loop",{"tool":79,"command":80},"pnpm","pnpm dlx skills add coroboros\u002Fagent-skills --skill audio-loop","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Faudio-loop\u002FSKILL.md",true,[84,90],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fscroll-tied-pattern.md","REFERENCE","参考文档",4073,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Faudio-loop\u002Freferences\u002Fscroll-tied-pattern.md",{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":95},"scripts\u002Faudio-loop.sh","SCRIPT","脚本",6676,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Faudio-loop\u002Fscripts\u002Faudio-loop.sh",[97,111,121,153,171,194],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":49},"01M71EZVB829YQPX3AM9ETPJYE","foo","Fixture skill for repo-kind classifier tests.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Ftests\u002Fcode-ultrareview\u002Ffixtures\u002Fclassify\u002Fskills\u002Fskills\u002Ffoo\u002FSKILL.md",[],[99,104,105,106,107,108,109,110],"fixture skill","repo","classifier","for","kind","tests","fixture",{"skillNo":112,"name":99,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":49},"01M71EZSPGWRBJ9JGT0Y5F7YGX","Fixture for compound skills + npm tooling detection.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Ftests\u002Fcode-ultrareview\u002Ffixtures\u002Fclassify\u002Fmixed-skills-npm\u002Fskills\u002Ffoo\u002FSKILL.md",[],[99,117,118,107,119,120,110],"detection","tooling","compound","npm",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":136,"publishedAt":49},"01M71EZN3JR87PJ1BBHRG24M39","write-clear-readme","Author, restructure, audit or polish a project README for clarity and scannability. Reads repository truth, preserves anchors and code, and verifies rendering. Explicit author\u002Fpolish requests apply local changes; audit\u002Fpropose stays read-only. Use for README creation, wording, structure and navigation, including skill collections and CLI\u002FSDK docs.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-clear-readme\u002FSKILL.md",[127,130,133],{"categoryNo":128,"categoryName":129,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":134,"categoryName":135,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[137,138,139,140,141,142,41,143,144,145,146,33,147,148,149,35,150,151,38,152],"clear","README","write clear readme","write","writing","only","project","creation","ls","access","references","libraries","project readme","code","preview","markdown preview",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":49},"01M71EZGFF8C081XJVPGJ11AG7","video-loop","Prepare a background video loop for a website with optional crossfade, MP4\u002FWebM encoding and poster extraction. Use for loop joins or web delivery of an existing clip.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-loop\u002FSKILL.md",[159],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[47,30,161,39,38,37,162,33,32,163,164,165,166,167,168,169,45,31,170,40],"video loop","command","optimize","transition","work","inspection","continuity","fix","end","processing",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":178,"publishedAt":49},"01M71EZCS60P8DK9Y34PHGK1R3","ultrapex","Adaptive implementation when the user explicitly selects \u002Fultrapex or asks for this adaptive workflow. Establish accepted outcomes, implement, and verify the final result. Generic implementation requests use \u002Fapex; use \u002Fforge for decisions only and \u002Foneshot for small focused changes.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fultrapex\u002FSKILL.md",[177],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},[173,179,180,143,181,169,182,183,184,185,186,187,188,189,190,40,191,192,142,193],"ponytail","select","model","apex","capability","context","Tools","at","result","self","review","workflow","forge","host","delegation",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":204,"publishedAt":49},"01M71EZ5Y1QZWEV5K69JT7QK1D","suno-produce","Create and revise Suno v5.5 prompt artifacts from a song, track or album brief. Produces TRACK.md, ALBUM.md for explicit multi-track work, and optional ARTIST.md identity. Validates prompt fields and preserves supplied lyrics. Artifact-only; audio generation stays in Suno. Pure lyric writing and audio post-production use other skills.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsuno-produce\u002FSKILL.md",[200,201,202,203],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":128,"categoryName":129,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":134,"categoryName":135,"taxonomyType":26,"taxonomyTypeDesc":27},[205,206,207,208,209,210,211,212,213,214,215,216,191,30,141,192,217,41,218,31],"produce","suno","suno produce","lyric","website","mv","artifact","track","create","guides","information","song","question","Meta"]