Documentation

Basic Song Layout

Songhub supports most of the Chordpro file format.

This include directives in the format {key: value} such as {title: My Song}.
Directives enable you to set data about the songs, such as title, artist, key, capo position, etc. View all supported directives.

Apart from directives, the main bulk of your songs will be main up of chords and lyrics.

Chords & Lyrics

In Songhub, there are 2 ways to write your chords and lyrics.

  1. Write your chords (surrounded by square brackets) inline with the lyrics in front of the letter you want them to be shown above.
  2. Write your chords (without square brackets) on the line above the lyrics, directly over the letter you want them to be shown above.

You can mix and match these 2 methods within the same song. However, you can't mix both methods within the same line.

Chords inline example
[C]Write your [Am]chords in front of the [F]word or let[G]ter
You [C]want them to [F]show a[G]bove
Chords above lyrics example
1          6m                  4         5
Write your chords above of the word or letter
    1            4
You want them to show above

Note: If the chords line doesn't contain just valid chord names and spaces, it will be treated as normal text and displayed as-is.

You can enter chords using the actual name of the chord, for example: C, Am, F, G7, Dm/F, or you can use Nashville numbers, for example: 1, 6m, 4, 5, 2m/4.

Letter chord names

When using letters for chord names, it's recommended to use uppercase for the root note and bass note. This is to avoid confusion with nashville numbers (ie. b7 vs B7). It will first check if it matches nashville numbers, and then check if it matches letter chord names.

Nashville number chord names

You can enter the flat (b) or sharp (#) symbols before or after the number to indicate accidentals, for example: b3, #4, 7b, 5#.

Multi-bracketed chords

There's one other option for adding chords. You can add multiple chords inside one set of square brackets. This is useful for writing out instrumental sections. You can have other text inside too, but anything that's a valid chord name will be converted to a chord, even if it's part of another word.

Multi-bracketed chords example:
[ | 1 / / / | 4 / / / | 6m / / / | 5 / / / | ]

Note: In this format, chords will be displayed inline with the lyrics rather than above. If you want them to display above, just use individual bracketed chords.

Sections

You can seperate your song into sections (eg. Verse, Chorus, Bridge), by leaving a totally blank line (this needs to have no spaces or tabs).

Verse 1
[C]My very short verse

Chorus
[Am]My very short chorus

Verse 1 and Chorus will automatically be seperated into sections because of the blank line between them.

The first line of each section will become the title, unless there is a chord found in the first line, and then the section won't be assigned a title.

Chorus

Specifying a section as a chorus will give the section special styling so that it stands out and is easy to quickly identify.

To specify a section as a chorus, you need start the section with either {start_of_chorus} or {soc}. And you also need to mark the end of the chorus with {end_of_chorus} or {eoc}.

Note that empty lines within the start and end tags will not be seperated into sections, but will shows as blank lines within the chorus itself.

The starting directive can be above or below the section title.

Chorus
{soc}
[C]My very short chorus

[Am]Still in the chorus, despite blank line
{eoc}
Guitar Tabs

To specify a section as a guitar tab, you need start the section with either {start_of_tab} or {sot}. And you also need to mark the end of the tab with {end_of_tab} or {eot}.

Guitar tabs are sections that show up exactly as you type them (including all blank spaces), and have a special style.

Lines will not be wrapped within each guitar tab, but will instead be horizontally scrollable.

Blank lines in this section will make the guitar tab be seperated into multiple sections, which can all be scrolled individually.

Chorus Guitar Part
{sot}
E|------------------|
B|--12--11----------|
G|----------11------|
D|--------------13--|
A|------------------|
E|------------------|
{eot}

Note: guitar tabs won't be changed automatically when transposing key.

Exact sections

You can optionally specify the start and end of a section, which will mean new lines don't separate them into more sections. This is done by marking the start and end of the section.

To mark the start of a section, use either {section} or {sec} or {sos}.

To mark the end of a section, use either {/section} or {/sec} or {eos}.

My section with line breaks
{section}
First Line
Second Line
Third Line

First Line after line break
{/section}
Line Styles

You can apply custom styles to individual lines, such as text colour, background colour, bold font, italics and more.

You do this by adding special characters to the start of the line.

Supported styles
  • Bold: an asterisk * will make the text bold, eg. *This line will display in bold
  • Italic: a forward slash / will italise the line, eg. /This line will be italised
  • Bold & Italic: an exclamation point ! will both italise the line and make it bold, eg. !This line will be italised and displayed in bold
  • Underline: an underscore _ will underline the line, eg. _This line will be underlined
  • Text colour: you can set the text colour by starting with an ampersand &, then putting the colour (in any html supported format), and then finishing with a colon :, eg. &red:This line will be red or &#ff0000:And so will this
  • Highlight (background) colour: you can set the highlight colour by starting with an greater than symbol >, then putting the colour (in any html supported format), and then finishing with a colon :, eg. >yellow:This line will be highlighted with yellow or >#ffff00:And so will this
Combine styles

You can alse combine multiple styles together, such as bold and text colour.

*$red:This line will be both bold and red
Supported Directives

This is list of all the directives that Songhub currently supports:

  • {title: ...} or {t: ...} - the title of the song.
  • {subtitle: ...} or {st: ...} or {artist: ...} - the artist of the song.
  • {key: ...} or {k: ...} - the key of the song, eg. C or Am.
  • {capo: ...} - the capo position for the song.
    • This will auto adjust the chords to be correct for the capo, so a chord of C, with a capo of 3, will show as A when displayed
  • {bpm: ...} or {tempo: ...} - the tempo of the song in beats per minute. Must be a number above zero.
  • {copyright: ...} - copyright information for the song. Displayed at the bottom of the page.
  • {ccli: ...} - the CCLI number of the song. Displayed in the header.
  • {arrangement: ...} or {flow: ...} - the arrangement for the song. See Arrangement for more info.
  • {time: ...} - the time signature for the song. See Time Signatures for more info.
Inline directives

These are directives which show up where you have inserted them in the song.

  • {comment: ...} or {c: ...} - defines a musical instruction.
  • {guitar_comment: ...} or {gc: ...} - defines a musical instruction for guitarists. Will be hidden if guitar tabs are hidden.
Instruction directives

These are directives that inform how the song is displayed, rather than showing up where they are inserted.

  • {transpose: ...} - Re-transpose the song from this point onwards.
    • The value can be a key (eg. C, Am) or a number of semitones (eg. 2, -3).
    • If you use a number, it will transpose relative to the current transposed key.
    • A comment will be inserted showing the new key, eg. {comment: Transpose to D}
Arrangement

You can set a custom arrangement to save rewriting song sections. This is done by using the arrangement or flow directive, and putting a comma seperated list of the section titles.

{arrangement: Verse 1, Verse 2, Chorus, Verse 3, Chorus, Bridge, Chorus}

Note: if a matching section is not found, the text you enter will be inserted as a comment. Also, any text inside double quotes (") will be treated as a comment, eg. {flow: Verse 1, "Repeat Verse 1", Chorus}.

Short Names

As well as using the full name for each section, you can also use the short name. A short name is auto-generated using the first letter of each word in the section title and capitilising it. So Verse 1 would become V1, and Alternate Chorus 2 would become AC2.

If multiple sections have the same short name, the first matching section will be used. So you'll need to use the full name to select the correct section, or change the titles so their short names are unique.

You don't need to use commas if you are using the short names.

{flow: V1 V2 C V3 C B C}
Time Signatures

You can set the time signature for the song using the time directive.

The time signature must be in the format X/Y
- Where X is a number between 1 and 24
- And Y is a number divisible by 2 (e.g. 4, 8, 16), up to 64.

Invalid time signatures will just be ignored.

{time: 4/4}
Misc
Hidden comments

If you want to insert comments that won't be displayed when the song is rendered, just start a line with #.

#This is a hidden note