LRCLIB

App · Music & Podcasts · 8 actions

Look up song lyrics on LRCLIB, the free community lyrics database: match a track by title, artist, album and duration, search the catalogue by keyword, read time-synchronised lyrics as timed lines for subtitles or karaoke, check what a track has before acting on it, look up a whole playlist in one step, and publish or flag records. No account or API key required.

Actions

ActionWhat it does
Check whether a track has lyricsAnswer whether LRCLIB holds lyrics for a track, and of which kind (synchronised, plain, or instrumental) without failing the step when it holds none.
Flag lyricsReport a track's current lyrics to LRCLIB for review: wrong words, wrong track metadata, or a copyright violation.
Get lyrics by IDFetch one lyrics record by LRCLIB's absolute track ID, the id returned by a search or by an earlier lookup.
Get lyrics for a trackFind the best matching lyrics for a track by its title and artist, returning both the plain and the time-synchronised words.
Get lyrics for several tracksLook up a list of tracks in one step: a playlist, an album, or a slice of a music library.
Get synced lyricsFetch a track's time-synchronised lyrics as timed lines, each with the second it starts at, ready to drive subtitles, a karaoke display, or a 'what is playing right now' lookup.
Publish lyricsPublish a lyrics record to LRCLIB's public database, which anyone may then read.
Search for lyricsSearch LRCLIB's catalogue, either with a keyword query across every field or by track title, artist and album.

Check whether a track has lyrics

Answer whether LRCLIB holds lyrics for a track, and of which kind (synchronised, plain, or instrumental) without failing the step when it holds none. Use it to decide what a workflow does next; use "Get lyrics for a track" once you know.

Inputs

Track titletrack_nametextRequired
Title of the track.
Artist nameartist_nametextRequired
Name of the artist.
Album namealbum_nametext
Name of the album. Optional, but LRCLIB recommends it: it tells two releases of the same song apart.
Duration (seconds)durationnumber
Track length in seconds (1 to 3600). Optional, but the single biggest improvement to the match: LRCLIB answers only when the length is within 2 seconds of its own record. A mm:ss value such as 3:53 is also accepted.From 1 to 3600.

Outputs

album_nametext
artist_nametext
availabletrue/false
durationnumber
duration_labeltext
has_plain_lyricstrue/false
has_synced_lyricstrue/false
instrumentaltrue/false
reasontext
track_idnumber
track_nametext
Example output
{
  "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
  "artist_name": "Borislav Slavov",
  "available": true,
  "duration": 233,
  "duration_label": "3:53",
  "has_plain_lyrics": true,
  "has_synced_lyrics": true,
  "instrumental": false,
  "reason": null,
  "track_id": 3396226,
  "track_name": "I Want to Live"
}

Flag lyrics

Report a track's current lyrics to LRCLIB for review: wrong words, wrong track metadata, or a copyright violation. Like publishing, this earns LRCLIB's single-use token by solving its proof-of-work challenge, which takes a few seconds of CPU.

Inputs

Track IDtrack_idnumberRequired
LRCLIB's numeric track ID for the record to flag.At least 1.
Reasoncontenttext
Why the record is being flagged. Optional, but it is what a reviewer reads.

Outputs

challenge_attemptsnumber
contenttext
flaggedtrue/false
track_idnumber
Example output
{
  "challenge_attempts": 16951204,
  "content": "The lyrics don't match the audio",
  "flagged": true,
  "track_id": 3396226
}

Get lyrics by ID

Fetch one lyrics record by LRCLIB's absolute track ID, the id returned by a search or by an earlier lookup. Exact, so there is no duration matching to get right.

Inputs

Track IDtrack_idnumberRequired
LRCLIB's numeric track ID. The 'id' of a search result, or of a record an earlier step fetched.At least 1.
Show in the runoutput_detailtext
How much to print into the run output for a person to read. 'The lyrics in full' prints every line; 'A summary line and the opening' prints the first few. This only changes what is displayed, never what is saved: a later step reads the same record either way. Defaults to the lyrics in full.One of: full (The lyrics in full), summary (A summary line and the opening). Default: full.

Outputs

album_nametext
artist_nametext
durationnumber
duration_labeltext
has_plain_lyricstrue/false
has_synced_lyricstrue/false
idnumber
instrumentaltrue/false
lyricsfiletext
output_detailtext
plain_lyricstext
synced_lyricstext
track_nametext
Example output
{
  "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
  "artist_name": "Borislav Slavov",
  "duration": 233,
  "duration_label": "3:53",
  "has_plain_lyrics": true,
  "has_synced_lyrics": true,
  "id": 3396226,
  "instrumental": false,
  "lyricsfile": "version: '1.0'\nmetadata:\n  title: I Want to Live\n\u2026",
  "output_detail": "full",
  "plain_lyrics": "I feel your breath upon my neck\n\u2026",
  "synced_lyrics": "[00:17.12] I feel your breath upon my neck\n\u2026",
  "track_name": "I Want to Live"
}

Get lyrics for a track

Find the best matching lyrics for a track by its title and artist, returning both the plain and the time-synchronised words. Adding the album name and the duration in seconds sharpens the match: LRCLIB only answers when the duration is within 2 seconds of its own record. Fails when LRCLIB has nothing for the track; use "Check whether a track has lyrics" to branch on that instead.

Inputs

Track titletrack_nametextRequired
Title of the track.
Artist nameartist_nametextRequired
Name of the artist.
Album namealbum_nametext
Name of the album. Optional, but LRCLIB recommends it: it tells two releases of the same song apart.
Duration (seconds)durationnumber
Track length in seconds (1 to 3600). Optional, but the single biggest improvement to the match: LRCLIB answers only when the length is within 2 seconds of its own record. A mm:ss value such as 3:53 is also accepted.From 1 to 3600.
Show in the runoutput_detailtext
How much to print into the run output for a person to read. 'The lyrics in full' prints every line; 'A summary line and the opening' prints the first few. This only changes what is displayed, never what is saved: a later step reads the same record either way. Defaults to the lyrics in full.One of: full (The lyrics in full), summary (A summary line and the opening). Default: full.

Outputs

album_nametext
artist_nametext
durationnumber
duration_labeltext
has_plain_lyricstrue/false
has_synced_lyricstrue/false
idnumber
instrumentaltrue/false
lyricsfiletext
output_detailtext
plain_lyricstext
synced_lyricstext
track_nametext
Example output
{
  "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
  "artist_name": "Borislav Slavov",
  "duration": 233,
  "duration_label": "3:53",
  "has_plain_lyrics": true,
  "has_synced_lyrics": true,
  "id": 3396226,
  "instrumental": false,
  "lyricsfile": "version: '1.0'\nmetadata:\n  title: I Want to Live\n\u2026",
  "output_detail": "full",
  "plain_lyrics": "I feel your breath upon my neck\n\u2026",
  "synced_lyrics": "[00:17.12] I feel your breath upon my neck\n\u2026",
  "track_name": "I Want to Live"
}

Get lyrics for several tracks

Look up a list of tracks in one step: a playlist, an album, or a slice of a music library. Each track can be a title and an artist, or just a line of text naming it. Requests go one at a time with the pause LRCLIB asks batch clients for, a track it has nothing for is reported against that track instead of failing the step, and hitting the rate limit stops the run and names the tracks it never reached. Up to 25 tracks per step.

Inputs

TrackstrackslistRequired
The tracks to look up. Give each one a track title and an artist name and LRCLIB matches that exact recording; an album name and a duration in seconds sharpen it further. A track named more loosely, or a plain list of tracks written one per line, is looked up through LRCLIB's search instead.
Include the lyricsinclude_lyricstrue/false
Return each match's plain, synchronised and Lyricsfile bodies. On by default; turn it off to get back only which tracks have lyrics and of what kind.Default: true.
Show in the runoutput_detailtext
How much to print into the run output for a person to read. 'The lyrics in full' prints every line; 'A summary line and the opening' prints the first few. This only changes what is displayed, never what is saved: a later step reads the same record either way. Defaults to the lyrics in full. A long playlist makes that a lot to scroll through, so turn it down to the opening lines when what matters is which tracks were found.One of: full (The lyrics in full), summary (A summary line and the opening). Default: full.

Outputs

found_countnumber
missing_countnumber
not_attemptedlist
output_detailtext
result_countnumber
resultslist
retry_after_secondsnumber
Example output
{
  "found_count": 1,
  "missing_count": 0,
  "not_attempted": [],
  "output_detail": "full",
  "result_count": 1,
  "results": [
    {
      "found": true,
      "matched_by": "signature",
      "reason": null,
      "record": {
        "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
        "artist_name": "Borislav Slavov",
        "duration": 233,
        "duration_label": "3:53",
        "has_plain_lyrics": true,
        "has_synced_lyrics": true,
        "id": 3396226,
        "instrumental": false,
        "lyricsfile": "version: '1.0'\nmetadata:\n  title: I Want to Live\n\u2026",
        "plain_lyrics": "I feel your breath upon my neck\n\u2026",
        "synced_lyrics": "[00:17.12] I feel your breath upon my neck\n\u2026",
        "track_name": "I Want to Live"
      },
      "requested": {
        "album_name": null,
        "artist_name": "Borislav Slavov",
        "duration": 233,
        "query": null,
        "track_name": "I Want to Live"
      }
    }
  ],
  "retry_after_seconds": null
}

Get synced lyrics

Fetch a track's time-synchronised lyrics as timed lines, each with the second it starts at, ready to drive subtitles, a karaoke display, or a 'what is playing right now' lookup. Identify the track by its LRCLIB track ID, or by its title and artist. Fails when LRCLIB only holds untimed lyrics.

Inputs

Track IDtrack_idnumber
LRCLIB's numeric track ID. Given this, the title and artist below are not needed.At least 1.
Track titletrack_nametext
Title of the track. Required unless a track ID is given.
Artist nameartist_nametext
Name of the artist. Required unless a track ID is given.
Album namealbum_nametext
Name of the album. Optional, but LRCLIB recommends it: it tells two releases of the same song apart.
Duration (seconds)durationnumber
Track length in seconds (1 to 3600). Optional, but the single biggest improvement to the match: LRCLIB answers only when the length is within 2 seconds of its own record. A mm:ss value such as 3:53 is also accepted.From 1 to 3600.
Show in the runoutput_detailtext
How much to print into the run output for a person to read. 'The lyrics in full' prints every line; 'A summary line and the opening' prints the first few. This only changes what is displayed, never what is saved: a later step reads the same record either way. Defaults to the lyrics in full.One of: full (The lyrics in full), summary (A summary line and the opening). Default: full.

Outputs

album_nametext
artist_nametext
durationnumber
duration_labeltext
first_line_at_secondsnumber
idnumber
last_line_at_secondsnumber
line_countnumber
lineslist
output_detailtext
synced_lyricstext
track_nametext
Example output
{
  "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
  "artist_name": "Borislav Slavov",
  "duration": 233,
  "duration_label": "3:53",
  "first_line_at_seconds": 17.12,
  "id": 3396226,
  "last_line_at_seconds": 205.72,
  "line_count": 3,
  "lines": [
    {
      "text": "I feel your breath upon my neck",
      "time_seconds": 17.12,
      "timestamp": "00:17.12"
    },
    {
      "text": "The clock won't stop and this is what we get",
      "time_seconds": 200.31,
      "timestamp": "03:20.31"
    },
    {
      "text": "",
      "time_seconds": 205.72,
      "timestamp": "03:25.72"
    }
  ],
  "output_detail": "full",
  "synced_lyrics": "[00:17.12] I feel your breath upon my neck\n\u2026",
  "track_name": "I Want to Live"
}

Publish lyrics

Publish a lyrics record to LRCLIB's public database, which anyone may then read. No account is needed: the step earns LRCLIB's single-use publish token by solving its proof-of-work challenge, which takes a few seconds of CPU. Leaving all three lyrics inputs empty marks the track instrumental. Publishing over an existing record keeps the old revision.

Inputs

Track titletrack_nametextRequired
Title of the track being published.
Artist nameartist_nametextRequired
Name of the artist.
Album namealbum_nametextRequired
Name of the album. LRCLIB requires it here.
Duration (seconds)durationnumberRequired
Track length in seconds (1 to 3600). This is what future lookups match against, so it should be the length of the recording being published. mm:ss is accepted.From 1 to 3600.
Plain lyricsplain_lyricstext
The words, untimed, one line per line.
Synced lyricssynced_lyricstext
The words in LRC format, each line prefixed with its timestamp, e.g. [00:17.12] I feel your breath.
Lyricsfile (YAML)lyricsfiletext
A raw Lyricsfile YAML document. Stored as-is and takes precedence: the plain and synced inputs are ignored when this is filled in.

Outputs

album_nametext
artist_nametext
challenge_attemptsnumber
durationnumber
duration_labeltext
ignored_fieldslist
instrumentaltrue/false
publishedtrue/false
track_nametext
Example output
{
  "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
  "artist_name": "Borislav Slavov",
  "challenge_attempts": 16951204,
  "duration": 233,
  "duration_label": "3:53",
  "ignored_fields": [],
  "instrumental": false,
  "published": true,
  "track_name": "I Want to Live"
}

Search for lyrics

Search LRCLIB's catalogue, either with a keyword query across every field or by track title, artist and album. Returns up to 20 matches with their IDs, durations, and whether each has plain or synchronised lyrics; the lyrics themselves are left out unless asked for, so a search stays a manageable size.

Inputs

Search keywordsqtext
Keywords matched against the track title, artist and album at once. When given, LRCLIB ignores the three field inputs below. Either this or a track title is required.
Track titletrack_nametext
Match against the track's title. Required unless search keywords are given.
Artist nameartist_nametext
Narrow the search to an artist. Only used alongside a track title, not alongside keywords.
Album namealbum_nametext
Narrow the search to an album. Only used alongside a track title, not alongside keywords.
Number of resultslimitnumber
How many matches to return (1 to 20). LRCLIB caps a search at 20 and offers no pagination, so 20 is both the default and the ceiling.From 1 to 20.
Include the lyricsinclude_lyricstrue/false
Return each match's plain, synchronised and Lyricsfile bodies too. Off by default: twenty full sets of lyrics is a lot to carry through a workflow when the next step only needs one of them.Default: false.
Show in the runoutput_detailtext
How much to print into the run output for a person to read. 'The lyrics in full' prints every line; 'A summary line and the opening' prints the first few. This only changes what is displayed, never what is saved: a later step reads the same record either way. Defaults to the opening few lines, since a step can bring back many tracks at once.One of: full (The lyrics in full), summary (A summary line and the opening). Default: summary.

Outputs

ignored_fieldslist
output_detailtext
querytext
result_countnumber
resultslist
searched_bytext
total_matchesnumber
truncatedtrue/false
Example output
{
  "ignored_fields": [],
  "output_detail": "summary",
  "query": "i want to live borislav",
  "result_count": 1,
  "results": [
    {
      "album_name": "Baldur's Gate 3 (Original Game Soundtrack)",
      "artist_name": "Borislav Slavov",
      "duration": 233,
      "duration_label": "3:53",
      "has_plain_lyrics": true,
      "has_synced_lyrics": true,
      "id": 3396226,
      "instrumental": false,
      "lyricsfile": null,
      "plain_lyrics": null,
      "synced_lyrics": null,
      "track_name": "I Want to Live"
    }
  ],
  "searched_by": "keywords",
  "total_matches": 1,
  "truncated": false
}

On this page