diff options
| author | Pinapelz <yukais@pinapelz.com> | 2026-04-17 00:13:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-17 00:13:45 -0700 |
| commit | 9878af2e31c5d087711b4c62a6e2bd8a4235fb16 (patch) | |
| tree | 92d51df06760b819c0b7b6d3b89abd9f5c679d33 | |
| parent | 29fefe94613e4ff8f63c7a1871af8fdf0cd4f656 (diff) | |
Revise README for LRC-Player and LRC-Type
Updated README to clarify app features and usage.
| -rw-r--r-- | README.md | 107 |
1 files changed, 16 insertions, 91 deletions
@@ -2,9 +2,20 @@   -A karaoke-oriented media player. Supports simultaneous playback of a main video/audio file, a secondary audio track, LRC lyrics, and SRV3 (YouTube Timed Text) subtitles. +A web app that does stuff with LRC (lyric) files: +- **LRC-Player** - A karaoke-oriented media player +- **LRC-Type** - A typing-tube.net style game that challenges you to type along with the lyrics -https://github.com/Patchwork-Archive/Patchwork-Karaoke/assets/21994085/5106bb53-d962-45e9-9a6b-6368dd1c6437 +These tools are largely "bring your own media", no user data is stored and all operations occur client side. + +## LRC-Player +- **LRC lyrics** - scrolling line-by-line lyrics with highlight animation +- **SRV3 subtitles** - YouTube Timed Text rendered over the video +- **Dual audio** - mix a main media file with a secondary audio track (e.g. vocals + instrumental) +- **MoekyunKaraoke codes** — shareable codes that load a full session from remote URLs + +## LRC-Type +A typing-tube style game with basic scoring algorithm. Shareable codes available for sharing the same chart. --- @@ -12,97 +23,11 @@ https://github.com/Patchwork-Archive/Patchwork-Karaoke/assets/21994085/5106bb53- ```sh pnpm i -pnpm run dev +pnpm build ``` --- +https://github.com/user-attachments/assets/c38f9dc1-b000-423e-854f-6ac2dd626db6 -## Features - -- **LRC lyrics** — scrolling line-by-line lyrics with highlight animation -- **SRV3 subtitles** — YouTube Timed Text rendered over the video -- **Dual audio** — mix a main media file with a secondary audio track (e.g. vocals + instrumental) -- **Audio/Video balance** — slider to blend the two audio sources -- **Timing offsets** — independently adjust LRC sync and Audio #2 sync in milliseconds -- **Drag and drop** — drop any supported file directly onto the player -- **Resizable panes** — drag the divider between the lyrics and video panels -- **MoekyunKaraoke codes** — shareable codes that load a full session from remote URLs - ---- - -## Supported File Types - -| Slot | Accepted formats | -|------|-----------------| -| Media (file1) | `mp4`, `webm`, `ogg`, `mp3`, `wav`, `flac`, and any format the browser supports | -| Audio #2 (file2) | Same as above | -| Lyrics | `.lrc` | -| Subtitles | `.srv3` (YouTube Timed Text) | - -The purpose of having `Audio #2` is if you want to dynamically change the volume of 2 tracks. As an example, you may want `Media` to be an insturmental, while `Audio #2` to be acapella/vocal-isolated version. This way you can dynamically change the volume of either. - - ---- - -## MoekyunKaraoke Code - -A MoekyunKaraoke code is a **Base64-encoded JSON object** that encodes remote URLs and timing settings for a session. Paste one into the input field on the player page, or pass it as a `?code=` URL query parameter to share a fully-loaded session as a single link. - -### Encoding / decoding - -```js -// Encode -const code = btoa(JSON.stringify(payload)); -// Decode (done internally by the player) -const payload = JSON.parse(atob(code)); -``` - -### Fields - -All fields are optional — include only the ones you need. - -| Field | Type | Description | -|-------|------|-------------| -| `lrc` | `string` (URL) | URL to an `.lrc` lyrics file. Fetched by the player at load time. | -| `srv3` | `string` (URL) | URL to a `.srv3` YouTube Timed Text subtitle file. Fetched by the player at load time. | -| `file1` | `string` (URL) | URL to the main video or audio file. | -| `file2` | `string` (URL) | URL to the supplemental (secondary) audio file. | -| `offset` | `number` (ms) | LRC timing offset in milliseconds. Negative values shift lyrics earlier; positive values shift them later. | -| `offset2` | `number` (ms) | Audio #2 timing offset in milliseconds. | - -### Example payload - -```json -{ - "lrc": "https://example.com/song.lrc", - "file1": "https://example.com/song.webm", - "offset": -800 -} -``` - -Full session with every field: - -```json -{ - "lrc": "https://example.com/song.lrc", - "srv3": "https://example.com/song.srv3", - "file1": "https://example.com/song.webm", - "file2": "https://example.com/instrumental.mp3", - "offset": -800, - "offset2": 120 -} -``` - -### Sharing via URL - -``` -https://your-player-domain.com/?code=eyJsciI6Imh0dHBzOi8v... -``` - -### Notes - -- `lrc` and `srv3` are fetched client-side and require the hosting server to send permissive CORS headers (`Access-Control-Allow-Origin: *`). -- `file1` and `file2` are set as media `src` attributes directly and are subject to the same CORS restrictions for cross-origin URLs. - -> See [`KARAOKE_CODE.md`](./KARAOKE_CODE.md) for the full format reference including code generation examples in JavaScript and Python. +https://github.com/Patchwork-Archive/Patchwork-Karaoke/assets/21994085/5106bb53-d962-45e9-9a6b-6368dd1c6437 |
