A simple SVG-based guitar chord renderer.
I originally made ChordBox for a Raycast extension I made - Guitar Chords. It allows me to generate SVG images without the need for an actual browser/DOM (it's using svgdom and SVG.js under-the-hood)
You can either create an instance and configure it with options at the same time, or set/re-set various options sometime later via setter methods.
import { ChordBox } from 'chordbox'
// at the same time
const svgBase64URI = new ChordBox({
title: 'CMaj',
dots: [
{ string: 5, fret: 3 },
{ string: 4, fret: 2 },
{ string: 2, fret: 1 },
]
})
.render()
.toSVGBase64URI()
// sometime later
const chordBox = new ChordBox({
title: 'CMaj',
})
const svgBase64URI = chordBox
.setDots([
{ string: 5, fret: 3 },
{ string: 4, fret: 2 },
{ string: 2, fret: 1 },
])
.render()
.toSVGBase64URI()
// if you want just the svg (non-base64'd)
const chordBoxSVG = chordBox
.setDots([
{ string: 5, fret: 3 },
{ string: 4, fret: 2 },
{ string: 2, fret: 1 },
])
.render()
.toSVG()
render()
must be called in order to generate anything.
You will need to ensure the font, OpenSans-Regular.ttf
, is included in your project root (at ./assets/OpenSans-Regular.ttf'). There is a copy included in the dist/assets/fonts
folder for your convenience.
If, however, you wish to change the location of the font, simply call setFontsDir
on the ChordBox instance before rendering.
import { resolve } from 'path'
import { ChordBox } from 'chordbox'
const svgBase64URI = new ChordBox({
title: 'CMaj'
})
.setFontsDir(resolve(__dirname, 'somewhere/else')) // anywhere you like
.setDots([
{ string: 5, fret: 3 },
{ string: 4, fret: 2 },
{ string: 2, fret: 1 },
])
.render()
.toSVGBase64URI()
You can also, technically, change the font itself - to do so consult the documentation for svgdom.
The main methods are:
As mentioned earlier, there are some setter
methods you can use depending on your requirements.
Setter | Parameter Type | Purpose |
---|---|---|
setFonts() | string | Sets the default font location |
setFrets() | number | Sets the number of visible frets on the ChordBox |
setBaseFret() | number | Sets the first fret shown on the ChordBox |
setDots() | ChordBoxDot[] | Sets the 'dots' to show on the ChordBox |
setBarres() | number[] | Sets which frets should be barred. This is automatically set to stretch from lowest fretted string to highest on the designated fret. |
At some point I will include typedoc
genereated docs for developer-convenience.