Walter Forkel89 downloadsRecord, transcribe, clean up, and append thoughts with configurable providers.
Voice Append records a thought, transcribes it through a configurable transcription provider, cleans it up with an LLM provider, and appends the result to the active Obsidian note. It is designed for quick capture on iPhone and also works on desktop.
The defaults use https://api.openai.com/v1, gpt-transcribe for transcription, and gpt-5.6-luna for cleanup. Model availability depends on your provider account and may change over time.
Until Voice Append is listed in Obsidian's Community Plugins directory, install it manually from a GitHub release or build it from source.
For a manual installation, run npm ci && npm run release, then copy these files from dist/ into <vault>/.obsidian/plugins/voice-append/:
main.jsmanifest.jsonstyles.cssReload Obsidian, open Settings → Community plugins, and enable Voice Append.
Open Recordings and status from the plugin settings or command palette to retry a failed job, download its audio, reassign its target note, or delete it.
20260924 083000 Morning idea.md); Replace existing filename uses only the generated title. Generated titles are not inserted into the note body./audio/transcriptions; cleanup and optional title generation use /chat/completions with Structured Outputs. URLs must be plain http or https API bases and cannot contain credentials, query strings, or fragments. Keep API keys in Secret Storage, never in a URL.Each job keeps a snapshot of its processing settings, so changing settings does not alter recordings that are already queued.
OpenRouter can handle both steps with the plugin's single API key. Set both provider base URLs to https://openrouter.ai/api/v1, use an OpenRouter key, and select OpenRouter model slugs. For transcription, openai/whisper-1 is one documented option. For cleanup, choose a model that supports structured outputs through Chat Completions. Availability and model support can change; see OpenRouter's structured outputs and transcription guide.
The default setup shares one key. Advanced settings can store a separate transcription key or omit authentication for a local endpoint.
Voice Append sends new audio to the configured transcription provider and its transcript to the configured LLM provider. The configuration test sends only its bundled synthetic sample and generated transcript. Note context is sent only when Use note context for cleanup is enabled. Familiar names and concepts are sent when that field is populated. Cleanup requests use store: false.
API keys are stored in Obsidian Secret Storage. You can select an existing secret from Obsidian's keychain or create one with its native picker. Only the selected secret's name is saved in device-local preferences, outside synced plugin settings. Existing plugin-owned keys and unambiguous older vault-ID-based keys remain usable. A missing or cleared selection never silently switches to another provider's key. Endpoint URLs and models are ordinary plugin settings; no raw key is written there. Recordings, transcripts, cleanup results, and the local append journal are stored in IndexedDB on the device where they were created. New audio is read and stored as bytes before the plugin reports it saved. They are not synced through the vault. Audio from completed jobs is removed after seven days; pending and failed jobs remain until completed or deleted.
Review the privacy and data-retention policies of your configured providers before using the plugin with sensitive material.
Use GitHub Issues to report bugs or suggest features. Search existing issues first, and remove API keys and private note content before submitting a report. The plugin settings provide direct links for bug reports and feature requests.
npm ci
npm test
npm run build
npm run dev
npm run build type-checks the project and writes the production bundle to main.js and dist/main.js. npm run dev watches the source files and includes the local test commands and an inline source map. Set OBSIDIAN_PLUGIN_DIR to install successful builds into a test vault automatically:
OBSIDIAN_PLUGIN_DIR="/path/to/Test Vault/.obsidian/plugins/voice-append" npm run dev
Development builds include two local test commands. Production builds omit them and source maps. Run npm run release to create the distributable files in both the repository root and dist/.
The processing path is:
recorder.ts → IndexedDB → resumable job processor → configured providers → Obsidian editor or vault
The test suite covers storage recovery, append idempotency, localization, microphone permissions, wake lock behavior, note context, title generation, provider request contracts, and error handling.
minAppVersion in manifest.json if necessary.npm version patch, npm version minor, or npm version major. The version script updates manifest.json and versions.json.Release tags must match the version exactly, without a v prefix.
Planned and exploratory feature ideas are tracked in ROADMAP.md and as GitHub issues. Current themes include quick capture into a new note, configurable title generation outside the voice append flow, and locally selected context from related notes, concepts, and tag hierarchies.
Bug reports and focused pull requests are welcome. See CONTRIBUTING.md for development guidance. Please report security issues according to SECURITY.md, rather than opening a public issue.