# Metronome + Tuner
[SUBCULT](https://subcult.tv) ยท [Support on Patreon](https://patreon.com/subcult)
Metronome + Tuner adds timing and chromatic tuning tools to Obsidian.
## Features
- Metronome from 30 to 300 BPM with **Tap tempo**, configurable time signature, first-beat accent, volume, and seven click sounds
- Chromatic tuner with frequency, confidence, cents, and note readouts
- Configurable A4 reference from 415 to 466 Hz
- Keyboard-accessible tabs and controls
- Desktop and mobile support
## Privacy
The plugin requests microphone access only after you select **Use microphone**. It analyzes microphone audio locally and does not record, store, transmit, or play that audio. Microphone permission and availability depend on the device, operating system, and Obsidian mobile platform.
## Install
After the plugin is accepted into the Obsidian marketplace:
1. Open **Settings โ Community plugins** in Obsidian.
2. Select **Browse**, search for **Metronome + Tuner**, and select **Install**.
3. Select **Enable**.
### Manual install
Download `main.js`, `manifest.json`, and `styles.css` from a release. Copy them into:
```text
/.obsidian/plugins/metronome-tuner/
```
Restart Obsidian, then enable **Metronome + Tuner** under **Settings โ Community plugins**.
## Usage
Select the ribbon icon or run **Open** to open the **Tempo & tune** view.
- In **Metronome**, set the tempo, select **Tap tempo**, configure **Meter & sound**, then select **Start metronome**. Press Space while focus is outside a control to start or stop playback.
- In **Tuner**, select **Use microphone**, allow microphone access, and play one clear note near the microphone. Select **Stop listening** when finished.
- Change startup defaults under **Settings โ Metronome + Tuner**.
## Commands
- **Open**
- **Start metronome**
- **Stop metronome**
## Development
Node.js 24 or later is required.
```bash
npm install
npm run dev
```
`npm run dev` watches the source and writes `main.js` at the repository root.
## Validation
```bash
npm run lint
npm test
npm run typecheck
npm run build
npm run build:clean
npm run check
npm run verify:release
```
`npm run build` writes a production `main.js`. `npm run build:clean` removes any existing `main.js` first. `npm run check` runs linting, tests, type checking, and a clean production build. `npm run verify:release` is the release gate: it runs `check`, then validates release metadata and the newly built artifacts. Pass a tag to check it locally, for example `npm run verify:release -- 1.0.0`.
## Release process
1. Set the same strict `x.y.z` version in `package.json`, `manifest.json`, and `versions.json`.
2. Run `npm run verify:release -- x.y.z`.
3. Create and push an exact `x.y.z` tag. Do not add a `v` prefix.
4. CI creates or updates a **draft** GitHub release. Review its assets and notes, then publish it manually.
Do not publish a generated draft without manual verification.
## Support and issues
Questions or feedback? Email [patrick@subcult.tv](mailto:patrick@subcult.tv). Report bugs or request features in [Gitea Issues](https://git.subcult.tv/PatrickFanella/obsidian-plugin-metronome-tuner/issues).
## About SUBCULT and support
Made by [Patrick Fanella](https://patrickfanella.co) as part of
[SUBCULT](https://subcult.tv). Explore the tools and projects at
**[subcult.tv](https://subcult.tv)**.
If this plugin is useful to you, **[support SUBCULT on Patreon](https://patreon.com/subcult)**
to help fund its development and the wider project.