Install
openclaw skills install udioGenerate AI music with Udio via API wrappers or browser automation, with prompt engineering and song extensions.
openclaw skills install udioOn first use, read setup.md for integration guidelines.
User wants to generate music with Udio. Agent can use API wrappers for programmatic generation, browser automation for direct platform interaction, or guide prompt engineering.
Memory at ~/udio/. See memory-template.md for structure.
~/udio/
├── [memory.md] # Created on first use: preferences, auth token location
├── [projects/] # Per-project song tracking
└── [songs/] # Downloaded audio files
| Topic | File |
|---|---|
| Setup | setup.md |
| Memory | memory-template.md |
| API usage | api.md |
| Browser automation | browser.md |
| Prompt crafting | prompts.md |
| Style tags | styles.md |
| Lyrics guide | lyrics.md |
| Situation | Method |
|---|---|
| Programmatic generation, batch jobs | API wrapper |
| User wants to browse and listen | Browser automation |
| Just need prompt help | Prompt engineering only |
Udio has no official public API. Community wrappers use the internal API:
sb-api-auth-token cookie from udio.comapi.md for setup instructions[genre] [subgenre] [mood] [instruments] [voice] [era/influence]
Example: "indie folk melancholic acoustic guitar female vocals 90s"
Udio generates ~30 second clips. Build full songs:
Same prompt + different seed = different result. When close to desired output:
pip install udio_wrapper
from udio_wrapper import UdioWrapper
# Initialize with auth token
udio = UdioWrapper("your-sb-api-auth-token")
# Create a song
song = udio.create_song(
prompt="electronic ambient downtempo dreamy synth pads",
seed=-1, # -1 for random
custom_lyrics="Optional lyrics here"
)
# Extend the song
extended = udio.extend(
prompt="add drums and bass, building energy",
audio_conditioning_path=song['song_path'],
audio_conditioning_song_id=song['id']
)
# Add outro
outro = udio.add_outro(
prompt="gentle fade out, conclusion",
audio_conditioning_path=extended['song_path'],
audio_conditioning_song_id=extended['id']
)
npm install udio-wrapper
import { createUdioWrapper } from 'udio-wrapper';
const client = await createUdioWrapper('your-auth-token');
const song = await client.createSong({
prompt: 'indie rock upbeat energetic guitar',
seed: 12345,
customLyrics: 'Optional lyrics'
});
const completed = await client.waitForCompletion(song.id);
console.log('Download URL:', completed.url);
# Generate intro + extensions + outro in one call
complete = udio.create_complete_song(
short_prompt="peaceful acoustic guitar melody",
extend_prompts=[
"add piano and soft strings",
"introduce light percussion, building"
],
outro_prompt="gentle resolution, fading",
num_extensions=2,
custom_lyrics_short="Opening verse...",
custom_lyrics_extend=["Middle section...", "Bridge..."],
custom_lyrics_outro="Final words..."
)
When API isn't available or user prefers visual interaction:
browser action=open targetUrl="https://www.udio.com" profile=openclaw
Cmd+Option+I (Mac) or F12 (Windows)sb-api-auth-token| Genre | Prompt Pattern |
|---|---|
| Electronic | electronic [subgenre] [mood] synth [texture] [era] |
| Rock | [sub]rock [energy] [guitars] [drums] [vocals] [decade] |
| Hip Hop | hip hop [subgenre] [beat style] [sample type] [era] |
| Jazz | jazz [subgenre] [instruments] [setting] [mood] |
| Classical | classical [period] [ensemble] [mood] [dynamics] |
| Energy | Mood Stack |
|---|---|
| High + Positive | euphoric energetic uplifting triumphant |
| Low + Positive | peaceful calm serene contemplative |
| High + Negative | aggressive chaotic intense dark |
| Low + Negative | melancholic somber mournful introspective |
| Complex | bittersweet nostalgic hopeful yearning |
# Female vocals
female vocals ethereal soprano breathy
# Male vocals
male vocals deep baritone raspy emotional
# Choir
choir harmonies gospel powerful anthemic
# No vocals
instrumental only no singing no vocals
| Trap | Problem | Solution |
|---|---|---|
| Vague prompts | "good music" = random | Be specific: genre, mood, instruments |
| Contradictions | "upbeat sad" confuses model | Pick consistent descriptors |
| Token expiry | 401 errors | Re-extract from browser cookies |
| Too many keywords | 20+ terms dilute focus | Use 5-10 key descriptors |
| No seed tracking | Can't reproduce good results | Log seeds for successful generations |
| Abrupt extensions | Jarring transitions | Match style/key in extend prompts |
| Phase | Duration | Prompt Additions |
|---|---|---|
| Intro | 0-30s | "intro, building, atmospheric" |
| Verse/Main | 30s-2m | Original prompt |
| Bridge | 2m-2:30 | "variation, bridge, key change" |
| Outro | Final 30s | "outro, ending, fade, resolution" |
Add to final extend/outro:
This skill creates ~/udio/ on first use:
All data stays local. Auth tokens should be stored in system keychain, not plain text.
This skill does:
~/udio/songs/This skill does NOT:
~/udio/Auth Token: The sb-api-auth-token cookie grants API access to your Udio account. Handle it like a password:
Community Wrappers: The Python and Node wrappers are community-maintained (not official Udio software). Review their source code before installing:
Prompt-Only Mode: If you prefer not to use API or share tokens, this skill works in prompt-only mode — just help with crafting effective prompts without any API calls.
| Endpoint | Data Sent | Purpose |
|---|---|---|
| api.udio.com | Prompts, lyrics | Music generation (via wrappers) |
| udio.com | Browser session | Direct platform access |
Auth token is sent with API requests. No other data leaves the machine.
By using this skill with API wrappers, prompts and lyrics are sent to Udio's servers for music generation. Only use if you trust Udio with your creative content. Review Udio's terms of service at udio.com/terms.
Install with clawhub install <slug> if user confirms:
audio — Audio processing and editingvideo — Combine music with video contentffmpeg — Audio format conversionclawhub star udioclawhub sync