> ## Documentation Index
> Fetch the complete documentation index at: https://chart-spec.enchor.us/llms.txt
> Use this file to discover all available pages before exploring further.

# Differences from GuitarGame_ChartFormats

> Where this specification differs from GuitarGame_ChartFormats, and why.

[GuitarGame\_ChartFormats](https://github.com/TheNathannator/GuitarGame_ChartFormats) describes what games read, and what a program "should" or "may" do. This specification says what a valid file is, with **Required** and **Recommended**, and what a scanner does with each invalid form, so that every file reads the same everywhere. Where Clone Hero and YARG read a file differently, this specification follows one rule, and its pages give each game's reading as an edge case.

So many of the differences are of three kinds:

* **Rules:** something GuitarGame\_ChartFormats allows or recommends is required, recommended, deprecated or invalid here, or the reverse.
* **Corrections:** GuitarGame\_ChartFormats says a game does something it doesn't, or no longer does.
* **Additions:** this specification covers something GuitarGame\_ChartFormats doesn't.

## Song folders

* **`song.ini` is required** in every song folder: see [Files in a song folder](/song-folders). GuitarGame\_ChartFormats calls it common.
* **Only `notes.chart` and `notes.mid` are charts,** in lowercase. A custom name, a `[Y]` or `[F]` suffix and `.midi` are invalid, since no game reads them. A folder with both charts uses `notes.mid`: see [The chart](/song-folders#the-chart).
* **Games find audio by its file name alone.** `[Song]`'s `MusicStream`, `GuitarStream` and the other stream keys are ignored, and no game falls back on them: see [Audio](/song-folders#audio).
* **Every stem plays.** A folder with `drums` and `drums_1` plays both in Clone Hero and YARG; GuitarGame\_ChartFormats says `drums` is ignored. A folder should hold only one of them.
* **`preview` and `crowd` audio are deprecated,** and a folder holds one file for each audio name: see [Deprecated](/song-folders#deprecated).
* **Album art is recommended as `album.png`, at 512 by 512 pixels.** Several background images are allowed, and a game shows one at random. `video.webm` is the recommended video. The `cover`, `background` and `video` keys of `song.ini` are read by YARG alone. See [Art and video](/song-folders#art-and-video).
* **Additions:** the [`.sng` format](/sng), and the [charting guidelines](/charting-guidelines).

## song.ini

* **`[Song]` doesn't fill gaps in `song.ini`.** When `song.ini` loads, a scanner takes the song's text metadata from it alone, even for a key it leaves out. `[Song]`'s `Offset`, `PreviewStart` and `PreviewEnd` are read only when `song.ini` doesn't set `delay`, `preview_start_time` or `preview_end_time`, and the two files must agree: see [`[Song]`](/chart/song). GuitarGame\_ChartFormats prefers `song.ini` key by key.
* **Deprecated keys:** `delay`, `hopo_frequency`, `eighthnote_hopo`, `multiplier_note`, `frets` and `track`. `end_events` and `hopofreq` are ignored. `pro_drum` and `star_power_note` are older names, read only when the main key has no line. `sustain_cutoff_threshold` stays standard, though a new chart should leave it out. See [Settings](/ini/settings#deprecated) and [Metadata](/ini/metadata).
* **Values are stricter:** see [Syntax](/ini/reading-rules#values). A blank value and `-1` are invalid, and read as a missing key: to leave a value unset, leave its key out. A comment starts with `;`, and `#` is invalid. No key takes a decimal number. **Recommended:** `True` and `False` for booleans, which are the only booleans in a `.sng` file.
* **`delay` with a decimal point** is invalid, and read as seconds, as Clone Hero reads it: `delay = 1.5` is 1500 milliseconds. See [Settings](/ini/settings).
* **`year` is the album's year,** and `Year = "2002"` is the recommended `[Song]` form. The `, ` before it stays valid.
* **Additions:** [`preview_end_time`](/ini/metadata), part credits, `explicit_lyrics`, `diff_keys_ghl`, `chord_snap_threshold`, `ignored_issues`, the keys only YARG reads, and how style tags show.

## .chart files

* **The layout is required,** where GuitarGame\_ChartFormats describes what readers accept: see [Syntax](/chart/syntax). `[Song]` comes first and `[SyncTrack]` second. A section's header, `{` and `}` each stand alone on a line. One space separates the parts of a line. Numbers have no sign. Names match in exact letter case. A section name appears once, and a scanner reads the first copy.
* **Ticks never go backwards** in a section. GuitarGame\_ChartFormats recommends it; Clone Hero refuses a file that breaks it.
* **A tempo marker and a time signature at tick 0 are recommended, not required.** Without them, a chart plays at 120 BPM and 4/4 until its first marker, in every game: see [The start of the chart](/chart/sync-track#the-start-of-the-chart).
* **Text events are written without square brackets** in both formats, such as `E section Intro`, and brackets stay valid: see [`[Events]`](/chart/events).
* **`end` comes at least a beat after the last note,** and a chart has at most one. See [The end of the song](/chart/events#the-end-of-the-song).
* **`prc_` section names are deprecated:** write `section`.
* **Ignored:** versus phrases, `S 0` and `S 1`; `H` events; and the `[Song]` keys of older tools.
* **Additions:** a flam, [`N 109`](/chart/drums#flams), and [range shifts](/chart/instrument-sections#range-shifts), `E ld_range_shift`. Both extend the `.chart` format itself, where GuitarGame\_ChartFormats advises a new file extension for any extension.
* **Additions:** the byte order marks, the ISO-8859-1 fallback, and the white space a scanner trims, on [Syntax](/chart/syntax#encoding), and the five steps of [How notes resolve](/chart/note-resolution), with chord snapping.

## Phrases

* **On 5-fret, `S 64` at or after the coda is a Big Rock Ending, `S 65` a tremolo lane and `S 66` a trill lane,** as notes 120, 126 and 127 are in a `.mid` file. GuitarGame\_ChartFormats has lanes on drums only. See [Phrases](/chart/phrases).
* **A lane covers its end tick,** and lanes may overlap.
* **A `.mid` lane has four velocity tiers:** 21 to 30 on every difficulty, 31 to 40 on Medium and up, 41 to 50 on Hard and up, and any other velocity on Expert alone. See [Lanes](/mid/phrases#lanes).
* **A Big Rock Ending needs only note 120.** Notes 121 to 124 are optional, and span the same ticks as 120. See [Drum fills](/mid/phrases#drum-fills).
* **Solos read as star power** only in a track with two or more solos and no star power note, on 6-fret too. `multiplier_note` is deprecated: see [Solos](/mid/phrases#solos).
* **Additions:** every phrase covers a note, and one of length 0 covers the notes on its tick; what scanners do with overlapping phrases, nested solos and empty ones.

## .mid files

* **A track has one name,** a track name event as its first event at tick 0, in capitals: see [Track names](/mid/structure#track-names). Clone Hero names a track by its last name at tick 0, not its first. An instrument has at most one track, and with two, the first counts.
* **Text is `FF 01`, in UTF-8,** in `EVENTS` and instrument tracks. GuitarGame\_ChartFormats counts every meta event from `FF 01` to `FF 0F` as text, which no reader does. Lyrics are `FF 05`, or `FF 01`: see [Text](/mid/structure#text).
* **Square brackets around text events are optional, and the recommended form has none,** which reverses GuitarGame\_ChartFormats' advice. A range shift keeps its brackets. See [EVENTS track](/mid/events).
* **[Note pairing](/mid/note-pairing)** is new: at a shared tick, the note-off comes first. Overlapping notes of one number are invalid, and read as Clone Hero reads them.
* **Running status kept across meta and SysEx events is valid,** since every reader keeps it. GuitarGame\_ChartFormats calls it a fault.
* **The header's track count must match the tracks,** and a scanner reads every track anyway. GuitarGame\_ChartFormats calls the count metadata only.
* **A Phase Shift SysEx event counts only at exactly 8 bytes:** see [The Phase Shift SysEx event](/mid/modifiers#the-phase-shift-sysex-event).
* **A tap covers its end tick,** as GuitarGame\_ChartFormats says. YARG doesn't tap a note there, so an exporter keeps notes off that tick: see [Taps](/mid/modifiers#taps).
* **`T1 GEMS` and `PART DRUM` are deprecated,** and the `BEAT` track is ignored.

## Drums

* **A scanner decides the drum type in one fixed order,** pro before 5-lane: see [Drum types](/chart/drums#drum-types). `pro_drums = False` means the same as no key, and `five_lane_drums = True` with `pro_drums = True` is invalid, and reads as 5-lane.
* **A `.mid` tom marker makes a chart pro only when it covers a note:** see [Drum types](/mid/drums#drum-types).
* **Sustained notes don't make a chart 5-lane** in any game, and a drum note's length has no effect.
* **Kicks have no accents or ghosts,** in either format.
* **A double kick, `N 32`, is recommended only in `ExpertDrums`,** and `N 0` with `N 32` at one tick is invalid.
* **The recommended disco flip spelling is `mix 3 drums0d`,** without brackets. Other spellings read as Clone Hero reads them, and a missing configuration digit isn't "no stems". A `dnoflip` while a `d` flip is on is invalid, and `easy` and `easynokick` are ignored. See [Disco flip](/chart/drums#disco-flip).

## Vocals

* **`PART HARMn` names are deprecated:** write `HARM1` to `HARM3`, in order. See [Vocals and harmonies](/mid/vocals).
* **A phrase holds notes and lyrics through its end tick,** unless the next phrase starts there.
* **Each 106 phrase matches a 105.** Note 97 is ignored, and `[range_shift]` text is deprecated.
* **Only Clone Hero's formatting tags go in angle brackets** in a lyric, so `<whistle>` is invalid.

## Hashes

GuitarGame\_ChartFormats doesn't cover hashes. This specification adds [BTrack and TrackHash](/hashes/btrack), [SongHash](/hashes/songhash), and the obsolete [BTrack 20240320](/hashes/btrack-20240320).

## Not covered

This specification covers the song folders that Clone Hero and YARG play. GuitarGame\_ChartFormats also documents Phase Shift, Rock Band, Guitar Hero 1 and 2, Frets on Fire X, Editor on Fire and DJ Hero, and the `.mid` tracks of pro guitar, pro keys, real drums and venue. A scanner ignores those tracks: see [Ignored](/mid/instrument-tracks#ignored).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.