Help us improve
Share bugs, ideas, or general feedback.
From summer
Generates looped or cinematic music tracks via ElevenLabs Music, wired as AudioStreamPlayer on the Music bus. Use for level loops, boss themes, cutscenes, or menu music.
npx claudepluginhub summerengine/summer-engine-agent --plugin summerHow this skill is triggered — by the user, by Claude, or both
Slash command
/summer:music-trackaudio/music/**scripts/****/*.tscnThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
ElevenLabs Music renders 10–300 seconds of music from a prompt. The output quality depends entirely on prompt specificity: tempo (BPM), key, instrumentation, mood, structural cue. "Epic orchestral" returns generic stock music. "85 BPM, D minor, solo cello and detuned upright piano, sparse, melancholic, no drums, 4/4" returns a usable score for a melancholic exploration scene.
Defines a game's sonic identity by building an audio bible at .summer/audio-bible.md. Pins music style, SFX vocabulary, dynamic music plan, and spatial/mix rules from reference tracks and art direction.
Transforms musical intentions into commercial-quality Suno AI prompts using a 5-layer structure for genre, mood, instrumentation, production, and use case.
Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.
Share bugs, ideas, or general feedback.
ElevenLabs Music renders 10–300 seconds of music from a prompt. The output quality depends entirely on prompt specificity: tempo (BPM), key, instrumentation, mood, structural cue. "Epic orchestral" returns generic stock music. "85 BPM, D minor, solo cello and detuned upright piano, sparse, melancholic, no drums, 4/4" returns a usable score for a melancholic exploration scene.
This skill produces one track aligned with the audio bible's music style and dynamic music plan, then wires it as an AudioStreamPlayer on the Music bus with a marked loop point if it's a loop, or as a linear cinematic stream if it's a one-shot.
audio/sound-effect with class Stinger.audio/adaptive-music.audio/ambient-bed.Read .summer/audio-bible.md
The bible names the primary style, tempo range, key center, time signature, and the dynamic music model. This skill writes prompts that respect those numbers.
If no bible exists:
No
.summer/audio-bible.md. Music without an audio bible drifts into stock-library territory. Run/audio-directionfirst, or I can ship a one-off with explicit defaults — your call.
Ask if not obvious:
Which slot in the dynamic music plan? Calm exploration, tension, combat, boss, victory, menu, ending, or one-off cutscene?
Each slot has different rules:
| Slot | Tempo | Energy | Instrumentation density | Loop or linear |
|---|---|---|---|---|
| Calm exploration | bible low end (e.g. 70–90) | Low | Sparse | Loop, ≥45s |
| Tension | mid (e.g. 90–110) | Medium, no drums or sparse pulse | Adds one instrument | Loop, ≥45s |
| Combat | high (e.g. 120–150) | High, full drums | Full | Loop, ≥45s |
| Boss | high or low-and-menacing | Distinct from combat | Distinct, named instrument | Loop, ≥60s |
| Victory sting | n/a | Resolution | n/a | Linear, 4–8s (use SFX skill instead) |
| Menu / title | bible mid | Atmospheric | Anchor instrument | Loop, ≥30s |
| Cutscene | varies | Linear arc | Varies | Linear, 60–180s |
| Ending | varies | Linear arc with resolution | Varies | Linear, 60–300s |
Prompts that work:
85 BPM, D minor, 4/4, solo cello and detuned upright piano, sparse, melancholic
exploration loop, no drums, gentle reverb, even dynamics, 60s
128 BPM, D dorian, 4/4, full orchestral combat, low brass ostinato, taiko drums
on 1 and 3, strings tremolo, urgent, no melodic resolution, 60s loop
90 BPM, A minor, 6/8, lo-fi exploration, vintage Rhodes electric piano,
tape hiss, warm bass, soft brushed snare, no vocals, 45s loop
70 BPM, F minor, 4/4, ambient menu loop, pad layer, distant choir, single
piano motif every 8 bars, no drums, 30s loop with seamless return
110 BPM, C minor harmonic, 4/4, dark synthwave boss intro, gated reverb snare,
arpeggiated bass synth, lead saw on melody, builds to cymbal swell at 0:50,
linear 60s, ends on sustained pad
Prompts that DON'T work (and why):
| Bad prompt | Failure mode |
|---|---|
epic orchestral combat music | No tempo, no key, no instrumentation. Generic stock. |
Hollow Knight style track | The model can't reference IPs and won't try to clone style words. |
hopeful but sad menu music with strings and stuff | "Strings and stuff" is vague; model picks the wrong section. |
something for the boss fight | No tempo, no key, no mood vector. Random. |
loop (just the word) | No structure. Returns 30s of music that doesn't loop. |
Tempo (BPM) — name a single number, not a range. Music model interprets ranges as mid-point with drift. 85 BPM is better than 80–90 BPM.
Key — name mode (D minor, D dorian, D natural minor, C minor harmonic). The bible's modulation rules go here: combat tracks shift to dorian, calm tracks to natural minor.
Instrumentation — name 2–4 specific instruments, not sections. solo cello not strings. upright piano not keys. Rhodes electric piano not electric piano. The model's vocabulary is closer to a session musician's than a producer's.
Mood — concrete adjectives anchored to motion: melancholic and slow, urgent and driving, triumphant and rising. Avoid genre adjectives like epic, chill, hype.
Structural cue — for linear tracks, name the arc: builds at 0:30 to a hit at 0:50, decays. For loops, name the cell: 4-bar phrase repeats, instrument swap every 8 bars.
| Choose loop when | Choose linear when |
|---|---|
| The slot plays for an unbounded time (level, menu, exploration) | The slot has a known length (cutscene, intro, ending) |
| Player attention is on gameplay | Player attention is on the music |
| You want to layer adaptive stems on top later | The arc is the point |
For loops: generate ≥30s, prefer 45–60s. Shorter loops are recognized as repetition within 90s of play and become annoying. The bible's "no state stays >90s without variation" rule means even a 60s loop should contain internal variation (instrument swap on alternating cycles).
For linear: generate ≥60s for cutscenes, up to 300s for endings. The model handles long arcs better than people expect; ask for one rendered piece rather than splicing.
Show the prompt:
Prompt:
85 BPM, D minor, 4/4, solo cello and detuned upright piano, sparse, melancholic exploration loop, no drums, gentle reverb, 60s loopDuration 60s. Cost: ~12 credits. Generate?
summer_generate_audio(
capability: "music",
prompt: "85 BPM, D minor, 4/4, solo cello and detuned upright piano, sparse, melancholic exploration loop, no drums, gentle reverb, 60s loop",
durationSeconds: 60
)
// Result: { asset: { fileUrl, ... } }
// Then: summer_import_from_url(url: "<fileUrl>", path: "res://audio/music/calm_exploration.mp3")
durationSeconds range is 10–300.
ElevenLabs Music does not return a loop-clean cut. You must mark the loop point in Godot's import dock so playback returns to the loop point on completion, not to 0:00.
In audio/music/calm_exploration.mp3.import:
[params]
loop = true
loop_offset = 0.0
loop_mode = 0 # 0=disabled, 1=forward, 2=ping-pong, 3=backward
If the start has a fade-in but the body is loopable, set loop_offset = 4.0 (4 seconds of intro skipped on loop, plays full track first time).
For seamless looping, the cleaner option is to ask the model to generate a cell (one bar / one phrase) and concatenate; or generate at 60s and trust the model's structural cue. Crossfade looping in code is the practical fallback (see step 9).
AudioStreamPlayer on the Music bussummer_add_node(parentPath="/root/Game", type="AudioStreamPlayer", name="MusicCalm")
summer_set_prop(path="/root/Game/MusicCalm", property="stream", value="res://audio/music/calm_exploration.mp3")
summer_set_prop(path="/root/Game/MusicCalm", property="bus", value="Music")
summer_set_prop(path="/root/Game/MusicCalm", property="volume_db", value=-8.0)
summer_set_prop(path="/root/Game/MusicCalm", property="autoplay", value=true)
Music is AudioStreamPlayer (not 2D / 3D) — non-positional. The bible's Music -8 dB mix sits the music behind SFX where it belongs.
If the loop click bothers the user, use a two-player crossfade:
# scripts/audio/MusicLoopCrossfade.gd
extends Node
@export var stream: AudioStream
@export var fade: float = 1.0
var _a: AudioStreamPlayer
var _b: AudioStreamPlayer
var _active: AudioStreamPlayer
func _ready() -> void:
_a = _make_player()
_b = _make_player()
_active = _a
_active.play()
_active.finished.connect(_on_finished)
func _make_player() -> AudioStreamPlayer:
var p := AudioStreamPlayer.new()
p.stream = stream
p.bus = "Music"
p.volume_db = -8.0
add_child(p)
return p
func _on_finished() -> void:
var next := _b if _active == _a else _a
next.play()
next.finished.connect(_on_finished, CONNECT_ONE_SHOT)
_active = next
The next instance starts at 0:00 the moment the previous finishes — gapless.
Calm explore (folk): 78 BPM, D minor, 6/8, fingerpicked acoustic guitar,
upright bass on 1, soft hand percussion, no melody on
first 8 bars, 60s loop
Tension (orchestral): 95 BPM, D dorian, 4/4, low strings sustained, single
timpani roll every 8 bars, sparse french horn motif,
no drums, 60s loop
Combat (orchestral): 140 BPM, D dorian, 4/4, taiko drums on 1 and 3,
ostinato low brass, strings tremolo, urgent and driving,
no melodic resolution, 60s loop
Boss (synthwave): 110 BPM, C minor harmonic, 4/4, gated snare, arpeggio
bass synth, lead saw on melody, builds at 0:50,
linear 60s
Menu (lo-fi): 70 BPM, F minor, 4/4, vintage Rhodes, tape hiss,
soft brushed snare, single piano motif every 8 bars,
45s loop
Cutscene (cinematic): varies tempo, D minor, 4/4, solo piano opens,
strings enter at 0:20, full orchestra at 0:50,
decay to solo piano at 1:30, linear 120s
epic, chill, hype — meaningless.Master bus at 0 dB. Buries SFX. Use Music bus at -8 dB.loop_offset, or in an audio editor.no vocals, instrumental only to the prompt.Print the prompt and instruct the user to run via the Summer dashboard, then summer_import_from_url the rendered MP3.
Track
calm_exploration.mp3wired toGame/MusicCalmon theMusicbus, autoplay on. Next:
- Mark the loop point in the import dock if the bible calls for looped playback.
- Generate the tension and combat counterparts with
/music-trackagain.- To wire state-driven crossfades between calm / tension / combat, run
/adaptive-music.
audio/audio-direction — defines style, tempo, key, modelaudio/adaptive-music — wiring stems to game stateaudio/sound-effect — short stingsaudio/ambient-bed — non-melodic location bed