Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
Real mechanical keyboard sounds for every key you press, in every app. A tiny, native menu bar app for Mac.
LifestyleRust · TypeScriptGitHub @KunalBagariaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Mechanical keyboard sounds for every key press, as a tiny native macOS menu bar app written in Rust.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Mechanical keyboard sounds for every key press, as a tiny native macOS menu bar app written in Rust.
rustyvibes.kunalbagaria.com · free and open source (MIT)
Rustyvibes 2 plays the sound of a real mechanical keyboard every time you press a key, in any
app. It lives in the menu bar, ships with 21 soundpacks, and is built to cost nothing while you
are not typing: 0% CPU, no timers, no wakeups, and the audio device is released when idle.Read the full README ↗Rustyvibes 2 plays the sound of a real mechanical keyboard every time you press a key, in any app. It lives in the menu bar, ships with 21 soundpacks, and is built to cost nothing while you are not typing: 0% CPU, no timers, no wakeups, and the audio device is released when idle.
Paste this into Terminal:
curl -fsSL https://rustyvibes.kunalbagaria.com/install | bash
The installer downloads the latest release from
rustyvibes.kunalbagaria.com, checks its SHA-256 checksum and
code signature, installs it in /Applications (or ~/Applications) without an admin password, and
opens it. Rustyvibes is signed but not notarised by Apple, so a copy downloaded in a browser would be
stopped by Gatekeeper; installed this way, it isn't. Run the same command again to update, or add
-s -- --uninstall to remove it.
Requires macOS 13 Ventura or later, on Apple Silicon or Intel.
Measured on an M2 Max (macOS 26.2) with the signed release bundle:
| Target | Measured | |
|---|---|---|
| CPU while idle | 0% | 0.0% |
| Wakeups while idle (after the audio idle stop) | 0/s | 0/s |
| CPU while typing 10 keys/s | — | 0.4% |
| Physical memory footprint | < 25 MB | 16–17 MB |
| Universal binary (arm64 + x86_64) | < 3 MB | 1.16 MB (arm64 slice 541 KB) |
| App bundle / DMG | — | 17.5 MB / 12.6 MB |
| Key event handling (event-tap callback) | < 20 µs | ≤ 5 µs |
| Audio render callback (budget 2,667 µs) | ≪ budget | ≤ 8 µs |
| Mixer cost with 32 voices | < 1% | 0.39% (10.5 µs per block) |
| Clip onset (silence before the click) | ≤ 1 ms | ≤ 0.5 ms |
| Loudness spread across packs | ≤ ±1.5 dB | 0.0 dB |
| Launch to menu bar ready (warm) | — | ~140–180 ms |
While you type, sounds go out through a 128-frame buffer (≈2.7 ms at 48 kHz) plus your audio device's own latency. After 15 s of silence Rustyvibes stops and releases the audio device so it never keeps your Mac awake; the next key press restarts it, which takes ~13 ms on a device that is already running and up to ~50 ms on some USB interfaces that start from cold.
┌──────────────────────── main thread (AppKit) ────────────────────────┐
│ status item + NSMenu · onboarding window · NSUserDefaults │
│ writes settings atomics · pushes preview sounds (UI ring) │
└───────────────┬───────────────────────────────────────┬───────────────┘
│ atomics (enabled, volume, pack, …) │ SPSC ring
┌── event-tap thread ──┐ ▼ ▼
│ listen-only │ shared engine state ┌─ CoreAudio IO thread ─┐
│ CGEventTap ├─ SPSC ring (keys) ─────────────────►│ render callback: │
│ key → clip lookup, │ │ start voices, cubic │
│ variation, panning │──wake (only if audio is stopped)──┐ │ resampling, mix, │
└──────────────────────┘ │ │ ramped gain, limiter │
▼ └──────────▲────────────┘
┌─ audio control thread ─┐│ start / stop
│ starts the AUHAL unit ├┘
│ on demand, stops after │
│ 15 s of silence │
└────────────────────────┘
CGEventTap on its own high-priority thread. It needs only the Input
Monitoring permission, ignores auto-repeat, and decodes modifier keys from their device flags.
The callback does two table lookups and pushes one command into a lock-free ring.assets/soundpacks and are converted at build time
into .rvpack files: decoded, trimmed to their transients (some recordings start up to 54 ms
late), loudness-matched, dithered to 16-bit mono, and mapped to every macOS key.
At runtime they are memory-mapped and never decoded; only the active pack's samples are kept
resident.NSMenu with a
header switch, a grouped soundpack submenu with tinted keycap glyphs, a volume slider and
toggles; icons are drawn in code.The crates: crates/rustyvibes (the app), crates/rvpack (the soundpack format and keyboard
geometry) and crates/xtask (soundpack conversion, bundling and signing).
You need Rust (stable) and Xcode's command-line tools.
cargo xtask packs # convert assets/soundpacks → target/packs/*.rvpack
cargo run --release -p rustyvibes # run from the terminal (uses the terminal's Input Monitoring grant)
cargo xtask bundle # target/bundle/Rustyvibes.app (universal, signed)
cargo xtask dmg # target/Rustyvibes-2.0.0.dmg
cargo xtask notarize --keychain-profile <name> # the same, notarised and stapled
cargo xtask bundle signs with the first "Developer ID Application" identity in your keychain
(hardened runtime, secure timestamp) and falls back to an ad-hoc signature; --adhoc forces
ad-hoc and --native builds only for your Mac's architecture.
cargo xtask notarize needs that Developer ID plus a notarytool keychain profile, created once
with xcrun notarytool store-credentials <name> (see its --help for the App Store Connect API
key and Apple ID options; the credentials stay in your keychain). It submits the app, staples the
ticket, builds the DMG around the stapled app, then submits and staples the DMG, so both open
without a Gatekeeper prompt, even offline. A rejection prints Apple's log of what to fix.
The website, its 3D keyboard and the installer live in site/; bun run release
there publishes the app for the installer.
Tests and lints: cargo test --workspace, cargo clippy --workspace --all-targets -- -D warnings.
The full-catalog conversion test runs with cargo test -p xtask --profile xtask -- --ignored.
rustyvibes --selftest [--audible] play every soundpack through the real audio path and report timings
rustyvibes --tap-test check that key events reach the engine (injects one Shift press)
rustyvibes --bench measure the mixer
rustyvibes --snapshot [dir] render the UI pieces to PNG
RUSTYVIBES_LOG=1 rustyvibes log to stderr with timestamps
Rustyvibes is MIT-licensed. The soundpacks come from two MIT-licensed projects:
Mechvibes by Hai Nguyen (the Cherry MX, Topre Purple
Hybrid and Everglide packs) and kbsim by Thomas Lai (all other
packs). Full licence texts, including those of the Rust crates Rustyvibes uses, are in
THIRD_PARTY_NOTICES.md and inside the app bundle under
Contents/Resources/Licenses.