Transform your raw daily note logs into well-written, engaging journal entries using AI. This plugin automatically processes daily notes from the past and creates beautiful journal entries with location data, all while maintaining your personal voice and style.
This plugin was designed around a simple but powerful workflow that transforms casual voice memos into meaningful journal entries:
- Use voice dictation to quickly log moments, thoughts, and experiences
- No need to worry about perfect writing - just capture the essence
- Log entries accumulate naturally in your daily notes as raw, authentic thoughts
For seamless voice capture on iOS, you can use this iOS Shortcut that:
- Triggers with a simple action button press
- Uses Whispr Flow for enhanced dictation (easily replaceable with built-in iOS dictation)
- Automatically appends entries to your daily note in Obsidian
- Works with any speech-to-text service or manual typing
When the day ends, the plugin automatically:
- Finds your raw log entries from throughout the day
- Uses AI to transform them into a cohesive, well-written journal entry
- Preserves the emotional context and chronological flow
- Adds sentiment analysis and location data
- Creates a beautiful journal entry you'll want to read years from now
Raw voice memos like "Had coffee, feeling good about the presentation" become elegant prose that captures not just what happened, but how it felt and why it mattered.
- Converts raw log entries into candid, engaging journal entries
- Sentiment Analysis: Automatically analyzes the emotional tone of your day (Very Happy, Happy, Neutral, Sad, Very Sad)
- Maintains your personal voice and writing style
- Preserves chronological flow and emotional context
- Supports multiple AI providers: OpenAI, Google Gemini, and local Ollama
- Automatically extracts coordinates from daily notes
- Supports multiple coordinate formats:
[lat, lng],(lat, lng), GPS coordinates - Adds location metadata to journal entries in YAML frontmatter
- Customizable source and destination folders
- Configurable date formats for daily notes
- Dynamic journal filename templates
- Adjustable processing frequency
- Custom AI prompts for personalized output
- Dynamic Processing: Automatically identifies notes that need processing based on journal file existence
- Self-Healing: No complex state management - simply delete journal files to reprocess
- Periodic checks for new daily notes from the past
- Background processing without interrupting your workflow
- Manual processing triggers for immediate results
- Flexible Reprocessing: Easy control over what gets reprocessed
- Auto-detects language from source notes
- Supports output in multiple languages
- Preserves original language unless specified otherwise
- Open Obsidian Settings
- Navigate to Community Plugins
- Search for "Daily Notes to Journal"
- Click Install and Enable
- Download the latest release from GitHub
- Extract the files to
{VaultFolder}/.obsidian/plugins/obsidian-journal-plugin/ - Reload Obsidian
- Enable the plugin in Community Plugins settings
- Clone this repository
- Run
npm installto install dependencies - Run
npm run buildto build the plugin - Copy
main.js,manifest.json, andstyles.cssto your vault's plugins folder
Source Folder: Folder containing your daily notes (default: "Daily Notes")
- Type the folder path manually or click the 📁 button to browse existing folders
- Shows validation with file count for existing folders
- Warns if folder doesn't exist (will be created automatically)
Date Format: Format used in daily note filenames (default: "YYYY-MM-DD") Journal Folder: Destination folder for journal entries (default: "Journal")
- Includes the same folder browser as Source Folder
- Validates folder existence and shows creation notice
Journal Filename: Template for journal filenames (default: "Journal-YYYY-MM-DD.md")
Choose your preferred AI provider:
- Requires API key from OpenAI Platform
- Dynamic Model Loading: Automatically fetches your available GPT models
- Click the 🔄 button to refresh the model list
- Filters to show only relevant GPT models (excludes instruct/edit variants)
- Requires API key from Google AI Studio
- Dynamic Model Loading: Fetches available Gemini models from Google's API
- Updates automatically when you enter a valid API key
- Shows latest Gemini Pro and Flash models
- Requires Ollama running locally
- Live Model Detection: Shows all models installed on your Ollama server
- Refreshes automatically when endpoint is configured
- Perfect for privacy-focused users
Customize the AI prompt to match your preferred writing style:
Transform these raw daily log entries into a well-written, engaging journal entry.
Guidelines:
- Write in a candid, personal style with storytelling elements
- Maintain chronological flow of the day's events
- Include emotional context and personal reflections
- Preserve the original language and tone
- Create engaging prose that captures the day's essence
- Keep the same perspective (first person)
- Make it feel authentic and re-readable in the future
Raw entries:
{content}
Create a journal entry that brings these moments to life while staying true to the original experiences and emotions.
Your daily notes should contain log entries in a simple format:
# 2024-01-15
- Had coffee at the local café [40.7128, -74.0060]
- Worked on the presentation for tomorrow's meeting
- Took a walk in Central Park, beautiful weather
- Dinner with Sarah at that new Italian place (43.6532, -79.3832)
- Feeling anxious about the presentation but excited tooThe plugin will create journal entries like:
---
date: 2024-01-15
source: Daily Notes/2024-01-15.md
created: 2024-01-16T10:30:00.000Z
sentiment: Happy
locations:
- "[40.7128, -74.0060]"
- "[43.6532, -79.3832]"
---
# January 15th, 2024
The day began with the familiar comfort of my local café, where I savored my morning coffee while watching the city wake up around me. The aroma and warmth provided the perfect backdrop for mentally preparing for what lay ahead.
Back at my desk, I dove deep into finalizing the presentation for tomorrow's meeting. The hours seemed to slip by as I refined each slide, balancing thoroughness with clarity. Despite my focus, I could feel a subtle undercurrent of nervous energy building.
When I needed a break, Central Park called to me. The weather was absolutely beautiful – one of those perfect days that reminds you why you love this city. The fresh air and gentle movement helped clear my mind and reset my perspective.
Evening brought a delightful dinner with Sarah at that new Italian place we'd been wanting to try. The food was exceptional, and our conversation flowed as easily as the wine. It was exactly the kind of evening that makes you appreciate good food and even better company.
As the day winds down, I find myself in that familiar space of mixed emotions – anxious about tomorrow's presentation but genuinely excited about the opportunity to share what I've been working on. Sometimes the best moments come from embracing both the nerves and the anticipation.The plugin adds several commands to Obsidian:
- Process daily notes now: Manually trigger processing
- Process latest note (test): Process the most recent daily note for testing
- Test AI connection: Verify your AI configuration
- Show processing status: Display current processing status
- Reset processing history (no-op): Informational - processing is now dynamic
- Validate configuration: Check all settings
The plugin recognizes various coordinate formats:
[40.7128, -74.0060]- Bracket format(40.7128, -74.0060)- Parentheses format40.7128, -74.0060- Simple comma-separated40.7128°N, 74.0060°W- Degrees with directionGPS: 40.7128, -74.0060- GPS prefixLocation: 40.7128, -74.0060- Location prefix
- OpenAI/Gemini: Content is sent to external APIs for processing
- Ollama: All processing happens locally on your machine
- API Keys: Stored securely in Obsidian's settings
- Logs: No sensitive data is logged
- Input validation and sanitization
- Secure API key storage in Obsidian's vault settings
- No sensitive data in logs or debug output
- Optional local processing with Ollama
- Plugin settings (including API keys) excluded from git tracking
No notes are being processed
- Check that source folder exists and contains markdown files
- Verify date format matches your daily note filenames
- Ensure notes are from past dates (plugin only processes old notes)
AI processing fails
- Verify API key is correct and has sufficient credits
- Test connection using the "Test AI connection" command
- Check network connectivity for cloud providers
Ollama connection issues
- Ensure Ollama is running (
ollama serve) - Verify endpoint URL (default:
http://localhost:11434) - Check that the specified model is installed (
ollama pull model-name)
Permission errors
- Ensure Obsidian has write permissions to destination folder
- Check that destination folder path is valid
Enable debug logging through the developer console:
app.plugins.plugins['obsidian-journal-plugin'].enableDebugLogging();# Install dependencies
npm install
# Build for development (with source maps)
npm run dev
# Build for production
npm run build
# Version bump (updates manifest.json and versions.json)
npm run versionThe plugin follows a modular architecture:
- Services: Core business logic (AI processing, file handling, scheduling)
- Models: Type definitions and data structures
- Utils: Helper functions (date parsing, coordinate extraction, logging)
- Settings: Configuration management and UI
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details.
- GitHub Issues: Report bugs and request features
- Documentation: Check the wiki for detailed guides
- Community: Join discussions in the Obsidian Discord
See CHANGELOG.md for version history and updates.
If you find this plugin helpful, consider supporting its development:
Your support helps maintain and improve this plugin. Thank you! 🙏