Queue or schedule AI-generated songs directly to your Android phone through the StepAce Experimental app.
Before using this skill, you need to connect it to your StepAce Experimental app:
Open the StepAce Experimental app on your Android phone
Go to Settings (bottom tab)
Tap OpenClaw Bridge
Tap Connect — the app generates a unique pairing token
Copy the pairing token shown on screen
Tell your agent:
"Set my StepAce token to
<paste token here>"
Your agent saves it as STEPACE_TOKEN. You only need to do this once — unless you regenerate your token in the app.
STEPACE_TOKENT2L_****IP0)STEPACE_TOKEN is not set when the user asks to generate music → walk them through setup before proceedingenqueue_generation#Queues a song to generate right now on the phone. Use this by default.
schedule_generation#Queues a song to generate at a specific future time. Use this when the user gives a time or date ("tonight at 2am", "schedule for tomorrow morning", etc.). Requires scheduledAt as a Unix timestamp in milliseconds.
Only caption is required. All others are optional — omit them entirely from the payload if not specified (do not send null or empty values).
ParameterTypeNotescaptionstringRequired. Describe style, mood, genre, instruments. Be descriptive.lyricsstringSong lyrics. Ignored if instrumental: true.instrumentalbooleantrue = no vocals. If true, do NOT send lyrics. If user provides lyrics, set false.bpmintegerTempo, 20–300. Infer from genre if confident (e.g. techno → 132, lo-fi → 85).durationintegerLength in seconds, 5–300. Defaults to ~30s if omitted.keyscalestringKey and scale, e.g. "C minor", "F# major", "A dorian".timesignaturestring"4/4" or "3/4" only.vocal_languagestringBCP-47 tag for vocals. e.g. "en", "es", "pt", "fr", "ja", "ko". Only relevant when instrumental: false. Defaults to "en".
instrumental: false, include lyricsinstrumental: true, omit lyricsinstrumental and lyrics (let the app decide)Endpoint: POST https://openclaw-bridge.torrico-villanueva-cesar-kadir.workers.dev/openclaw/queue Header: Content-Type: application/json
Use curl from the shell as the default/preferred way to call the bridge.
Do not prefer Python urllib/generic HTTP clients when curl is available, because the bridge/CDN may treat those clients differently and reject them even when the same payload works via curl.
Preferred example using curl:
bash
source /home/deploy/.stepace-env
curl -X POST \
'https://openclaw-bridge.torrico-villanueva-cesar-kadir.workers.dev/openclaw/queue' \
-H 'Content-Type: application/json' \
--data '{
"pairingToken": "'"$STEPACE_TOKEN"'",
"type": "enqueue_generation",
"payload": {
"requestJson": {
"caption": "cinematic synthwave with huge drums",
"instrumental": true,
"bpm": 120,
"duration": 30
}
}
}'
Equivalent JSON payload:
json
{
"pairingToken": "{STEPACE_TOKEN}",
"type": "enqueue_generation",
"payload": {
"requestJson": {
"caption": "cinematic synthwave with huge drums",
"instrumental": true,
"bpm": 120,
"duration": 30
}
}
}
Preferred example using curl:
bash
source /home/deploy/.stepace-env
curl -X POST \
'https://openclaw-bridge.torrico-villanueva-cesar-kadir.workers.dev/openclaw/queue' \
-H 'Content-Type: application/json' \
--data '{
"pairingToken": "'"$STEPACE_TOKEN"'",
"type": "schedule_generation",
"payload": {
"requestJson": {
"caption": "dark techno with metallic percussion",
"instrumental": true
},
"scheduledAt": 1775120400000
}
}'
Equivalent JSON payload:
json
{
"pairingToken": "{STEPACE_TOKEN}",
"type": "schedule_generation",
"payload": {
"requestJson": {
"caption": "dark techno with metallic percussion",
"instrumental": true
},
"scheduledAt": 1775120400000
}
}
scheduledAt must be a Unix timestamp in milliseconds (13 digits). Convert from the user's stated time using their local timezone if known, otherwise ask.
json
{
"pairingToken": "{STEPACE_TOKEN}",
"type": "enqueue_generation",
"payload": {
"requestJson": {
"caption": "fast energetic electronic anthem with punchy drums",
"lyrics": "We light the night, we never slow, hearts on fire, we steal the show.",
"vocal_language": "en",
"instrumental": false,
"duration": 30,
"bpm": 160
}
}
}
json
{
"jobRef": "ref_abc123...",
"status": "queued",
"type": "enqueue_generation"
}
Reply to the user with a message like:
text
🎵 Song queued on StepAce Experimental!
Caption: <caption>
📅 Scheduled for: <human-readable time> ← only if scheduled
Settings: 160 BPM · C minor · 4/4 · 30s ← only mention fields that were set
Job ref: ref_abc123...
Your phone will notify you when it's done 🎶
ErrorWhat to doMissing / invalid pairingTokenToken may have expired. Ask user: StepAce Experimental app → Settings → OpenClaw Bridge → Connect to regenerate, then update the token.Missing captionAsk the user to describe the music they want.Missing scheduledAt for schedule_generationAsk the user for a specific date/time.Network errorTell the user the bridge couldn't be reached. Ask them to check their phone is online and the app has been opened at least once.
enqueue_generation, instrumental: true, bpm: 130enqueue_generation, instrumental: false, vocal_language: "es"enqueue_generation, instrumental: true, bpm: 85, duration: 60schedule_generation, resolve scheduledAt from current time + user's timezonetimesignature: "3/4", keyscale: "A minor"vocal_language: "es", infer a relaxed captioninstrumental: true, keyscale: "D minor", duration: 45