Chart file specifications

A chart file is a JSON file that contains the chart data. For an example of a complete chart file, see the chart of Sunniesnow Sample.

Table of contents

Top-level entries

At the top level of the JSON structure, it is an object with the following keys. All of them are required, although missing values often just trigger a warning instead of an error.

title

The title of the music.

artist

The artist of the music.

charter

The charter of the chart.

difficultyName

The name of the difficulty. In Lyrica equivalents, possible values are "Easy", "Normal", "Hard", "Master", and "Special". However, you are free to use other names.

difficultyColor

The color of the difficulty.

A color source may be a string of <color> CSS data type, or it may be an integer whose hexadecimal representation is the color.

difficulty

The difficulty of the chart. In Lyrica equivalents, possible values are decimal representations of any integers from 1 to 13. However, you are free to use other values.

difficultySup

A superscript shown near the difficulty. Usually either an empty string or "+".

offset

The offset of the chart, in seconds. Usually, this should be zero. This is only used by chart reviewers to adjust the offset after the chart is already made. Chart makers should generally avoid using this and leave it as zero.

sscharter

Used for sscharter integration.

events

The events of the chart. To see how an event object is structured, see Event object.

Event object

An event object is an object with the following keys. All of them are required. Missing values will trigger a warning, and this event object will be ignored.

type

Here is a list of possible values:

See Event types for more information.

time

This specifies the time of the event, in seconds, measured from the start of the music.

It may be negative or greater than the duration of the music, but take note that these events may not be actually included in the chart unless the player specifies start and end to a larger range.

properties

The structure of this object depends on the value of type. Some of the entries of this object are required, while others are optional. If required entries are missing, a warning will be triggered, and this event object will be ignored. If there are unknown entries, a warning will be triggered. See Event types for more information.

Event types

The following sections describe each different type of event, including how their properties are structured.

Tap

A tap event is a tap note. Its coordinates are specified by x and y (see Coordinate system for more information).

If tipPoint is not null, then the tap note will have a tip point. See Tip points for more information.

The property text specifies the text displayed on the tap note.

Hold

A hold event is a hold note. Its coordinates are specified by x and y (see Coordinate system for more information).

The property duration specifies the duration of the hold note, in seconds.

If tipPoint is not null, then the hold note will have a tip point. See Tip points for more information.

The property text specifies the text displayed on the hold note.

Drag

A drag event is a drag note. Its coordinates are specified by x and y (see Coordinate system for more information).

If tipPoint is not null, then the drag note will have a tip point. See Tip points for more information.

Flick

A flick event is a flick note. Its coordinates are specified by x and y (see Coordinate system for more information).

The property angle specifies the angle of the flick note, in radians. Zero angle is to the right, and increasing angle is counterclockwise (as in conventions of mathematics about polar coordinates).

If tipPoint is not null, then the flick note will have a tip point. See Tip points for more information.

The property text specifies the text displayed on the flick note.

Placeholder

A placeholder event basically does nothing, but it can have a tip point by specifying tipPoint. See Tip points for more information.

Background note

A bgNote event is a background note (often called a “ink” by Lyrica players).

Its coordinates are specified by x and y (see Coordinate system for more information).

The property duration specifies the duration of the background note, in seconds.

If tipPoint is not null, then the background note will have a tip point. See Tip points for more information.

The property text specifies the text displayed on the background note.

Big text

A bigText event is a big text. It is one kind of background patterns that are displayed in the center of the screen.

The property text specifies the text displayed on the big text.

The property duration specifies the duration of the big text, in seconds.

Grid

A grid event is a grid. It is one kind of background patterns that are displayed in the center of the screen.

The intersections of grid lines have xx-coordinates and yy-coordinates divisible by 2525, with x-coordinates ranging from 100-100 to 100100 and y-coordinates ranging from 50-50 to 5050, so there are 4545 intersections in total.

The property duration specifies the duration of the grid, in seconds.

Hexagon

A hexagon event is a hexagon. It is one kind of background patterns that are displayed in the center of the screen.

There are three hexagons with different radii. Here list the vertices of each of them:

Checkerboard

A checkerboard event is a checkerboard. It is one kind of background patterns that are displayed in the center of the screen.

The checkerboard has 44 rows of cells and 44 columns of cells. The top-left cell has its center at (37.5,37.5)(-37.5,37.5). The bottom-right cell has its center at (37.5,37.5)(37.5,-37.5). The side length of each cell is 2525.

Diamond grid

A diamondGrid event is a diamond grid. It is one kind of background patterns that are displayed in the center of the screen.

The intersections of grid lines are (25,75)(25,75), (75,75)(75,75), (0,50)(0,50), (50,50)(50,50), (100,50)(100,50), (25,25)(25,25), (75,25)(75,25), (125,25)(125,25), (0,0)(0,0), (50,0)(50,0), (100,0)(100,0), and their reflections about the xx-axis and/or the yy-axis. There are 3535 intersections in total.

Pentagon

A pentagon event is a pentagon. It is one kind of background patterns that are displayed in the center of the screen.

The vertices of the pentagon are (50cos(π/2+2kπ/5),50sin(π/2+2kπ/5))(50\cos(\pi/2+2k\pi/5),50\sin(\pi/2+2k\pi/5)), where k=0,1,2,3,4k=0,1,2,3,4. If you need more explicit expressions, they are (0,50),(±255+52,25512),(±25552,255+12).(0,50),\quad \left(\pm25\sqrt{\frac{5+\sqrt5}2},25\frac{\sqrt5-1}2\right),\quad \left(\pm25\sqrt{\frac{5-\sqrt5}2},25\frac{\sqrt5+1}2\right).

Turntable

A turntable event is a turntable. It is one kind of background patterns that are displayed in the center of the screen.

The turntable has two circles concentric at (0,0)(0,0). Their radii are respectively 2525 and 5050.

Hexagram

A hexagram event is a hexagram. It is one kind of background patterns that are displayed in the center of the screen.

The turntable consists of two triangles whose centers are both (0,0)(0,0) and radii are both 5050 (side lengths 25325\sqrt3). One of the triangles is upright, and the other is upside-down.

Coordinate system

The coordinate system is a Cartesian coordinate system. The origin is at the center of the screen. The positive direction of the xx-axis is to the right, and the positive direction of the yy-axis is to the top, as in conventions in mathematics.

To give you the sense of how large is a unit length, the radius of a note (except drag notes, which are smaller) is 12.512.5.

It is guaranteed that the area [137.5,137.5]×[75,75][-137.5,137.5]\times[-75,75] is visible inside the screen (this is not the case in Lyrica), but it is recommended to keep all notes inside the area [100,100]×[50,50][-100,100]\times[-50,50].

For those events that have x and y in their properties, the two numbers specify the Cartesian coordinates of the center of the event.

Tip points

Some types of events can have tipPoint in their properties, and those events are called tip-pointable events, including tap, hold, drag, flick, placeholder, and bgNote.

Events are connected by one tip point if they have the same tipPoint value in their properties. Those events whose tipPoint is null do not have a tip point connecting them.

A tip point does not have hard limits on how long it exists, how fast it travels, or how many events it connects. It can travel at infinite speed (when connecting two simultaneous events at different positions) or at zero speed (when connecting two non-simultaneous events at the same position).

In Lyrica, there is no such notion as placeholder, and bgNote is not tip-pointable.