An LRC file is a plain UTF-8 text file in which each lyric line is preceded by a bracketed timestamp in the form [mm:ss.xx], where mm counts minutes (two or three digits), ss counts seconds from 00 to 59, and xx counts centiseconds from 00 to 99. To create an LRC file from text you already have, paste your lyric lines into a simple-LRC generator, set a starting timestamp and a regular interval, and the tool stamps every line for you in the exact de-facto format that most players parse. The file you download ends in .lrc, contains a centisecond-aligned timestamp before each preserved lyric row, and may carry up to three optional metadata tags — [ti:] for title, [ar:] for artist, and [al:] for album. Because the format is just text plus brackets, any UTF-8 editor can open it, but most music players will only scroll your lyrics if those timestamps actually land on the right beats, which is why a fixed-interval starter file is meant to be retimed per line afterwards in a dedicated editor.

What an LRC File Looks Like in Plain Text
A simple LRC file is built from three building blocks: optional metadata tags at the top, a blank separator line, and a series of timed lyric rows underneath. Each timed row pairs one [mm:ss.xx] timestamp with the lyric text that should appear when the player reaches that point. The minutes field uses two or three digits, the seconds field is always two digits from 00 to 59, a literal period separates them, and exactly two digits after the period encode centiseconds. This de-facto form is widely described, including on the QuickLRC subtitle-formats reference for LRC, and the independent Subforge LRC time module confirms the same arithmetic — minutes contribute 60,000 milliseconds, seconds contribute 1,000, and the two trailing digits represent centiseconds.
A valid header section might look like this:
[ti:Song Title][ar:Artist Name][al:Album Name]
A timed lyric block then continues with rows like:
[00:12.34]First line of the song[00:15.84]Second line of the song[00:19.34]Third line of the song
That structure is the entire contract. Anything more elaborate — enhanced word-level timestamps in angle brackets, karaoke duet markers, three-digit milliseconds, or hour fields — belongs to extended-LRC variants that not every player implements, and a conservative simple-LRC generator deliberately omits them so the file you produce parses the same way across the widest range of players.
Turn Plain Text Into an LRC File: Step by Step
Follow these steps to turn your plain lyric text into a usable .lrc file using the LRC File Generator.
- Open the generator in your browser. The whole workflow runs locally; no sign-up, account, or upload is required, and nothing leaves the current tab.
- Paste your lyric text into the lyrics box, putting exactly one display event on each row. The tool accepts 1–500 non-empty lines, removes blank rows automatically, and rejects control characters rather than letting them slip into a file a player might parse inconsistently.
- Type the first timestamp in MM:SS.xx form. Valid examples include 00:00.00, 09:59.99, 10:00.00, and 123:45.67 — the page enforces the two-second-digits-from-00-to-59 rule and the two-centisecond-digits rule before generation can run.
- Set the interval between consecutive lines. Any value from 0.01 to 600.00 seconds is accepted, with no more than two decimal places. The decimal value is converted to an integer number of centiseconds before any rows are produced, so the addition cannot drift the way binary floating-point arithmetic normally does.
- Optionally fill in the Title, Artist, and Album boxes. These become [ti:value], [ar:value], and [al:value] tags at the top of the file, each trimmed to 120 characters and stripped of square brackets and control characters so a single field cannot inject an extra LRC tag.
- Click Generate and inspect the preview. The preview is the complete, untruncated file — the first and last timestamps are visible inside it, and any edit to your inputs clears the previous preview so you never read a stale result.
- Click Download to save the file with an .lrc extension in UTF-8 without a byte-order mark. The filename is derived from your title when one is supplied; unsafe punctuation becomes hyphens, and a blank title yields synced-lyrics.lrc.
After the download, the file is yours to rename, retime, or load into a dedicated editor.
Inside the Centisecond Math: How the Interval Adds Up
The generator does not listen to your audio or align words to vocals — it just adds your chosen interval, in centiseconds, to your starting timestamp, line by line. Understanding that math helps you predict the exact timestamps in the preview before you download.
Take a starting timestamp of 00:12.34 and an interval of 2.50 seconds. The interval is first converted to an integer number of centiseconds (2.50 × 100 = 250), and that integer is added without further rounding:
- Line 1: 00:12.34
- Line 2: 00:12.34 + 2.50 = 00:14.84
- Line 3: 00:14.84 + 2.50 = 00:17.34
- Line 4: 00:17.34 + 2.50 = 00:19.84
Because the addition uses integer centiseconds throughout, repeated addition cannot accumulate the small drift that binary floating-point arithmetic normally introduces. If the final calculated timestamp would exceed 999:59.99 — the maximum the format allows — generation fails and nothing is silently truncated, so you keep working from your original inputs rather than a half-written file. The same arithmetic applies whether you produce ten lines or the full 500-line maximum; only the starting time and the interval change.
Limits and Validation Rules the Generator Enforces
Because the simple-LRC format is conservative by design, the generator applies a small set of hard limits before it produces any output. Knowing them up front helps you shape your lyric paste so the file is ready on the first click.
| Input | Limit | Why it matters |
|---|---|---|
| Lyric lines | 1–500 non-empty rows, up to 50,000 total characters, ≤500 characters per line | Blank rows are removed; oversized input is rejected before preview. |
| First timestamp | MM:SS.xx with 2–3 minute digits, seconds 00–59, exactly two centisecond digits | Examples: 00:00.00, 09:59.99, 10:00.00, 123:45.67. |
| Maximum timestamp | 999:59.99 | Generation aborts if the final calculated time would exceed it. |
| Interval | 0.01–600.00 seconds, ≤2 decimal places | Converted to integer centiseconds to avoid floating drift. |
| Title / Artist / Album | ≤120 characters each, no square brackets or control characters | Empty fields are omitted entirely. |
| Line endings | CRLF, CR, and LF all accepted | Windows, classic Mac, and Unix input all normalize before generation. |
Anything outside those ranges stops the generation rather than producing a malformed file. The tool never invents lyrics, never pulls a timestamp from a third-party service, and never stores your text after you close the tab.
From Draft to Final: Retiming Against Your Recording
The file you download is a starting draft, not a finished product. Real vocals rarely begin at exactly equal spacing — choruses stretch, verses compress, instrumental breaks leave gaps, and spoken intros arrive early. A fixed-interval file gets you from "no file" to "a file with timestamps on every line", which is the hard part; the fine-grained alignment is for a dedicated lyrics editor that plays back your audio and lets you nudge each timestamp by ear.
A sensible retiming pass looks like this:
- Load the .lrc file and the matching audio into your editor side by side.
- Play from the top, and for each line, scrub to the exact moment the singer starts that phrase.
- Update the bracketed timestamp so it precedes the lyric row by the same small offset your player uses (often a few hundred milliseconds, depending on the player).
- Re-check the chorus, bridge, and any repeated sections, since the same melody often stretches or shortens between passes.
- Save the retimed file next to the audio with the matching base filename so the player pairs them automatically.
Throughout that pass, the lyric text, capitalization, punctuation, and any embedded copyright notices stay exactly as you typed them — the generator does not rewrite language, only places the timestamps.
Why Player Compatibility Still Matters
Different music players implement LRC differently. Some accept the conservative [mm:ss.xx] simple subset without complaint; others look for hour fields, three-digit milliseconds, enhanced word-level timestamps, or proprietary tags that the generator deliberately does not emit. Encodings also vary — the file you download is UTF-8 without a byte-order mark, which suits the vast majority of desktop and mobile players, but a handful of older tools may misread non-ASCII characters if you load the file in an editor that re-saves it as a different encoding.
For that reason, the final step is always the same: open the file in the actual player you plan to use, play the song from the top, and watch whether each line scrolls in time. If the lines appear but are uniformly late or early, add or subtract a small offset from every timestamp in your editor. If a player ignores [ar:] or [al:] entirely, the simple metadata subset is still the safest baseline — it is the part of the format almost every player agrees on.
A practical follow-up if your workflow also needs subtitle-style timing for a video or karaoke track is the SRT-format counterpart; the lyrics SRT walkthrough covers that conversion in detail.