Overview
The music_manager_device sits at the heart of UEFN's Patchwork music system. Every Patchwork device on your island — omega synthesizers, note sequencers, note triggers — synchronizes its tempo and key to whichever music_manager_device is active. Think of it as the metronome and key signature rolled into one placed device.
When to reach for it:
- You want to start a dramatic boss-fight theme when a player enters a combat zone.
- You need to silence all Patchwork music when a cutscene plays.
- You want to toggle between two musical moods by enabling one manager and disabling another.
- Any time you need runtime control over whether your Patchwork instruments are playing.
The Verse API is intentionally minimal: Enable() starts the device (and all synchronized Patchwork instruments resume following it), and Disable() stops it. All the richness lives in the UEFN editor settings — tempo, key, time signature — which you configure on the placed device itself.
API Reference
music_manager_device
Provides a shared tempo, key, and timeline for Patchwork devices to follow.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse). Inherited members are merged from patchwork_device.
music_manager_device<public> := class<concrete><final>(patchwork_device):
Methods (call these to make the device act):
| Method | Signature | Description |
|---|---|---|
Enable |
Enable<public>():void |
Enables this device. |
Disable |
Disable<public>():void |
Disables this device. |
Walkthrough
Scenario: A dungeon island where eerie ambient Patchwork music plays from the start. When a player steps on a pressure plate to open the boss vault, the ambient music cuts out and the boss battle theme kicks in. When the boss is defeated (a second button press for simplicity), the battle music stops and the ambient track resumes.
You'll need:
- Two
music_manager_deviceplacements: one configured as the ambient theme, one as the boss theme. - One
button_deviceacting as the "vault plate" trigger. - One
button_deviceacting as the "boss defeated" trigger.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/Patchwork }
using { /Verse.org/Simulation }
# Controls ambient vs boss Patchwork music based on game events.
# Wire up two music_manager_devices and two button_devices in the editor.
boss_music_controller := class(creative_device):
# The ambient Patchwork music manager — enabled at game start.
@editable
AmbientMusic : music_manager_device = music_manager_device{}
# The boss battle Patchwork music manager — disabled at game start.
@editable
BossMusic : music_manager_device = music_manager_device{}
# A pressure plate / button the player steps on to enter the boss vault.
@editable
VaultPlate : button_device = button_device{}
# A button that signals the boss has been defeated.
@editable
BossDefeatedButton : button_device = button_device{}
OnBegin<override>()<suspends> : void =
# Ambient music plays from the start; boss music is silent.
AmbientMusic.Enable()
BossMusic.Disable()
# Subscribe to both player-triggered events.
VaultPlate.InteractedWithEvent.Subscribe(OnVaultEntered)
BossDefeatedButton.InteractedWithEvent.Subscribe(OnBossDefeated)
# Called when a player steps on the vault plate.
OnVaultEntered(Activator : agent) : void =
# Cut the ambient track — silence the Patchwork conductor.
AmbientMusic.Disable()
# Start the boss battle theme.
BossMusic.Enable()
# Called when the boss is defeated.
OnBossDefeated(Activator : agent) : void =
# Silence the battle music.
BossMusic.Disable()
# Restore the ambient atmosphere.
AmbientMusic.Enable()
Line-by-line breakdown:
| Lines | What's happening |
|---|---|
@editable AmbientMusic |
Exposes the ambient music_manager_device slot in the UEFN Details panel so you can drag your placed device in. |
@editable BossMusic |
Same for the boss theme manager. |
AmbientMusic.Enable() |
Tells the Patchwork system to start following this manager's tempo/key — all instruments linked to it begin playing. |
BossMusic.Disable() |
Ensures the boss theme is silent at game start. |
VaultPlate.InteractedWithEvent.Subscribe(OnVaultEntered) |
Registers our handler so it fires whenever any agent interacts with the vault plate button. |
OnVaultEntered(Activator : agent) |
Handler receives the agent who triggered the plate. We don't need to use them here, but the signature must match listenable(agent). |
AmbientMusic.Disable() |
Stops the Patchwork conductor — all instruments following this manager go silent. |
BossMusic.Enable() |
Activates the boss conductor — its linked instruments start playing in sync. |
OnBossDefeated |
Reverses the swap: boss music off, ambient music on. |
Common patterns
Pattern 1 — Enable music at game start, disable on round end
A simple battle-royale-style device that starts music when the experience begins and cuts it when a trigger fires (e.g., a game-over zone).
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/Patchwork }
using { /Verse.org/Simulation }
# Starts Patchwork music at game launch and silences it on a trigger.
round_music_device := class(creative_device):
@editable
RoundMusic : music_manager_device = music_manager_device{}
# A button_device wired to a game-over zone or end-round trigger.
@editable
EndRoundTrigger : button_device = button_device{}
OnBegin<override>()<suspends> : void =
# Music starts immediately when the experience launches.
RoundMusic.Enable()
EndRoundTrigger.InteractedWithEvent.Subscribe(OnRoundEnd)
OnRoundEnd(Activator : agent) : void =
# Silence all Patchwork instruments following this manager.
RoundMusic.Disable()
Pattern 2 — Toggle music on and off with a single button
Useful for a jukebox prop or a mute button in a creative hub. A single button_device alternates between enabling and disabling the manager each press.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/Patchwork }
using { /Verse.org/Simulation }
# Jukebox toggle: one button press starts the music, next press stops it.
jukebox_toggle_device := class(creative_device):
@editable
JukeboxMusic : music_manager_device = music_manager_device{}
@editable
JukeboxButton : button_device = button_device{}
# Track whether music is currently playing.
var MusicPlaying : logic = false
OnBegin<override>()<suspends> : void =
# Start silent; player chooses when to play.
JukeboxMusic.Disable()
JukeboxButton.InteractedWithEvent.Subscribe(OnJukeboxPressed)
OnJukeboxPressed(Activator : agent) : void =
if (MusicPlaying?):
JukeboxMusic.Disable()
set MusicPlaying = false
else:
JukeboxMusic.Enable()
set MusicPlaying = true
Pattern 3 — Swap between two managers (mood transition)
Two distinct Patchwork setups — a calm exploration theme and an intense combat theme — swap instantly when a player enters a danger zone button.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/Patchwork }
using { /Verse.org/Simulation }
# Swaps between a calm and combat Patchwork music manager.
mood_swap_device := class(creative_device):
@editable
CalmMusic : music_manager_device = music_manager_device{}
@editable
CombatMusic : music_manager_device = music_manager_device{}
# Button in a danger zone that triggers the mood swap.
@editable
DangerZoneButton : button_device = button_device{}
# Button in a safe zone that restores calm music.
@editable
SafeZoneButton : button_device = button_device{}
OnBegin<override>()<suspends> : void =
CalmMusic.Enable()
CombatMusic.Disable()
DangerZoneButton.InteractedWithEvent.Subscribe(OnEnterDanger)
SafeZoneButton.InteractedWithEvent.Subscribe(OnEnterSafe)
OnEnterDanger(Activator : agent) : void =
CalmMusic.Disable()
CombatMusic.Enable()
OnEnterSafe(Activator : agent) : void =
CombatMusic.Disable()
CalmMusic.Enable()
Gotchas
1. music_manager_device inherits from patchwork_device, not creative_device_base directly.
The Enable and Disable methods live on patchwork_device. This is fine for calling them, but be aware the type hierarchy is music_manager_device → patchwork_device → creative_device_base. Don't try to cast it to a plain creative_device.
2. Disabling the manager silences ALL linked Patchwork instruments.
Disable() doesn't pause — it stops the conductor entirely. Every omega synthesizer, note sequencer, and note trigger that references this manager goes silent immediately. If you want a graceful fade, you'll need to handle that in your Patchwork device settings, not in Verse.
3. You must configure tempo, key, and time signature in the editor — not in Verse.
The Verse API has no methods for setting BPM or key at runtime. All musical properties are set on the placed music_manager_device in the UEFN Details panel before publishing. Verse only controls whether the device is running.
4. Multiple active managers can conflict.
If two music_manager_device instances are both enabled simultaneously and Patchwork instruments are linked to both, the results are undefined. Always Disable() one before calling Enable() on another when doing a swap.
5. @editable is mandatory — you cannot construct a music_manager_device in code.
Writing music_manager_device{} as a field default is only valid as a placeholder for the editor slot. The real device must be dragged in from your placed scene objects in the UEFN Details panel. A field with no placed device assigned will reference the empty default and Enable()/Disable() calls will have no audible effect.
6. No events on this device.
Unlike many Creative devices, music_manager_device exposes zero events — it cannot notify your Verse code when a loop completes or a bar changes. If you need beat-synced logic, you'll need to use a note_trigger_device or timer-based approach instead.