plugins/media-curator/skills/curate/SKILL.md
Orchestrate end-to-end media curation from analysis through acquisition, tagging, and verification
npx skillsauth add jmagly/aiwg curateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Main orchestration entry point for end-to-end media curation. Analyzes artist discography, discovers high-quality sources, acquires media, tags metadata, verifies integrity, checks completeness, and optionally exports to platform-specific formats.
Media curation is a multi-phase workflow requiring coordination across analysis, discovery, acquisition, metadata tagging, verification, and export. This command orchestrates the full pipeline, managing dependencies between phases and ensuring quality at each step.
<artist> - Artist name to curate. Quoted if contains spaces.
Example: "Pink Floyd"
--scope <complete|era:NAME|style:NAME> - Curation scope.
complete: Full discography (all albums, all eras)era:NAME: Specific era only (e.g., era:Classic Rock Era (1968-1979))style:NAME: Specific style only (e.g., style:Progressive Rock)Default: complete
--output <dir> - Output directory for curated collection.
Default: ~/Music/Curated/<artist>
--quality <threshold> - Minimum quality score (0.0-1.0).
Default: 0.7
--export <profile> - Export to platform-specific format after curation.
Options: plex, jellyfin, mpd, mobile, archival
Default: None (no export)
--dry-run - Simulate workflow without downloading or modifying files.
--resume - Resume previous incomplete curation session.
/curate "Pink Floyd" --scope complete --quality 0.8 --export plex
Phase 1: Analysis
├── /analyze-artist "Pink Floyd"
├── Output: Era breakdown, style classification, album list
└── Status: 16 studio albums, 3 eras identified
Phase 2: Discovery
├── /find-sources "Pink Floyd" --scope complete --quality 0.8
├── Searches: MusicBrainz, Archive.org, Discogs, Bandcamp, label sites
├── Output: Ranked source list per album
└── Status: 127 sources found across 16 albums
Phase 3: Acquisition
├── /acquire "Pink Floyd" --quality 0.8
├── Downloads: Top-ranked sources meeting quality threshold
├── Validates: Format, bitrate, checksums
├── Output: Downloaded files in output directory
└── Status: 14/16 albums acquired (2 unavailable at threshold)
Phase 4: Curation
├── /tag-collection ~/Music/Curated/Pink\ Floyd
├── Metadata: Artist, album, track, year, genre, artwork
├── Artwork: Embedded + folder.jpg per album
├── Output: Fully tagged collection
└── /verify-archive ~/Music/Curated/Pink\ Floyd
├── Checksums: SHA-256 per file
├── Provenance: PROVENANCE.jsonld per album
├── Output: SHA256SUMS, PROVENANCE.jsonld
└── Status: All files verified, provenance recorded
Phase 5: Completeness Analysis
├── /check-completeness ~/Music/Curated/Pink\ Floyd
├── Compares: Collection against canonical discography
├── Output: Gap report (missing albums, tracks, formats)
└── Status: 87.5% complete (2 albums missing)
Phase 6: Export (Optional)
├── /export --profile plex ~/Music/Curated/Pink\ Floyd /media/plex/Music
├── Transcodes: As needed per profile
├── Structure: Artist/Album (Year)/Track - Title.ext
├── Metadata: Embedded + folder.jpg
└── Status: 14 albums exported to Plex
Command: /analyze-artist "<artist>"
Purpose: Understand artist's discography structure, eras, styles, and canonical album list.
Inputs:
Outputs:
.aiwg/media/analysis/<artist>.md: Era breakdown, style classification.aiwg/media/discography/<artist>.json: Canonical album list with MusicBrainz IDsSuccess Criteria:
Example Output:
Pink Floyd Analysis Complete
- Studio Albums: 16
- Eras: 3 (Psychedelic, Classic Progressive, Post-Waters)
- Styles: Progressive Rock, Psychedelic Rock, Art Rock
- Canonical Discography: .aiwg/media/discography/Pink Floyd.json
Command: /find-sources "<artist>" --scope <scope> --quality <threshold>
Purpose: Search multiple sources, rank by quality, filter by threshold.
Inputs:
Outputs:
.aiwg/media/sources/<artist>-sources.json: Ranked source list per albumSearch Sources:
Ranking Criteria:
Success Criteria:
Example Output:
Discovery Complete: Pink Floyd
- Albums Found: 16/16
- Total Sources: 127
- Sources Meeting Threshold (0.8): 89
- Top Sources: .aiwg/media/sources/Pink Floyd-sources.json
Command: /acquire "<artist>" --quality <threshold>
Purpose: Download top-ranked sources, validate quality, organize files.
Inputs:
Outputs:
<output_dir>/<artist>/<album>/.aiwg/media/downloads/<artist>-acquisition.log: Download logDownload Strategy:
Validation:
ffprobe confirms declared formatSuccess Criteria:
<artist>/<album>/ structureExample Output:
Acquisition Complete: Pink Floyd
- Albums Acquired: 14/16
- Total Files: 187 tracks, 14 cover images
- Total Size: 4.2 GB
- Failed: 2 albums (no sources meeting threshold 0.8)
- Download Log: .aiwg/media/downloads/Pink Floyd-acquisition.log
Subphase 4a: Tagging
Command: /tag-collection <collection_path>
Purpose: Embed complete metadata and artwork into all files.
Inputs:
Outputs:
folder.jpg per album directory.aiwg/media/tagging/<artist>-tagging.log: Tagging logMetadata Sources:
Tags Applied:
Artwork Handling:
folder.jpg in album directorySuccess Criteria:
Example Output:
Tagging Complete: Pink Floyd
- Files Tagged: 187/187
- Metadata Sources: MusicBrainz (primary), Discogs (supplementary)
- Artwork: 14 albums (all with embedded + folder.jpg)
- Tagging Log: .aiwg/media/tagging/Pink Floyd-tagging.log
Subphase 4b: Verification
Command: /verify-archive <collection_path>
Purpose: Generate checksums and provenance records for archival integrity.
Inputs:
Outputs:
SHA256SUMS per album directoryPROVENANCE.jsonld per album directory.aiwg/media/verification/<artist>-verification.log: Verification logChecksum Generation:
cd "$album_dir"
find . -type f -not -name "SHA256SUMS" -exec sha256sum {} \; > SHA256SUMS
Provenance Record (W3C PROV):
{
"@context": "https://www.w3.org/ns/prov",
"entity": "urn:aiwg:media:album:{mbid}",
"wasGeneratedBy": {
"activity": "urn:aiwg:activity:curation:{timestamp}",
"time": "{iso8601_timestamp}",
"wasAssociatedWith": "urn:aiwg:agent:media-curator"
},
"wasDerivedFrom": [
{
"entity": "{source_url}",
"type": "download",
"time": "{acquisition_date}"
}
]
}
Success Criteria:
Example Output:
Verification Complete: Pink Floyd
- Checksums: 14 SHA256SUMS files (201 total hashes)
- Provenance: 14 PROVENANCE.jsonld files
- Verification Log: .aiwg/media/verification/Pink Floyd-verification.log
Command: /check-completeness <collection_path>
Purpose: Compare collection against canonical discography, identify gaps.
Inputs:
Outputs:
.aiwg/media/reports/<artist>-completeness.md: Gap reportComparison Logic:
Gap Categories:
Success Criteria:
Example Output:
Completeness Report: Pink Floyd
- Albums: 14/16 (87.5%)
- Missing Albums: 2 (The Division Bell, The Endless River)
- Partial Albums: 0
- Format Gaps: 0
- Metadata Gaps: 0
- Report: .aiwg/media/reports/Pink Floyd-completeness.md
Command: /export --profile <profile> <collection_path> <output_path>
Purpose: Transform collection to platform-specific format.
Inputs:
Outputs:
Success Criteria:
Example Output:
Export Complete: Plex Profile
- Source: ~/Music/Curated/Pink Floyd
- Destination: /media/plex/Music/Pink Floyd
- Albums Exported: 14
- Total Size: 4.2 GB
- Transcoded: 0 (all FLAC, compatible with Plex)
After each phase, report:
Example:
Phase 2: Discovery - COMPLETE
Key Metrics:
- Albums Found: 16/16
- Total Sources: 127
- Sources Meeting Threshold (0.8): 89
Output Artifacts:
- Source Rankings: .aiwg/media/sources/Pink Floyd-sources.json
Next Steps:
- Phase 3 will download the top-ranked source for each album
- Quality threshold 0.8 ensures lossless or high-bitrate formats
- Estimated download size: ~4-5 GB
/curate "Pink Floyd" --scope complete --quality 0.8 --output ~/Music/Curated --export plex
What happens:
/media/plex/MusicOutput:
Curation Complete: Pink Floyd
Phase 1 (Analysis): 16 studio albums, 3 eras identified
Phase 2 (Discovery): 127 sources found, 89 meeting threshold
Phase 3 (Acquisition): 14/16 albums downloaded (2 unavailable at 0.8)
Phase 4 (Curation): 187 files tagged, 14 albums verified
Phase 5 (Completeness): 87.5% complete (2 albums missing)
Phase 6 (Export): 14 albums exported to Plex
Collection Path: ~/Music/Curated/Pink Floyd
Export Path: /media/plex/Music/Pink Floyd
Completeness Report: .aiwg/media/reports/Pink Floyd-completeness.md
/curate "Pink Floyd" --scope "era:Classic Progressive (1973-1979)" --quality 0.9
What happens:
Output:
Curation Complete: Pink Floyd (Classic Progressive Era)
Phase 1 (Analysis): 4 albums in era (DSOTM, WYWH, Animals, The Wall)
Phase 2 (Discovery): 37 sources found, 31 meeting threshold
Phase 3 (Acquisition): 4/4 albums downloaded
Phase 4 (Curation): 53 files tagged, 4 albums verified
Phase 5 (Completeness): 100% complete for era
Collection Path: ~/Music/Curated/Pink Floyd/Classic Progressive
/curate "Pink Floyd" --scope "style:Psychedelic Rock" --quality 0.7
What happens:
Output:
Curation Complete: Pink Floyd (Psychedelic Rock)
Phase 1 (Analysis): 3 albums (The Piper at the Gates of Dawn, A Saucerful of Secrets, Ummagumma)
Phase 2 (Discovery): 24 sources found, 18 meeting threshold
Phase 3 (Acquisition): 3/3 albums downloaded
Phase 4 (Curation): 31 files tagged, 3 albums verified
Phase 5 (Completeness): 100% complete for style
Collection Path: ~/Music/Curated/Pink Floyd/Psychedelic Rock
/curate "Pink Floyd" --scope complete --quality 0.8 --dry-run
What happens:
Output:
Dry Run Complete: Pink Floyd
Phase 1 (Analysis): SIMULATED - 16 albums identified
Phase 2 (Discovery): SIMULATED - 127 sources found
Phase 3 (Acquisition): SIMULATED - Would download 14 albums (~4.2 GB)
Phase 4 (Curation): SIMULATED - Would tag 187 files
Phase 5 (Completeness): SIMULATED - Would achieve 87.5% completeness
Phase 6 (Export): SKIPPED (not requested)
No files were downloaded or modified.
Simulation Report: .aiwg/media/reports/Pink Floyd-dry-run.md
/curate "Pink Floyd" --resume
What happens:
.aiwg/media/sessions/<artist>-session.jsonOutput:
Resuming Session: Pink Floyd
Session State: .aiwg/media/sessions/Pink Floyd-session.json
Completed Phases: 1, 2, 3, 4a
Resuming from: Phase 4b (Verification)
Phase 4b (Verification): 14 albums verified
Phase 5 (Completeness): 87.5% complete
Phase 6 (Export): SKIPPED (not requested in original session)
Session Complete.
If a phase fails:
.aiwg/media/errors/<artist>-errors.log--resume to continue from last successful phaseIf some albums succeed but others fail:
If no sources meet quality threshold:
Session state saved to .aiwg/media/sessions/<artist>-session.json:
{
"artist": "Pink Floyd",
"scope": "complete",
"quality_threshold": 0.8,
"output_dir": "~/Music/Curated/Pink Floyd",
"export_profile": "plex",
"start_time": "2026-02-14T10:30:00Z",
"phases": {
"analysis": "complete",
"discovery": "complete",
"acquisition": "complete",
"tagging": "complete",
"verification": "in_progress",
"completeness": "pending",
"export": "pending"
},
"progress": {
"albums_analyzed": 16,
"sources_found": 127,
"albums_downloaded": 14,
"files_tagged": 187,
"albums_verified": 8
}
}
Each phase validates outputs before proceeding:
data-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.