{"id":51478335,"url":"https://github.com/rainmana/midimi","last_synced_at":"2026-07-06T23:30:43.321Z","repository":{"id":367743346,"uuid":"1282130256","full_name":"rainmana/midimi","owner":"rainmana","description":"midimi is a native desktop MIDI player and visualizer built with Tauri v2 (Rust backend) and SvelteKit + Svelte 5 (frontend). Drop in a .mid file and watch it come alive: a full-screen \"Cosmic Aurora\" visualization reacts to every note in real time, while a bundled General MIDI soundfont renders the audio entirely in Rust.","archived":false,"fork":false,"pushed_at":"2026-06-27T12:27:13.000Z","size":327,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-27T13:08:55.265Z","etag":null,"topics":["midi","midi-player","midi-visualizer","music-player","music-visualizer","tauri-app","tauri-apps"],"latest_commit_sha":null,"homepage":"https://github.com/rainmana/midimi","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rainmana.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-27T11:10:50.000Z","updated_at":"2026-06-27T12:27:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rainmana/midimi","commit_stats":null,"previous_names":["rainmana/midimi"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rainmana/midimi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rainmana%2Fmidimi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rainmana%2Fmidimi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rainmana%2Fmidimi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rainmana%2Fmidimi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rainmana","download_url":"https://codeload.github.com/rainmana/midimi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rainmana%2Fmidimi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35209350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["midi","midi-player","midi-visualizer","music-player","music-visualizer","tauri-app","tauri-apps"],"created_at":"2026-07-06T23:30:43.188Z","updated_at":"2026-07-06T23:30:43.316Z","avatar_url":"https://github.com/rainmana.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/branding/midimi-icon.png\" alt=\"midimi\" width=\"168\" height=\"168\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003emidimi\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cem\u003eA magical music box for MIDI — play, explore, and \u003cstrong\u003ewatch\u003c/strong\u003e your music.\u003c/em\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/rainmana/midimi/actions/workflows/ci.yml\"\u003e\u003cimg alt=\"CI\" src=\"https://github.com/rainmana/midimi/actions/workflows/ci.yml/badge.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"License: Apache-2.0\" src=\"https://img.shields.io/badge/license-Apache--2.0-blue.svg\"\u003e\u003c/a\u003e\n  \u003cimg alt=\"Platforms\" src=\"https://img.shields.io/badge/platforms-macOS%20%7C%20Linux%20%7C%20Windows-8a6bff\"\u003e\n  \u003cimg alt=\"Built with\" src=\"https://img.shields.io/badge/built%20with-Tauri%202%20%7C%20Svelte%205-19f0c8\"\u003e\n\u003c/p\u003e\n\nmidimi is a native desktop MIDI player and visualizer built with Tauri v2 (Rust backend) and SvelteKit + Svelte 5 (frontend). Drop in a `.mid` file and watch it come alive: a full-screen \"Cosmic Aurora\" visualization reacts to every note in real time, while a bundled General MIDI soundfont renders the audio entirely in Rust — no browser audio engine, no drift. Transport controls let you play, pause, seek, adjust tempo and volume. Recent files and settings persist across launches. Licensed Apache-2.0.\n\n---\n\n## Prerequisites\n\n- [Rust](https://rustup.rs/) (stable toolchain)\n- [Node.js](https://nodejs.org/) 20+\n- macOS, Linux (with WebKit2GTK + libasound), or Windows\n\n---\n\n## Setup\n\n```bash\n# 1. Fetch the bundled soundfont (~31 MB, one-time download)\n./scripts/fetch-soundfont.sh\n\n# 2. Install JS dependencies\nnpm install\n\n# 3. Launch in dev mode (hot-reload frontend, Rust recompiles on change)\nnpm run tauri dev\n```\n\n---\n\n## Build\n\n```bash\nnpm run tauri build\n```\n\nProduces a platform-native installer in `src-tauri/target/release/bundle/`.\n\n---\n\n## Project layout\n\n```\nsrc/                  SvelteKit frontend (SPA, SSR off)\n  routes/+page.svelte   Root page — state, playhead listener, file open\n  lib/\n    ipc.ts              Typed wrappers for every Tauri invoke + event\n    types.ts            Shared TS interfaces (Note, MidiData, Playhead, …)\n    theme.ts            Three built-in themes (Cosmic, Nebula Rose, Abyss)\n    VizCanvas.svelte    Canvas host + note scheduler\n    visualizations/\n      types.ts          Visualization plugin interface\n      cosmic-aurora.ts  Bundled aurora visualization (Canvas 2D)\n    Transport.svelte    Play/pause/seek/tempo/volume controls\n    TrackList.svelte    Track name list\n    SoundfontPicker.svelte  SF2 loader + switcher\n    ThemePicker.svelte  Theme selector\nsrc-tauri/src/        Rust backend\n  lib.rs              App setup, resource resolution, 60 Hz playhead loop\n  commands.rs         Tauri command handlers\n  midi.rs             MIDI parser → note timeline\n  audio.rs            AudioEngine, render thread, rtrb ring buffer, cpal\n  analysis.rs         Hann-windowed FFT, 16 log-spaced bands, RMS\n  db.rs               Turso embedded SQLite cache\nassets/soundfonts/    GeneralUser GS license\nscripts/              fetch-soundfont.sh\ndocs/\n  ARCHITECTURE.md     Data flow, module map, Visualization plugin contract\n  DECISIONS.md        ADR log (8 decisions)\n```\n\n---\n\n## Docs\n\n- [Architecture](docs/ARCHITECTURE.md) — data flow, module map, Visualization plugin contract\n- [Design Decisions](docs/DECISIONS.md) — ADR log\n\n---\n\n## License\n\nApache-2.0 — see [LICENSE](LICENSE).\n\n---\n\n## Third-party assets\n\n**GeneralUser GS v2.0** by S. Christian Collins  \nA permissive General MIDI soundfont bundled with midimi for out-of-box audio playback.  \nLicense: `assets/soundfonts/GeneralUser-GS-LICENSE.txt`  \nSource: https://github.com/mrbumpy409/GeneralUser-GS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frainmana%2Fmidimi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frainmana%2Fmidimi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frainmana%2Fmidimi/lists"}