Skip to content

Releases

Lavender v0.1.1

Choose a tag to compare

@github-actions github-actions released this 09 Nov 22:05

💜 If you enjoy Lavender, a star on this repo goes a long way, and if you'd like to help me afford to keep developing it, consider donating.

Buy Me a Coffee

✨ Added

  • 📂 Removing a library folder keeps its scan: add the folder back and its tracks return with their lyrics and lookup history without reading every file's tags again, and only files that changed in the meantime are rescanned. The folder chooser lists these saved scans with their track counts, with a button to add one back or forget it.
  • 🍺 Macs can install and update Lavender with Homebrew: brew install --cask iamprivacy/lavender/lavender.

🐛 Fixed

  • 🎤 Lyrics stay with their song after a full rescan, or after music is removed and other music added; before, a new track could show the lyrics of a removed one.
  • 🐛 Switching to a different library folder and refreshing no longer fails with a long error full of question marks when the old folder held many tracks.

🔐 Verify

Asset SHA-256
Lavender-0.1.1-1.x86_64.rpm cb6e10d1733e452283d04455d0a419cb0c9144feb4f18a68602be329bf71ada1
Lavender-0.1.1-1.x86_64.rpm.sig 524dfe06d12543ccda09e6a570e32de3ac4f593194e1939cc4d4b9e4a423ce88
Lavender_0.1.1.flatpak 1c4cfb635030fe01d91a1e16bbe225d97b3512f9f27b26b48782b7a42916e58b
Lavender_0.1.1_aarch64.dmg f05631f198d583da2c806a077e3a4e3dd6a1e637c0f45d5ebd65c49c79ba8825
Lavender_0.1.1_amd64.AppImage 072e7d74631c8417799ca0ad9da2f4c29c13e15d0c404fa1b5ff10cf5eaf8afd
Lavender_0.1.1_amd64.AppImage.sig ee7351285fbd5641b1b72c805e6522c5cab147383c2bb7b0a2d3ef28481702ed
Lavender_0.1.1_amd64.deb 82971353b15725a3e1ac767ddab6f2ec225a25cb70dc75a68232b4b659f206d8
Lavender_0.1.1_amd64.deb.sig 95aa6ad4f97e901e71756d1f022c968f44a5eb8995c6f5c69e8126c98d7b97c9
Lavender_0.1.1_x64-setup.exe 60e0a52cdd8c09471dbe7322d8f8d905ecc6654f31a5e4d01b7991f2a328f7e3
Lavender_0.1.1_x64-setup.exe.sig 0056c2eaad3e5a4a5895da75e93dbed371b0e3701ab0c0828718028814d49c55
Lavender_0.1.1_x64.dmg 11494d51014206de402b7cec293f0b8415424db33b8eaa152ce1b0bfcbd63c7e
Lavender_0.1.1_x64_en-US.msi 9e4b7bd14c28b790c645a67cd3f8d289d50a68f26dab4fe529d14f68b64fa1a6
Lavender_0.1.1_x64_en-US.msi.sig 35f7a16ad003c6198e53755e380d6dc3d6f6dae0111223a4f5eb8a84d2f95805
Lavender_aarch64.app.tar.gz 4226bf9eadf387a79a6fa124dd37a2a502fc200acc386b0b84528354582e6bc9
Lavender_aarch64.app.tar.gz.sig 019b14e48ed5f558881858ef7d3489b0704deae723e58557d527b4c8cff2a03d
Lavender_x64.app.tar.gz ecb9f195a3824f6847c28ed1e6e12d63abf12897f200d8679e8aa5c769f986cf
Lavender_x64.app.tar.gz.sig 37733ffc56d051051f1495f9a06698dc944b2462a4161dae924fd420da05d8a7
latest.json c2cd7dc0652cad17ad1ca0034b53a56eef74b5eb545dd340ceec8dfe003f63fa

SHA256SUMS lists these hashes, and SHA256SUMS.sig is a minisign signature over it, made with the Lavender release key. The app installs an update only after this signature and the hash of the download both match. The public key, also compiled into every build:

RWQxlZAQAK7g5fERs9rsa+Y9qgWcaY5kBoCrB8wttQwI0wp6bUvOediI

To check a download yourself (base64 -D on older macOS):

base64 -d SHA256SUMS.sig > SHA256SUMS.minisig
minisign -Vm SHA256SUMS -x SHA256SUMS.minisig -P RWQxlZAQAK7g5fERs9rsa+Y9qgWcaY5kBoCrB8wttQwI0wp6bUvOediI
shasum -a 256 --ignore-missing -c SHA256SUMS

Lavender v0.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 03:42

💜 If you enjoy Lavender, a star on this repo goes a long way, and if you'd like to help me afford to keep developing it, consider donating.

Buy Me a Coffee

First Lavender release, based on LRCGET 2.2.2. Everything LRCGET does is still here; with the lyrics source set to Online LRCLIB and the extra sources off, lyrics are looked up exactly as LRCGET looks them up.

✨ Added

  • 💾 A Local database lyrics source: point Lavender at a copy of the LRCLIB database dump and mass downloads, the per-track lyrics search and My LRCLIB previews run against your own disk, following the LRCLIB server's own matching rules.
  • 🔎 Local search uses the search index that ships inside the dump, with the best matches first; a dump without a usable index gets exact title searches and online keyword searches, and Lavender tells you so once.
  • 🌐 If not found locally, try online LRCLIB (on by default) asks lrclib.net for the tracks the local database cannot answer; a missing database (an unplugged drive, say) is reported once and picked up again when it is back.
  • 🗄️ A database card in Settings shows the file, its size, the number of tracks and lyrics, the dump date and whether a search index is available; the dump is opened read-only and never modified, so it can live on an external drive.
  • ⬇️ Check for a newer dump reads LRCLIB's dump listing and downloads the archive over up to 8 connections with live speed and progress; a download can be stopped and resumed later from its partial file, even after closing the app, the finished file is checked against the expected size, and an update never deletes a file it did not download.
  • 📦 The .gz archive is decompressed in the app with a progress bar (an archive you downloaded yourself works too), even with Settings closed, and your current database stays in use until the new one is downloaded, decompressed and checked.
  • 💽 A disk-space check before a download shows how much space the archive and the new database need and warns when the chosen folders do not have it.
  • 🎯 Tolerant local matching (on by default) retries a miss while allowing for several artists joined with commas or "&", "(feat. ...)" credits on one side only, version tags such as "(Radio Edit)" or "- Live", explicit badges and the same recording filed under another album; an exact match with plain lyrics only gives way to a synced copy of the same performance filed under another album spelling. Each tolerant match says how it matched in the download log.
  • 🧭 A content score decides among rows the metadata rules rank alike, before the length gap: sanity checks on the timed lines (no timing, too few lines, stamps past the end, stopping early, stacked duplicates, a credits line), then how many other uploads of the song agree with the timing, then word sync over line sync. The mass download, the Search Lyrics dialog and Upgrade all rank by it, a local exact match shared by several rows is picked the same way, and a live, acoustic or demo take never outranks a row of the recording the file holds.
  • 🥇 The per-track Search Lyrics dialog puts the rows a mass download would accept first, in the download's own order (artist, album, synced over plain, content, closest length), and marks the first one "Best match"; local mode only, the rest of the list stays as it was.
  • ⏭️ Skip tracks already not found in this database leaves out the tracks the current dump could not answer on the next mass download; a track counts again after a retag, a newer dump or more lookup options, online misses are asked again after 14 days. The download dialog shows how many tracks were left out.
  • ⬆️ A fourth "Download lyrics for" choice, Upgrade to the best match (local mode): plain lyrics get synced ones from the local database, then online LRCLIB and the extra sources you turned on (synced only); synced lyrics are replaced only by a row of the local database that ranks above the row they came from, and lyrics you edited or got elsewhere are kept (lyrics picked from this database in Search Lyrics can be replaced by a higher-ranked row); an .lrc already next to the music is never rewritten, and each kept track says why in the download log.
  • 🧠 An Upgrade run remembers each track it looked at and kept (with the files it wrote), so the next Upgrade run leaves it out, the way misses are already left out; the track is looked at again when its lyrics, tags, the database, the lookup settings or the export selection change. The popup's checkbox and the settings page count these next to the remembered misses, and Clear empties both.
  • 🎹 Mark titles tagged (Instrumental) as instrumental (on by default, local only): a track whose title ends in "(Instrumental)", "[Instrumental Version]" or "- Instrumental", behind an explicit or clean badge too, is marked instrumental without taking lyrics text from the local database, since a dump row with words for an instrumental is a wrong upload.
  • 🔞 A "Lyrics edition" setting on the Lyrics source page: uncensored lyrics unless the file's title or album says Clean (the default), always uncensored, or always clean. The local database and the extra sources rank the other edition last, by a "(Clean)" or "[Explicit]" badge, Apple Music's own rating, or words masked with asterisks ("b***h"), and an extra source asks its next candidates when the first answer masks words; Upgrade replaces stored lyrics with masked words by an uncensored text, whoever wrote them. Online LRCLIB answers are passed on as they come.
  • 🎵 Optional extra lyrics sources: when LRCLIB has nothing for a track, Lavender can ask the AMLL TTML database, Apple Music, NetEase Cloud Music and QQ Music, in that order, in local and online mode alike (all off by default, held to the same title, length and artist rules); credit lines are dropped and a duet's singer marks are kept. Publishing and flagging always go to LRCLIB.
  • 🍎 Apple Music uses your own subscription: you sign in with Apple in a private window inside Lavender, and Lavender keeps only the sign-in token. The API is unofficial and using it is against Apple Music's terms, as the settings page says.
  • 🔤 Word-synced lyrics from the AMLL database, Apple Music and NetEase keep a timestamp per word, so the player highlights each word as it is sung, and .lrc export can carry the word timestamps (enhanced LRC) when you turn it on.
  • 🗃️ A mass download is kept by Lavender itself, not by the page: its queue, counts and log survive a reload of the window and a restart of the app. A run the app was closed on (or crashed on) is shown again as "Download interrupted" with how many tracks are done, and Resume continues with the rest; Discard forgets it.
  • ⏸️ The download dialog has Pause and Resume, and the library header shows a paused run; a paused run is kept until it is resumed or discarded, even across a restart.
  • 📶 When the lyrics source cannot be reached (the connection dropped, the local database's drive went away), the download waits and tries the same track again, with growing pauses up to a minute, instead of logging every remaining track as not found. The dialog says what it is waiting for.
  • 🔁 A finished run with tracks not found offers "Retry not found", which queues those tracks again.
  • 💡 With "Automatically export lyrics" off, the download popup says that lyrics stay in Lavender until they are exported, since other music players only see lyrics saved as files next to the music.
  • 🌸 A start-up screen shows the Lavender name over falling buds while the library opens.
  • 🔄 An in-app update check (off until you turn it on) finds a new Lavender release and installs it only after the release's signed checksum list and the download's hash both match, and only the package that list names for your system.
  • 💜 A lavender colour palette, a songbook-and-sprig icon and an app identifier of its own, so Lavender installs side by side with LRCGET with its own settings and library.
  • 🔐 Every release ships a SHA256SUMS file to verify each download.

🔧 Changed

  • ✂️ The settings dialog is titled Settings, like the menu entry that opens it, and says things in few, plain words; what each option sends where is still spelled out.
  • 📏 Buttons keep their label on one line, every settings button has the same height, and checkboxes no longer shrink beside a long label.
  • ℹ️ The About window shows Lavender's own home page, contact and Buy Me a Coffee button, and credits LRCGET as the app Lavender is built on.

🐛 Fixed

  • 🧯 A mass download no longer loses its progress when the window shows the "try again" page of the browser engine and reloads: the run goes on in the background meanwhile and the dialog picks it up again.
  • 📋 The download log no longer repeats or mixes up rows when two tracks share the same title and artist.

🔐 Verify

Asset SHA-256
Lavender-0.1.0-1.x86_64.rpm d9f3a8505fa9941ec24e23ec0abb35e201bd4581db196668bead625aaab052e6
Lavender-0.1.0-1.x86_64.rpm.sig b1569aa4a9fbb9171f817aa2ab9cb870a96c1f37b4543e50781faca42949c2e1
Lavender_0.1.0.flatpak 2159c3149413cfec7bea279f2eeb9f831a8210d80a8bd1fce605d8ab21295299
Lavender_0.1.0_aarch64.dmg 1dad9bb17161812c20fe3c3c31d8abf6b15a05bfed5dd7e68ca4cdcc17967264
Lavender_0.1.0_amd64.AppImage 241c27132c92c3a1da12e9e7e24d401fcb15c4036ecb5b0a4efd0c622fcfa31d
Lavender_0.1.0_amd64.AppImage.sig 16ba01bf8939e114ba60a5b447529fbca0cb4133c4228e561424aa85d36321f7
Lavender_0.1.0_amd64.deb b719da14cf058da177b7632d26d6c658802a63dbdab73396f95d205afc6d1df9
Lavender_0.1.0_amd64.deb.sig 38a6fad4167e9783a159263e824e3721365f6ee2e907b5b57cdca856f5de0198
Lavender_0.1.0_x64-setup.exe `983f1d8f6b72f28b59fdad2e9e...
Read more