Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Mechanical keyboard sounds for every key press, as a tiny native macOS menu bar app written in Rust.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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.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.