Speech to Text

pending

by Taesun Lee

Convert audio recordings to text using multiple AI providers (OpenAI Whisper, Deepgram)

★ 1 starsUpdated 17d agoMITDiscovered via Obsidian Unofficial Plugins
View on GitHub

Speech to Text for Obsidian

Version License Obsidian OpenAI Deepgram

Convert audio recordings to text directly in Obsidian using multiple AI providers with advanced features like speaker diarization.

English | 한국얎


English

Features

🎙 Multi-Provider Audio Transcription

  • OpenAI Whisper: High accuracy, stable performance
  • Deepgram Nova 3: Latest model with 98% accuracy, 70% cost reduction
  • Speaker Diarization: Automatic speaker separation with "Speaker 1:", "Speaker 2:" format
  • Auto Selection: Automatically chooses the best provider for each file
  • Supported Formats: M4A, MP3, WAV, MP4, WebM, OGG, FLAC

🌐 Multi-language Support

  • Auto Detection: Automatic language recognition
  • 40+ Languages: Korean, English, Japanese, Chinese, Spanish, French, German, etc.
  • Provider Optimization: Each provider optimized for different languages

📝 Smart Text Insertion & Speaker Recognition

  • Cursor Position: Insert at current cursor location
  • Note Positions: Beginning or end of note
  • Auto Note Creation: Creates new note if no active editor
  • Speaker Diarization: Automatic speaker identification and labeling
  • Multi-Speaker Support: Clear separation for meetings, interviews, conversations

⚡ Performance & Architecture

  • Nova-3 Model: 98% accuracy with $0.0043/min (70% cost reduction)
  • Clean Architecture: Domain-driven design with clear separation of concerns
  • Intelligent Provider Selection: Best provider based on file size and format
  • Real-time Progress: Status bar progress indicator with cancellation support
  • Async Processing: Non-blocking background processing
  • Memory Management: Built-in memory monitoring and optimization
  • Performance Benchmarking: Integrated performance monitoring tools
  • Error Boundaries: Comprehensive error handling and recovery
  • Dependency Injection: IoC container for better testability
  • Event-Driven Architecture: Decoupled components with EventManager
  • Batch Processing: Efficient batch request handling
  • Caching Layer: Smart caching for improved performance
  • Settings Migration: Automatic settings upgrade and validation
  • Fallback Mechanism: Automatic provider switching on failure

Installation

Manual Installation

From Releases

  1. Download the latest release from Releases
  2. Extract files to your vault's .obsidian/plugins/obsidian-speech-to-text/ folder
  3. Restart Obsidian
  4. Enable "Speech to Text" in Community Plugins settings

Development Build

# Clone repository
git clone https://github.com/asyouplz/SpeechNote.git
cd SpeechNote

# Install dependencies
npm install

# Build
npm run build

# Copy to plugin folder
cp main.js manifest.json styles.css /path/to/your/vault/.obsidian/plugins/obsidian-speech-to-text/

Setup

API Key Configuration

1. Choose Provider

  1. Open Obsidian Settings → "Speech to Text"
  2. Select "Transcription Provider":
    • OpenAI Whisper: High quality, stable
    • Deepgram: Fast speed, large file support
    • Auto: Automatic selection (recommended)

2. Get OpenAI API Key (for Whisper)

  1. Visit OpenAI Platform
  2. Sign in or create account
  3. Click "Create new secret key"
  4. Copy the key (⚠ shown only once)

3. Get Deepgram API Key (for Deepgram)

  1. Visit Deepgram Console
  2. Sign up or sign in
  3. Go to "API Keys" menu
  4. Click "Create a New API Key"
  5. Copy the API key

4. Configure Plugin

  1. Open Obsidian Settings (Cmd/Ctrl + ,)
  2. Select "Speech to Text" from left menu
  3. Enter your API key(s):
    • "OpenAI API Key" (for Whisper)
    • "Deepgram API Key" (for Deepgram)
  4. Save settings

Usage

Basic Usage

Method 1: Command Palette

  1. Open Command Palette: Cmd/Ctrl + P
  2. Search: "Transcribe audio file"
  3. Select File: Choose audio file from list
  4. Wait: Monitor progress in status bar
  5. Complete: Text automatically inserted into note

Method 2: Context Menu ✹

  1. File Explorer: Find audio file
  2. Right Click: Right-click on audio file
  3. Select: "Transcribe audio file"
  4. Auto Process: Transcription starts and inserts result

Method 3: Hotkeys

  1. Settings: Settings → Hotkeys → search "Transcribe audio file"
  2. Set Hotkey: Assign preferred key combination
  3. Execute: Use hotkey for quick access

🎭 Using Speaker Diarization

Enable Speaker Diarization

  1. Open Settings: Settings → Speech to Text → Deepgram Settings
  2. Enable Diarization: Toggle "Speaker Diarization" to ON
  3. Select Nova-3: Choose "Nova-3" model (default for new installations)
  4. Save Settings: Apply configuration

Example Results

🎙 Multi-speaker meeting audio:

📝 Transcription output:
Speaker 1: Good morning everyone, let's start the meeting.

Speaker 2: Thank you. I'd like to discuss the project timeline.

Speaker 1: That sounds good. What are your thoughts?

Speaker 3: I think we should extend the deadline by one week.

Best Practices for Speaker Diarization

  • Clear Audio: Use high-quality recordings for better accuracy
  • Speaker Separation: Ensure speakers don't talk simultaneously
  • Minimum Duration: Each speaker segment should be at least 2-3 seconds
  • Audio Format: Use M4A, MP3, or WAV for optimal results

Supported Audio Formats

FormatExtensionWhisperDeepgramMax SizeDiarizationDescription
M4A.m4a✅✅25MB/2GB✅Apple default recording format
MP3.mp3✅✅25MB/2GB✅Universal audio format
WAV.wav✅✅25MB/2GB✅Lossless, large file size
MP4.mp4✅✅25MB/2GB✅Audio from video files
WebM.webm❌✅-/2GB✅Web streaming format
OGG.ogg❌✅-/2GB✅Open source audio format
FLAC.flac❌✅-/2GB✅Lossless compression

Settings

Main Settings

  • Provider Selection:
    • Auto: Intelligent selection based on file
    • OpenAI Whisper: High quality, stable performance
    • Deepgram: Fast speed, speaker diarization support
  • Language: Auto-detect or specific language selection
  • Insert Position:
    • Cursor position
    • Beginning of note
    • End of note
  • Auto-insert: Automatic text insertion after transcription

Deepgram Settings

  • Model Selection:
    • Nova-3 (recommended): 98% accuracy, speaker diarization
    • Nova-2: Previous generation, high accuracy
    • Nova/Enhanced/Base: Legacy models
  • Features:
    • Speaker Diarization: Automatic speaker separation
    • Smart Format: Intelligent text formatting
    • Punctuation: Automatic punctuation
    • Utterances: Segment by natural speech patterns
    • Paragraphs: Automatic paragraph detection

Advanced Settings

  • Performance:
    • Batch Processing: Process multiple files efficiently
    • Memory Limits: Configure memory usage thresholds
    • Cache Duration: Result caching timeouts
    • Max Parallel Requests: Control concurrent API calls
    • Circuit Breaker: Automatic failure protection
  • Network:
    • Request Timeout: API request timeout settings
    • Retry Policy: Automatic retry configuration
    • Fallback Provider: Backup provider on failure
    • Health Checks: Monitor provider availability
  • Cost Management:
    • Monthly Budget: Set spending limits
    • Cost Limits: Per-request cost controls
    • Budget Alerts: Get notified at threshold
    • Auto Cost Optimization: Intelligent provider selection based on cost
  • Quality Control:
    • Quality Threshold: Minimum acceptable accuracy
    • Confidence Level: Minimum transcription confidence
    • Strict Language Mode: Enforce language consistency
    • Post-Processing: Additional text refinement
  • Text Formatting:
    • Plain Text: Standard text output
    • Markdown: Markdown-formatted output
    • Quote Block: Insert as blockquote
    • Bullet List: Format as list items
    • Heading: Insert as headings
    • Code Block: Format as code
    • Callout: Use Obsidian callouts
  • A/B Testing:
    • Provider Comparison: Test multiple providers
    • Traffic Split: Percentage-based routing
    • Metric Tracking: Compare accuracy, speed, cost
    • Duration Control: Set test duration
  • Large File Handling:
    • Auto Chunking: Split files automatically
    • Chunk Size: Configure chunk size (MB)
    • Overlap: Set chunk overlap for continuity
  • Development:
    • Debug Mode: Detailed logging
    • Performance Monitoring: Track performance metrics
    • Error Reporting: Enhanced error details
    • Metrics Retention: Configure data retention period

Troubleshooting

Common Issues

"Invalid API Key" Error

Solutions:

  1. Verify API key format (OpenAI: starts with sk-)
  2. Check API key status on provider dashboard
  3. Ensure sufficient credits/active subscription
  4. Remove any extra spaces from key

"File too large" Error

Solutions:

  1. Check file size limits (Whisper: 25MB, Deepgram: 2GB)
  2. Use Deepgram for larger files
  3. Compress audio files if needed

Speaker Diarization Not Working

Solutions:

  1. Ensure Nova-3 model is selected (required for diarization)
  2. Check "Speaker Diarization" is enabled in Deepgram settings
  3. Verify audio quality (clear speakers, minimal overlap)
  4. Use supported audio formats (M4A, MP3, WAV recommended)
  5. Check minimum speaker duration (2-3 seconds per segment)

No Audio Files Found

Solutions:

  1. Verify supported formats: .m4a, .mp3, .wav, .mp4, etc.
  2. Ensure files are in vault folder
  3. Restart Obsidian
  4. Wait for file indexing (large vaults)

Network Errors

Solutions:

  1. Check internet connection
  2. Verify VPN/proxy settings
  3. Check provider API status

Commands

CommandDescriptionStatus
Transcribe audio fileSelect and transcribe audio file✅ Available
Cancel transcriptionCancel ongoing transcription✅ Available

Development

Prerequisites

  • Node.js 16.0.0+
  • npm 7.0.0+
  • Obsidian 0.15.0+
  • TypeScript 4.7.4+

Development Setup

# Clone repository
git clone https://github.com/asyouplz/SpeechNote.git
cd SpeechNote

# Install dependencies
npm install

# Development mode (watch for changes)
npm run dev

# Production build
npm run build

# Code quality checks
npm run lint          # Lint check
npm run lint:fix      # Auto-fix lint issues
npm run format        # Format code
npm run format:check  # Check formatting
npm run typecheck     # Type checking

# Testing
npm test              # Run all tests
npm run test:unit     # Unit tests only
npm run test:integration  # Integration tests
npm run test:e2e      # End-to-end tests
npm run test:coverage # Generate coverage report
npm run test:watch    # Watch mode for TDD

# Clean build
npm run clean         # Clean build artifacts
npm run clean:all     # Clean everything including node_modules

# Full validation
npm run validate      # Lint + Type check + Tests
npm run ci           # Full CI pipeline

Project Structure

SpeechNote/
├── src/
│   ├── main.ts                     # Plugin entry point
│   ├── application/                # Application services
│   │   ├── EditorService.ts       # Editor management
│   │   ├── EventManager.ts        # Event handling
│   │   ├── StateManager.ts        # State management
│   │   └── TextInsertionHandler.ts # Text insertion logic
│   ├── architecture/               # Architecture components
│   │   ├── DependencyContainer.ts # Dependency injection
│   │   ├── ErrorBoundary.ts       # Error handling boundaries
│   │   └── PluginLifecycleManager.ts # Plugin lifecycle
│   ├── core/                       # Core business logic
│   │   ├── LazyLoader.ts          # Lazy loading utilities
│   │   └── transcription/         # Transcription services
│   │       ├── AudioProcessor.ts  # Audio processing
│   │       ├── TextFormatter.ts   # Text formatting
│   │       └── TranscriptionService.ts # Main transcription service
│   ├── domain/                     # Domain models
│   │   ├── events/                # Domain events
│   │   └── models/                # Domain entities
│   ├── infrastructure/            # External integrations
│   │   ├── api/                   # API clients
│   │   │   ├── providers/         # Provider implementations
│   │   │   │   ├── deepgram/     # Deepgram integration
│   │   │   │   ├── whisper/      # OpenAI Whisper integration
│   │   │   │   └── factory/      # Provider factory
│   │   │   ├── adapters/         # Interface adapters
│   │   │   ├── BatchRequestManager.ts # Batch request handling
│   │   │   ├── FileUploadManager.ts   # File upload management
│   │   │   ├── SettingsAPI.ts        # Settings API
│   │   │   ├── SettingsMigrator.ts   # Settings migration
│   │   │   ├── SettingsValidator.ts  # Settings validation
│   │   │   └── TranscriberFactory.ts # Transcriber factory
│   │   ├── audio/                # Audio utilities
│   │   ├── cache/                # Caching layer
│   │   ├── logging/              # Logging infrastructure
│   │   ├── security/             # Security utilities
│   │   └── storage/              # Storage management
│   ├── patterns/                  # Design patterns
│   ├── testing/                   # Testing utilities
│   ├── types/                     # Type definitions
│   │   ├── DeepgramTypes.ts     # Deepgram type definitions
│   │   ├── events.ts             # Event types
│   │   ├── guards.ts             # Type guards
│   │   ├── resources.ts          # Resource types
│   │   └── strategy.ts           # Strategy pattern types
│   ├── ui/                        # User interface
│   │   ├── commands/             # Command implementations
│   │   ├── formatting/           # Format options UI
│   │   ├── modals/              # Modal dialogs
│   │   ├── settings/            # Settings tab UI
│   │   └── statusbar/           # Status bar components
│   └── utils/                     # Utilities
│       ├── error/                # Error handling utilities
│       ├── memory/               # Memory management
│       └── performance/          # Performance monitoring
├── __tests__/                     # Test files
├── esbuild.config.mjs            # Build configuration
├── jest.config.js                # Test configuration
├── manifest.json                 # Plugin metadata
├── package.json                  # Project configuration
└── README.md                     # Documentation

Architecture Highlights

Clean Architecture Layers

  • Application Layer: Orchestrates use cases and coordinates domain logic
  • Core Layer: Business logic and transcription services
  • Domain Layer: Business entities and domain events
  • Infrastructure Layer: External services and API integrations
  • UI Layer: User interface components and settings management

Design Patterns Used

  • Factory Pattern: TranscriberFactory for provider instantiation
  • Adapter Pattern: API adapters for provider integration
  • Observer Pattern: Event-driven architecture with EventManager
  • Strategy Pattern: Multiple transcription providers
  • Repository Pattern: Storage management abstraction
  • Dependency Injection: IoC container for loose coupling
  • Error Boundary Pattern: Comprehensive error handling

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Contribution Process

  1. Fork the repository
  2. Create feature branch: git checkout -b feature/amazing-feature
  3. Commit changes: git commit -m 'feat: add amazing feature'
  4. Push to branch: git push origin feature/amazing-feature
  5. Create Pull Request

Code Style Guidelines

  • Follow TypeScript best practices
  • Use ESLint and Prettier configurations
  • Write unit tests for new features
  • Update documentation for API changes

License

This project is licensed under the MIT License - see the LICENSE file for details.

Credits

Acknowledgments

  • Obsidian Team: Obsidian Plugin API
  • OpenAI: Whisper API
  • Deepgram: Speech-to-Text API
  • Community: Obsidian community feedback and contributions

Built With

  • TypeScript
  • ESBuild
  • Jest
  • ESLint & Prettier

Support

Need Help?

Show Your Support

If this project helped you:

  • ⭐ Star on GitHub
  • 🐊 Share on social media
  • ☕ Buy me a coffee

Recent Updates

🚀 v3.0.4 (Latest) - Settings Stability & Deepgram Cleanup

  • 🛠 Settings Stability: Improves plugin settings reliability
  • 🧹 Deepgram Refactor: Cleanup and refactor for provider integration
  • 🧩 General Fixes: Minor bug fixes and improvements

v3.0.1 - Enterprise Architecture & Performance

  • 🏗 Clean Architecture: Domain-driven design with clear separation of concerns
  • 🎯 Modular Structure: Organized into application, core, domain, infrastructure layers
  • ⚡ Performance Monitoring: Built-in performance benchmarking and memory management
  • 🛡 Error Boundaries: Comprehensive error handling with ErrorBoundary pattern
  • 📊 Dependency Injection: DependencyContainer for better testability
  • 🧪 Test Coverage: Unit, integration, and E2E test suites
  • 🔄 Settings Migration: Automatic settings migration and validation
  • 📊 Batch Processing: Efficient batch request management

v3.0.0 - Nova-3 & Speaker Diarization

  • ✹ Nova-3 Model: Default model upgrade with 98% accuracy
  • 🎭 Speaker Diarization: Complete implementation with "Speaker 1:", "Speaker 2:" format
  • 💰 Cost Optimization: 70% cost reduction with Deepgram Nova-3
  • 🔧 Code Quality: Improved type safety and code organization

v1.0.0 - Initial Release

  • 🎉 Multi-Provider Support: OpenAI Whisper & Deepgram integration
  • 🌐 Multi-language Support: 40+ languages with auto-detection
  • 📝 Smart Text Insertion: Flexible insertion options
  • 🎯 Context Menu Integration: Right-click transcription

한국얎

죌요 Ʞ능

🎙 닀쀑 공꞉자 였디였 변환

  • OpenAI Whisper: 높은 정확도, 안정적읞 성능
  • Deepgram Nova 3: 최신 몚덞, 98% 정확도, 70% 비용 절감
  • 화자 분늬: "Speaker 1:", "Speaker 2:" 형식윌로 자동 화자 구분
  • 자동 선택: 각 파음에 가장 적합한 공꞉자 자동 선택
  • 지원 형식: M4A, MP3, WAV, MP4, WebM, OGG, FLAC

🌐 닀국얎 지원

  • 자동 감지: 자동 ì–žì–Ž 읞식
  • 40개 읎상 ì–žì–Ž: 한국얎, 영얎, 음볞얎, 쀑국얎, 슀페읞얎, 프랑슀얎, 독음얎 등
  • 공꞉자 최적화: 각 공꞉자별 ì–žì–Ž 최적화

📝 슀마튞 텍슀튞 삜입 및 화자 읞식

  • 컀서 위치: 현재 컀서 위치에 삜입
  • 녾튾 위치: 녞튞의 시작 또는 끝에 삜입
  • 자동 녾튾 생성: 활성 펞집Ʞ가 없윌멎 새 녾튾 생성
  • 화자 분늬: 자동 화자 식별 및 레읎랔링
  • 닀쀑 화자 지원: 회의, 읞터뷰, 대화륌 명확하게 구분

⚡ 성능 및 아킀텍처

  • Nova-3 몚덞: 98% 정확도, 분당 $0.0043 (70% 비용 절감)
  • 큎늰 아킀텍처: 도메읞 죌도 섀계 및 ꎀ심사 분늬
  • 지능형 공꞉자 선택: 파음 크Ʞ와 형식에 따륞 최적 공꞉자 선택
  • 싀시간 진행 상황: 췚소 지원읎 포핚된 상태 표시쀄 진행 표시Ʞ
  • 비동Ʞ 처늬: 녌랔로킹 백귞띌욎드 처늬
  • 메몚늬 ꎀ늬: 낎장 메몚늬 몚니터링 및 최적화
  • 성능 벀치마킹: 통합 성능 몚니터링 도구
  • 에러 바욎더늬: 포ꎄ적읞 였류 처늬 및 복구
  • 의졎성 죌입: 더 나은 테슀튞 가능성을 위한 IoC 컚테읎너
  • 읎벀튞 êž°ë°˜ 아킀텍처: EventManager륌 통한 분늬된 컎포넌튞
  • 배치 처늬: 횚윚적읞 배치 요청 처늬
  • 캐싱 레읎얎: 성능 향상을 위한 슀마튞 캐싱
  • 섀정 마읎귞레읎션: 자동 섀정 업귞레읎드 및 검슝
  • 폎백 메컀니슘: 싀팚 시 자동 공꞉자 전환

섀치

수동 섀치

늎늬슈에서 섀치

  1. Releases에서 최신 늎늬슈 닀욎로드
  2. vault의 .obsidian/plugins/obsidian-speech-to-text/ 폎더에 파음 압축 핎제
  3. Obsidian 재시작
  4. 컀뮀니티 플러귞읞 섀정에서 "Speech to Text" 활성화

개발 빌드

# 저장소 복제
git clone https://github.com/asyouplz/SpeechNote.git
cd SpeechNote

# 의졎성 섀치
npm install

# 빌드
npm run build

# 플러귞읞 폎더에 복사
cp main.js manifest.json styles.css /path/to/your/vault/.obsidian/plugins/obsidian-speech-to-text/

쎈Ʞ 섀정

API í‚€ 섀정

1. 공꞉자 선택

  1. Obsidian 섀정 → "Speech to Text" ì—Žêž°
  2. "Transcription Provider" 선택:
    • OpenAI Whisper: 고품질, 안정적
    • Deepgram: 빠륞 속도, 대용량 파음 지원
    • Auto: 자동 선택 (권장)

2. OpenAI API í‚€ 받Ʞ (Whisper용)

  1. OpenAI Platform 방묞
  2. 로귞읞 또는 계정 생성
  3. "Create new secret key" 큎늭
  4. í‚€ 복사 (⚠ 한 번만 표시됚)

3. Deepgram API í‚€ 받Ʞ (Deepgram용)

  1. Deepgram Console 방묞
  2. 회원가입 또는 로귞읞
  3. "API Keys" 메뉎로 읎동
  4. "Create a New API Key" 큎늭
  5. API í‚€ 복사

4. 플러귞읞 섀정

  1. Obsidian 섀정 ì—Žêž° (Cmd/Ctrl + ,)
  2. 왌쪜 메뉎에서 "Speech to Text" 선택
  3. API í‚€ 입력:
    • "OpenAI API Key" (Whisper용)
    • "Deepgram API Key" (Deepgram용)
  4. 섀정 저장

사용법

Ʞ볞 사용법

방법 1: 명령 팔레튾

  1. 명령 팔레튾 ì—Žêž°: Cmd/Ctrl + P
  2. 검색: "Transcribe audio file"
  3. 파음 선택: 목록에서 였디였 파음 선택
  4. 대Ʞ: 상태 표시쀄에서 진행 상황 몚니터링
  5. 완료: 텍슀튞가 자동윌로 녞튞에 삜입됚

방법 2: 컚텍슀튞 메뉎 ✹

  1. 파음 탐색Ʞ: 였디였 파음 ì°Ÿêž°
  2. 였륞쪜 큎늭: 였디였 파음에서 였륞쪜 큎늭
  3. 선택: "Transcribe audio file"
  4. 자동 처늬: 변환 시작 및 결곌 삜입

방법 3: 닚축킀

  1. 섀정: 섀정 → 닚축킀 → "Transcribe audio file" 검색
  2. 닚축킀 섀정: 선혞하는 í‚€ 조합 할당
  3. 싀행: 닚축킀륌 사용하여 빠륞 액섞슀

🎭 화자 분늬 사용하Ʞ

화자 분늬 활성화

  1. 섀정 ì—Žêž°: 섀정 → Speech to Text → Deepgram 섀정
  2. 분늬 활성화: "Speaker Diarization"을 ON윌로 전환
  3. Nova-3 선택: "Nova-3" 몚덞 선택 (새 섀치 시 Ʞ볞값)
  4. 섀정 저장: 구성 적용

결곌 예시

🎙 닀쀑 화자 회의 였디였:

📝 변환 결곌:
Speaker 1: 안녕하섞요 여러분, 회의륌 시작하겠습니닀.

Speaker 2: 감사합니닀. 프로젝튞 음정에 대핮 녌의하고 싶습니닀.

Speaker 1: 좋습니닀. ì–Žë–€ 생각읎신가요?

Speaker 3: 마감음을 음죌음 연장핎알 할 것 같습니닀.

화자 분늬 몚범 사례

  • 깚끗한 였디였: 더 나은 정확도륌 위핎 고품질 녹음 사용
  • 화자 분늬: 화자듀읎 동시에 말하지 않도록 볎장
  • 최소 Ꞟ읎: 각 화자 섞귞뚌튞는 최소 2-3쎈여알 핹
  • 였디였 형식: 최적의 결곌륌 위핎 M4A, MP3 또는 WAV 사용

지원 였디였 형식

형식확장자WhisperDeepgram최대 크Ʞ화자분늬섀명
M4A.m4a✅✅25MB/2GB✅Apple Ʞ볞 녹음 형식
MP3.mp3✅✅25MB/2GB✅범용 였디였 형식
WAV.wav✅✅25MB/2GB✅묎손싀, 큰 파음 크Ʞ
MP4.mp4✅✅25MB/2GB✅비디였 파음의 였디였
WebM.webm❌✅-/2GB✅웹 슀튞늬밍 형식
OGG.ogg❌✅-/2GB✅였픈 소슀 였디였 형식
FLAC.flac❌✅-/2GB✅묎손싀 압축

섀정

Ʞ볞 섀정

  • 공꞉자 선택:
    • Auto (자동): 파음에 따띌 지능적 선택
    • OpenAI Whisper: 고품질, 안정적읞 성능
    • Deepgram: 빠륞 속도, 화자 분늬 지원
  • ì–žì–Ž: 자동 감지 또는 특정 ì–žì–Ž 선택
  • 삜입 위치:
    • 컀서 위치
    • 녾튾 시작
    • 녾튾 끝
  • 자동 삜입: 변환 후 자동 텍슀튞 삜입

Deepgram 섀정

  • 몚덞 선택:
    • Nova-3 (권장): 98% 정확도, 화자 분늬
    • Nova-2: 읎전 섞대, 높은 정확도
    • Nova/Enhanced/Base: 레거시 몚덞
  • Ʞ능:
    • 화자 분늬: 자동 화자 구분
    • 슀마튞 포맷: 지능형 텍슀튞 포맷팅
    • 묞장 부혞: 자동 구두점
    • 발화: 자연슀러욎 말 팚턎윌로 분할
    • 묞닚: 자동 묞닚 감지

고꞉ 섀정

  • 성능:
    • 배치 처늬: 여러 파음을 횚윚적윌로 처늬
    • 메몚늬 제한: 메몚늬 사용 임계값 구성
    • 캐시 지속 시간: 결곌 캐싱 타임아웃
    • 최대 병렬 요청: 동시 API 혞출 제얎
    • 서킷 람레읎컀: 자동 장애 볎혞
  • 넀튞워크:
    • 요청 타임아웃: API 요청 타임아웃 섀정
    • 재시도 정책: 자동 재시도 구성
    • 폎백 공꞉자: 싀팚 시 백업 공꞉자
    • 상태 첎크: 공꞉자 가용성 몚니터링
  • 비용 ꎀ늬:
    • 월간 예산: 지출 한도 섀정
    • 비용 제한: 요청당 비용 제얎
    • 예산 알늌: 임계값 도달 시 알늌
    • 자동 비용 최적화: 비용 êž°ë°˜ 지능형 공꞉자 선택
  • 품질 제얎:
    • 품질 임계값: 최소 허용 정확도
    • 신뢰도 수쀀: 최소 변환 신뢰도
    • 엄격한 ì–žì–Ž 몚드: ì–žì–Ž 음ꎀ성 강제
    • 후처늬: 추가 텍슀튞 정제
  • 텍슀튞 포맷팅:
    • 음반 텍슀튞: 표쀀 텍슀튞 출력
    • 마크닀욎: 마크닀욎 형식 출력
    • 읞용구 랔록: 읞용구로 삜입
    • Ꞁ뚞늬 Ʞ혞: 목록 항목윌로 포맷
    • 제목: 제목윌로 삜입
    • 윔드 랔록: 윔드로 포맷
    • 윜아웃: Obsidian 윜아웃 사용
  • A/B 테슀팅:
    • 공꞉자 비교: 여러 공꞉자 테슀튞
    • 튞래픜 분할: 백분윚 êž°ë°˜ 띌우팅
    • 메튞늭 추적: 정확도, 속도, 비용 비교
    • êž°ê°„ 제얎: 테슀튞 êž°ê°„ 섀정
  • 대용량 파음 처늬:
    • 자동 청킹: 파음 자동 분할
    • 청크 크Ʞ: 청크 크Ʞ 구성 (MB)
    • 였버랩: 연속성을 위한 청크 였버랩 섀정
  • 개발:
    • 디버귞 몚드: 상섞 로깅
    • 성능 몚니터링: 성능 메튞늭 추적
    • 였류 볎고: 향상된 였류 섞부 정볎
    • 메튞늭 볎졎: 데읎터 볎졎 êž°ê°„ 구성

묞제 핎결

음반적읞 묞제

"Invalid API Key" 였류

핎결 방법:

  1. API í‚€ 형식 확읞 (OpenAI: sk-로 시작)
  2. 공꞉자 대시볎드에서 API í‚€ 상태 확읞
  3. 충분한 크레딧/활성 구독 확읞
  4. 킀에서 공백 제거

"File too large" 였류

핎결 방법:

  1. 파음 크Ʞ 제한 확읞 (Whisper: 25MB, Deepgram: 2GB)
  2. 큰 파음은 Deepgram 사용
  3. 필요시 였디였 파음 압축

화자 분늬가 작동하지 않음

핎결 방법:

  1. Nova-3 몚덞읎 선택되었는지 확읞 (화자 분늬에 필요)
  2. Deepgram 섀정에서 "Speaker Diarization"읎 활성화되었는지 확읞
  3. 였디였 품질 확읞 (명확한 화자, 최소 쀑첩)
  4. 지원되는 였디였 형식 사용 (M4A, MP3, WAV 권장)
  5. 최소 화자 Ꞟ읎 확읞 (섞귞뚌튞당 2-3쎈)

였디였 파음을 찟을 수 없음

핎결 방법:

  1. 지원 형식 확읞: .m4a, .mp3, .wav, .mp4 등
  2. 파음읎 vault 폎더에 있는지 확읞
  3. Obsidian 재시작
  4. 파음 읞덱싱 대Ʞ (큰 vault의 겜우)

넀튞워크 였류

핎결 방법:

  1. 읞터넷 연결 확읞
  2. VPN/프록시 섀정 확읞
  3. 공꞉자 API 상태 확읞

명령얎

명령얎섀명상태
Transcribe audio file였디였 파음 선택 및 변환✅ 사용 가능
Cancel transcription진행 쀑읞 변환 췚소✅ 사용 가능

개발

필수 요구 사항

  • Node.js 16.0.0+
  • npm 7.0.0+
  • Obsidian 0.15.0+
  • TypeScript 4.7.4+

개발 환겜 섀정

# 저장소 복제
git clone https://github.com/asyouplz/SpeechNote.git
cd SpeechNote

# 의졎성 섀치
npm install

# 개발 몚드 (변겜 감지)
npm run dev

# 프로덕션 빌드
npm run build

# 윔드 품질 검사
npm run lint          # Lint 검사
npm run lint:fix      # Lint 묞제 자동 수정
npm run format        # 윔드 포맷팅
npm run format:check  # 포맷팅 확읞
npm run typecheck     # 타입 첎킹

# 테슀튞
npm test              # 몚든 테슀튞 싀행
npm run test:unit     # 닚위 테슀튞만
npm run test:integration  # 통합 테슀튞
npm run test:e2e      # End-to-end 테슀튞
npm run test:coverage # 컀버늬지 볎고서 생성
npm run test:watch    # TDD륌 위한 감시 몚드

# 빌드 정늬
npm run clean         # 빌드 아티팩튞 정늬
npm run clean:all     # node_modules 포핚 몚두 정늬

# 전첎 검슝
npm run validate      # Lint + 타입 첎크 + 테슀튞
npm run ci           # 전첎 CI 파읎프띌읞

프로젝튞 구조

SpeechNote/
├── src/
│   ├── main.ts                     # 플러귞읞 진입점
│   ├── application/                # 애플늬쌀읎션 서비슀
│   │   ├── EditorService.ts       # 에디터 ꎀ늬
│   │   ├── EventManager.ts        # 읎벀튞 처늬
│   │   ├── StateManager.ts        # 상태 ꎀ늬
│   │   └── TextInsertionHandler.ts # 텍슀튞 삜입 로직
│   ├── architecture/               # 아킀텍처 컎포넌튞
│   │   ├── DependencyContainer.ts # 의졎성 죌입
│   │   ├── ErrorBoundary.ts       # 였류 처늬 겜계
│   │   └── PluginLifecycleManager.ts # 플러귞읞 생명죌Ʞ
│   ├── core/                       # 핵심 비슈니슀 로직
│   │   ├── LazyLoader.ts          # 지연 로딩 유틞늬티
│   │   └── transcription/         # 변환 서비슀
│   │       ├── AudioProcessor.ts  # 였디였 처늬
│   │       ├── TextFormatter.ts   # 텍슀튞 포맷팅
│   │       └── TranscriptionService.ts # 메읞 변환 서비슀
│   ├── domain/                     # 도메읞 몚덞
│   │   ├── events/                # 도메읞 읎벀튞
│   │   └── models/                # 도메읞 엔티티
│   ├── infrastructure/            # 왞부 통합
│   │   ├── api/                   # API 큎띌읎얞튞
│   │   │   ├── providers/         # 공꞉자 구현
│   │   │   │   ├── deepgram/     # Deepgram 통합
│   │   │   │   ├── whisper/      # OpenAI Whisper 통합
│   │   │   │   └── factory/      # 공꞉자 팩토늬
│   │   │   ├── adapters/         # 읞터페읎슀 얎댑터
│   │   │   ├── BatchRequestManager.ts # 배치 요청 처늬
│   │   │   ├── FileUploadManager.ts   # 파음 업로드 ꎀ늬
│   │   │   ├── SettingsAPI.ts        # 섀정 API
│   │   │   ├── SettingsMigrator.ts   # 섀정 마읎귞레읎션
│   │   │   ├── SettingsValidator.ts  # 섀정 검슝
│   │   │   └── TranscriberFactory.ts # 변환Ʞ 팩토늬
│   │   ├── audio/                # 였디였 유틞늬티
│   │   ├── cache/                # 캐싱 레읎얎
│   │   ├── logging/              # 로깅 읞프띌
│   │   ├── security/             # 볎안 유틞늬티
│   │   └── storage/              # 슀토늬지 ꎀ늬
│   ├── patterns/                  # 디자읞 팹턮
│   ├── testing/                   # 테슀튞 유틞늬티
│   ├── types/                     # 타입 정의
│   │   ├── DeepgramTypes.ts     # Deepgram 타입 정의
│   │   ├── events.ts             # 읎벀튞 타입
│   │   ├── guards.ts             # 타입 가드
│   │   ├── resources.ts          # 늬소슀 타입
│   │   └── strategy.ts           # 전략 팹턮 타입
│   ├── ui/                        # 사용자 읞터페읎슀
│   │   ├── commands/             # 명령 구현
│   │   ├── formatting/           # 포맷 옵션 UI
│   │   ├── modals/              # 몚달 대화상자
│   │   ├── settings/            # 섀정 탭 UI
│   │   └── statusbar/           # 상태 표시쀄 컎포넌튞
│   └── utils/                     # 유틞늬티
│       ├── error/                # 였류 처늬 유틞늬티
│       ├── memory/               # 메몚늬 ꎀ늬
│       └── performance/          # 성능 몚니터링
├── __tests__/                     # 테슀튞 파음
├── esbuild.config.mjs            # 빌드 구성
├── jest.config.js                # 테슀튞 구성
├── manifest.json                 # 플러귞읞 메타데읎터
├── package.json                  # 프로젝튞 구성
└── README.md                     # 묞서

아킀텍처 하읎띌읎튞

큎늰 아킀텍처 레읎얎

  • 애플늬쌀읎션 레읎얎: 유슀쌀읎슀 조정 및 도메읞 로직 윔디넀읎션
  • 윔얎 레읎얎: 비슈니슀 로직 및 변환 서비슀
  • 도메읞 레읎얎: 비슈니슀 엔티티 및 도메읞 읎벀튞
  • 읞프띌 레읎얎: 왞부 서비슀 및 API 통합
  • UI 레읎얎: 사용자 읞터페읎슀 컎포넌튞 및 섀정 ꎀ늬

사용된 디자읞 팹턮

  • 팩토늬 팹턮: 공꞉자 읞슀턎슀화륌 위한 TranscriberFactory
  • 얎댑터 팹턮: 공꞉자 통합을 위한 API 얎댑터
  • 옵저버 팹턮: EventManager륌 통한 읎벀튞 êž°ë°˜ 아킀텍처
  • 전략 팹턮: 닀쀑 변환 공꞉자
  • 늬포지토늬 팹턮: 슀토늬지 ꎀ늬 추상화
  • 의졎성 죌입: 느슚한 결합을 위한 IoC 컚테읎너
  • 에러 바욎더늬 팹턮: 포ꎄ적읞 였류 처늬

êž°ì—¬

Ʞ여륌 환영합니닀! 가읎드띌읞은 CONTRIBUTING.md륌 찞조하섞요.

êž°ì—¬ 곌정

  1. Fork 저장소
  2. 생성 Ʞ능 람랜치: git checkout -b feature/amazing-feature
  3. 컀밋 변겜사항: git commit -m 'feat: add amazing feature'
  4. 푞시 람랜치로: git push origin feature/amazing-feature
  5. 생성 풀 늬퀘슀튞

윔드 슀타음 가읎드띌읞

  • TypeScript 몚범 사례 쀀수
  • ESLint 및 Prettier 구성 사용
  • 새 Ʞ능에 대한 닚위 테슀튞 작성
  • API 변겜 사항에 대한 묞서 업데읎튞

띌읎선슀

읎 프로젝튞는 MIT 띌읎선슀에 따띌 띌읎선슀가 부여됩니닀 - 자섞한 낎용은 LICENSE 파음을 찞조하섞요.

크레딧

감사의 말

  • Obsidian Team: Obsidian 플러귞읞 API
  • OpenAI: Whisper API
  • Deepgram: 음성-텍슀튞 API
  • Community: Obsidian 컀뮀니티 플드백 및 êž°ì—¬

사용 Ʞ술

  • TypeScript
  • ESBuild
  • Jest
  • ESLint & Prettier

지원

도움읎 필요하신가요?

지원 볎여죌Ʞ

읎 프로젝튞가 도움읎 되었닀멎:

  • ⭐ GitHub에 별 죌Ʞ
  • 🐊 소셜 믞디얎에 공유
  • ☕ 컀플 사죌Ʞ
  • 🆕 Development: See below for contribution and release guidelines.

Development

🛠 Release Process (Automated)

This project uses semantic-release for fully automated versioning and releases.

  1. Merge PR to main: Ensure all commits follow the Conventional Commits specification.
  2. CI/CD Pipeline: GitHub Actions triggered on push to main will:
    • Analyze commits to determine the next version (feat -> minor, fix -> patch, BREAKING CHANGE -> major).
    • Update manifest.json, package.json, and versions.json.
    • Generate GitHub Release notes.
    • Create a git tag and GitHub Release with built assets.

📝 Conventional Commits

We use commitlint and husky to enforce commit message formats.

Format: <type>(<scope>): <description>

  • feat: A new feature (causes a minor version bump)
  • fix: A bug fix (causes a patch version bump)
  • perf: A performance improvement (causes a patch version bump)
  • chore: Maintenance/Internal changes (no release)
  • docs: Documentation changes (no release)
  • refactor: Code change that neither fixes a bug nor adds a feature

Example: feat(audio): add support for deepgram v3

🆘 Emergency Manual Release

If the automated system fails, use the emergency script:

./scripts/release-emergency.sh [patch|minor|major|VERSION]

🔄 Rollback Procedure

If a bad release is pushed:

  1. Revert: Revert the release commit on main.
  2. Delete Tag: Delete the problematic git tag locally and remotely:
    git tag -d v3.x.x
    git push origin :refs/tags/v3.x.x
    
  3. Delete Release: Manually delete the release on GitHub.
  4. Fix & Release: Push a fix commit using fix: to trigger a new patch release.

최귌 업데읎튞

🚀 v3.0.4 (최신) - 섀정 안정화 및 Deepgram 정늬

  • 🛠 섀정 안정화: 플러귞읞 섀정 신뢰성 개선
  • 🧹 Deepgram 늬팩터링: 공꞉자 통합 구조 정늬
  • 🧩 Ʞ타 수정: 소소한 버귞 수정 및 개선

v3.0.1 - 엔터프띌읎슈 아킀텍처 및 성능

  • 🏗 큎늰 아킀텍처: ꎀ심사 분늬륌 갖춘 도메읞 죌도 섀계
  • 🎯 몚듈식 구조: application, core, domain, infrastructure 레읎얎로 구성
  • ⚡ 성능 몚니터링: 낎장 성능 벀치마킹 및 메몚늬 ꎀ늬
  • 🛡 에러 바욎더늬: ErrorBoundary 팚턎을 활용한 포ꎄ적읞 였류 처늬
  • 📊 의졎성 죌입: 더 나은 테슀튞 가능성을 위한 DependencyContainer
  • 🧪 테슀튞 컀버늬지: 닚위, 통합, E2E 테슀튞 슀위튞
  • 🔄 섀정 마읎귞레읎션: 자동 섀정 마읎귞레읎션 및 검슝
  • 📊 배치 처늬: 횚윚적읞 배치 요청 ꎀ늬

v3.0.0 - Nova-3 및 화자 분늬

  • ✹ Nova-3 몚덞: 98% 정확도로 Ʞ볞 몚덞 업귞레읎드
  • 🎭 화자 분늬: "Speaker 1:", "Speaker 2:" 형식의 완전한 구현
  • 💰 비용 최적화: Deepgram Nova-3로 70% 비용 절감
  • 🔧 윔드 품질: 향상된 타입 안전성 및 윔드 구성

v1.0.0 - 쎈Ʞ 늎늬슈

  • 🎉 닀쀑 공꞉자 지원: OpenAI Whisper 및 Deepgram 통합
  • 🌐 닀국얎 지원: 자동 감지 Ʞ능읎 있는 40개 읎상 ì–žì–Ž
  • 📝 슀마튞 텍슀튞 삜입: 유연한 삜입 옵션
  • 🎯 컚텍슀튞 메뉎 통합: 였륞쪜 큎늭 변환

Made with ❀ for the Obsidian community

⬆ Back to top

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.