Repository navigation
Releases: jncchds/abeat
Release list
ABeat v0.3.4
- Tap latency up to +300 ms (was +160): taps recorded through Bluetooth headphones come ~220 ms late, past the next sixteenth, so the aligner took the wrong grid line and every tap landed one sixteenth late on a drum hit. On Deep Down (vocal taps) the run aligned at -5 ms; it now aligns at +220 ms, matching where the vocal stem's syllables start. Heavy Weight (+60 before) is +220 too; the wired runs of Lighter, Everlasting and Bangaranga keep their latencies. Regenerate tapped songs to pick it up.
- Held arcs: a long melody or vocal note that the hand has no next note for gets an arc that follows the sound to its end and stops there without a note, ending in a dot next to the head or one cell towards that hand's next note. Curated maps end about 8 % of their arcs this way; generated maps now have 1-4 per difficulty, the longest held notes first. Part of the Arcs switch.
- Melody hand: in sections with a melody or vocal line to follow, one hand plays the melody and the other the beat, and they swap where the leading hand swaps (drops vs the rest). On 5 songs (taps off), the beat hand now plays 87-97 % of the beat notes (was 20-35 %) and the melody hand 78-95 % of the melody notes (was 66-85 %), with equal or slightly better flow and no resets. New flow weight melody hand (default 1.5, 0 = off); the CLI shows how well it was kept.
- Sung notes is the default for vocal onsets (new songs, CLI and worker); it falls back to spectral flux when the worker has no pitch model. Existing songs keep what they were analyzed with.
Desktop app
Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one (macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /path/to/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.3.4.
ABeat v0.3.3
- Human map → taps: a song with a human map has Use as taps in the Tap panel. Pick a difficulty and its right-hand and left-hand notes become the two tap runs, with the mapper's exact timing (no latency removed, no snapping onto onsets); notes of both hands at once become doubles. Generate then remakes the map on that rhythm, or builds easier difficulties from it.
- Append from playhead keeps each appended batch as its own recording with its own latency, instead of merging it into the run. Before, taps appended to a human-map run stayed late by the browser's latency (the run as a whole looked latency-free); now a batch of 8+ taps finds its own latency from the song, and a shorter one takes the run's, the song's other recordings' or a typical 65 ms. An appended tap on a human-map note leaves the note's timing. The Tap panel shows each batch's latency.
- The Tap panel has a Clear taps button (was a small "clear" link).
Desktop app
Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one (macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /path/to/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.3.3.
ABeat v0.3.2
- Two-hand streaks: the vocabulary now also knows 4 notes in a row across both hands (left-right-left-right, right-right-left-right, with doubles too), 950-3600 of them per difficulty, learned from the same curated and official maps. The generator plays known ones about as often as human maps do instead of almost never: on 16 songs with taps off, two-hand streaks went from 0-3 % to 14-17 % of two-hand stretches on Easy to Expert (human maps 17-19 %) and 4 % on Expert+ (6 %), with no loss of flow or timing. They are matched, not maximised. New flow weight pair streak (default 3, 0 = off); the Vocabulary page has a Two hands tab with both hands' notes numbered in one grid and an "alternating only" filter;
abeat benchshows the share as "pair4".
Desktop app
Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one (macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /path/to/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.3.2.
ABeat v0.3.1
- Fit to taps: a new button in the Speed and density settings sets the limits so Expert+ has room for every tap you recorded: max notes/s for the busiest tapped bar, the min gap for the two closest taps, the hand gap for every other tap (the burst gap follows). Easy to Expert move by the same ratios to their built-in values, so they stay as far below Expert+ as before. Only loosens, only when pressed, and does nothing without taps; each difficulty's "reset" undoes it. On a test song with a bar of sixteenth taps, Expert+ went from missing some taps to a note on all of them.
- Streaks: the vocabulary now knows runs of 4, 6, 8, 12 and 16 notes of one hand (and 3), not just pairs. Each hand continues known streaks about as often as human maps do (Expert+ 26 % of notes, Normal 58 %), and overlapping ones chain into long runs made entirely of human pieces: on a test song, notes inside 8+ note runs went from 0 % to 37 % on Normal, with no loss of flow. A plain bonus overshot (three quarters of all notes on Easy-Hard, humans a fifth), so it is matched instead. Exact runs past 8 notes rarely repeat between maps, so 12- and 16-note streaks are few. The Vocabulary page has a Streaks tab per length;
abeat benchshows the streak share ("strk4") and the share in long runs ("long") next to the human map's. - The vocabulary also learns from 85 official maps (OST 4-8, Coldplay, Imagine Dragons, Billie Eilish, Lady Gaga, Electronic Mixtape, Shock Drops, The Weeknd), whose difficulty levels are strict, and from the curated maps saved in the new format, which were skipped before. Easier levels keep lower: Easy uses 23 figures with 2 on the top row (was 30 and 7).
Desktop app
Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one (macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /path/to/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.3.1.
ABeat v0.3.0
-
Lead melody: with stems, the analysis finds one melody line through the song, whoever carries it: a singer, a violin, a synth. Stems can't tell (Demucs often puts violin and synth leads in the vocal stem), so CREPE pitch on the vocal and other stems decides which one leads, moment by moment, or that nothing does (drum breaks, pads), and basic-pitch gives that stem's notes. It is the new
melodylayer (weight 0.8): its notes carry the melody's pitch and held length, so arcs, angle leans and the melody lights follow one line instead of whichever stem was loudest. The timeline shows it tinted by the stem carrying it (pink vocals, teal other). Adds ~2 min per song on a 4-core CPU, cached with the stems; the app and CLI always run it (the worker alone skips it with--melody off). -
Official (v4) maps line up again: their beat timing in BPMInfo.dat is now read, so the Human version of OST songs (Lindsey Stirling, Queen, Linkin Park, Coldplay and more) no longer drifts off the timeline and the comparison scores mean something (Heavy Weight F1 0.15-0.21 -> 0.59-0.76). v4 maps show their mappers instead of "ABeat by CHDS".
-
Lead melody, checked against tapped melody: where the voice and the violin play equally loud, neither used to count as the lead and those stretches came out melody-free. A stem as loud as the other now counts fully: Heavy Weight's tapped melody is caught 58 % of the time (was 55 %; 62 % on the violin), and the melody finds more of the notes in human maps (recall 0.37 -> 0.40).
-
Settings saved before a new onset layer existed get its default weight instead of switching it off.
-
Light colours: the scene no longer wears the note colours all song. Cover palettes give the left/right lights their own hues (each saber hue turned 45° away from the other saber, or a third cover hue), and the boost colours are now the saber colours, used as an accent: boost is on for two bars on drops and at the start of the loudest sections instead of for whole sections.
-
The lights no longer cut to black two beats after the last note: the stage holds in the last section's colour through the outro, dims with the music's loudness and fades out as the music stops (classic lights, group lights and the environments' basic lights); laser speeds settle low.
-
Runway and floor lights stay lit like in curated maps: the environment survey now learns how much of the playing time maps keep each light group lit (
lit, from the cached maps), and groups kept lit at least half the time glow in the section colour between flashes, over about that share of the song, loudest sections first. Runways were lit 25-55 % of the playing time in most environments (curated 70-94 %), now 71-97 %; runways mappers only flash (Rock Mixtape, Panic 2.0, The Second) keep flashing. -
No more long walls framing an empty intro or outro: the 6-beat side walls of calm sections now start 4 beats after the first note and end 4 beats before the last, and only frame stretches that have notes. A third of all long walls in generated maps sat before the first note or after the last (2.6 per difficulty; curated maps 0.13).
-
Taps drive the map: your tap-along runs now tell the generator where you want notes. They are lined up with the song first: each run's latency is found (Heavy Weight +60 ms, Lighter +70 ms) and taps move onto the nearby onset of the song; the two runs only mark moments, not hands, and a moment both runs tapped becomes a double. A new tap priority slider (default 1) sets how strongly taps claim notes: at 1 every tap goes before any untapped sound of its bar, and bars with more taps get extra notes up to the difficulty's limit; 0 ignores them. On four tapped songs Expert+ now has a note on 94-99 % of the taps (was 42-64 %). The Tap panel shows the latency found, and the timeline the aligned taps. Without taps nothing changes. CLI:
--taps taps.json,--tap-priority. -
The manual and README match the code again: difficulty profiles (NJS, jump distance, densities, gaps, dot cost), flow weights (no
pitchweight;figure,move,stackAccent,burstand the new hand roles), default settings (all difficulties, environment Auto, crouch walls off, rhythm walls, cover colours), Auto-regenerate being off by default, environments beyond Default/Pyro, wall colours on the timeline, and that note rows never follow the pitch. -
Every generator setting explains itself on hover: what it does, what its value means and its default (sliders, switches, difficulties, modes, speed limits, flow weights, onset layers), plus the Auto/Defaults buttons and the player's speed and follow controls.
Desktop app
Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one (macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /path/to/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.3.0.
ABeat v0.2.27
- YouTube's "Sign in to confirm you're not a bot": downloads use a
cookies.txtfrom the data folder (orABEAT_COOKIES,ABEAT_COOKIES_FROM_BROWSER) and the error now says how to add one (manual: "YouTube asks to sign in"). Worker output is read as UTF-8 on Windows (no more "youΓÇÖre"). - Desktop app: YouTube sign-in inside the app. A failed download shows Sign in to YouTube and Retry download; the sign-in window is a separate in-app browser whose youtube.com cookies go to
data/cookies.txtwhen it closes (yt-dlp keeps them current, the next sign-in resumes from them). Help → YouTube Sign-in opens the manual's section, which has the live sign-in status and sign-in/sign-out buttons. - Manual in the app (left panel, Help → Manual / F1 in the desktop app):
docs/MANUAL.mdrendered with its anchors. It now starts with what ABeat consists of (app, server, analysis runtime, ArcViewer, the data folders), a desktop quick start and a tour of the left panel. - Release page and manual: run the desktop app from an empty folder; to upgrade, replace the executable with the new one.
- Manual credits list every part ABeat uses (app, server, desktop shell, analysis runtime, ArcViewer) with its purpose, licence and whether it is bundled, downloaded or build-only; the desktop app ships the .NET and uv licence texts in
resources/licenses.
Desktop app
Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one (macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /path/to/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.2.27.
ABeat v0.2.26
- Desktop app (
desktop/): an Electron window around the same server, built for Windows x64 (portable .exe), Linux x86_64 (AppImage) and macOS arm64 (.dmg) and published as GitHub Releases by.github/workflows/desktop-release.yml. It keepsdata/,models/andruntime/next to itself and installs the analysis runtime on first start with the container'sprovision.py, which now also runs on Windows and macOS. ArcViewer works inside the app without HTTPS. Docker is unchanged.
Desktop app
- Windows (x64):
ABeat-*-windows-x64.exe, a portable app; no installation needed. - Linux (x86_64):
ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it. - macOS (Apple Silicon):
ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
start choose Open in System Settings → Privacy & Security, or run
xattr -dr com.apple.quarantine /Applications/ABeat.app.
The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.2.26.