All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fix duplicate memo rows printed on every export run
- Skip re-exporting memos when the destination file already exists
- Align CLI and programmatic default filename formats
- Fix CI Poetry cache keys (
id: setup-pythonon setup steps) - Log export-directory creation at info level instead of error
- Remove unused dependencies (
python-dateutil,psutil,pydantic-settings)
- Use explicit SQL column list instead of
SELECT * - Reuse a single Jinja2 environment across memo exports
- Replace deprecated
memo.dict()withmodel_dump() - Add export summary counts (exported / skipped / errors)
- Improve release workflow changelog extraction and verification
- Fix HTML entity encoding in exported filenames (
&,'now render as raw text) - Fix crash when memo titles contain filesystem-unsafe characters (
/,\,:, etc.)
- Include hours, minutes, seconds in default filename format (
%Y%m%d%H%M%S) - Rename PyPI package from
vmexporttovoice-memo-export - Replace black, isort, flake8, bandit badges with ruff
- Fix CLI command references in README (
pyvme->vmexport) - Mock platform-specific calls in tests so CI passes on Linux
- Export voice memos from macOS Voice Memos app
- Command-line interface with argparse
- Custom export paths via
--export_path - Jinja2 templating for flexible filename formatting (
--export_name_format) |slugifyfilter for filename sanitization- Automatic detection of Voice Memos database location
- Support for macOS Sonoma (14+) and earlier versions
- Async database access via
aiosqlite - Concurrent export via
asyncio.gather() - Preserve original timestamps on exported files
- Duplicate filename handling with auto-incrementing suffix