Skip to content

Tags: GeiserX/audio-transcode-watcher

Tags

v0.5.2

Toggle v0.5.2's commit message
v0.5.2: document lyrics configuration settings

v0.5.1

Toggle v0.5.1's commit message
v0.5.1: fix encode-delete loop from spurious on_modified events

v0.5.0

Toggle v0.5.0's commit message
v0.5.0: Recursive directory support

v0.4.2

Toggle v0.4.2's commit message
chore: bump version to 0.4.2

v0.4.1

Toggle v0.4.1's commit message
ci: remove unnecessary arm64 platform from Docker build

v0.4.0

Toggle v0.4.0's commit message
feat: add Whisper local transcription fallback for lyrics (#5)

When syncedlyrics providers find no lyrics, fall back to local Whisper
transcription to generate timestamped .lrc files from the audio itself.

- Lazy-loads Whisper model on first use (configurable: tiny/base/small/medium/large)
- Converts Whisper segments to LRC format with timestamps
- New config options: whisper_fallback (default: true), whisper_model (default: base)
- 13 lyrics tests (4 new for Whisper fallback)
- Bump to v0.4.0

v0.3.0

Toggle v0.3.0's commit message
feat: auto-fetch synced lyrics via syncedlyrics (#3)

Add automatic .lrc lyrics fetching for audio files during processing:
- New lyrics.py module extracts artist/title from embedded metadata
  (mutagen) or filename, then queries syncedlyrics providers
  (Musixmatch, LRCLIB, NetEase)
- Integrated into process_source_file() before sync_sidecars()
- New fetch_lyrics config option (default: true) to enable/disable
- 9 new tests with 88% coverage on lyrics module

Dependencies added: mutagen>=1.47.0, syncedlyrics>=1.0.0
Version bump to 0.3.0.

v0.2.0

Toggle v0.2.0's commit message
feat: sync .lrc sidecar lyrics to output directories

v0.1.3

Toggle v0.1.3's commit message
fix: use extension-only check for deleted/moved file cleanup (#1)

The watcher's on_deleted and on_moved handlers called is_audio_file()
which checks os.path.isfile() - always False for files that no longer
exist on disk. This meant real-time cleanup of output files never
triggered when a source was deleted or renamed.

Add has_audio_extension() that checks only the file extension without
requiring the file to exist, and use it in the watcher handlers for
paths that are no longer on disk.

The periodic sync (every 5 min) already caught orphans as a fallback,
but this fix enables immediate cleanup on deletion events.

v0.1.2

Toggle v0.1.2's commit message
v0.1.2

- **fix: cleanup stale temp files from interrupted encodes on startup** - Adds automatic cleanup of `.tmp__ff` files left behind when ffmpeg is interrupted (e.g., container restart, crash). Called automatically at the start of initial_sync, ensuring missing files are re-encoded.