[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C1TBKFAJMCV3ENWMEW2DXK":3,"skill-same:01M6C1TBKFAJMCV3ENWMEW2DXK":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":26,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":72,"ownerHtmlUrl":73,"ownerBlogUrl":74,"ownerDescription":75,"updatedAt":76,"install":77,"resources":90},"01M6C1TBKFAJMCV3ENWMEW2DXK","diarize-media",null,"Run local speaker diarization for acquired audio\u002Fvideo with WhisperX and pyannote, preserving anonymous speaker clusters in canonical transcript sidecars","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fdiarize-media\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"Media","diarize media","Clusters","run","for","anonymous","canonical","scripts","token","project","local","max","provider","node","json","Audio","Video","clustering","file","transcribe","transcript","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nplatforms: [all]\nname: diarize-media\ndescription: Run local speaker diarization for acquired audio\u002Fvideo with WhisperX and pyannote, preserving anonymous speaker clusters in canonical transcript sidecars\nscript:\n  entrypoint: scripts\u002Fdiarize_media.mjs\n  runtime: node\n  cwd: project-root\n  argsHint: \"run --media \u003Cfile> --output \u003Csidecar.json> --credential-provider env:HF_TOKEN [--min-speakers N] [--max-speakers N]\"\ntriggers:\n  - \"speaker diarization audio\"\n  - \"diarize media\"\n  - \"diarize audio speakers\"\n  - \"diarize video speakers\"\n  - \"transcribe and diarize media speakers\"\n  - \"speaker clustering media\"\ncategory: media-curator\n---\n\n# Diarize Media\n\nRun local speaker diarization for acquired audio\u002Fvideo and write a canonical\n`aiwg.media.transcript.v1` sidecar. This is a dedicated routing skill for the\ndiarization part of the media-curator transcript workflow.\n\n## What Diarization Means\n\nSpeaker diarization is anonymous clustering: it answers \"which portions sound\nlike the same speaker?\" with labels such as `SPEAKER_00` and `SPEAKER_01`.\n\nSpeaker identification is different: it maps an anonymous cluster to a verified\nperson. Do not replace anonymous labels with names unless acquisition metadata,\na human transcript, or explicit review evidence supports that mapping.\n\n## Executable Adapter\n\nThe bundled adapter uses WhisperX plus pyannote Community-1:\n\n```bash\nHF_TOKEN=\"$TOKEN_FROM_OPERATOR_OR_VAULT\" \\\naiwg run skill diarize-media -- run \\\n  --media \u002Fpath\u002Fto\u002Finterview.wav \\\n  --output .aiwg\u002Fmedia\u002Ftranscripts\u002Finterview.transcript.json \\\n  --credential-provider env:HF_TOKEN \\\n  --min-speakers 2 \\\n  --max-speakers 2\n```\n\nThe credential provider is a reference, not a token value. The adapter checks\nthe referenced environment variable before transcription starts, injects it into\nthe local WhisperX process environment, and never writes token values to argv,\ndisk, logs, state, provenance, or manifests.\n\n## Preflight\n\n```bash\naiwg run skill diarize-media -- preflight \\\n  --media \u002Fpath\u002Fto\u002Finterview.wav \\\n  --output .aiwg\u002Fmedia\u002Ftranscripts\u002Finterview.transcript.json \\\n  --credential-provider env:HF_TOKEN \\\n  --min-speakers 2 \\\n  --max-speakers 2 \\\n  --format json\n```\n\nPreflight checks:\n- media readability and source SHA-256\n- output directory writability\n- `whisperx` availability\n- `ffmpeg` availability warning\n- CPU\u002FGPU capability reporting\n- gated-model authorization through the named credential provider\n\nMissing authorization emits `aiwg.media.transcript-plan.v1` with\n`status: blocked-credential-missing` before the expensive STT stage.\n\n## Output And Degraded Mode\n\nSuccessful runs produce the same canonical sidecar as `transcribe-media`, with\nstable segment IDs, source and transcript hashes, tool provenance, anonymous\nspeaker labels, and quality limitations.\n\nIf WhisperX writes transcription\u002Falignment JSON and then exits non-zero during\ndiarization, the adapter preserves the completed output as a valid sidecar with\n`transcript.quality.status: degraded-diarization-failed`. If no native JSON is\navailable, it writes an actionable transcript plan instead of fabricating text.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Ftranscribe-media\u002FSKILL.md — Shared transcript sidecar schema and WhisperX adapter\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fprovenance-tracking\u002FSKILL.md — Provenance model for derived media artifacts\n","# Diarize Media\n\nRun local speaker diarization for acquired audio\u002Fvideo and write a canonical\n`aiwg.media.transcript.v1` sidecar. This is a dedicated routing skill for the\ndiarization part of the media-curator transcript workflow.\n\n## What Diarization Means\n\nSpeaker diarization is anonymous clustering: it answers \"which portions sound\nlike the same speaker?\" with labels such as `SPEAKER_00` and `SPEAKER_01`.\n\nSpeaker identification is different: it maps an anonymous cluster to a verified\nperson. Do not replace anonymous labels with names unless acquisition metadata,\na human transcript, or explicit review evidence supports that mapping.\n\n## Executable Adapter\n\nThe bundled adapter uses WhisperX plus pyannote Community-1:\n\n```bash\nHF_TOKEN=\"$TOKEN_FROM_OPERATOR_OR_VAULT\" \\\naiwg run skill diarize-media -- run \\\n  --media \u002Fpath\u002Fto\u002Finterview.wav \\\n  --output .aiwg\u002Fmedia\u002Ftranscripts\u002Finterview.transcript.json \\\n  --credential-provider env:HF_TOKEN \\\n  --min-speakers 2 \\\n  --max-speakers 2\n```\n\nThe credential provider is a reference, not a token value. The adapter checks\nthe referenced environment variable before transcription starts, injects it into\nthe local WhisperX process environment, and never writes token values to argv,\ndisk, logs, state, provenance, or manifests.\n\n## Preflight\n\n```bash\naiwg run skill diarize-media -- preflight \\\n  --media \u002Fpath\u002Fto\u002Finterview.wav \\\n  --output .aiwg\u002Fmedia\u002Ftranscripts\u002Finterview.transcript.json \\\n  --credential-provider env:HF_TOKEN \\\n  --min-speakers 2 \\\n  --max-speakers 2 \\\n  --format json\n```\n\nPreflight checks:\n- media readability and source SHA-256\n- output directory writability\n- `whisperx` availability\n- `ffmpeg` availability warning\n- CPU\u002FGPU capability reporting\n- gated-model authorization through the named credential provider\n\nMissing authorization emits `aiwg.media.transcript-plan.v1` with\n`status: blocked-credential-missing` before the expensive STT stage.\n\n## Output And Degraded Mode\n\nSuccessful runs produce the same canonical sidecar as `transcribe-media`, with\nstable segment IDs, source and transcript hashes, tool provenance, anonymous\nspeaker labels, and quality limitations.\n\nIf WhisperX writes transcription\u002Falignment JSON and then exits non-zero during\ndiarization, the adapter preserves the completed output as a valid sidecar with\n`transcript.quality.status: degraded-diarization-failed`. If no native JSON is\navailable, it writes an actionable transcript plan instead of fabricating text.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Ftranscribe-media\u002FSKILL.md — Shared transcript sidecar schema and WhisperX adapter\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fprovenance-tracking\u002FSKILL.md — Provenance model for derived media artifacts\n",{"name":5,"script":53,"category":57,"triggers":58,"namespace":64,"platforms":65,"description":7},{"cwd":54,"runtime":40,"argsHint":55,"entrypoint":56},"project-root","run --media \u003Cfile> --output \u003Csidecar.json> --credential-provider env:HF_TOKEN [--min-speakers N] [--max-speakers N]","scripts\u002Fdiarize_media.mjs","media-curator",[59,28,60,61,62,63],"speaker diarization audio","diarize audio speakers","diarize video speakers","transcribe and diarize media speakers","speaker clustering media","aiwg",[66],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fdiarize-media",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-14 10:46:34",{"source":8,"skillName":5,"commands":78,"prompt":88,"zipAvailable":89},[79,82,85],{"tool":80,"command":81},"npx","npx skills add jmagly\u002Faiwg --skill diarize-media",{"tool":83,"command":84},"bunx","bunx skills add jmagly\u002Faiwg --skill diarize-media",{"tool":86,"command":87},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill diarize-media","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fdiarize-media\u002FSKILL.md",true,[91],{"path":56,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":95},"SCRIPT","脚本",228,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fdiarize-media\u002Fscripts\u002Fdiarize_media.mjs",[97,125,148,154,161,175],{"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":104,"publishedAt":48},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[103],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":135,"publishedAt":48},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[131,134],{"categoryNo":132,"categoryName":133,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[136,137,138,108,139,113,140,141,115,142,105,143,117,37,144,120,121,145,146,147],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","scope","reconstruction","operator","write",{"skillNo":149,"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":150,"categories":151,"keywords":153,"publishedAt":48},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[152],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[107,105,106,116,108,124,111,110,119,112,113,114,115,123,117,118,109,120,121,122],{"skillNo":155,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":160,"publishedAt":48},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[158,159],{"categoryNo":132,"categoryName":133,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[137,136,120,139,113,140,115,138,105,143,117,37,144,108,121,142,141,145,146,147],{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":168,"publishedAt":48},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[167],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[169,170,171,172,173,174],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":182,"publishedAt":48},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[181],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[183,184,37,185,170],"pi","pi local","duplicate"]