Map events are the visual layer of a fluXis map. While hit objects and timing points define when to play, events define what to show — screen flashes, colour shifts, playfield rotations, shader overlays, camera moves, and much more. Events live in a separate file referenced by the map’sDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/InventiveRhythm/fluXis/llms.txt
Use this file to discover all available pages before exploring further.
EffectFile property (typically a .fse file), and they are loaded and sorted by time before gameplay begins. Every event shares the same base property (time) and many also carry group, duration, and ease fields for smooth animated transitions.
time values are in milliseconds from the start of the audio track — the same coordinate space as hit objects and timing points. Events are sorted by time on load, so their order in the JSON file does not matter.Effect file structure
The.fse file is a plain JSON object whose keys correspond to event-type arrays:
Common fields
Nearly every event type includes the following properties:| Field | Type | Description |
|---|---|---|
time | number | Trigger time in milliseconds (required). |
group | string | Optional event group name for use with LoopEvent. Omitted from JSON when empty. |
duration | number | Length of the animated transition in milliseconds (0 = instant). |
ease | Easing | osu-framework easing function (integer or string). 0 = None (linear). Note: laneswitch and pulse use the key easing instead of ease. |
Event types
flash — Screen Flash
flash — Screen Flash
duration milliseconds.JSON key: flashtrue, the flash renders behind the playfield (background layer). When false, it renders in front of everything.#FFFFFF).0.0–1.0, default 1.0).#FFFFFF).0.0–1.0, default 0.0).laneswitch — Lane Count Change
laneswitch — Lane Count Change
speed milliseconds using the specified easing. This is the mechanism behind variable-keymode maps (e.g. alternating between 4K and 7K sections).JSON key: laneswitch0 means an instant switch.OutQuint (value 12).ls-v2: true in the .fsc file to use the improved visibility algorithm that correctly maps finger positions during the switch. All maps created with the modern editor have this flag set automatically.colorfade — Note Color Transition
colorfade — Note Color Transition
duration and ease. Only colour roles with their fade-* flag set to true are affected.JSON key: colorfadetrue, the primary lane colour is transitioned.true, the secondary lane colour is transitioned.true, the middle lane colour is transitioned.0 = primary playfield.pulse — Border Pulse
pulse — Border Pulse
width pixels over the in-phase (in-percent * duration) and shrinks back to zero for the remainder of duration.JSON key: pulseduration used for the expand phase (0.0–1.0). The remaining fraction is used for the collapse.easing (not ease). Defaults to Out.shake — Screen Shake
shake — Screen Shake
shakeshader — Post-Process Shader
shader — Post-Process Shader
strength parameters whose meanings vary by shader type. The transition can animate from start-params to end-params over duration milliseconds.JSON key: shaderShaderType enum):| Name | Description |
|---|---|
Bloom | Additive glow around bright elements |
Greyscale | Desaturates the screen |
Invert | Inverts all colours |
Chromatic | Chromatic aberration (RGB fringe) |
Mosaic | Pixelation / mosaic tile effect |
Noise | Film grain / noise overlay |
Vignette | Dark vignette around screen edges |
Retro | Scanline retro CRT effect |
HueShift | Rotates hue of the entire screen |
Glitch | Glitch blocks — strength1=X, strength2=Y, strength3=block size |
SplitScreen | Tiled mirror — strength2=splits X, strength3=splits Y |
FishEye | Fisheye lens distortion |
Reflections | Recursive reflections — strength2=scale |
Glitch2 | Secondary glitch — strength1=amount, strength2=speed |
true, the shader is instantly set to start-params before animating to end-params.use-start is true.strength, strength2, and strength3 floats.beatpulse — Periodic Zoom Pulse
beatpulse — Periodic Zoom Pulse
strength and returns to normal, repeating every interval beats for as long as the event is active.JSON key: beatpulse1.05 = 5% zoom-in).0.0–1.0.1 = every beat, 2 = every other beat, 0.5 = twice per beat.layerfade — Playfield Layer Fade
layerfade — Playfield Layer Fade
layerfade0.0 = fully transparent, 1.0 = fully opaque).| Value | Name | Description |
|---|---|---|
0 | HitObjects | The note/hold rendering layer |
1 | Stage | The playfield stage background |
2 | Receptors | The receptor key indicators |
3 | Playfield | The entire playfield |
4 | HUD | The score / health HUD overlay |
playfieldmove — Playfield Position
playfieldmove — Playfield Position
duration using the given easing.JSON key: playfieldmoveplayfieldscale — Playfield Scale
playfieldscale — Playfield Scale
1.0 enlarge the playfield; values below 1.0 shrink it.JSON key: playfieldscale1.0 = normal width.1.0 = normal height.playfieldrotate — Playfield Rotation
playfieldrotate — Playfield Rotation
duration.JSON key: playfieldrotate0 only if another playfieldrotate event explicitly sets it.hitease — Hit Object Easing
hitease — Hit Object Easing
InQuad) or decelerate out (OutQuad).JSON key: hiteaseEasing enum value. 0 = None (linear movement, the default).scroll-multiply — Scroll Speed Multiplier (Animated)
scroll-multiply — Scroll Speed Multiplier (Animated)
multiplier over duration ms. Unlike a static ScrollVelocity, this provides a smooth eased transition between speeds.JSON key: scroll-multiplytime-offset — Visual Time Offset
time-offset — Visual Time Offset
time-offsettrue, the offset snaps to start-offset before animating to offset.use-start is true.camera-move — Camera Position
camera-move — Camera Position
camera-scale — Camera Zoom
camera-scale — Camera Zoom
camera-scale1.0 = no zoom, 1.5 = 50% zoom in, 0.8 = slight zoom out.camera-rotate — Camera Rotation
camera-rotate — Camera Rotation
camera-rotateloops — Loop Group
loops — Loop Group
distance milliseconds. This is a compile-time directive — when the effect file is loaded the engine expands all loop events into their constituent copies before sorting.JSON key: loopsgroup name of the events to repeat. All events with a matching group field will be copied.notes — Note Events (Subtitles)
notes — Note Events (Subtitles)
notesQuick-reference table
| JSON key | C# class | Primary purpose |
|---|---|---|
flash | FlashEvent | Full-screen colour overlay |
laneswitch | LaneSwitchEvent | Dynamic lane count changes |
colorfade | ColorFadeEvent | Animate lane note colours |
pulse | PulseEvent | Expanding border ring |
shake | ShakeEvent | Screen shake on impact |
shader | ShaderEvent | Post-process shader effects |
beatpulse | BeatPulseEvent | Periodic zoom pulse |
layerfade | LayerFadeEvent | Fade individual playfield layers |
playfieldmove | PlayfieldMoveEvent | Translate playfield position |
playfieldscale | PlayfieldScaleEvent | Scale playfield dimensions |
playfieldrotate | PlayfieldRotateEvent | Rotate playfield |
hitease | HitObjectEaseEvent | Change note scroll easing |
scroll-multiply | ScrollMultiplierEvent | Animated scroll speed |
time-offset | TimeOffsetEvent | Visual note arrival offset |
camera-move | CameraMoveEvent | Move camera viewport |
camera-scale | CameraScaleEvent | Zoom camera |
camera-rotate | CameraRotateEvent | Rotate camera |
loops | LoopEvent | Repeat event groups |
notes | NoteEvent | On-screen text |
