> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lyrcs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# LRC & SRT Formats

> Understanding the time-synced lyric file formats returned by the API

When `align=true` (the default), lyrcs.ai generates four downloadable files per job: two LRC files and two SRT files. Each format comes in an **original** variant (source language script) and a **transliterated** variant (romanised phonetic form).

## LRC format

LRC (Lyric) is a plain-text format where each line is prefixed with a timestamp in `[MM:SS.ss]` format.

```
[00:12.34]நான் உன்னை நேசிக்கிறேன்
[00:16.80]தெரியாமல் போனேன்
[00:21.15]உன் கண்களில் காணும்
[00:25.50]என் மனசு தொலைந்தது
```

LRC files are supported natively by most music players and karaoke apps and are the standard format for lyric display on streaming platforms.

## SRT format

SRT (SubRip Subtitle) uses a numbered block format with start → end timecodes. It is the standard for video subtitles and is widely supported by video players and editing tools.

```
1
00:00:12,340 --> 00:00:16,800
நான் உன்னை நேசிக்கிறேன்

2
00:00:16,800 --> 00:00:21,150
தெரியாமல் போனேன்

3
00:00:21,150 --> 00:00:25,500
உன் கண்களில் காணும்
```

## Original vs transliterated

| Variant           | Content                                                | Use case                                                                                     |
| ----------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------- |
| `_original`       | Source language script (e.g. Tamil script, Devanagari) | Audiences who read the source script; DSP lyric display in source language                   |
| `_transliterated` | Phonetic romanisation                                  | Audiences who can't read the script; karaoke sing-along; lyric apps for non-native listeners |

The transliterated variant uses the same timestamps as the original — the timing is identical, only the text differs.

## Download URLs

Both variants are available via the `downloads` object on a completed job:

```json theme={null}
"downloads": {
  "lrc_original": "https://lyrcs.ai/api/v1/jobs/{id}/download/lrc/original",
  "lrc_transliterated": "https://lyrcs.ai/api/v1/jobs/{id}/download/lrc/transliterated",
  "srt_original": "https://lyrcs.ai/api/v1/jobs/{id}/download/srt/original",
  "srt_transliterated": "https://lyrcs.ai/api/v1/jobs/{id}/download/srt/transliterated"
}
```

All four URLs require `Authorization: Bearer <key>`.

## When to use which format

| Scenario                               | Recommended format   |
| -------------------------------------- | -------------------- |
| Spotify / Apple Music lyric delivery   | `lrc_original`       |
| Karaoke app (source script display)    | `lrc_original`       |
| Karaoke app (romanised sing-along)     | `lrc_transliterated` |
| Music video subtitles                  | `srt_original`       |
| Subtitle track for non-native audience | `srt_transliterated` |
| Lyrics editor / DAW import             | Either SRT           |

## Not available for align=false jobs

If a job was submitted with `align=false`, no LRC or SRT files are generated. The `downloads` key is omitted from the job response. Use `align=true` (the default) if you need time-synced files.

## Word-level JSON format

When `word_align=true` (the default), lyrcs.ai also generates per-word timestamps alongside the line-level LRC and SRT files. These are returned as a JSON array — one entry per word — from `GET /api/v1/jobs/{id}/download/words/original` and `.../download/words/transliterated`.

Each entry contains the word text and its start timestamp in `[MM:SS.XX]` format:

```json theme={null}
[
  { "word": "मैं",        "timestamp": "[00:08.12]" },
  { "word": "तेरे",       "timestamp": "[00:08.54]" },
  { "word": "बिना",       "timestamp": "[00:08.91]" },
  { "word": "जी",         "timestamp": "[00:09.40]" },
  { "word": "नहीं",       "timestamp": "[00:09.72]" },
  { "word": "सकता",       "timestamp": "[00:10.15]" }
]
```

The `words_transliterated` variant uses the same timestamps mapped to the Roman script words:

```json theme={null}
[
  { "word": "main",       "timestamp": "[00:08.12]" },
  { "word": "tere",       "timestamp": "[00:08.54]" },
  { "word": "bina",       "timestamp": "[00:08.91]" },
  { "word": "ji",         "timestamp": "[00:09.40]" },
  { "word": "nahin",      "timestamp": "[00:09.72]" },
  { "word": "sakta",      "timestamp": "[00:10.15]" }
]
```

**Use cases for word-level timestamps:**

* Karaoke with word-by-word highlight (bouncing ball)
* Accessibility features requiring word-precise sync
* Custom lyric renderers that need sub-line granularity

**Bring your own lyrics:** If you already have lyrics in your catalog and only need word-level timestamps, use `POST /api/v1/align` to skip transcription entirely and align directly against your existing text.

## Known limitations

Audio files in WAV or FLAC format may report `duration_seconds: 0` in the job response. This is a known issue related to ffmpeg metadata extraction and does not affect the quality of the transcript or alignment output. MP3 and M4A files report accurate durations.
