README file from
Github🎙️ Obsidian Voice Briefing Plugin
Convert your Obsidian notes into 1-2 minute audio briefings using AI and Text-to-Speech, with cloud sharing support via Google Drive.
⚖️ License
Copyright © 2025-2026 reallygood83.
This plugin is released under the MIT License. You may use, copy, modify, and distribute it, including in the Obsidian community directory. Keep the copyright notice and license text with copies of the software.
✨ Features
🤖 Multi-Provider AI Script Generation
- Google Gemini (default
gemini-3.8-flash) - xAI Grok (default
grok-4.7) - OpenAI (default
gpt-6.1-sol) - Anthropic Claude (default
claude-sonnet-5)
Each provider has a model dropdown plus a custom model ID field. Saved IDs that vendors have retired are moved to a current ID the first time settings load. An ID you typed yourself is left as-is.
🔊 Text-to-Speech
- Edge TTS - Free local Microsoft voices (
edge-ttsCLI) - Gemini TTS - default
gemini-3.8-flash-tts - OpenAI TTS - default
gpt-4o-mini-tts - ElevenLabs - default
eleven_v4, witheleven_v4_turboand earlier models in the dropdown, plus a custom model ID field - xAI TTS - present in settings, not used for generation (the realtime socket cannot refresh auth)
☁️ Google Drive Cloud Sharing
- Upload audio files to Google Drive
- Generate public sharing links
- Three link format options:
- HTML Audio Player (recommended)
- Markdown Link
- Direct URL
🌐 Multi-Language Support
- 🇰🇷 Korean (한국어)
- 🇺🇸 English (US)
- 🇯🇵 Japanese (日本語)
- 🇨🇳 Chinese (中文)
- 🇪🇸 Spanish (Español)
- 🇫🇷 French (Français)
- 🇩🇪 German (Deutsch)
🎨 Three Briefing Styles
- Metaphorical - Easy analogies for complex concepts
- Feynman Technique - Teaching-style explanations
- News Anchor - Professional presentation style
- Custom - Define your own style with prompts
📦 Installation
Prerequisites
- Obsidian v0.15.0 or higher
- Node.js v16 or higher (for development)
- Edge TTS (for free TTS option):
pip install edge-tts
Install Plugin
- Download the latest release from GitHub
- Extract to
.obsidian/plugins/voice-briefing/(the folder name must match the plugin id) - Enable the plugin in Obsidian Settings → Community Plugins
⚙️ Configuration
1️⃣ AI Provider Setup
Google Gemini (Recommended - Free)
- Get API key from Google AI Studio
- In plugin settings:
- AI Provider: Google Gemini
- API Key:
your-gemini-api-key - Model:
gemini-3.8-flash(default). Pick another listed model, or type a model ID in the custom field.
Other Providers
- XAI: Get key from XAI Console
- OpenAI: Get key from OpenAI Platform
- Anthropic: Get key from Anthropic Console
2️⃣ TTS Engine Setup
Option A: Edge TTS (Free)
- Install Edge TTS:
pip install edge-tts - In plugin settings:
- TTS Engine: Edge TTS (Free)
- Select voice based on your language
Option B: ElevenLabs
- Sign up at ElevenLabs
- Get an API key from account settings
- In plugin settings:
- TTS Engine: ElevenLabs
- API Key: your ElevenLabs API key
- Voice ID: a voice id from ElevenLabs
- Model: Eleven v4 (
eleven_v4) is the default.eleven_v4_turbois also listed. A non-empty custom model ID overrides the dropdown.
Option C: Gemini TTS or OpenAI TTS
Select the engine, set that provider's API key, then choose a model from the dropdown or type a custom model ID.
3️⃣ Google Drive 연결 (선택)
액세스 토큰을 붙여 넣지 않습니다. 데스크톱 앱이 127.0.0.1 루프백으로 Google 로그인 창을 열고, PKCE로 코드를 바꾼 뒤 refresh token을 플러그인 데이터에 저장합니다. 토큰은 로그에 남기지 않습니다. 공식 안내: OAuth 2.0 for Mobile & Desktop Apps.
Google Cloud에서 데스크톱 클라이언트 만들기
- Google Cloud Console에서 프로젝트를 만들거나 고릅니다.
- API 및 서비스 → 라이브러리에서 Google Drive API를 사용 설정합니다.
- OAuth 동의 화면을 구성합니다. 앱이 테스트 상태이면 refresh token이 7일 뒤에 만료됩니다. 본인 Google 계정을 테스트 사용자로 추가하거나, 앱을 게시하세요.
- 사용자 인증 정보 → 사용자 인증 정보 만들기 → OAuth 클라이언트 ID에서 애플리케이션 유형을 데스크톱 앱으로 만듭니다. 데스크톱 클라이언트에는 클라이언트 ID와 클라이언트 시크릿이 함께 있습니다.
- 콘솔이 리디렉션 URI를 요구하면
http://127.0.0.1:8585/callback을 추가합니다. 플러그인 기본 포트는 8585입니다. - 플러그인 설정에서 Cloud Sharing을 켜고 Client ID와 Client Secret을 입력한 뒤 Connect with Google을 누릅니다. 브라우저에서 허용하면 창을 닫고 Obsidian으로 돌아오면 됩니다.
- 업로드할 폴더를 쓰려면 드라이브 폴더 URL의 폴더 ID를 설정에 넣습니다. 비우면 내 드라이브 루트에 업로드합니다.
Optional: Create Upload Folder
- Create folder in Google Drive
- Copy folder ID from URL:
https://drive.google.com/drive/folders/YOUR_FOLDER_ID - Paste folder ID in plugin settings
🚀 Usage
Generate Voice Briefing
- Open any note in Obsidian
- Run command:
Generate briefing(the palette shows it as Voice Briefing: Generate briefing) - Wait for AI script generation and audio conversion
- Audio will be embedded at the bottom of your note
Link Format Examples
HTML Audio Player (Recommended)
## 🎧 Voice Briefing
<audio controls src="https://drive.google.com/uc?export=download&id=FILE_ID"></audio>
*Generated on 2025-01-24 • Duration: ~90s*
*[View in Google Drive](https://drive.google.com/file/d/FILE_ID/view)*
Markdown Link
## 🎧 Voice Briefing
[🔊 Play Audio](https://drive.google.com/uc?export=download&id=FILE_ID)
*Generated on 2025-01-24 • Duration: ~90s*
*[View in Google Drive](https://drive.google.com/file/d/FILE_ID/view)*
Direct URL
## 🎧 Voice Briefing
https://drive.google.com/uc?export=download&id=FILE_ID
*Generated on 2025-01-24 • Duration: ~90s*
🔧 Troubleshooting
Common Issues
"Edge TTS: command not found"
- Solution: Install Edge TTS with
pip install edge-tts - Verify: Run
edge-tts --helpto confirm installation
"Invalid API key"
- Solution: Check API key format and provider selection
- Ensure API key has proper permissions
"Google Drive upload failed"
- Solution: Use Connect with Google again if the refresh token was revoked
- A consent screen left in Testing mode expires refresh tokens after 7 days
- Verify the folder ID if you set one
"Audio not playing in shared notes"
- Solution: Use HTML or Markdown link format instead of local files
- Local
![[file.mp3]]syntax only works in your vault
🛠️ Development
Build from Source
# Clone repository
git clone https://github.com/reallygood83/voice-note-obsidian.git
cd voice-note-obsidian
# Install dependencies
npm install
# Build plugin
npm run build
# Development mode (watch)
npm run dev
Project Structure
voice-note-obsidian/
├── main.ts # Plugin main file
├── src/
│ ├── ai/
│ │ └── script-generator.ts # AI script generation
│ ├── tts/
│ │ ├── edge-tts-handler.ts # Edge TTS integration
│ │ ├── elevenlabs-handler.ts # ElevenLabs integration
│ │ └── tts-generator.ts # Unified TTS interface
│ └── cloud/
│ └── google-drive-client.ts # Google Drive API client
├── styles.css # Plugin styles
├── manifest.json # Plugin metadata
└── package.json # Dependencies
📋 Roadmap
- Multi-provider AI script generation
- Edge TTS and ElevenLabs support
- Google Drive cloud sharing
- Multi-language support
- Google Drive desktop OAuth (loopback + PKCE + refresh token)
- Batch processing for multiple notes
- Custom voice cloning (ElevenLabs)
- Audio transcription for existing recordings
🙏 Acknowledgments
- Built with Obsidian API
- AI powered by Google Gemini, XAI, OpenAI, and Anthropic
- TTS by Microsoft Edge TTS and ElevenLabs
- Cloud storage by Google Drive
🐛 Bug Reports & Feature Requests
Please open an issue on GitHub
Network, accounts, and files
This plugin is desktop-only (isDesktopOnly: true). Edge TTS runs the edge-tts command, Google sign-in listens on 127.0.0.1, and audio is written with Node.js file APIs.
It sends note text and API keys only to the provider you select:
- Google Gemini script and TTS APIs, when Gemini is selected
- xAI APIs, when xAI is selected
- OpenAI script and speech APIs, when OpenAI is selected
- Anthropic Messages API, when Claude is selected
- ElevenLabs text-to-speech API, when ElevenLabs is selected
- Google OAuth and Google Drive, when cloud sharing is connected. The access token and refresh token stay in this plugin's data. They are not written to the console.
- Microsoft, indirectly, when Edge TTS is installed: the local
edge-ttsCLI contacts Microsoft to synthesize speech
Audio files are written inside the vault at <vault>/.obsidian/voice-briefings/ (via Vault.configDir, not a hardcoded path). The plugin does not read files outside the vault. There is no telemetry and no self-update.
API keys and Google client credentials are your accounts. Several of these services are paid or have a free tier. Full use of a provider requires that provider's key.
커뮤니티 디렉터리에 올리기
라이선스는 MIT입니다. 커뮤니티 디렉터리가 main.js, manifest.json, styles.css를 사용자에게 배포해도 됩니다.
작성자가 직접 할 일:
- GitHub 저장소를 공개합니다. 비공개 저장소는 디렉터리에 등록되지 않습니다.
- 저장소 Settings → Actions → General → Workflow permissions를 Read and write로 둡니다.
- 제출할 릴리스의 태그 이름은
manifest.json의version과 같아야 합니다. 0.5.4 릴리스가 그 버전입니다. - community.obsidian.md에 GitHub 계정을 연결하고 플러그인을 제출합니다. 안내: Submit your plugin.
authorUrl은 GitHub 프로필 https://github.com/reallygood83 입니다. 플러그인 설명은 마침표로 끝납니다. versions.json에는 0.5.0부터 0.5.4까지 minAppVersion 1.4.0이 들어 있습니다.
👤 Author
문정 (reallygood83)
- GitHub: @reallygood83
🌟 Support
If you find this plugin useful, please consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs and issues
- 💡 Suggesting new features
- 📖 Contributing to documentation
Made with ❤️ for the Obsidian community
🚧 Development Status: Active development, ready for testing