@framers/agentos-skills-registry 0.14.0 → 0.15.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/agentos-skills-registry",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "registry",
@@ -0,0 +1,225 @@
1
+ ---
2
+ name: audio-generation
3
+ version: '1.0.0'
4
+ description: Music and sound effects generation — 8 providers with fallback chains, user-configurable preferences, local and cloud options.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: media
8
+ tags: [audio, music, sound-effects, sfx, generation, suno, elevenlabs, stable-audio, musicgen]
9
+ requires_secrets: []
10
+ requires_tools: []
11
+ metadata:
12
+ agentos:
13
+ emoji: "\U0001F3B5"
14
+ ---
15
+
16
+ # Audio Generation (Music & Sound Effects)
17
+
18
+ Use this skill when the user wants to generate music compositions or sound effects from text descriptions. The system supports 8 provider backends with automatic fallback chains and user-configurable provider preferences.
19
+
20
+ This skill covers two complementary APIs:
21
+
22
+ 1. **generateMusic()** — Full-length musical compositions from text prompts
23
+ 2. **generateSFX()** — Short sound effects from text descriptions
24
+
25
+ ## Music Generation
26
+
27
+ ### Basic Usage
28
+
29
+ Generate music from a text prompt. The system auto-detects the best available provider from environment variables in priority order: `SUNO_API_KEY` (highest quality) -> `UDIO_API_KEY` -> `STABILITY_API_KEY` -> `REPLICATE_API_TOKEN` -> `FAL_API_KEY` -> local MusicGen (no key required).
30
+
31
+ ```typescript
32
+ import { generateMusic } from 'agentos';
33
+
34
+ const result = await generateMusic({
35
+ prompt: 'Upbeat lo-fi hip hop beat with vinyl crackle and mellow piano',
36
+ durationSec: 60,
37
+ });
38
+ console.log(result.audio[0].url);
39
+ ```
40
+
41
+ ### Prompt Tips for Music
42
+
43
+ - **Specify genre and mood first**: "melancholic jazz ballad", "aggressive drum and bass", "peaceful ambient soundscape"
44
+ - **Include instrumentation**: "with acoustic guitar, soft brushed drums, and upright bass"
45
+ - **Mention tempo and energy**: "slow tempo, 70 BPM", "high energy, driving rhythm"
46
+ - **Add texture and production**: "lo-fi with vinyl crackle", "clean studio recording", "reverb-heavy shoegaze"
47
+ - **Reference eras or styles**: "1970s progressive rock", "modern trap production", "classical baroque harpsichord"
48
+ - **Use negative prompts** where supported: `negativePrompt: 'vocals, singing, lyrics'`
49
+
50
+ ### Music Options
51
+
52
+ | Option | Default | Description |
53
+ |--------|---------|-------------|
54
+ | `prompt` | (required) | Text description of the desired music |
55
+ | `provider` | auto-detect | Provider ID (`"suno"`, `"udio"`, `"stable-audio"`, etc.) |
56
+ | `model` | provider default | Model identifier within the provider |
57
+ | `durationSec` | provider default | Output duration in seconds (Suno: up to ~240s, Stable Audio: ~47s) |
58
+ | `negativePrompt` | — | Musical elements to avoid (not all providers support this) |
59
+ | `outputFormat` | `"mp3"` | Output format: `"mp3"`, `"wav"`, `"flac"`, `"ogg"`, `"aac"` |
60
+ | `seed` | random | Seed for reproducible output (provider-dependent) |
61
+ | `n` | `1` | Number of clips to generate |
62
+
63
+ ## Sound Effect Generation
64
+
65
+ ### Basic Usage
66
+
67
+ Generate a sound effect from a text description. The SFX detection order is: `ELEVENLABS_API_KEY` (highest quality) -> `STABILITY_API_KEY` -> `REPLICATE_API_TOKEN` -> `FAL_API_KEY` -> local AudioGen (no key required).
68
+
69
+ ```typescript
70
+ import { generateSFX } from 'agentos';
71
+
72
+ const result = await generateSFX({
73
+ prompt: 'Thunder crack followed by heavy rain on a tin roof',
74
+ durationSec: 5,
75
+ });
76
+ console.log(result.audio[0].url);
77
+ ```
78
+
79
+ ### Prompt Tips for Sound Effects
80
+
81
+ - **Be specific about the sound**: "glass bottle shattering on concrete floor" rather than just "glass breaking"
82
+ - **Describe the environment**: "footsteps on gravel in an empty parking garage with echo"
83
+ - **Layer multiple sounds**: "busy city intersection with car horns, distant sirens, and pedestrian chatter"
84
+ - **Specify duration context**: short stingers (1-3s) vs ambient loops (10-15s)
85
+ - **Include physical properties**: "heavy wooden door creaking open slowly", "small metallic click of a light switch"
86
+
87
+ ### SFX Options
88
+
89
+ | Option | Default | Description |
90
+ |--------|---------|-------------|
91
+ | `prompt` | (required) | Text description of the desired sound effect |
92
+ | `provider` | auto-detect | Provider ID (`"elevenlabs-sfx"`, `"stable-audio"`, etc.) |
93
+ | `model` | provider default | Model identifier within the provider |
94
+ | `durationSec` | provider default | Output duration in seconds (SFX is typically 1-15s) |
95
+ | `outputFormat` | `"mp3"` | Output format: `"mp3"`, `"wav"`, `"flac"`, `"ogg"`, `"aac"` |
96
+ | `seed` | random | Seed for reproducible output (provider-dependent) |
97
+ | `n` | `1` | Number of clips to generate |
98
+
99
+ ## Provider Selection Guide
100
+
101
+ ### Music Providers
102
+
103
+ | Provider | ID | Best For | Env Var | Key Required |
104
+ |----------|-----|----------|---------|-------------|
105
+ | **Suno** | `suno` | Highest quality vocals + instrumentals, full songs | `SUNO_API_KEY` | Yes |
106
+ | **Udio** | `udio` | High quality music, alternative to Suno | `UDIO_API_KEY` | Yes |
107
+ | **Stable Audio** | `stable-audio` | Instrumentals, loops, ambient, fast generation | `STABILITY_API_KEY` | Yes |
108
+ | **Replicate** | `replicate-audio` | Open-source models (MusicGen), pay-per-use | `REPLICATE_API_TOKEN` | Yes |
109
+ | **Fal** | `fal-audio` | Fast serverless GPU, cost-effective | `FAL_API_KEY` | Yes |
110
+ | **MusicGen Local** | `musicgen-local` | Offline generation, no API key needed, privacy | — | No |
111
+
112
+ ### SFX Providers
113
+
114
+ | Provider | ID | Best For | Env Var | Key Required |
115
+ |----------|-----|----------|---------|-------------|
116
+ | **ElevenLabs** | `elevenlabs-sfx` | Highest quality SFX, fast turnaround | `ELEVENLABS_API_KEY` | Yes |
117
+ | **Stable Audio** | `stable-audio` | Good SFX + music in one provider | `STABILITY_API_KEY` | Yes |
118
+ | **Replicate** | `replicate-audio` | Open-source AudioGen model, pay-per-use | `REPLICATE_API_TOKEN` | Yes |
119
+ | **Fal** | `fal-audio` | Fast serverless GPU | `FAL_API_KEY` | Yes |
120
+ | **AudioGen Local** | `audiogen-local` | Offline SFX generation, no API key needed | — | No |
121
+
122
+ ### Forcing a Specific Provider
123
+
124
+ ```typescript
125
+ const result = await generateMusic({
126
+ prompt: 'Chill synthwave with arpeggiated synths',
127
+ provider: 'stable-audio',
128
+ apiKey: 'your-stability-key',
129
+ durationSec: 30,
130
+ });
131
+ ```
132
+
133
+ ## Provider Preferences
134
+
135
+ Use `providerPreferences` to control the fallback chain ordering and filtering without hardcoding a single provider. This is useful for load balancing, cost optimization, or respecting user preferences.
136
+
137
+ ```typescript
138
+ import { generateMusic } from 'agentos';
139
+
140
+ // Prefer Suno, fall back to Stable Audio, never use Udio
141
+ const result = await generateMusic({
142
+ prompt: 'Orchestral film score with dramatic strings',
143
+ providerPreferences: {
144
+ preferred: ['suno', 'stable-audio'],
145
+ blocked: ['udio'],
146
+ },
147
+ });
148
+ ```
149
+
150
+ ### Preference Fields
151
+
152
+ | Field | Description |
153
+ |-------|-------------|
154
+ | `preferred` | Ordered list of provider IDs to try first. Providers not in this list are excluded. |
155
+ | `blocked` | Provider IDs to unconditionally exclude from the chain. |
156
+ | `weights` | Weight map for weighted random selection (useful for A/B testing or load balancing). |
157
+
158
+ Provider preferences work identically across `generateMusic()`, `generateSFX()`, `generateImage()`, and `generateVideo()`.
159
+
160
+ ## When to Use Music vs SFX vs TTS
161
+
162
+ | Need | API | Why |
163
+ |------|-----|-----|
164
+ | Background music, songs, jingles | `generateMusic()` | Optimized for musical compositions with melody, harmony, rhythm |
165
+ | Sound effects, foley, ambient sounds | `generateSFX()` | Optimized for short, non-musical audio (impacts, nature, UI sounds) |
166
+ | Speech, narration, voice cloning | TTS (speech subsystem) | Use the speech/TTS APIs instead — audio generation is for non-speech |
167
+ | Podcast intros with music + voice | Combine both | Generate music with `generateMusic()`, speech with TTS, mix externally |
168
+
169
+ ## Combining Audio
170
+
171
+ The audio generation APIs return URLs or base64 data that can be combined in downstream workflows:
172
+
173
+ 1. **Generate background music**: `generateMusic({ prompt: 'Gentle ambient pad' })`
174
+ 2. **Generate SFX stingers**: `generateSFX({ prompt: 'Notification chime' })`
175
+ 3. **Generate speech**: Use the TTS subsystem for narration
176
+ 4. **Mix**: Use ffmpeg or a Web Audio API pipeline to layer the tracks
177
+
178
+ ```typescript
179
+ import { generateMusic, generateSFX } from 'agentos';
180
+
181
+ // Generate assets in parallel
182
+ const [music, sfx] = await Promise.all([
183
+ generateMusic({ prompt: 'Calm podcast background music', durationSec: 120 }),
184
+ generateSFX({ prompt: 'Soft transition whoosh', durationSec: 2 }),
185
+ ]);
186
+
187
+ // Use the URLs/base64 data in your mixing pipeline
188
+ console.log('Music:', music.audio[0].url);
189
+ console.log('SFX:', sfx.audio[0].url);
190
+ ```
191
+
192
+ ## Local Providers (No API Key)
193
+
194
+ Both MusicGen and AudioGen can run locally without any API keys using HuggingFace Transformers.js. The models are downloaded on first use and cached locally.
195
+
196
+ **Requirements:**
197
+ - `@huggingface/transformers` must be installed as a peer dependency
198
+ - Sufficient RAM for model inference (MusicGen Small ~1GB, AudioGen Medium ~2GB)
199
+
200
+ ```typescript
201
+ // Explicitly use local generation
202
+ const result = await generateMusic({
203
+ prompt: 'Simple piano melody',
204
+ provider: 'musicgen-local',
205
+ });
206
+ ```
207
+
208
+ Local providers are automatically used as the last fallback when no cloud API keys are configured.
209
+
210
+ ## Prerequisites
211
+
212
+ - At least one audio provider API key for cloud generation, OR `@huggingface/transformers` for local generation
213
+ - For music: `SUNO_API_KEY`, `UDIO_API_KEY`, `STABILITY_API_KEY`, `REPLICATE_API_TOKEN`, or `FAL_API_KEY`
214
+ - For SFX: `ELEVENLABS_API_KEY`, `STABILITY_API_KEY`, `REPLICATE_API_TOKEN`, or `FAL_API_KEY`
215
+
216
+ ## Examples
217
+
218
+ - "Generate a 60-second lo-fi hip hop beat for a study playlist"
219
+ - "Create a thunder and rain sound effect for my podcast intro"
220
+ - "Make upbeat electronic music for a product demo video"
221
+ - "Generate a notification chime sound effect"
222
+ - "Create ambient forest sounds with birds and a gentle stream"
223
+ - "Generate a dramatic orchestral score for a trailer"
224
+ - "Make a retro 8-bit video game soundtrack"
225
+ - "Create footstep sounds on different surfaces — wood, gravel, snow"
package/registry.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "updated": "2026-03-27T07:00:16.599Z",
3
+ "updated": "2026-03-27T10:16:24.338Z",
4
4
  "categories": {
5
5
  "curated": [
6
6
  "1password",
@@ -9,6 +9,7 @@
9
9
  "amazon-polly",
10
10
  "apple-notes",
11
11
  "apple-reminders",
12
+ "audio-generation",
12
13
  "blog-publisher",
13
14
  "bluesky-bot",
14
15
  "cloud-ops",
@@ -85,7 +86,7 @@
85
86
  "namespace": "wunderland",
86
87
  "verified": true,
87
88
  "source": "curated",
88
- "verifiedAt": "2026-03-27T07:00:16.599Z",
89
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
89
90
  "keywords": [
90
91
  "1password",
91
92
  "passwords",
@@ -130,7 +131,7 @@
130
131
  "namespace": "wunderland",
131
132
  "verified": true,
132
133
  "source": "curated",
133
- "verifiedAt": "2026-03-27T07:00:16.599Z",
134
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
134
135
  "keywords": [
135
136
  "accounts",
136
137
  "credentials",
@@ -166,7 +167,7 @@
166
167
  "namespace": "wunderland",
167
168
  "verified": true,
168
169
  "source": "curated",
169
- "verifiedAt": "2026-03-27T07:00:16.599Z",
170
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
170
171
  "keywords": [
171
172
  "agent",
172
173
  "config",
@@ -187,7 +188,7 @@
187
188
  "namespace": "wunderland",
188
189
  "verified": true,
189
190
  "source": "curated",
190
- "verifiedAt": "2026-03-27T07:00:16.599Z",
191
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
191
192
  "keywords": [
192
193
  "voice",
193
194
  "tts",
@@ -218,7 +219,7 @@
218
219
  "namespace": "wunderland",
219
220
  "verified": true,
220
221
  "source": "curated",
221
- "verifiedAt": "2026-03-27T07:00:16.599Z",
222
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
222
223
  "keywords": [
223
224
  "apple-notes",
224
225
  "macos",
@@ -252,7 +253,7 @@
252
253
  "namespace": "wunderland",
253
254
  "verified": true,
254
255
  "source": "curated",
255
- "verifiedAt": "2026-03-27T07:00:16.599Z",
256
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
256
257
  "keywords": [
257
258
  "apple-reminders",
258
259
  "macos",
@@ -276,6 +277,33 @@
276
277
  }
277
278
  }
278
279
  },
280
+ {
281
+ "id": "com.framers.skill.audio-generation",
282
+ "name": "audio-generation",
283
+ "displayName": "audio-generation",
284
+ "version": "1.0.0",
285
+ "path": "registry/curated/audio-generation",
286
+ "description": "Music and sound effects generation — 8 providers with fallback chains, user-configurable preferences, local and cloud options.",
287
+ "category": "media",
288
+ "namespace": "wunderland",
289
+ "verified": true,
290
+ "source": "curated",
291
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
292
+ "keywords": [
293
+ "audio",
294
+ "music",
295
+ "sound-effects",
296
+ "sfx",
297
+ "generation",
298
+ "suno",
299
+ "elevenlabs",
300
+ "stable-audio",
301
+ "musicgen"
302
+ ],
303
+ "metadata": {
304
+ "emoji": "🎵"
305
+ }
306
+ },
279
307
  {
280
308
  "id": "com.framers.skill.blog-publisher",
281
309
  "name": "blog-publisher",
@@ -287,7 +315,7 @@
287
315
  "namespace": "wunderland",
288
316
  "verified": true,
289
317
  "source": "curated",
290
- "verifiedAt": "2026-03-27T07:00:16.599Z",
318
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
291
319
  "keywords": [
292
320
  "blog",
293
321
  "publishing",
@@ -331,7 +359,7 @@
331
359
  "namespace": "wunderland",
332
360
  "verified": true,
333
361
  "source": "curated",
334
- "verifiedAt": "2026-03-27T07:00:16.599Z",
362
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
335
363
  "keywords": [
336
364
  "bluesky",
337
365
  "social-media",
@@ -371,7 +399,7 @@
371
399
  "namespace": "wunderland",
372
400
  "verified": true,
373
401
  "source": "curated",
374
- "verifiedAt": "2026-03-27T07:00:16.599Z",
402
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
375
403
  "keywords": [
376
404
  "cloud",
377
405
  "devops",
@@ -398,7 +426,7 @@
398
426
  "namespace": "wunderland",
399
427
  "verified": true,
400
428
  "source": "curated",
401
- "verifiedAt": "2026-03-27T07:00:16.599Z",
429
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
402
430
  "keywords": [
403
431
  "guardrails",
404
432
  "code-safety",
@@ -426,7 +454,7 @@
426
454
  "namespace": "wunderland",
427
455
  "verified": true,
428
456
  "source": "curated",
429
- "verifiedAt": "2026-03-27T07:00:16.599Z",
457
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
430
458
  "keywords": [
431
459
  "coding",
432
460
  "programming",
@@ -453,7 +481,7 @@
453
481
  "namespace": "wunderland",
454
482
  "verified": true,
455
483
  "source": "curated",
456
- "verifiedAt": "2026-03-27T07:00:16.599Z",
484
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
457
485
  "keywords": [
458
486
  "content",
459
487
  "writing",
@@ -483,7 +511,7 @@
483
511
  "namespace": "wunderland",
484
512
  "verified": true,
485
513
  "source": "curated",
486
- "verifiedAt": "2026-03-27T07:00:16.599Z",
514
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
487
515
  "keywords": [
488
516
  "research",
489
517
  "investigation",
@@ -521,7 +549,7 @@
521
549
  "namespace": "wunderland",
522
550
  "verified": true,
523
551
  "source": "curated",
524
- "verifiedAt": "2026-03-27T07:00:16.599Z",
552
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
525
553
  "keywords": [
526
554
  "voice",
527
555
  "diarization",
@@ -546,7 +574,7 @@
546
574
  "namespace": "wunderland",
547
575
  "verified": true,
548
576
  "source": "curated",
549
- "verifiedAt": "2026-03-27T07:00:16.599Z",
577
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
550
578
  "keywords": [
551
579
  "discord",
552
580
  "messaging",
@@ -574,7 +602,7 @@
574
602
  "namespace": "wunderland",
575
603
  "verified": true,
576
604
  "source": "curated",
577
- "verifiedAt": "2026-03-27T07:00:16.599Z",
605
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
578
606
  "metadata": {
579
607
  "primaryEnv": "INTERNAL_API_SECRET",
580
608
  "emoji": "📧",
@@ -615,7 +643,7 @@
615
643
  "namespace": "wunderland",
616
644
  "verified": true,
617
645
  "source": "curated",
618
- "verifiedAt": "2026-03-27T07:00:16.599Z",
646
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
619
647
  "keywords": [
620
648
  "emergent",
621
649
  "tools",
@@ -643,7 +671,7 @@
643
671
  "namespace": "wunderland",
644
672
  "verified": true,
645
673
  "source": "curated",
646
- "verifiedAt": "2026-03-27T07:00:16.599Z",
674
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
647
675
  "keywords": [
648
676
  "voice",
649
677
  "endpointing",
@@ -669,7 +697,7 @@
669
697
  "namespace": "wunderland",
670
698
  "verified": true,
671
699
  "source": "curated",
672
- "verifiedAt": "2026-03-27T07:00:16.599Z",
700
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
673
701
  "keywords": [
674
702
  "facebook",
675
703
  "social-media",
@@ -708,7 +736,7 @@
708
736
  "namespace": "wunderland",
709
737
  "verified": true,
710
738
  "source": "curated",
711
- "verifiedAt": "2026-03-27T07:00:16.599Z",
739
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
712
740
  "keywords": [
713
741
  "git",
714
742
  "version-control",
@@ -762,7 +790,7 @@
762
790
  "namespace": "wunderland",
763
791
  "verified": true,
764
792
  "source": "curated",
765
- "verifiedAt": "2026-03-27T07:00:16.599Z",
793
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
766
794
  "keywords": [
767
795
  "github",
768
796
  "git",
@@ -821,7 +849,7 @@
821
849
  "namespace": "wunderland",
822
850
  "verified": true,
823
851
  "source": "curated",
824
- "verifiedAt": "2026-03-27T07:00:16.599Z",
852
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
825
853
  "keywords": [
826
854
  "voice",
827
855
  "stt",
@@ -850,7 +878,7 @@
850
878
  "namespace": "wunderland",
851
879
  "verified": true,
852
880
  "source": "curated",
853
- "verifiedAt": "2026-03-27T07:00:16.599Z",
881
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
854
882
  "keywords": [
855
883
  "voice",
856
884
  "tts",
@@ -879,7 +907,7 @@
879
907
  "namespace": "wunderland",
880
908
  "verified": true,
881
909
  "source": "curated",
882
- "verifiedAt": "2026-03-27T07:00:16.599Z",
910
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
883
911
  "keywords": [
884
912
  "guardrails",
885
913
  "hallucination",
@@ -907,7 +935,7 @@
907
935
  "namespace": "wunderland",
908
936
  "verified": true,
909
937
  "source": "curated",
910
- "verifiedAt": "2026-03-27T07:00:16.599Z",
938
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
911
939
  "keywords": [
912
940
  "monitoring",
913
941
  "health",
@@ -940,7 +968,7 @@
940
968
  "namespace": "wunderland",
941
969
  "verified": true,
942
970
  "source": "curated",
943
- "verifiedAt": "2026-03-27T07:00:16.599Z",
971
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
944
972
  "keywords": [
945
973
  "image",
946
974
  "editing",
@@ -961,7 +989,7 @@
961
989
  "namespace": "wunderland",
962
990
  "verified": true,
963
991
  "source": "curated",
964
- "verifiedAt": "2026-03-27T07:00:16.599Z",
992
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
965
993
  "keywords": [
966
994
  "image-generation",
967
995
  "ai-art",
@@ -994,7 +1022,7 @@
994
1022
  "namespace": "wunderland",
995
1023
  "verified": true,
996
1024
  "source": "curated",
997
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1025
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
998
1026
  "keywords": [
999
1027
  "instagram",
1000
1028
  "social-media",
@@ -1032,7 +1060,7 @@
1032
1060
  "namespace": "wunderland",
1033
1061
  "verified": true,
1034
1062
  "source": "curated",
1035
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1063
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1036
1064
  "keywords": [
1037
1065
  "linkedin",
1038
1066
  "social-media",
@@ -1070,7 +1098,7 @@
1070
1098
  "namespace": "wunderland",
1071
1099
  "verified": true,
1072
1100
  "source": "curated",
1073
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1101
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1074
1102
  "keywords": [
1075
1103
  "mastodon",
1076
1104
  "fediverse",
@@ -1110,7 +1138,7 @@
1110
1138
  "namespace": "wunderland",
1111
1139
  "verified": true,
1112
1140
  "source": "curated",
1113
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1141
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1114
1142
  "keywords": [
1115
1143
  "memory",
1116
1144
  "cognitive",
@@ -1134,7 +1162,7 @@
1134
1162
  "namespace": "wunderland",
1135
1163
  "verified": true,
1136
1164
  "source": "curated",
1137
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1165
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1138
1166
  "keywords": [
1139
1167
  "guardrails",
1140
1168
  "safety",
@@ -1164,7 +1192,7 @@
1164
1192
  "namespace": "wunderland",
1165
1193
  "verified": true,
1166
1194
  "source": "curated",
1167
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1195
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1168
1196
  "keywords": [
1169
1197
  "rag",
1170
1198
  "multimodal",
@@ -1194,7 +1222,7 @@
1194
1222
  "namespace": "wunderland",
1195
1223
  "verified": true,
1196
1224
  "source": "curated",
1197
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1225
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1198
1226
  "keywords": [
1199
1227
  "notion",
1200
1228
  "wiki",
@@ -1223,7 +1251,7 @@
1223
1251
  "namespace": "wunderland",
1224
1252
  "verified": true,
1225
1253
  "source": "curated",
1226
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1254
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1227
1255
  "keywords": [
1228
1256
  "obsidian",
1229
1257
  "markdown",
@@ -1251,7 +1279,7 @@
1251
1279
  "namespace": "wunderland",
1252
1280
  "verified": true,
1253
1281
  "source": "curated",
1254
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1282
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1255
1283
  "keywords": [
1256
1284
  "voice",
1257
1285
  "wake-word",
@@ -1279,7 +1307,7 @@
1279
1307
  "namespace": "wunderland",
1280
1308
  "verified": true,
1281
1309
  "source": "curated",
1282
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1310
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1283
1311
  "keywords": [
1284
1312
  "pii",
1285
1313
  "privacy",
@@ -1310,7 +1338,7 @@
1310
1338
  "namespace": "wunderland",
1311
1339
  "verified": true,
1312
1340
  "source": "curated",
1313
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1341
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1314
1342
  "keywords": [
1315
1343
  "pinterest",
1316
1344
  "social-media",
@@ -1347,7 +1375,7 @@
1347
1375
  "namespace": "wunderland",
1348
1376
  "verified": true,
1349
1377
  "source": "curated",
1350
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1378
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1351
1379
  "keywords": [
1352
1380
  "voice",
1353
1381
  "tts",
@@ -1374,7 +1402,7 @@
1374
1402
  "namespace": "wunderland",
1375
1403
  "verified": true,
1376
1404
  "source": "curated",
1377
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1405
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1378
1406
  "keywords": [
1379
1407
  "voice",
1380
1408
  "wake-word",
@@ -1405,7 +1433,7 @@
1405
1433
  "namespace": "wunderland",
1406
1434
  "verified": true,
1407
1435
  "source": "curated",
1408
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1436
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1409
1437
  "keywords": [
1410
1438
  "reddit",
1411
1439
  "social-media",
@@ -1446,7 +1474,7 @@
1446
1474
  "namespace": "wunderland",
1447
1475
  "verified": true,
1448
1476
  "source": "curated",
1449
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1477
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1450
1478
  "keywords": [
1451
1479
  "seo",
1452
1480
  "link-building",
@@ -1481,7 +1509,7 @@
1481
1509
  "namespace": "wunderland",
1482
1510
  "verified": true,
1483
1511
  "source": "curated",
1484
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1512
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1485
1513
  "keywords": [
1486
1514
  "deploy",
1487
1515
  "cloud",
@@ -1517,7 +1545,7 @@
1517
1545
  "namespace": "wunderland",
1518
1546
  "verified": true,
1519
1547
  "source": "curated",
1520
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1548
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1521
1549
  "keywords": [
1522
1550
  "slack",
1523
1551
  "messaging",
@@ -1549,7 +1577,7 @@
1549
1577
  "namespace": "wunderland",
1550
1578
  "verified": true,
1551
1579
  "source": "curated",
1552
- "verifiedAt": "2026-03-27T07:00:16.599Z"
1580
+ "verifiedAt": "2026-03-27T10:16:24.338Z"
1553
1581
  },
1554
1582
  {
1555
1583
  "id": "com.framers.skill.spotify-player",
@@ -1562,7 +1590,7 @@
1562
1590
  "namespace": "wunderland",
1563
1591
  "verified": true,
1564
1592
  "source": "curated",
1565
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1593
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1566
1594
  "keywords": [
1567
1595
  "spotify",
1568
1596
  "music",
@@ -1597,7 +1625,7 @@
1597
1625
  "namespace": "wunderland",
1598
1626
  "verified": true,
1599
1627
  "source": "curated",
1600
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1628
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1601
1629
  "keywords": [
1602
1630
  "voice",
1603
1631
  "stt",
@@ -1627,7 +1655,7 @@
1627
1655
  "namespace": "wunderland",
1628
1656
  "verified": true,
1629
1657
  "source": "curated",
1630
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1658
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1631
1659
  "keywords": [
1632
1660
  "voice",
1633
1661
  "stt",
@@ -1658,7 +1686,7 @@
1658
1686
  "namespace": "wunderland",
1659
1687
  "verified": true,
1660
1688
  "source": "curated",
1661
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1689
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1662
1690
  "keywords": [
1663
1691
  "voice",
1664
1692
  "tts",
@@ -1688,7 +1716,7 @@
1688
1716
  "namespace": "wunderland",
1689
1717
  "verified": true,
1690
1718
  "source": "curated",
1691
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1719
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1692
1720
  "keywords": [
1693
1721
  "voice",
1694
1722
  "tts",
@@ -1717,7 +1745,7 @@
1717
1745
  "namespace": "wunderland",
1718
1746
  "verified": true,
1719
1747
  "source": "curated",
1720
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1748
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1721
1749
  "keywords": [
1722
1750
  "structured-output",
1723
1751
  "json",
@@ -1737,7 +1765,7 @@
1737
1765
  "namespace": "wunderland",
1738
1766
  "verified": true,
1739
1767
  "source": "curated",
1740
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1768
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1741
1769
  "keywords": [
1742
1770
  "summarization",
1743
1771
  "text-processing",
@@ -1763,7 +1791,7 @@
1763
1791
  "namespace": "wunderland",
1764
1792
  "verified": true,
1765
1793
  "source": "curated",
1766
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1794
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1767
1795
  "keywords": [
1768
1796
  "threads",
1769
1797
  "social-media",
@@ -1799,7 +1827,7 @@
1799
1827
  "namespace": "wunderland",
1800
1828
  "verified": true,
1801
1829
  "source": "curated",
1802
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1830
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1803
1831
  "keywords": [
1804
1832
  "tiktok",
1805
1833
  "video",
@@ -1836,7 +1864,7 @@
1836
1864
  "namespace": "wunderland",
1837
1865
  "verified": true,
1838
1866
  "source": "curated",
1839
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1867
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1840
1868
  "keywords": [
1841
1869
  "guardrails",
1842
1870
  "topics",
@@ -1863,7 +1891,7 @@
1863
1891
  "namespace": "wunderland",
1864
1892
  "verified": true,
1865
1893
  "source": "curated",
1866
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1894
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1867
1895
  "keywords": [
1868
1896
  "trello",
1869
1897
  "kanban",
@@ -1896,7 +1924,7 @@
1896
1924
  "namespace": "wunderland",
1897
1925
  "verified": true,
1898
1926
  "source": "curated",
1899
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1927
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1900
1928
  "keywords": [
1901
1929
  "twitter",
1902
1930
  "social-media",
@@ -1939,7 +1967,7 @@
1939
1967
  "namespace": "wunderland",
1940
1968
  "verified": true,
1941
1969
  "source": "curated",
1942
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1970
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1943
1971
  "keywords": [
1944
1972
  "video",
1945
1973
  "generation",
@@ -1966,7 +1994,7 @@
1966
1994
  "namespace": "wunderland",
1967
1995
  "verified": true,
1968
1996
  "source": "curated",
1969
- "verifiedAt": "2026-03-27T07:00:16.599Z",
1997
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1970
1998
  "keywords": [
1971
1999
  "vision",
1972
2000
  "ocr",
@@ -1989,7 +2017,7 @@
1989
2017
  "namespace": "wunderland",
1990
2018
  "verified": true,
1991
2019
  "source": "curated",
1992
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2020
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
1993
2021
  "keywords": [
1994
2022
  "voice",
1995
2023
  "speech",
@@ -2016,7 +2044,7 @@
2016
2044
  "namespace": "wunderland",
2017
2045
  "verified": true,
2018
2046
  "source": "curated",
2019
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2047
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
2020
2048
  "keywords": [
2021
2049
  "voice",
2022
2050
  "stt",
@@ -2042,7 +2070,7 @@
2042
2070
  "namespace": "wunderland",
2043
2071
  "verified": true,
2044
2072
  "source": "curated",
2045
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2073
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
2046
2074
  "keywords": [
2047
2075
  "weather",
2048
2076
  "forecast",
@@ -2068,7 +2096,7 @@
2068
2096
  "namespace": "wunderland",
2069
2097
  "verified": true,
2070
2098
  "source": "curated",
2071
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2099
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
2072
2100
  "keywords": [
2073
2101
  "scraping",
2074
2102
  "browser",
@@ -2105,7 +2133,7 @@
2105
2133
  "namespace": "wunderland",
2106
2134
  "verified": true,
2107
2135
  "source": "curated",
2108
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2136
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
2109
2137
  "keywords": [
2110
2138
  "search",
2111
2139
  "web",
@@ -2132,7 +2160,7 @@
2132
2160
  "namespace": "wunderland",
2133
2161
  "verified": true,
2134
2162
  "source": "curated",
2135
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2163
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
2136
2164
  "keywords": [
2137
2165
  "transcription",
2138
2166
  "whisper",
@@ -2195,7 +2223,7 @@
2195
2223
  "namespace": "wunderland",
2196
2224
  "verified": true,
2197
2225
  "source": "curated",
2198
- "verifiedAt": "2026-03-27T07:00:16.599Z",
2226
+ "verifiedAt": "2026-03-27T10:16:24.338Z",
2199
2227
  "keywords": [
2200
2228
  "youtube",
2201
2229
  "video",
@@ -2228,8 +2256,8 @@
2228
2256
  "community": []
2229
2257
  },
2230
2258
  "stats": {
2231
- "totalSkills": 66,
2232
- "curatedCount": 66,
2259
+ "totalSkills": 67,
2260
+ "curatedCount": 67,
2233
2261
  "communityCount": 0
2234
2262
  }
2235
2263
  }