RPE (Re:PhiEdit) is a popular community chart format created for the Re:PhiEdit charting tool. It features rich easing support and an event layer system.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ivan-1f/phichain/llms.txt
Use this file to discover all available pages before exploring further.
File Structure
Field Reference
RpeChart Root
Chart metadata containing song information, authorship, and file references.
Global BPM change points (unlike Official format’s per-line BPM).
Array of judgment lines with event layers.
META Object
RPE format version. Common values:
100, 120.Audio offset in milliseconds (stored as integer).
Song display name.
Audio file path.
Background image path.
Music composer/artist.
Chart creator.
Difficulty level (free-form text).
Unique chart identifier.
BPM Point
Tempo in beats per minute.
Beat position as
[bar, numerator, denominator].Judge Line
Array of event layers. Each layer contains move, rotate, alpha, and speed events.
During import, all event layers are flattened into a single layer. Overlapping events from different layers may produce unexpected results.
Notes attached to this line.
Event Layer
Horizontal position events.
Vertical position events.
Rotation events.
Opacity events (0-255).
Speed events.
Common Event
Used for move, rotate, and alpha events.Event start beat
[bar, numerator, denominator].Event end beat.
Starting value. Type depends on event:
- Position:
number(pixels) - Rotation:
number(degrees) - Alpha:
integer(0-255)
Ending value.
Easing function ID (see Easing Table).
Whether to use custom bezier curve:
0- Use standard easing1- Use bezier curve frombezierPoints
Bezier control points
[x1, y1, x2, y2] for custom easing.Speed Event
Speed events always use linear easing regardless of bezier settings.
Note
Note type:
1- Tap2- Hold3- Flick4- Drag
Note start beat.
Note end beat. Same as
startTime for non-hold notes.Horizontal position in pixels (not normalized like Official format).
Position relative to line:
1- Above2- Below
Note approach speed multiplier.
Note size multiplier. Ignored during import (not supported in Phichain).
How early the note becomes visible. Ignored during import.
Easing Mapping
RPE uses integer IDs for easing functions:| ID | Easing Function | ID | Easing Function |
|---|---|---|---|
| 0 | Linear | 15 | EaseInQuint |
| 1 | Linear | 16 | EaseOutExpo |
| 2 | EaseOutSine | 17 | EaseInExpo |
| 3 | EaseInSine | 18 | EaseOutCirc |
| 4 | EaseOutQuad | 19 | EaseInCirc |
| 5 | EaseInQuad | 20 | EaseOutBack |
| 6 | EaseInOutSine | 21 | EaseInBack |
| 7 | EaseInOutQuad | 22 | EaseInOutCirc |
| 8 | EaseOutCubic | 23 | EaseInOutBack |
| 9 | EaseInCubic | 24 | EaseOutElastic |
| 10 | EaseOutQuart | 25 | EaseInElastic |
| 11 | EaseInQuart | 26 | EaseOutBounce |
| 12 | EaseInOutCubic | 27 | EaseInBounce |
| 13 | EaseInOutQuart | 28 | EaseInOutBounce |
| 14 | EaseOutQuint | 29 | EaseInOutElastic |
phichain-chart/src/format/rpe.rs:130-161
Complete Example
Key Differences from Official
Global BPM List
BPM changes apply globally, not per-line.
Pixel Coordinates
Position values are in pixels, not normalized 0-1.
Rich Easing
30 easing functions plus custom bezier curves.
Rotation Sign
Rotation values are negated during conversion (RPE rotates opposite direction).
Conversion Notes
Event Layer Flattening
RPE supports multiple event layers per line, but Phichain flattens them:Rotation Direction
RPE rotation is negated during conversion:Note Timing
Hold duration is computed from beat difference:Source Code
RPE format implementation:phichain-chart/src/format/rpe.rs
Official Format
Compare with official Phigros format
Easing Functions
Learn about easing functions