.chart file has one track, Expert guitar:
bLRupqmuemBT2XL2bPISQI0F5cZgPLY_BzEpxiKRzDc. The TrackHash of version 20260801 for the same track is ewVfnLFazT8nsQyO09qat4CgKichUepV8yw1mxypxSA.
The file
Every number is little-endian.- Each count is an unsigned 32-bit number, and is written even when it’s 0. Nothing follows the notes.
- The records are those of version 20260801, with the same note types and flags.
- There’s no list of range shifts.
- A file is
40 + 16 × (tempos + time signatures + star power phrases + solos) + 17 × (lanes + drum fills) + 24 × notesbytes long.
The legacy TrackHash
The legacy TrackHash is the BLAKE3 hash of the whole file, from its identifier to its last note: 32 bytes, written in base64url without padding as 43 characters. The tempos are hashed exactly as the file holds them, without rounding. Edge case: scan-chart 8. scan-chart 8.0.1 and earlier write the legacy TrackHash with padding, as 44 characters that end in=. Without the =, it’s the TrackHash.
What Clone Hero 1.1 writes
Clone Hero 1.1 fills the lists as version 20260801 says, from the chart as it reads it. It reads some charts differently from the format pages:
Edge case: scan-chart’s
frozenLegacy6142. scan-chart calculates legacy TrackHashes with its frozenLegacy6142 profile, which agrees with Clone Hero 1.1 for almost every track. It reads some charts differently: a TS with a space at its end, a dnoflip during a d flip, quoted text, a tom marker that covers no note, two notes of one type at one tick, snapped chords, and a .chart file without [Song], which it doesn’t load. It also applies an [ENABLE_CHART_DYNAMICS] event to every note of a later difficulty, writes no empty .mid difficulty but Expert, and reads every .mid track of an instrument. To check a legacy TrackHash, use Clone Hero 1.1.
Telling the versions apart
Both versions start withCHNF, so the 4 bytes of the version tell them apart: C0 D7 34 01 for 20240320, and C1 27 35 01 for 20260801. A reader that reads both chooses by them, and rejects any other version. The next 4 bytes are the resolution in version 20240320 and the section count in version 20260801, and either can be a small number, so they can’t tell the versions apart.
A legacy TrackHash and a TrackHash of version 20260801 are both 43 characters, so a hash alone doesn’t say which it is.