Creating synced lyrics means producing a plain text file in which each lyric line is preceded by a timestamp a music player reads aloud in time with the track. The de-facto simple LRC format writes that timestamp as [mm:ss.xx] — minutes, seconds, and two centisecond digits — directly before the lyric text on the same line, for example [01:23.45]Example line, and that single line is everything a basic player needs to display the next row at the right moment. You can build this kind of file without uploading audio, recording vocals, or running an alignment model: enter each display line once, choose a starting timestamp, pick a fixed interval between rows, and the tool stamps each line in order. Because the timing is regular, the output works as a draft that you can later retime inside your chosen player, and the rest of the contract is just disciplined text — bounded line counts, validated timestamp shapes, UTF-8 download, and optional metadata tags for title, artist, and album.

create synced lyrics
Create Synced Lyrics from Text with a Fixed Interval

What a simple synced lyrics file actually contains

A synced lyrics file is a small UTF-8 text file with the .lrc extension. Inside it, every timed line follows the shape [mm:ss.xx]Lyric text, where the bracketed portion is the display time and the text after it is what the player shows on screen at that moment. According to QuickLRC's format documentation, this de-facto form is the most widely supported variant and is exactly what most desktop and mobile players expect when they advertise LRC support.

The arithmetic behind each timestamp is also fixed. Per the Subforge time implementation, minutes contribute sixty thousand milliseconds, seconds contribute one thousand, and the fractional two digits represent centiseconds. So 01:23.45 means one minute, twenty-three seconds, and forty-five hundredths of a second. The generator does not emit hour fields, colon-separated frames, three-digit milliseconds, or any word-level enhanced LRC syntax; it sticks to this conservative subset so the file behaves predictably across the broadest range of players.

Optional metadata lines can sit at the top of the file using three recognised tags: [ti:title] for title, [ar:artist] for artist, and [al:album] for album. A blank line separates that header block from the timed rows beneath, but the timed rows themselves remain ordinary plain text, so a player can skip straight to [mm:ss.xx] entries without parsing the tags first.

Set up the generator inputs

Before pressing the generate button, gather three pieces of information: the lyric text, a starting timestamp, and a fixed interval.

  • Lyric text: one display event per row, between 1 and 500 non-empty lines, no more than 50,000 characters total, and at most 500 characters on any single line. Blank rows are removed automatically. Windows, classic Mac, and Unix line endings are normalized before generation so you can paste from any source.
  • Start timestamp: a single MM:SS.xx value with 2 or 3 minute digits, exactly two second digits from 00 to 59, a period, and exactly two centisecond digits. The minute field can reach 999, so very long recordings are still covered.
  • Interval: a positive decimal between 0.01 and 600.00 seconds with at most two decimal places. The value is converted to an integer number of centiseconds before any rows are produced, so repeated addition does not accumulate binary floating-point drift.

You can also fill in the optional title, artist, and album boxes if you want the header tags. Each of those values is trimmed, limited to 120 characters, and rejected if it contains square brackets or control characters, preventing a single field from injecting an extra LRC tag into the file.

Build a timed draft with the LRC File Generator

Open the LRC File Generator in a browser tab and follow the steps below. Everything runs locally in your tab; no lyric text is uploaded, stored against an account, or sent to a remote service.

  1. Paste or type each lyric line into the lyrics box, one display event per row. Aim for the moment a singer actually finishes a thought rather than the moment they inhale.
  2. Enter the first MM:SS.xx timestamp where the first line should appear, then enter the interval in seconds that the next line should follow it by.
  3. Fill in the optional title, artist, and album boxes if you want [ti:], [ar:], and [al:] tags at the top of the file, or leave them blank to omit those header lines entirely.
  4. Click the generate control to produce the complete simple LRC text. The preview shows the exact file contents, including any header tags and the first and last [mm:ss.xx] timestamps, and editing any input clears the previous preview so you always read fresh output.
  5. Inspect the preview for the first and last timestamps and confirm the math reaches the end of your song without exceeding the 999:59.99 boundary.
  6. Click Download to save the same string as a UTF-8 .lrc file with no byte-order mark. The filename is derived from the title when one is available, with unsafe punctuation replaced by hyphens, or synced-lyrics.lrc when no title is given.
  7. Open the downloaded file beside the exact recording in your target player or a dedicated LRC editor, and adjust individual line timestamps by hand. The fixed interval is only a draft; real vocals almost never begin at perfectly equal spacing.

Read the start and interval values

The start timestamp and the interval combine into a single arithmetic rule. The interval is converted to integer centiseconds and then added once per row index, so each successive timestamp is a deterministic increment of the previous one. For a 00:12.34 start and a 2.50-second interval, three lines receive 00:12.34, 00:14.84, and 00:17.34.

That sequence comes out as follows. The starting time is 12.34 seconds, which is 1,234 centiseconds. The 2.50-second interval is 250 centiseconds. Adding 250 to 1,234 gives 1,484 centiseconds, which formats back to 00:14.84. Adding another 250 gives 1,734 centiseconds, which formats back to 00:17.34. The whole sequence is integer arithmetic, so the same inputs always produce the same output and the result never drifts the way repeated floating-point addition can.

If your song is long enough that the final calculated timestamp would exceed 999:59.99, generation fails rather than silently truncating. The guide to start-time and interval math walks through that boundary case and how to split the file when a single run cannot cover the full duration.

Add optional ti, ar, and al metadata

Three header tags are recognized: [ti:value] for title, [ar:value] for artist, and [al:value] for album. Each value is trimmed, capped at 120 characters, and validated to contain no square brackets or control characters, so a stray bracket in an artist name cannot be mistaken for a new tag by the parser.

If you leave all three fields empty, the header block is omitted entirely and the file begins with the first [mm:ss.xx] row. If you fill in only one or two, only those tags appear, followed by a blank line, followed by the timed rows. The timed rows themselves are not modified in any way — the generator does not rewrite spelling, punctuation, capitalization, language, or copyright notices inside ordinary lyric text.

For a deeper walk through turning plain text into a timed output, the plain-text to timed output guide covers the same flow with extra examples.

Limits that change whether generation succeeds

Several bounds either produce a working file or block generation entirely, so it helps to know them in advance.

Input Limit Behaviour when exceeded
Non-empty lyric lines 1 to 500 Generation requires at least one valid row
Total input characters up to 50,000 Generation rejects larger payloads
Characters per single row up to 500 Generation rejects longer lines
Start timestamp shape 2 or 3 minute digits, 2 second digits (00–59), 2 centisecond digits Generation fails if the format does not match
Interval value 0.01 to 600.00 seconds, two decimal places max Generation rejects out-of-range or longer decimals
Final calculated timestamp must not exceed 999:59.99 Generation fails; nothing is silently truncated
ti, ar, al values trimmed, 120 chars, no brackets, no control characters Generation rejects values that violate those rules

Control characters anywhere in the input are rejected rather than inserted into a text file that a player may parse inconsistently. The contract is intentionally small on purpose: only the de-facto centisecond timestamp subset is validated, so anything outside that subset stays the responsibility of the player and the workflow you choose later.

A few timestamp shapes are valid by construction and worth keeping handy:

Example start value Meaning
00:00.00 Song start, zero centiseconds offset
09:59.99 Just under ten minutes, highest valid seconds value
10:00.00 Exactly ten minutes, three-digit minute field
123:45.67 Long recording, three-digit minute field accepted

Test the file in your target player

The LRC format is not an official universal standard; it is a de-facto family of related formats, and individual players are free to support different subsets. Some players recognize the [ti:], [ar:], and [al:] tags and surface them as track information; others ignore those lines completely. Some handle minute values above 99 cleanly, while others wrap or reject them. A few accept UTF-8 text; a few still expect a specific legacy encoding.

Because of that variation, the safe move is to drop the downloaded file into the player you actually intend to use, load the matching recording, watch the first few lines land where you expect, and adjust any line that drifts. Once you confirm the player reads the file the way you want, you can either keep that single file or treat it as a draft for a more finely retimed version produced in a dedicated editor.

All arithmetic, validation, and file generation happen inside your current browser tab. The lyrics you enter are not uploaded to Lizely, stored in an account, or sent to an AI service, and the temporary download object URL is revoked after direct use and when the component unmounts, so an older file cannot remain presented as the result of newer text. You remain responsible for having permission to reproduce and distribute the lyric text you enter; the utility does not supply copyrighted lyrics, search a catalog, identify a song, confirm ownership, or grant a synchronization license. It simply formats the text you provide.