ForHosting KIT · Audio & Voice

Shift karaoke lyrics timing by a global millisecond offset

Move an entire set of karaoke lyrics earlier or later without editing every cue by hand.

● BetaFree · in your browser
Use it from WebAPIEmailTelegramApp soon

Provide the lyric lines in playback order with millisecond timestamps, then choose one positive or negative offset. The tool adds that offset to every timestamp, clamps any result before the beginning of the track to zero, and preserves each line exactly as supplied. It also rejects output whose timestamps would run backward, helping you catch malformed cue order before exporting or publishing synchronized lyrics.

Correct a consistent timing mismatch

A karaoke lyric file can be internally accurate yet consistently early or late. That often happens when an audio master gains a new intro, silence is trimmed from its beginning, or synchronized text is copied from another release of the same recording. Reauthoring every cue is unnecessary when the mismatch is constant. Supply the ordered timestamped lyric lines and enter a signed value in offset_ms. A positive offset delays all lines, while a negative offset moves them earlier. The result returns the same texts in the same sequence with recalculated timestamp_ms values. Because the operation is global, the gaps between cues remain unchanged except where very early negative results meet the start of the track. Work in milliseconds so the adjustment is explicit and repeatable: one second is 1000 milliseconds. Before committing a correction, identify a clear musical reference such as the first vocal onset, measure the difference from the matching displayed line, and use that difference as the offset.

Understand zero clamping and order checks

Audio timelines cannot use a playable time before zero, so every shifted timestamp is clamped with a lower bound of zero. For example, moving cues at 300 and 900 milliseconds earlier by 1000 milliseconds places both at zero rather than producing negative values. Their relative separation is necessarily lost at that boundary, but their input sequence and lyric text remain intact. This behavior is useful when an edit removes more lead-in than the earliest cues contained. After calculating each value, the tool verifies the resulting sequence. Equal timestamps are allowed because multiple lyric lines may intentionally appear together, including several entries clamped to zero. A timestamp lower than the preceding result is an inversion and produces an invalid-input error instead of silently sorting records. That distinction matters: sorting could hide a malformed source and separate semantic line order from author intent. Fix the source ordering or timestamps, then run the shift again. The capability also rejects non-integer, unsafe, negative source timestamps and invalid lyric records.

Use the shifted result safely in a workflow

Treat the returned lines as a corrected timing table that can feed the next stage of your karaoke workflow. Preview them against the exact audio master that will be distributed, paying special attention to the first vocal entry, section changes, and any lines clamped to zero. If the mismatch grows or shrinks across the song, a global offset is not the right correction; that pattern indicates drift, a tempo difference, or edits inside the recording and requires retiming individual cues. Keep your original data so the operation is reversible, and record the chosen offset alongside the edited release. The function is deterministic, performs no network requests, and does not rewrite lyric wording, punctuation, or line order. This makes it suitable for build scripts, batch preparation, and repeatable publishing checks. Through the API, each request costs $0.002; the browser execution uses the same pure calculation. For predictable validation, submit at least one record and no more than the published limit of 10,000 lyric lines per request.

Match lyrics after trimming an intro

Move every cue earlier by the exact duration removed from the beginning of the audio master.

Add room for a new opening

Delay synchronized lines when a countdown, ident, or instrumental lead-in is added before the song.

Normalize a karaoke export

Apply a documented global correction before passing timestamped lines into a subtitle or player export step.

What does a positive offset do?

It delays every lyric line by adding the specified number of milliseconds to each timestamp.

What happens when a negative offset moves a line before zero?

That line receives a timestamp of zero. Negative output timestamps are never returned.

Can multiple lines have the same resulting timestamp?

Yes. Equal timestamps are valid, including when several early lines are clamped to zero.

Why does an inverted order produce an error instead of being sorted?

Automatic sorting could conceal bad source timing and change the intended lyric sequence, so the tool asks you to correct the input.

Can this correct timing drift across a song?

No. A global offset corrects a constant mismatch only; progressive drift requires individual retiming or time scaling.

What does an API request cost?

Each API request costs $0.002. The calculation can also run locally in the browser.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/audio/karaoke-lyrics-sync-shift \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lines":[{"timestamp_ms":1200,"text":"First line"},{"timestamp_ms":3500,"text":"Second line"}],"offset_ms":-1500}'
{
  "lines": [
    {
      "timestamp_ms": 1200,
      "text": "First line"
    },
    {
      "timestamp_ms": 3500,
      "text": "Second line"
    }
  ],
  "offset_ms": -1500
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "audio.karaoke_lyrics_sync_shift",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

max_mb200
max_minutes180
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →