Skip to main content
The SongData module defines the structure for song information, charts, and metadata in Friday Night Funkin’.

Core Classes

SongMetadata

Contains information about a song for display in Freeplay and loading chart assets.
Version
required
Semantic versioning string for the song data format
String
default:"Unknown"
Display name of the song
String
default:"Unknown"
Artist who created the song
String
Person who charted the song
Int
default:"96"
Grid divisions for charting
Bool
default:"false"
Whether the song should loop
SongOffsets
Instrumental and vocal offsets relative to the chart
SongPlayData
required
Data relating to the song’s gameplay
String
required
Tool or editor that generated the file
SongTimeFormat
default:"ms"
Time format used in the chart: "ticks", "float", or "ms"
Array<SongTimeChange>
required
Array of tempo and time signature changes

SongPlayData

Defines gameplay-specific song data.
Array<String>
default:"[]"
Available variations of the song (e.g., "erect", "pico")
Array<String>
required
Available difficulties for this song
SongCharacterData
required
Characters used in the song
String
required
Stage ID to use for this song
String
required
Note skin to use
Map<String, Int>
default:"{normal: 0}"
Difficulty ratings as displayed in Freeplay (key is difficulty ID)
String
Album ID to display in Freeplay
String
Sticker pack for transitions
Int
default:"0"
Audio preview start time in milliseconds
Int
default:"15000"
Audio preview end time in milliseconds

SongCharacterData

Information about characters used in a song variation.
String
default:"''"
Player character ID (usually Boyfriend)
String
default:"''"
Girlfriend/spectator character ID
String
default:"''"
Opponent character ID
String
default:"''"
Instrumental variant to use
Array<String>
default:"[]"
Alternative instrumental variants available
Array<String>
Character IDs for opponent vocals
Array<String>
Character IDs for player vocals

SongChartData

Contains chart data for notes and events.
Version
required
Semantic versioning string for chart data format
Map<String, Float>
required
Scroll speeds per difficulty
Array<SongEventData>
required
Song events (camera focuses, animations, etc.)
Map<String, Array<SongNoteData>>
required
Note data per difficulty
String
required
Tool that generated the chart

SongNoteData

Represents a single note in the chart.
Float
required
Timestamp in the song’s time format
Int
required
Note data index. 0-3 for directions (left, down, up, right). floor(d / 4) determines strumline (0 = player, 1 = opponent)
Float
default:"0"
Length for hold notes (0 for tap notes)
String
Note kind for custom behavior (e.g., "mine", "ghost")
Array<NoteParamData>
default:"[]"
Custom parameters for note kinds

SongEventData

Represents a song event.
Float
required
Timestamp in the song’s time format
String
required
Event kind (e.g., "FocusCamera", "PlayAnimation")
Dynamic
Event value/data (structure depends on event kind)

SongTimeChange

Defines tempo and time signature changes.
Float
required
Timestamp of the time change
Float
required
Quarter notes per minute
Int
default:"4"
Time signature numerator
Int
default:"4"
Time signature denominator (should be power of 2)
Float
Beat time for linear calculation
Array<Int>
default:"[4, 4, 4, 4]"
Beat tuplets defining step divisions per beat

SongOffsets

Offsets to correct timing relative to the chart.
Float
default:"0"
Instrumental offset in milliseconds. Negative values start earlier, positive values add silence
Map<String, Float>
default:"{}"
Offsets for alternate instrumentals
Map<String, Float>
default:"{}"
Vocal offsets per character, applied on top of instrumental offset
Map<String, Map<String, Float>>
default:"{}"
Vocal offsets per character for alternate instrumentals

Example: Song Metadata

Example: Chart Data