iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
Smart Beat은 macOS·Windows·Linux용 무료 악보 편집기로, 아이디어 녹음·오프·온라인 합주·선택 연습이 가능합니다
Smart Beat is a free tablature editor for musicians and learners on macOS, Windows and Linux. Record your ideas, get the band together with in-person and online jamming, and practice with optional, se
미디어TypeScript · RustGitHub @mbalyi온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Free, source-available Guitar Pro-style tablature editor for macOS, Windows and Linux.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Practice, create and break the era.
Smart Beat is a free tablature editor for musicians and learners on macOS, Windows and Linux. Record your ideas, get the band together with in-person and online jamming, and practice with optional, self-hosted AI tools too.
Status: stable release (1.1.0). Smart Beat opens, plays and edits Guitar Pro files (GP3–GP8), MuseScore, MusicXML and MIDI, with a mixer, practice tools and a fretboard, and saves to its native format (Guitar Pro 7
.gp), to Guitar Pro 5, 4 and 3 and to MuseScore. It exports MusicXML (also compressed), MIDI, alphaTex, ASCII tab, WAV and, on macOS, M4A.docs/file-formats.mdlists what each format cannot hold. The AI features are next. The roadmap lives in the project board.
The macOS and Windows buttons start the download of the newest release's installer (.dmg, .msi) right away. The Linux and Latest release buttons open the newest release, where every installer (including the Windows .exe and the Linux .AppImage, .deb and .rpm) is attached. All versions are on the releases page.
⭐ Enjoying Smart Beat? Please give the project a star on GitHub. It helps other musicians find it, and we are always very grateful for every one.
.gp3, .gp4, .gp5, .gpx, .gp) with File › Open… (⌘O / Ctrl+O) or by dropping them on the window. Damaged or unsupported files get a clear message..sf2 or .sf3 file from your computer, or download one of the recommended banks with its description, size and licence: MuseScore General, GeneralUser GS, FluidR3 GM (stereo), Timbres of Heaven and Arachno. Downloads are checked by the app, stay on your computer, and appear in Instrument sounds right away. You can remove any SoundFont you added to free the space. Timbres of Heaven and Arachno are free for personal use only. Very large banks (Timbres of Heaven is almost 400 MB) take a while to load and need plenty of memory.Record to tab is a beta feature. It runs on your computer (no cloud AI), and it gives you a starting point to edit, not a finished transcription.
A heartfelt thank you to the maintainers whose work makes Smart Beat possible. Meet a few of the projects behind the music (hover over a name to see what it does for Smart Beat).
Special thanks to alphaTab (source, MPL-2.0), the heart of Smart Beat: this project would not exist without it. If you like what Smart Beat does with scores, please give alphaTab a star, try it in your own project, and thank its maintainer, Danielku15, and the contributors. alphaTab's logo and the RustAudio logo are shown with the maintainers' permission. Smart Beat is independent and is not affiliated with or endorsed by alphaTab or any of these projects. Record to tab listens with Basic Pitch (Spotify, Apache-2.0) and, for the high-accuracy piano mode, Transkun by Yujia Yan (MIT): thank you both for sharing your work openly. All notices are in Help › Open-Source Licenses.
MuScriptor by Kyutai and Mirelo powers the AI mode of Record to tab and Import from Audio. It is not part of Smart Beat: you download it once from inside the app (the weights come straight from the GGUF mirror on Hugging Face, converted to float16 without retraining by DamRsn, and run with muscriptor.cpp, MIT), accept its terms on the official model card and confirm that you only use music you have the rights to. The weights are licensed CC BY-NC 4.0: non-commercial use only. Transcription runs on your computer; your recordings never leave it. More: online demo (runs on Kyutai's servers, not on your computer), paper, announcement, reference code. Smart Beat is independent and is not affiliated with or endorsed by Kyutai or Mirelo (no logos of either are used).
We are looking for sponsors. Smart Beat is free, and we want to keep it that way, including the features that cost money to run. Sponsorship would pay for the server and AI work behind them, for example:
If you or your company would like to support Smart Beat, write to [email protected]. Sponsors will be thanked here.
Not a sponsor? A star on GitHub helps too, and we are very grateful for it.
Download the installer for your system from the newest release on the releases page.
docs/code-signing.md.Windows (.exe or .msi) without a signature: Windows SmartScreen shows "Windows protected your PC". Click More info, then Run anyway, and the installer starts as usual.
Linux without a signature: Linux shows no warning.
chmod +x ./*.AppImage && ./*.AppImage (in the folder where you saved it).deb): sudo apt install ./<downloaded file>.deb.rpm): sudo dnf install ./<downloaded file>.rpmOnly install files you downloaded from the releases page of this repository. Once installed, the app updates itself (Help › Check for Updates…).
| Layer | Technology |
|---|---|
| Desktop shell ("backend") | Tauri 2 in Rust (src-tauri/): native window, menu bar, IPC commands |
| UI | React 19 + TypeScript, Vite, Tailwind CSS 4, shadcn/ui (Radix primitives) |
| Score and playback | alphaTab (MPL-2.0): Guitar Pro import, notation rendering, SoundFont synthesizer (alphaSynth) in a worker |
| Tests | Vitest + Testing Library + axe-core (UI), Playwright + axe (browser integration), cargo test with tauri::test (Rust) |
| Quality | ESLint (typescript-eslint, React Hooks, jsx-a11y), Prettier, rustfmt, clippy, cargo-deny |
Install these once per machine.
| macOS | Windows | Linux (Debian/Ubuntu) | |
|---|---|---|---|
| Node.js 24 | nvm install (uses .nvmrc) | nodejs.org or nvm-windows | nvm install |
| pnpm | corepack enable | corepack enable | corepack enable |
| Rust (stable) | rustup | rustup (MSVC toolchain) | rustup |
| System | Xcode or Xcode Command Line Tools (xcode-select --install) | Microsoft C++ Build Tools ("Desktop development with C++") and WebView2 (preinstalled on Windows 10/11) | sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev libasound2-dev |
| CMake 3.24+ | brew install cmake (the AI model engine, src-tauri/native) | cmake.org (the Visual Studio generator works) | sudo apt install cmake (or pip install cmake if apt is older than 3.24) |
| License tooling | cargo install cargo-about --locked --features cli and cargo install cargo-deny --locked | same | same |
Optional: to build the universal (Apple Silicon + Intel) macOS app, run rustup target add x86_64-apple-darwin aarch64-apple-darwin.
Check your setup with pnpm tauri info.
corepack enable
pnpm install
pnpm tauri dev # desktop app with hot reload
pnpm dev runs only the UI in a browser at http://localhost:1420. Native features (menu, About details) show a friendly "desktop app only" message there. Files open through the browser's file picker or drag and drop, and the mix is not saved.
pnpm tauri dev and pnpm tauri build first download the optional FluidR3 SoundFont (15 MB, checksum-verified, cached in node_modules/.cache). The Sonivox SoundFont and the music font are copied from alphaTab by its Vite plugin. Both end up in public/ and are not committed.
| Command | What it does |
|---|---|
pnpm tauri dev | Run the desktop app in development mode |
pnpm tauri build | Build installers for the current OS (see Packaging) |
pnpm lint / pnpm format / pnpm format:check | ESLint / Prettier |
pnpm typecheck | TypeScript project check |
pnpm test / pnpm test:watch / pnpm test:coverage | Vitest unit and integration tests (UI) |
pnpm test:e2e | Playwright browser integration tests (Chromium and WebKit, a11y and responsive checks). Run pnpm exec playwright install chromium webkit once first |
pnpm test:e2e:smoke / pnpm test:e2e:additional | The two CI groups of pnpm test:e2e: core flows, and the guided-tour tests (the tour*.spec.ts files) |
pnpm rust:test / pnpm rust:lint / pnpm rust:fmt | Rust tests, clippy (-D warnings), rustfmt check |
pnpm licenses:check | Enforce the license policy for npm packages and Rust crates |
pnpm licenses:generate | Regenerate public/third-party-licenses.txt (runs automatically before tauri build) |
pnpm soundfonts:fetch | Download the FluidR3 SoundFont into public/soundfont/ (runs automatically before tauri dev and tauri build) |
pnpm docs:check | Fail on a stale contact address or repository URL, or a broken relative link in the Markdown docs |
pnpm version:check | Check that package.json, Cargo.toml and Cargo.lock carry the same version |
pnpm release:patch / release:minor / release:major |
| Layer | Where | Tool |
|---|---|---|
| UI unit | src/**/*.test.ts(x) next to the code | Vitest, Testing Library, axe-core |
| UI integration | src/App.test.tsx, score-workspace-editing.test.tsx | Vitest with @tauri-apps/api/mocks: the whole UI plus a mocked Rust IPC (commands, menu events and menu state), editing a real score |
| Browser integration | e2e/ | Playwright in Chromium (≈ WebView2 on Windows) and WebKit (≈ WKWebView on macOS, WebKitGTK on Linux): WCAG 2.2 AA scans in light and dark mode, keyboard navigation, focus management, reduced motion, layouts at 375/768/1280 px |
| Rust unit | #[cfg(test)] modules in src-tauri/src | cargo test |
| Rust integration | src-tauri/tests/ipc.rs | tauri::test mock runtime: real command wiring over IPC and menu routing |
The frontend fixtures in src/test/tauri.ts mirror the JSON returned by the Rust commands. The Rust integration tests assert the same shape.
alphaTab needs a real browser to render and play, so Vitest tests use a fake player (src/test/fake-score-player.ts) while parsing and editing run for real on alphaTab's model. The Playwright tests in e2e/ (score, practice, editing, instrument-view and tracks specs) drive the real renderer and synthesizer. Their songs in e2e/fixtures/ are original and generated by scripts/make-fixtures.mjs. Don't commit commercial transcriptions.
pnpm tauri build # installers for the current OS
pnpm tauri build --target universal-apple-darwin # macOS: one app for Apple Silicon + Intel
Output lands in src-tauri/target/<target>/release/bundle/:
| OS | Artifacts |
|---|---|
| macOS | macos/Smart Beat.app, dmg/Smart Beat_<version>_<arch>.dmg |
| Windows | msi/*.msi, nsis/*-setup.exe |
| Linux | appimage/*.AppImage, deb/*.deb, rpm/*.rpm |
The release workflow renames the installers it publishes: a stable name for the website's links (SmartBeat_macos_universal.dmg) and a versioned copy (SmartBeat-0.2.0-macOS-universal.dmg), see docs/release.md. Local macOS builds are ad-hoc signed. See docs/code-signing.md for signing and notarization.
src/ React UI
components/ App components (+ ui/ generated by shadcn)
score/ Song screen: toolbars, score view, instrument panel, transport and
practice tools, mixer, tracks panel and dialogs
hooks/ providers/ Theme, menu (actions and state), editor keys, file-open/drop hooks
lib/tauri.ts Typed bridge to the Rust commands and events
lib/score/ alphaTab adapter (player.ts), parsing, mixer and practice models,
editor (editor.ts, history.ts, snapshot.ts, model.ts), tracks,
instrument view data, music vocabulary (music.ts), SoundFonts
test/ Test setup, IPC mocks, fake player, axe helper
src-tauri/ Rust core
src/menu.rs Native menu bar and shortcut formatting
src/menu_state.rs Menu labels, check marks and enabled items, sent by the UI
src/commands.rs IPC commands (thin wrappers)
src/score_file.rs Reading Guitar Pro files (signature and size checks)
src/mixer.rs Per-song mixer settings in the app data folder
src/zoom.rs View → Zoom levels
tests/ipc.rs Integration tests on the Tauri mock runtime
e2e/ Playwright tests (+ fixtures/ test songs)
scripts/ License check, notice generation, SoundFont download, test songs
docs/ Licensing, code signing, releases and updates, ADRs
.github/workflows/ CI (every PR) and Release (installers)
invoke), defined in src-tauri/src/commands.rs and wrapped with types in src/lib/tauri.ts:
app_info and menu_shortcuts (About and Keyboard Shortcuts dialogs);read_score_file(path) returns a Guitar Pro file as raw bytes. It only reads files with a Guitar Pro extension and signature, up to 100 MB, and fails with { kind, message };load_mixer_settings(fileKey) / save_mixer_settings(fileKey, settings) store a song's mix as <app data>/mixer/<sha256>.json;update_menu_state(state) keeps the menu bar in step with the UI: "Undo Add note", check marks for Edit Mode, Fretboard, Loop, Metronome and Count-In, and song-only items disabled while no song is open.dialog:allow-open).menu::handle_event. Window actions (zoom, full screen, close, quit) are handled in Rust. Everything else is emitted as a menu-action event, which the UI handles in useMenuActions (the app handles New, Open and dialogs; the song workspace handles Undo/Redo, edit mode, tracks and practice). Undo and Redo are custom items so they undo score edits; in a text field they fall back to the field's own undo. Cut, Copy, Paste and Select All stay the platform's own items, and the score editor handles those keys itself. Files dropped on the window arrive as Tauri drag-and-drop events with their paths (useFileDrop).main:
.gitleaks.toml).analytics/ and deploys it to Cloudflare from main (docs/analytics.md)..dmg (universal), .msi and .exe, and .AppImage, .deb and .rpm installers. Push a tag matching package.json (e.g. git tag v1.0.0 && git push origin v1.0.0) to create a draft GitHub Release, or run it manually to get the installers as workflow artifacts. PRs that change packaging configuration (tauri.conf.json, icons, EULA, the workflow itself) also build the installers as artifacts. A release also contains signed updater bundles and latest.json, which the app's Help › Check for Updates… and its daily automatic check read: see for how to cut a release, the signing key and the stable download links.Smart Beat counts anonymously how often features are used (Loop, Metronome, Export and so on), per day, together with the app version, your operating system and the installer type. There is no identifier of any kind, so the counts cannot be tied to you or your computer, and nothing about your songs, file names or sounds is sent. Counts are kept on your computer while you are offline and sent in one batch later. Turn it off in Help › Settings…; that also deletes counts that have not been sent. Development and pull-request builds never send anything. Details, the exact list of counted features and the backend: docs/analytics.md.
Smart Beat is source-available, not open source. The code is under the PolyForm Noncommercial License 1.0.0: you may use it for personal use, learning and research. Selling it, wrapping it in another product, offering it as a service, or using it inside a company needs permission or a fee: see COMMERCIAL-LICENSE.md. The released installers are free to download and use, including for making and selling your own music, under the EULA.md. Questions about licensing: [email protected].
We only use dependencies whose licenses allow commercial, closed-source distribution, and CI enforces this.
docs/licensing.md: how the source licence, the EULA, third-party licences, model licences and commercial licences fit together, the component review, and the list of projects we must not copy code from.Pull requests, bug reports and ideas are welcome: see CONTRIBUTING.md for what contributing does and does not give you.
Smart Beat is a personal project, not a company: it is created and maintained by @mbalyi, and everything is published under that GitHub account. Thank you to everyone who has helped build it.
Bump the version everywhere and start the changelog section (see docs/release.md) |
pnpm check | Everything CI runs, except Playwright and the license gate |
docs/release.md