Skip to content

Releases: chosuicide/beatscope

v0.12.1

Choose a tag to compare

@github-actions github-actions released this 17 Sep 06:14

Reliability patch. Nothing about the timing facts changes: same measurements, same package contents.

Energy timebase
The energy series stored a rounded integer fps — 172 instead of the exact 44100/256 — which drifts about 0.46 s by the five-minute mark and 0.93 s by ten. The analyzer now keeps the exact rate, the schema rejects non-finite or out-of-range samples, and the legacy snapshots were regenerated. Existing analyses are not rewritten; re-analyze a track to get the corrected series.

The studio stops losing work
A finished film and its download link now survive a failed or cancelled render, polling backs off and retries instead of giving up, HTTP status codes are preserved in the error shown to you, and results belonging to a session you have left are dropped. The recovery decisions live in a pure kernel (beatscope/web/studio-session.mjs) with its own tests.

Releases are a gate
The release workflow runs the same commit's CI first, derives the archive name from the tag instead of hardcoding it, and fails on any version mismatch (scripts/check_release_version.py).

Verified on this tree: ruff clean; Python 786 passed / 4 skipped; JavaScript 102 passed; frontend typecheck and build clean.

The product tour video is not part of this release; it stays attached to v0.12.0.

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 13 Sep 07:34

BeatScope measures a song; Beathi turns the measurements into a film. Everything runs on your machine.

Handoff package (0.12.0, timing-only). Measured beats, transients with band energies, tempo segments, bars, cues, structure families and boundaries, plus an ordering value for spending a response budget - with the deterministic runtime, a self-check probe, agent guidance, a Skill, MIDI/CSV and per-file SHA-256. No visual layer, no task statement, no source audio.

The studio is the only page. Drop in a song: it measures, cuts a deterministic film and plays it back. The old player page, canvas workspace, composition bench and compiled visual layer are gone.

WebMCP Studio Director. In a suitable browser the studio registers seven tools (state, timing, ranked events, cut explanation, playback, render, export); every page-changing call is visible on screen. Ordinary browsers are unaffected.

Assets

File What it is
Beathi-Studio-v0.12.0-windows-x64.zip (+ .sha256) Portable Windows studio: unzip, run Beathi Studio.exe; analyser and movie toolchain included
beatscope-0.12.0-py3-none-any.whl / .tar.gz Python package (pip install), studio and stdio MCP included
beatscope-v0.12.0-showcase.mp4 Showcase piece built from an exported timing package

Analysis and rendering stay local. response_relevance is an ordering value, never a probability or confidence, and structure appears only as repeat families - never "verse", "chorus" or a guessed kick.

BeatScope v0.10.0 — WebMCP Director

Choose a tag to compare

@chosuicide chosuicide released this 03 Sep 11:57

WebMCP Director

BeatScope can now work with an Agent inside the browser without sending audio anywhere. Eight bounded tools expose the same Rhythm IR and deterministic runtime already used by the Studio, exported handoffs, and stdio MCP server.

What changed

  • Inspect project context, musical state, events, structure, and candidate visual moments.
  • Focus, audition, seek, and loop measured ranges in the player the user is watching.
  • Keep page-changing Agent actions visible and reversible while read-only calls remain truly read-only.
  • Run a self-contained static demo built from a deterministic, repository-owned synthetic track.
  • Deploy that demo at a domain root or a nested path such as GitHub Pages.
  • Preserve real downbeat timestamps across variable-tempo loop ranges.
  • Record a new Director walkthrough in the English and Chinese READMEs.

WebMCP is the browser entry point. The six-tool local stdio MCP server remains available for developer workflows; both surfaces read the same timing model.

Verification

  • Python: 569 passed, 4 skipped
  • JavaScript: 18/18 test files passed
  • Audio, structure, and visual benchmark gates: none failed
  • Browser smoke: root and nested static paths passed
  • Wheel and recorded MP4/GIF: built and decoded successfully

See the WebMCP contract and the README for the three-minute local demo.

BeatScope v0.8.1 — Structure-aware visual runtime

Choose a tag to compare

@chosuicide chosuicide released this 01 Sep 02:45

BeatScope v0.8.1

I skipped separate releases for v0.7 and v0.8, so this release contains the work from both versions as well as the latest fixes.

The biggest change is that BeatScope can now follow the structure of a whole song. It finds repeated sections, keeps the labels neutral (A, B, A′), and uses that structure to drive the player, MCP output, and exported visual timeline.

The player also has a shared scene director now. Seeking to the same time produces the same scene, instead of rebuilding animation state from whatever happened before.

A few smaller things landed in v0.8.1:

  • beatscope_get_project can return average LOW / MID / HIGH energy for each structural segment.
  • Codex exports include worker-example.js, so timing queries can run in a module Worker.
  • Windows file-write and cross-platform fixture problems were fixed.
  • The English and Chinese READMEs were cleaned up.

Install

pip install beatscope-0.8.1-py3-none-any.whl
beatscope serve

For MCP:

pip install "beatscope-0.8.1-py3-none-any.whl[mcp]"
beatscope-mcp

Tested on Windows and Ubuntu with Python 3.10 and 3.12.