@olegkoval/agent-skills 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +58 -0
- package/.cursor-plugin/index.json +55 -0
- package/LICENSE +21 -0
- package/README.md +181 -0
- package/catalog/skills.json +202 -0
- package/collections/creative-tools.json +5 -0
- package/collections/docs-tools.json +5 -0
- package/collections/git-tools.json +5 -0
- package/collections/marketing.json +5 -0
- package/collections/music.json +5 -0
- package/collections/photography.json +5 -0
- package/collections/product-tools.json +5 -0
- package/collections/prompt-tools.json +5 -0
- package/collections/release-tools.json +5 -0
- package/collections/software-development.json +13 -0
- package/package.json +47 -0
- package/packages/marketing/viral-launch/SKILL.md +101 -0
- package/packages/marketing/viral-launch/adapters/claude/plugin.json +10 -0
- package/packages/marketing/viral-launch/adapters/codex/README.md +3 -0
- package/packages/marketing/viral-launch/adapters/cursor/plugin.json +6 -0
- package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +103 -0
- package/packages/marketing/viral-launch/references/external-skills.md +12 -0
- package/packages/marketing/viral-launch/references/launch-checklist.md +42 -0
- package/packages/music/fill-music-player/LICENSE +21 -0
- package/packages/music/fill-music-player/SKILL.md +108 -0
- package/packages/music/fill-music-player/adapters/claude/plugin.json +10 -0
- package/packages/music/fill-music-player/adapters/codex/README.md +3 -0
- package/packages/music/fill-music-player/adapters/cursor/plugin.json +6 -0
- package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +110 -0
- package/packages/photography/gallery/.skillfish.json +10 -0
- package/packages/photography/gallery/SKILL.md +233 -0
- package/packages/photography/gallery/adapters/claude/plugin.json +10 -0
- package/packages/photography/gallery/adapters/codex/README.md +3 -0
- package/packages/photography/gallery/adapters/cursor/plugin.json +6 -0
- package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +235 -0
- package/packages/software-development/changelog-generator/SKILL.md +111 -0
- package/packages/software-development/changelog-generator/adapters/claude/plugin.json +10 -0
- package/packages/software-development/changelog-generator/adapters/codex/README.md +3 -0
- package/packages/software-development/changelog-generator/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +113 -0
- package/packages/software-development/docs-index-keeper/SKILL.md +62 -0
- package/packages/software-development/docs-index-keeper/adapters/claude/plugin.json +10 -0
- package/packages/software-development/docs-index-keeper/adapters/codex/README.md +5 -0
- package/packages/software-development/docs-index-keeper/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +64 -0
- package/packages/software-development/gh-cli/SKILL.md +2196 -0
- package/packages/software-development/gh-cli/adapters/claude/plugin.json +10 -0
- package/packages/software-development/gh-cli/adapters/codex/README.md +3 -0
- package/packages/software-development/gh-cli/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +2198 -0
- package/packages/software-development/git-commit/SKILL.md +131 -0
- package/packages/software-development/git-commit/adapters/claude/plugin.json +10 -0
- package/packages/software-development/git-commit/adapters/codex/README.md +3 -0
- package/packages/software-development/git-commit/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +133 -0
- package/packages/software-development/product-builder/LICENSE +21 -0
- package/packages/software-development/product-builder/SKILL.md +221 -0
- package/packages/software-development/product-builder/adapters/claude/plugin.json +10 -0
- package/packages/software-development/product-builder/adapters/codex/README.md +3 -0
- package/packages/software-development/product-builder/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +223 -0
- package/packages/software-development/promptctl/SKILL.md +86 -0
- package/packages/software-development/promptctl/adapters/claude/plugin.json +10 -0
- package/packages/software-development/promptctl/adapters/codex/README.md +3 -0
- package/packages/software-development/promptctl/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +88 -0
- package/packages/software-development/semantic-release-beta/SKILL.md +55 -0
- package/packages/software-development/semantic-release-beta/adapters/claude/plugin.json +10 -0
- package/packages/software-development/semantic-release-beta/adapters/codex/README.md +3 -0
- package/packages/software-development/semantic-release-beta/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +57 -0
- package/packages/software-development/semantic-release-beta/references/github-actions.md +16 -0
- package/packages/software-development/semantic-release-beta/references/node-semantic-release.md +13 -0
- package/packages/software-development/semantic-release-beta/references/preset.md +47 -0
- package/packages/software-development/semantic-release-beta/references/validation.md +17 -0
- package/scripts/build-adapters.sh +115 -0
- package/scripts/install-codex-symlinks.sh +37 -0
- package/scripts/sync-from-sources.sh +44 -0
- package/scripts/validate-catalog.sh +90 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
name: viral-launch
|
|
4
|
+
description: Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops without pretending virality is guaranteed.
|
|
5
|
+
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
|
|
6
|
+
metadata:
|
|
7
|
+
author: Oleg Koval
|
|
8
|
+
tags:
|
|
9
|
+
- marketing
|
|
10
|
+
- launch
|
|
11
|
+
- growth
|
|
12
|
+
- virality
|
|
13
|
+
- positioning
|
|
14
|
+
- github
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# viral-launch
|
|
19
|
+
|
|
20
|
+
Use this skill when a user wants to launch a project, make a repo marketable, improve discoverability, or build shareable launch assets.
|
|
21
|
+
|
|
22
|
+
This skill is opinionated: virality is not a promise. The goal is to make the project easy to understand, easy to share, and easy to act on.
|
|
23
|
+
|
|
24
|
+
## Trigger phrases
|
|
25
|
+
|
|
26
|
+
- make this repo launch-ready
|
|
27
|
+
- set this up to go viral
|
|
28
|
+
- prepare a product launch
|
|
29
|
+
- create marketing assets for this project
|
|
30
|
+
- improve the README for launch
|
|
31
|
+
- prepare Product Hunt / Hacker News / X / LinkedIn launch copy
|
|
32
|
+
- set up an open-source repo for growth
|
|
33
|
+
|
|
34
|
+
## Workflow
|
|
35
|
+
|
|
36
|
+
1. Inspect the project first:
|
|
37
|
+
- product purpose
|
|
38
|
+
- target user
|
|
39
|
+
- core use case
|
|
40
|
+
- current README and docs
|
|
41
|
+
- install or demo path
|
|
42
|
+
- screenshots, videos, or visual proof
|
|
43
|
+
- analytics or waitlist capture if present
|
|
44
|
+
2. Define the launch angle in one sentence:
|
|
45
|
+
- who it is for
|
|
46
|
+
- what painful job it solves
|
|
47
|
+
- why now
|
|
48
|
+
- what makes it different
|
|
49
|
+
3. Make the repo launch-ready:
|
|
50
|
+
- clear README headline and first paragraph
|
|
51
|
+
- demo or quickstart within the first screen
|
|
52
|
+
- installation steps that work from a clean checkout
|
|
53
|
+
- screenshots, GIF, or demo link where possible
|
|
54
|
+
- feature list based on outcomes, not implementation trivia
|
|
55
|
+
- examples for the highest-intent use cases
|
|
56
|
+
- badges only when they add trust
|
|
57
|
+
- license, contributing notes, and issue templates when useful
|
|
58
|
+
4. Create launch assets:
|
|
59
|
+
- short tagline
|
|
60
|
+
- 1-paragraph announcement
|
|
61
|
+
- 5 social post variants
|
|
62
|
+
- Product Hunt tagline and description when relevant
|
|
63
|
+
- Hacker News title candidates when relevant
|
|
64
|
+
- launch email or DM when relevant
|
|
65
|
+
- creator/influencer outreach list criteria, not spam copy
|
|
66
|
+
5. Design share loops:
|
|
67
|
+
- a reason users would show the output to someone else
|
|
68
|
+
- a public artifact worth linking
|
|
69
|
+
- a before/after demo
|
|
70
|
+
- a template, benchmark, checklist, or gallery that can travel
|
|
71
|
+
- referral or waitlist loop only if it fits the product
|
|
72
|
+
6. Define proof and metrics:
|
|
73
|
+
- activation event
|
|
74
|
+
- share event
|
|
75
|
+
- conversion event
|
|
76
|
+
- retention proxy
|
|
77
|
+
- launch-day dashboard or simple tracking checklist
|
|
78
|
+
7. Keep claims grounded:
|
|
79
|
+
- do not invent traction, logos, benchmarks, testimonials, or user counts
|
|
80
|
+
- mark assumptions explicitly
|
|
81
|
+
- prefer specific proof over hype
|
|
82
|
+
- avoid dark patterns and spam
|
|
83
|
+
|
|
84
|
+
## Output format
|
|
85
|
+
|
|
86
|
+
When planning, produce:
|
|
87
|
+
|
|
88
|
+
- Launch angle
|
|
89
|
+
- Repo changes
|
|
90
|
+
- Launch assets
|
|
91
|
+
- Share loops
|
|
92
|
+
- Metrics
|
|
93
|
+
- Risks and assumptions
|
|
94
|
+
- Next actions
|
|
95
|
+
|
|
96
|
+
When editing a repository, make the smallest useful set of changes first, then validate by reading the README from a new user's perspective.
|
|
97
|
+
|
|
98
|
+
## References
|
|
99
|
+
|
|
100
|
+
- `references/launch-checklist.md`
|
|
101
|
+
- `references/external-skills.md`
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
name: viral-launch
|
|
6
|
+
description: Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops without pretending virality is guaranteed.
|
|
7
|
+
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
|
|
8
|
+
metadata:
|
|
9
|
+
author: Oleg Koval
|
|
10
|
+
tags:
|
|
11
|
+
- marketing
|
|
12
|
+
- launch
|
|
13
|
+
- growth
|
|
14
|
+
- virality
|
|
15
|
+
- positioning
|
|
16
|
+
- github
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# viral-launch
|
|
21
|
+
|
|
22
|
+
Use this skill when a user wants to launch a project, make a repo marketable, improve discoverability, or build shareable launch assets.
|
|
23
|
+
|
|
24
|
+
This skill is opinionated: virality is not a promise. The goal is to make the project easy to understand, easy to share, and easy to act on.
|
|
25
|
+
|
|
26
|
+
## Trigger phrases
|
|
27
|
+
|
|
28
|
+
- make this repo launch-ready
|
|
29
|
+
- set this up to go viral
|
|
30
|
+
- prepare a product launch
|
|
31
|
+
- create marketing assets for this project
|
|
32
|
+
- improve the README for launch
|
|
33
|
+
- prepare Product Hunt / Hacker News / X / LinkedIn launch copy
|
|
34
|
+
- set up an open-source repo for growth
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
1. Inspect the project first:
|
|
39
|
+
- product purpose
|
|
40
|
+
- target user
|
|
41
|
+
- core use case
|
|
42
|
+
- current README and docs
|
|
43
|
+
- install or demo path
|
|
44
|
+
- screenshots, videos, or visual proof
|
|
45
|
+
- analytics or waitlist capture if present
|
|
46
|
+
2. Define the launch angle in one sentence:
|
|
47
|
+
- who it is for
|
|
48
|
+
- what painful job it solves
|
|
49
|
+
- why now
|
|
50
|
+
- what makes it different
|
|
51
|
+
3. Make the repo launch-ready:
|
|
52
|
+
- clear README headline and first paragraph
|
|
53
|
+
- demo or quickstart within the first screen
|
|
54
|
+
- installation steps that work from a clean checkout
|
|
55
|
+
- screenshots, GIF, or demo link where possible
|
|
56
|
+
- feature list based on outcomes, not implementation trivia
|
|
57
|
+
- examples for the highest-intent use cases
|
|
58
|
+
- badges only when they add trust
|
|
59
|
+
- license, contributing notes, and issue templates when useful
|
|
60
|
+
4. Create launch assets:
|
|
61
|
+
- short tagline
|
|
62
|
+
- 1-paragraph announcement
|
|
63
|
+
- 5 social post variants
|
|
64
|
+
- Product Hunt tagline and description when relevant
|
|
65
|
+
- Hacker News title candidates when relevant
|
|
66
|
+
- launch email or DM when relevant
|
|
67
|
+
- creator/influencer outreach list criteria, not spam copy
|
|
68
|
+
5. Design share loops:
|
|
69
|
+
- a reason users would show the output to someone else
|
|
70
|
+
- a public artifact worth linking
|
|
71
|
+
- a before/after demo
|
|
72
|
+
- a template, benchmark, checklist, or gallery that can travel
|
|
73
|
+
- referral or waitlist loop only if it fits the product
|
|
74
|
+
6. Define proof and metrics:
|
|
75
|
+
- activation event
|
|
76
|
+
- share event
|
|
77
|
+
- conversion event
|
|
78
|
+
- retention proxy
|
|
79
|
+
- launch-day dashboard or simple tracking checklist
|
|
80
|
+
7. Keep claims grounded:
|
|
81
|
+
- do not invent traction, logos, benchmarks, testimonials, or user counts
|
|
82
|
+
- mark assumptions explicitly
|
|
83
|
+
- prefer specific proof over hype
|
|
84
|
+
- avoid dark patterns and spam
|
|
85
|
+
|
|
86
|
+
## Output format
|
|
87
|
+
|
|
88
|
+
When planning, produce:
|
|
89
|
+
|
|
90
|
+
- Launch angle
|
|
91
|
+
- Repo changes
|
|
92
|
+
- Launch assets
|
|
93
|
+
- Share loops
|
|
94
|
+
- Metrics
|
|
95
|
+
- Risks and assumptions
|
|
96
|
+
- Next actions
|
|
97
|
+
|
|
98
|
+
When editing a repository, make the smallest useful set of changes first, then validate by reading the README from a new user's perspective.
|
|
99
|
+
|
|
100
|
+
## References
|
|
101
|
+
|
|
102
|
+
- `references/launch-checklist.md`
|
|
103
|
+
- `references/external-skills.md`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# External skills
|
|
2
|
+
|
|
3
|
+
Skill search found these related launch and marketing skills:
|
|
4
|
+
|
|
5
|
+
- `coreyhaines31/marketingskills@launch-strategy` - broad launch strategy skill, about 37K installs in Skills CLI search; source repo `coreyhaines31/marketingskills` has about 20K GitHub stars.
|
|
6
|
+
- `refoundai/lenny-skills@launch-marketing` - product management and launch marketing skill, under 1K installs in Skills CLI search.
|
|
7
|
+
|
|
8
|
+
Prefer this local `olko:viral-launch` skill when the work is specifically to make a repository launch-ready. Consider installing `coreyhaines31/marketingskills@launch-strategy` when the user wants a broader marketing strategy workflow:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npx skills add coreyhaines31/marketingskills@launch-strategy -g -y
|
|
12
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Launch checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before calling a project launch-ready.
|
|
4
|
+
|
|
5
|
+
## Repo
|
|
6
|
+
|
|
7
|
+
- README headline says what the project does and for whom.
|
|
8
|
+
- First screen contains a demo, screenshot, or quickstart.
|
|
9
|
+
- Install steps work from a clean checkout.
|
|
10
|
+
- Examples cover the highest-intent use cases.
|
|
11
|
+
- License and contribution expectations are clear.
|
|
12
|
+
- Known limitations are stated without weakening the launch angle.
|
|
13
|
+
|
|
14
|
+
## Message
|
|
15
|
+
|
|
16
|
+
- One-sentence positioning is specific.
|
|
17
|
+
- The hook names a real problem or desire.
|
|
18
|
+
- Differentiation is concrete.
|
|
19
|
+
- Claims are backed by repo content, screenshots, demos, benchmarks, or examples.
|
|
20
|
+
- Copy avoids fake urgency, fake social proof, and generic hype.
|
|
21
|
+
|
|
22
|
+
## Distribution
|
|
23
|
+
|
|
24
|
+
- Launch channels are chosen for the actual audience.
|
|
25
|
+
- Each channel gets native copy, not pasted generic copy.
|
|
26
|
+
- Assets include at least one short post, one longer post, and one direct outreach note.
|
|
27
|
+
- Launch timing includes a response window for comments, issues, and feedback.
|
|
28
|
+
|
|
29
|
+
## Shareability
|
|
30
|
+
|
|
31
|
+
- There is a public artifact people can link to.
|
|
32
|
+
- The demo shows a before/after or clear transformation.
|
|
33
|
+
- Users have a reason to share the output, not only the product.
|
|
34
|
+
- Any referral or waitlist mechanism is tied to user value.
|
|
35
|
+
|
|
36
|
+
## Metrics
|
|
37
|
+
|
|
38
|
+
- Activation event is defined.
|
|
39
|
+
- Share event is defined.
|
|
40
|
+
- Conversion event is defined.
|
|
41
|
+
- Feedback collection path is defined.
|
|
42
|
+
- Launch review date is defined before launch.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Oleg Koval
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fill-music-player
|
|
3
|
+
description: Use when a user wants to fill a portable music player (Walkman, iPod, USB drive) with a curated random selection from a music library on a NAS or local directory. Handles format filtering, artist/album diversity balancing, and size targeting.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Codex, Claude Code, Cursor, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
|
|
6
|
+
metadata:
|
|
7
|
+
author: Oleg Koval
|
|
8
|
+
tags:
|
|
9
|
+
- music
|
|
10
|
+
- media
|
|
11
|
+
- curation
|
|
12
|
+
- copy
|
|
13
|
+
- cli
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# fill-music-player
|
|
17
|
+
|
|
18
|
+
Curates a DJ-balanced selection of tracks from a source music library and copies them to a portable player, respecting device capacity and supported formats.
|
|
19
|
+
|
|
20
|
+
## Quick Reference
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Dry run first (always recommend this)
|
|
24
|
+
fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC --dry-run
|
|
25
|
+
|
|
26
|
+
# Copy for real
|
|
27
|
+
fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC
|
|
28
|
+
|
|
29
|
+
# Or run the script directly with uv
|
|
30
|
+
uv run fill_music_player.py --source ~/Music --dest /Volumes/USB --dry-run
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Run `fill-music-player --help` for all options.
|
|
34
|
+
|
|
35
|
+
## Key Parameters
|
|
36
|
+
|
|
37
|
+
| Flag | Default | Purpose |
|
|
38
|
+
|------|---------|---------|
|
|
39
|
+
| `--source` / `-s` | required | Source music root (NAS mount, ~/Music, etc.) |
|
|
40
|
+
| `--dest` / `-d` | required | Player destination directory |
|
|
41
|
+
| `--target-gb` | 95% of free space | How many GB to fill |
|
|
42
|
+
| `--formats` | mp3,m4a,wma,aac | Allowed extensions |
|
|
43
|
+
| `--max-per-artist` | 4 | Artist diversity cap |
|
|
44
|
+
| `--max-per-album` | 3 | Album diversity cap |
|
|
45
|
+
| `--skip-dirs` | (none) | Top-level dirs to skip |
|
|
46
|
+
| `--dry-run` | false | Preview without copying |
|
|
47
|
+
|
|
48
|
+
## Workflow
|
|
49
|
+
|
|
50
|
+
1. Always do `--dry-run` first
|
|
51
|
+
2. Review the per-genre breakdown
|
|
52
|
+
3. Adjust `--skip-dirs`, `--max-file-mb`, or `--max-per-artist` if needed
|
|
53
|
+
4. Run without `--dry-run` to copy
|
|
54
|
+
|
|
55
|
+
## Device Formats
|
|
56
|
+
|
|
57
|
+
| Device | Recommended `--formats` |
|
|
58
|
+
|--------|------------------------|
|
|
59
|
+
| Sony Walkman NWZ series | `mp3,m4a,wma` |
|
|
60
|
+
| iPod (classic/nano) | `mp3,m4a,aac` |
|
|
61
|
+
| Generic USB player | `mp3` |
|
|
62
|
+
| Any modern player | `mp3,m4a,wma,aac,ogg,flac` |
|
|
63
|
+
|
|
64
|
+
## Edge Cases and Troubleshooting
|
|
65
|
+
|
|
66
|
+
| Situation | What happens | Fix |
|
|
67
|
+
|-----------|-------------|-----|
|
|
68
|
+
| NAS disconnects mid-copy | Copy fails for that file, logged as error, continues with next track | Re-run; already-copied files are skipped (`if not dst.exists()`) |
|
|
69
|
+
| Source has only FLAC/lossless | 0 files selected (FLAC not in default formats) | Use `--formats flac` or `--formats mp3,flac` |
|
|
70
|
+
| FAT32 filename too long or illegal chars | Filenames are sanitized: `<>:"/\|?*` replaced with `_`, truncated to 80 chars | Automatic — no action needed |
|
|
71
|
+
| Mixed/broken ID3 tags | Falls back to folder name parsing (`Genre/Artist - Album/track.mp3`) | Works transparently; folder structure is the reliable fallback |
|
|
72
|
+
| Very large files (DJ mixes, radio shows) | Skipped by default (>20 MB) | Adjust with `--max-file-mb 50` to include mixes |
|
|
73
|
+
| Tiny files (jingles, corrupt) | Skipped by default (<300 KB) | Adjust with `--min-file-kb 100` to be more permissive |
|
|
74
|
+
| One artist dominates the library | Capped at 4 tracks per artist, 3 per album | Lower with `--max-per-artist 2` for more variety |
|
|
75
|
+
| Empty genre directories | Silently skipped, no error | Normal behavior |
|
|
76
|
+
| Destination already has files | Existing files are not overwritten or deleted; new tracks added alongside | Clear destination first if you want a fresh set |
|
|
77
|
+
| SMB/NFS mount is slow | Scanning with mutagen tag reading can take 5-10 min for large libraries | Expected; the dry-run output appears once scanning completes |
|
|
78
|
+
|
|
79
|
+
## Real-World Example
|
|
80
|
+
|
|
81
|
+
Filling a **Sony Walkman NWZ-B183F (4 GB)** from a **Synology DS918+ NAS** with ~9,000 tracks across blues, funk, hip-hop, soul, IDM, dubstep, dub, indie, and post-rock:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Step 1: Preview
|
|
85
|
+
fill-music-player \
|
|
86
|
+
--source /Volumes/music \
|
|
87
|
+
--dest /Volumes/WALKMAN/MUSIC \
|
|
88
|
+
--skip-dirs "jingles,!recordings,!restored,dubrecords" \
|
|
89
|
+
--formats mp3,m4a,wma \
|
|
90
|
+
--dry-run
|
|
91
|
+
|
|
92
|
+
# Output:
|
|
93
|
+
# Found 8914 candidate tracks across 14 genres
|
|
94
|
+
# Funk → 86 tracks (440.8 MB)
|
|
95
|
+
# blues → 38 tracks (316.7 MB)
|
|
96
|
+
# hiphop → 33 tracks (234.7 MB)
|
|
97
|
+
# ...
|
|
98
|
+
# Selected 348 tracks (2473.0 MB)
|
|
99
|
+
|
|
100
|
+
# Step 2: Copy
|
|
101
|
+
fill-music-player \
|
|
102
|
+
--source /Volumes/music \
|
|
103
|
+
--dest /Volumes/WALKMAN/MUSIC \
|
|
104
|
+
--skip-dirs "jingles,!recordings,!restored,dubrecords" \
|
|
105
|
+
--formats mp3,m4a,wma
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Result: 348 tracks, 2.4 GB, balanced across 14 genres with max 4 tracks per artist. Artists included Fela Kuti, ZZ Top, Mobb Deep, Gregory Porter, Tinariwen, Chick Corea, Hudson Mohawke, and Funkadelic. Total copy time over SMB: ~12 minutes.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
name: fill-music-player
|
|
5
|
+
description: Use when a user wants to fill a portable music player (Walkman, iPod, USB drive) with a curated random selection from a music library on a NAS or local directory. Handles format filtering, artist/album diversity balancing, and size targeting.
|
|
6
|
+
license: MIT
|
|
7
|
+
compatibility: Codex, Claude Code, Cursor, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
|
|
8
|
+
metadata:
|
|
9
|
+
author: Oleg Koval
|
|
10
|
+
tags:
|
|
11
|
+
- music
|
|
12
|
+
- media
|
|
13
|
+
- curation
|
|
14
|
+
- copy
|
|
15
|
+
- cli
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# fill-music-player
|
|
19
|
+
|
|
20
|
+
Curates a DJ-balanced selection of tracks from a source music library and copies them to a portable player, respecting device capacity and supported formats.
|
|
21
|
+
|
|
22
|
+
## Quick Reference
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Dry run first (always recommend this)
|
|
26
|
+
fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC --dry-run
|
|
27
|
+
|
|
28
|
+
# Copy for real
|
|
29
|
+
fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC
|
|
30
|
+
|
|
31
|
+
# Or run the script directly with uv
|
|
32
|
+
uv run fill_music_player.py --source ~/Music --dest /Volumes/USB --dry-run
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Run `fill-music-player --help` for all options.
|
|
36
|
+
|
|
37
|
+
## Key Parameters
|
|
38
|
+
|
|
39
|
+
| Flag | Default | Purpose |
|
|
40
|
+
|------|---------|---------|
|
|
41
|
+
| `--source` / `-s` | required | Source music root (NAS mount, ~/Music, etc.) |
|
|
42
|
+
| `--dest` / `-d` | required | Player destination directory |
|
|
43
|
+
| `--target-gb` | 95% of free space | How many GB to fill |
|
|
44
|
+
| `--formats` | mp3,m4a,wma,aac | Allowed extensions |
|
|
45
|
+
| `--max-per-artist` | 4 | Artist diversity cap |
|
|
46
|
+
| `--max-per-album` | 3 | Album diversity cap |
|
|
47
|
+
| `--skip-dirs` | (none) | Top-level dirs to skip |
|
|
48
|
+
| `--dry-run` | false | Preview without copying |
|
|
49
|
+
|
|
50
|
+
## Workflow
|
|
51
|
+
|
|
52
|
+
1. Always do `--dry-run` first
|
|
53
|
+
2. Review the per-genre breakdown
|
|
54
|
+
3. Adjust `--skip-dirs`, `--max-file-mb`, or `--max-per-artist` if needed
|
|
55
|
+
4. Run without `--dry-run` to copy
|
|
56
|
+
|
|
57
|
+
## Device Formats
|
|
58
|
+
|
|
59
|
+
| Device | Recommended `--formats` |
|
|
60
|
+
|--------|------------------------|
|
|
61
|
+
| Sony Walkman NWZ series | `mp3,m4a,wma` |
|
|
62
|
+
| iPod (classic/nano) | `mp3,m4a,aac` |
|
|
63
|
+
| Generic USB player | `mp3` |
|
|
64
|
+
| Any modern player | `mp3,m4a,wma,aac,ogg,flac` |
|
|
65
|
+
|
|
66
|
+
## Edge Cases and Troubleshooting
|
|
67
|
+
|
|
68
|
+
| Situation | What happens | Fix |
|
|
69
|
+
|-----------|-------------|-----|
|
|
70
|
+
| NAS disconnects mid-copy | Copy fails for that file, logged as error, continues with next track | Re-run; already-copied files are skipped (`if not dst.exists()`) |
|
|
71
|
+
| Source has only FLAC/lossless | 0 files selected (FLAC not in default formats) | Use `--formats flac` or `--formats mp3,flac` |
|
|
72
|
+
| FAT32 filename too long or illegal chars | Filenames are sanitized: `<>:"/\|?*` replaced with `_`, truncated to 80 chars | Automatic — no action needed |
|
|
73
|
+
| Mixed/broken ID3 tags | Falls back to folder name parsing (`Genre/Artist - Album/track.mp3`) | Works transparently; folder structure is the reliable fallback |
|
|
74
|
+
| Very large files (DJ mixes, radio shows) | Skipped by default (>20 MB) | Adjust with `--max-file-mb 50` to include mixes |
|
|
75
|
+
| Tiny files (jingles, corrupt) | Skipped by default (<300 KB) | Adjust with `--min-file-kb 100` to be more permissive |
|
|
76
|
+
| One artist dominates the library | Capped at 4 tracks per artist, 3 per album | Lower with `--max-per-artist 2` for more variety |
|
|
77
|
+
| Empty genre directories | Silently skipped, no error | Normal behavior |
|
|
78
|
+
| Destination already has files | Existing files are not overwritten or deleted; new tracks added alongside | Clear destination first if you want a fresh set |
|
|
79
|
+
| SMB/NFS mount is slow | Scanning with mutagen tag reading can take 5-10 min for large libraries | Expected; the dry-run output appears once scanning completes |
|
|
80
|
+
|
|
81
|
+
## Real-World Example
|
|
82
|
+
|
|
83
|
+
Filling a **Sony Walkman NWZ-B183F (4 GB)** from a **Synology DS918+ NAS** with ~9,000 tracks across blues, funk, hip-hop, soul, IDM, dubstep, dub, indie, and post-rock:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Step 1: Preview
|
|
87
|
+
fill-music-player \
|
|
88
|
+
--source /Volumes/music \
|
|
89
|
+
--dest /Volumes/WALKMAN/MUSIC \
|
|
90
|
+
--skip-dirs "jingles,!recordings,!restored,dubrecords" \
|
|
91
|
+
--formats mp3,m4a,wma \
|
|
92
|
+
--dry-run
|
|
93
|
+
|
|
94
|
+
# Output:
|
|
95
|
+
# Found 8914 candidate tracks across 14 genres
|
|
96
|
+
# Funk → 86 tracks (440.8 MB)
|
|
97
|
+
# blues → 38 tracks (316.7 MB)
|
|
98
|
+
# hiphop → 33 tracks (234.7 MB)
|
|
99
|
+
# ...
|
|
100
|
+
# Selected 348 tracks (2473.0 MB)
|
|
101
|
+
|
|
102
|
+
# Step 2: Copy
|
|
103
|
+
fill-music-player \
|
|
104
|
+
--source /Volumes/music \
|
|
105
|
+
--dest /Volumes/WALKMAN/MUSIC \
|
|
106
|
+
--skip-dirs "jingles,!recordings,!restored,dubrecords" \
|
|
107
|
+
--formats mp3,m4a,wma
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Result: 348 tracks, 2.4 GB, balanced across 14 genres with max 4 tracks per artist. Artists included Fela Kuti, ZZ Top, Mobb Deep, Gregory Porter, Tinariwen, Chick Corea, Hudson Mohawke, and Funkadelic. Total copy time over SMB: ~12 minutes.
|