audiolibrarian 0.16.4__py3-none-any.whl → 0.16.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,4 +16,4 @@
16
16
  # You should have received a copy of the GNU General Public License along with audiolibrarian.
17
17
  # If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
- __version__ = "0.16.4"
19
+ __version__ = "0.16.5"
@@ -118,10 +118,10 @@ class CDAudioSource(AudioSource):
118
118
  cwd = pathlib.Path.cwd()
119
119
  os.chdir(self._temp_dir)
120
120
  try:
121
- subprocess.run(("cd-paranoia", "-B"), check=True) # noqa: S603
121
+ subprocess.run(("cd-paranoia", "-B"), check=True)
122
122
  finally:
123
123
  os.chdir(cwd)
124
- subprocess.run(("eject",), check=False) # noqa: S603
124
+ subprocess.run(("eject",), check=False)
125
125
 
126
126
 
127
127
  class FilesAudioSource(AudioSource):
@@ -51,8 +51,8 @@ class Convert(_Command, base.Base):
51
51
  parser = argparse.ArgumentParser()
52
52
  parser.add_argument("--artist", "-a", help="provide artist (ignore tags)")
53
53
  parser.add_argument("--album", "-m", help="provide album (ignore tags)")
54
- parser.add_argument("--mb-artist-id", help="Musicbrainz artist ID")
55
- parser.add_argument("--mb-release-id", help="Musicbrainz release ID")
54
+ parser.add_argument("--mb-artist-id", help="MusicBrainz artist ID")
55
+ parser.add_argument("--mb-release-id", help="MusicBrainz release ID")
56
56
  parser.add_argument("--disc", "-d", help="format: x/y: disc x of y for multi-disc release")
57
57
  parser.add_argument("filename", nargs="+", help="directory name or audio file name")
58
58
 
@@ -79,14 +79,14 @@ class Genre(_Command):
79
79
  parser = argparse.ArgumentParser(
80
80
  description=(
81
81
  "Process all audio files in the given directory(ies), allowing the user to *update* "
82
- "the genre in Musicbrainz or *tag* audio files with the user-defined genre in "
83
- "Musicbrainz."
82
+ "the genre in MusicBrainz or *tag* audio files with the user-defined genre in "
83
+ "MusicBrainz."
84
84
  )
85
85
  )
86
86
  parser.add_argument("directory", nargs="+", help="root of directory tree to process")
87
87
  parser_action = parser.add_mutually_exclusive_group()
88
88
  parser_action.add_argument("--tag", action="store_true", help="update tags")
89
- parser_action.add_argument("--update", action="store_true", help="update Musicbrainz")
89
+ parser_action.add_argument("--update", action="store_true", help="update MusicBrainz")
90
90
 
91
91
  def __init__(self, args: argparse.Namespace) -> None:
92
92
  """Initialize a Genre command handler."""
@@ -106,8 +106,8 @@ class Manifest(_Command, base.Base):
106
106
  parser.add_argument("--artist", "-a", help="provide artist (ignore tags)")
107
107
  parser.add_argument("--album", "-m", help="provide album (ignore tags)")
108
108
  parser.add_argument("--cd", "-c", action="store_true", help="original source was a CD")
109
- parser.add_argument("--mb-artist-id", help="Musicbrainz artist ID")
110
- parser.add_argument("--mb-release-id", help="Musicbrainz release ID")
109
+ parser.add_argument("--mb-artist-id", help="MusicBrainz artist ID")
110
+ parser.add_argument("--mb-release-id", help="MusicBrainz release ID")
111
111
  parser.add_argument("--disc", "-d", help="format: x/y: disc x of y for multi-disc release")
112
112
  parser.add_argument("filename", nargs="+", help="directory name or audio file name")
113
113
 
@@ -229,8 +229,8 @@ class Rip(_Command, base.Base):
229
229
  parser = argparse.ArgumentParser()
230
230
  parser.add_argument("--artist", "-a", help="provide artist")
231
231
  parser.add_argument("--album", "-m", help="provide album")
232
- parser.add_argument("--mb-artist-id", help="Musicbrainz artist ID")
233
- parser.add_argument("--mb-release-id", help="Musicbrainz release ID")
232
+ parser.add_argument("--mb-artist-id", help="MusicBrainz artist ID")
233
+ parser.add_argument("--mb-release-id", help="MusicBrainz release ID")
234
234
  parser.add_argument("--disc", "-d", help="x/y: disc x of y; multi-disc release")
235
235
 
236
236
  def __init__(self, args: argparse.Namespace) -> None:
@@ -139,11 +139,11 @@ class GenreManager:
139
139
  def _get_genres_by_artist(
140
140
  self,
141
141
  ) -> tuple[dict[str, str], dict[str, dict[str, Any]]]:
142
- """Return two dicts mapping Musicbrainz-artist-ID to user and community.
142
+ """Return two dicts mapping MusicBrainz-artist-ID to user and community.
143
143
 
144
144
  Returns:
145
- user: a single genre, set in Musicbrainz by this app's user
146
- community: a list genre records (dicts) set in Musicbrainz by the community
145
+ user: a single genre, set in MusicBrainz by this app's user
146
+ community: a list genre records (dicts) set in MusicBrainz by the community
147
147
  with "name" and "count" fields
148
148
  """
149
149
  user: dict[str, str] = {}
@@ -417,7 +417,7 @@ class Searcher:
417
417
  log.info("RELEASE_GROUPS: {release_group_ids}")
418
418
  release_id = self._prompt_release_id(release_group_ids)
419
419
  else:
420
- release_id = self._prompt_uuid("Musicbrainz Release ID: ")
420
+ release_id = self._prompt_uuid("MusicBrainz Release ID: ")
421
421
 
422
422
  return MusicBrainzRelease(release_id).get_release()
423
423
 
@@ -0,0 +1,73 @@
1
+ Metadata-Version: 2.4
2
+ Name: audiolibrarian
3
+ Version: 0.16.5
4
+ Summary: Manage my audio library.
5
+ Project-URL: Repository, https://github.com/toadstule/audiolibrarian
6
+ Author-email: Steve Jibson <steve@jibson.com>
7
+ License-File: COPYING
8
+ License-File: LICENSE
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
11
+ Classifier: Programming Language :: Python
12
+ Requires-Python: <3.14,>=3.12
13
+ Requires-Dist: ansicolors
14
+ Requires-Dist: discid
15
+ Requires-Dist: filelock
16
+ Requires-Dist: fuzzywuzzy
17
+ Requires-Dist: musicbrainzngs
18
+ Requires-Dist: mutagen
19
+ Requires-Dist: pydantic-settings
20
+ Requires-Dist: python-levenshtein
21
+ Requires-Dist: pyyaml
22
+ Requires-Dist: requests
23
+ Requires-Dist: xdg-base-dirs
24
+ Description-Content-Type: text/markdown
25
+
26
+ # audiolibrarian
27
+
28
+ [![PyPI](https://img.shields.io/pypi/v/audiolibrarian)](https://pypi.org/project/audiolibrarian/)
29
+ [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
30
+ [![Documentation Status](https://readthedocs.org/projects/audiolibrarian/badge/?version=latest)](https://audiolibrarian.readthedocs.io/)
31
+
32
+ `audiolibrarian` is a command-line tool for ripping audio from CDs (or taking
33
+ high-quality audio from local files), tagging them with comprehensive metadata from MusicBrainz,
34
+ converting them to multiple formats, and organizing them in a clean directory structure.
35
+
36
+ ## Features
37
+
38
+ - **CD Ripping**: Extract audio from CDs with accurate metadata lookup
39
+ - **Audio Conversion**: Convert between multiple audio formats (FLAC, M4A, MP3)
40
+ - **Metadata Management**: Automatically fetch and apply rich metadata from MusicBrainz
41
+ - **File Organization**: Intelligently organize music files into a clean directory structure
42
+ - **Batch Processing**: Handle multiple files and directories efficiently
43
+
44
+ ## Basic Usage
45
+
46
+ ```bash
47
+ # Rip audio from a CD
48
+ audiolibrarian rip
49
+
50
+ # Convert audio files
51
+ audiolibrarian convert /path/to/audio/files
52
+
53
+ # Get help
54
+ audiolibrarian --help
55
+ ```
56
+
57
+ ## Documentation
58
+
59
+ For complete documentation, including installation instructions, configuration, and advanced usage, visit:
60
+
61
+ [https://audiolibrarian.readthedocs.io/](https://audiolibrarian.readthedocs.io/)
62
+
63
+ ## License
64
+
65
+ This project is licensed under the GPL-3.0 License - see the [LICENSE](LICENSE) file for details.
66
+
67
+ ## Contributing
68
+
69
+ Contributions are welcome! Please see our [contributing guide](CONTRIBUTING.md) for details.
70
+
71
+ ## Support
72
+
73
+ For support, please [open an issue](https://github.com/toadstule/audiolibrarian/issues) on GitHub.
@@ -1,10 +1,10 @@
1
- audiolibrarian/__init__.py,sha256=VVNnoovlK4Pl3YDm2ETbU5q14mKK3UH6PvNQIVxNq7Y,787
2
- audiolibrarian/audiosource.py,sha256=EtoSQb6R2zfHUwxiR9ZqGwjxrX2mTB5gPpmKangps4s,8573
1
+ audiolibrarian/__init__.py,sha256=gY9TxON-FJ8rKpy6s2RKFMpH0qMDrgDtE9Nn6q8xIjM,787
2
+ audiolibrarian/audiosource.py,sha256=hQVFc2VQfCPV1kQRGOwwNAuMx4AXno0zcf_0Ps_Y2ts,8545
3
3
  audiolibrarian/base.py,sha256=54s_NacDvyGpvc_uOJO5apmQin4HKUGfPrlw0XFiJoI,19428
4
4
  audiolibrarian/cli.py,sha256=azX49RO2t4q8qyUJ9WTOlDqUO13p17mq0wNmEdl6QGw,4211
5
- audiolibrarian/commands.py,sha256=8R9aagOaaLE798lGYPWknW-NiIHkxEbQbiM43RZrPTU,11166
6
- audiolibrarian/genremanager.py,sha256=ZciuJb3GoaM31h33_khowNg8iv4MVGkjJM-beijSF3k,7357
7
- audiolibrarian/musicbrainz.py,sha256=DAodaLVySqq6nSbGCLfUktXSAm95OfPhkOXyyexMj6w,19312
5
+ audiolibrarian/commands.py,sha256=4oyXDSvzlL2vb1SyD2GVy8bDD9MTJz9IuTMl2PMLOQ4,11166
6
+ audiolibrarian/genremanager.py,sha256=omjsn-8Bdz3etLu-qNAXhPUOyY4Byy6muwvkHyPM6so,7357
7
+ audiolibrarian/musicbrainz.py,sha256=GwTrwvn-hLZw4uLD7CshyegLCM1tfeNL00rqz2Xsl20,19312
8
8
  audiolibrarian/output.py,sha256=JHuttwEMEzUxty7P8e2jaL6702q52fTWAdZEgb85bxQ,1702
9
9
  audiolibrarian/records.py,sha256=BovHwNVd0nTTwQPYkhOAOIVASWz9l47j6cGdXAx5VjM,7929
10
10
  audiolibrarian/settings.py,sha256=qKQ9JYfKr2k_JceWfYPiMlpBKylujCQI_2pmxWpsGFo,2550
@@ -20,9 +20,9 @@ audiolibrarian/audiofile/formats/mp3.py,sha256=ipuanK7CIYSk9LqW0AvAgKAUZeU9ecwK0
20
20
  picard_src/README.md,sha256=mtJ7RNLlC7Oz9M038WU-3ciPa7jPdXlFLYdJBL8iRQo,411
21
21
  picard_src/__init__.py,sha256=acu0-oac_qfEgiB0rw0RvuL---O15-rOckWboVMxWtM,198
22
22
  picard_src/textencoding.py,sha256=0MRHFwhqEwauQbjTTz6gpgzo6YH1VDPfdJqQoCWHtjM,26234
23
- audiolibrarian-0.16.4.dist-info/METADATA,sha256=_odZKLK0zulvGlhQs-bwdns_cUleRO49K1tpcT2qrdk,10476
24
- audiolibrarian-0.16.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
25
- audiolibrarian-0.16.4.dist-info/entry_points.txt,sha256=reubnr_SGbTTDXji8j7z8aTmIL0AEQKVSLcnmFG3YYY,59
26
- audiolibrarian-0.16.4.dist-info/licenses/COPYING,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
27
- audiolibrarian-0.16.4.dist-info/licenses/LICENSE,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
28
- audiolibrarian-0.16.4.dist-info/RECORD,,
23
+ audiolibrarian-0.16.5.dist-info/METADATA,sha256=m92zy8tCb5anGh-_ltl2Hca0jkB8QRW6locAtVnuskQ,2546
24
+ audiolibrarian-0.16.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
25
+ audiolibrarian-0.16.5.dist-info/entry_points.txt,sha256=reubnr_SGbTTDXji8j7z8aTmIL0AEQKVSLcnmFG3YYY,59
26
+ audiolibrarian-0.16.5.dist-info/licenses/COPYING,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
27
+ audiolibrarian-0.16.5.dist-info/licenses/LICENSE,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
28
+ audiolibrarian-0.16.5.dist-info/RECORD,,
@@ -1,333 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: audiolibrarian
3
- Version: 0.16.4
4
- Summary: Manage my audio library.
5
- Project-URL: Repository, https://github.com/toadstule/audiolibrarian
6
- Author-email: Steve Jibson <steve@jibson.com>
7
- License-File: COPYING
8
- License-File: LICENSE
9
- Classifier: Development Status :: 4 - Beta
10
- Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
11
- Classifier: Programming Language :: Python
12
- Requires-Python: ==3.13.*
13
- Requires-Dist: ansicolors
14
- Requires-Dist: discid
15
- Requires-Dist: filelock
16
- Requires-Dist: fuzzywuzzy
17
- Requires-Dist: musicbrainzngs
18
- Requires-Dist: mutagen
19
- Requires-Dist: pydantic-settings
20
- Requires-Dist: python-levenshtein
21
- Requires-Dist: pyyaml
22
- Requires-Dist: requests
23
- Requires-Dist: xdg-base-dirs
24
- Description-Content-Type: text/markdown
25
-
26
- # audiolibrarian #
27
-
28
- ## Overview ##
29
-
30
- `audiolibrarian` is a command-line tool for ripping audio from CDs (or taking
31
- high-quality audio from local files), tagging them with comprehensive metadata from MusicBrainz,
32
- converting them to multiple formats, and organizing them in a clean directory structure.
33
-
34
- ### Key Features ###
35
-
36
- - **CD Ripping**: Extract audio from CDs with accurate metadata lookup
37
- - **Audio Conversion**: Convert between multiple audio formats (FLAC, M4A, MP3)
38
- - **Metadata Management**: Automatically fetch and apply rich metadata from MusicBrainz
39
- - **File Organization**: Intelligently organize music files into a clean directory structure
40
- - **Batch Processing**: Handle multiple files and directories efficiently
41
- - **Genre Management**: Work with MusicBrainz genres and tags
42
- - **Flexible Configuration**: Customize behavior through config files and environment variables
43
-
44
- ### Why audiolibrarian? ###
45
-
46
- - **Consistent Quality**: Maintains audio quality through the conversion process
47
- - **Accurate Metadata**: Leverages MusicBrainz for comprehensive music information
48
- - **Automated Workflow**: Reduces manual work in organizing and tagging music
49
- - **Open Source**: Free to use and modify under the GPL-3.0 license
50
-
51
- Whether you're digitizing a CD collection, organizing existing music files, or managing a large
52
- digital library, `audiolibrarian` provides the tools you need to keep your music collection
53
- well-organized and properly tagged.
54
-
55
- ## Installation ##
56
-
57
- > **NOTE:** This library has only been tested on Linux. It may not work on other operating
58
- > systems.
59
-
60
- ### External Requirements ###
61
-
62
- `audiolibrarian` uses a few command-line tools to run:
63
-
64
- - [cd-paranoia](https://www.gnu.org/software/libcdio/)
65
- - [util-linux](https://github.com/util-linux/util-linux)
66
- - [faad2](https://github.com/knik0/faad2)
67
- - [fdkaac](https://github.com/nu774/fdkaac)
68
- - [flac](https://github.com/xiph/flac)
69
- - [lame](https://lame.sourceforge.io/)
70
- - [mpg123](https://www.mpg123.de/)
71
- - [libsndfile](https://github.com/libsndfile/libsndfile)
72
- - [wavegain](https://github.com/MestreLion/wavegain)
73
-
74
- It also requires the [libdiscid](https://musicbrainz.org/doc/libdiscid) library.
75
-
76
- ### Install from PyPI ###
77
-
78
- `audiolibrarian` is available on PyPI:
79
-
80
- ```bash
81
- pip install audiolibrarian
82
- ```
83
-
84
- ## Configuration ##
85
-
86
- `audiolibrarian` uses a flexible configuration system that supports multiple configuration sources,
87
- listed in order of precedence:
88
-
89
- 1. **Environment Variables** (highest precedence)
90
- - Prefix: `AUDIOLIBRARIAN__`
91
- - Nested fields: Use `__` as delimiter (e.g., `AUDIOLIBRARIAN__MUSICBRAINZ__USERNAME`)
92
- - Example:
93
-
94
- ```bash
95
- # Override library directory (library_dir)
96
- export AUDIOLIBRARIAN__LIBRARY_DIR="/mnt/music/library"
97
-
98
- # Set MusicBrainz credentials (musicbrainz.username and musicbrainz.password)
99
- export AUDIOLIBRARIAN__MUSICBRAINZ__USERNAME="your_username"
100
- export AUDIOLIBRARIAN__MUSICBRAINZ__PASSWORD="your_password"
101
- ```
102
-
103
- 2. **YAML Configuration File** (medium precedence)
104
- - Default location: `~/.config/audiolibrarian/config.yaml`
105
- - Example:
106
-
107
- ```yaml
108
- # Base directory for your music library
109
- library_dir: "~/music/library"
110
-
111
- # Cache and working directory
112
- work_dir: "~/.cache/audiolibrarian"
113
-
114
- # CD/DVD device path (use null for default device)
115
- discid_device: null
116
-
117
- # Audio normalization settings
118
- normalize_gain: 5 # dB gain for normalization
119
- normalize_preset: "radio" # "album" or "radio"
120
-
121
- # MusicBrainz API settings (optional)
122
- musicbrainz:
123
- username: "your_username" # For personal genre preferences
124
- password: "your_password" # Will be stored securely
125
- rate_limit: 1.5 # Seconds between API requests
126
- ```
127
-
128
- 3. **Default Values** (lowest precedence)
129
- - Built-in defaults from the application
130
-
131
- ### Available Settings ###
132
-
133
- | Setting | Default | Description |
134
- |--------------------------|---------------------------|-------------------------------------------|
135
- | `library_dir` | `./library` | Directory for storing audio files |
136
- | `work_dir` | `~/.cache/audiolibrarian` | Directory for temporary files |
137
- | `discid_device` | `null` | CD device path (null for default device) |
138
- | `normalize_gain` | `5` | Normalization gain in dB |
139
- | `normalize_preset` | `"radio"` | Normalization preset ("album" or "radio") |
140
- | `musicbrainz.username` | (not set) | MusicBrainz username |
141
- | `musicbrainz.password` | (not set) | MusicBrainz password |
142
- | `musicbrainz.rate_limit` | `1.5` | Seconds between requests |
143
-
144
- > **Notes**:
145
- >
146
- > - The `musicbrainz` username and password are optional but recommended for accessing personal genre
147
- > preferences on [MusicBrainz](https://musicbrainz.org/).
148
- > - The `work_dir` default is actually `$XDG_CACHE_HOME/audiolibrarian`, which defaults to
149
- > `~/.cache/audiolibrarian` on Linux and macOS.
150
-
151
- ## Usage ##
152
-
153
- ### Basic Commands ###
154
-
155
- ```bash
156
- # Rip audio from a CD
157
- audiolibrarian rip
158
-
159
- # Convert audio files
160
- audiolibrarian convert /path/to/audio/files
161
-
162
- # Create or update manifest files
163
- audiolibrarian manifest /path/to/audio/files
164
-
165
- # Reconvert files from existing source
166
- audiolibrarian reconvert /path/to/source/directories
167
-
168
- # Rename files based on tags
169
- audiolibrarian rename /path/to/audio/directories
170
-
171
- # Manage MusicBrainz genres
172
- audiolibrarian genre /path/to/audio/directories --tag # Update tags with MB genres
173
-
174
- # Show help for all commands
175
- audiolibrarian --help
176
- ```
177
-
178
- ### Directory Structure ###
179
-
180
- `audiolibrarian` organizes files in the following structure:
181
-
182
- **Processed audio files** (organized by format):
183
-
184
- ```text
185
- library/
186
- ├── flac/
187
- │ └── Artist/
188
- │ └── YYYY__Album/
189
- │ ├── 01__Track_Title.flac
190
- │ └── 02__Another_Track.flac
191
- ├── m4a/
192
- │ └── Artist/
193
- │ └── YYYY__Album/
194
- │ ├── 01__Track_Title.m4a
195
- │ └── 02__Another_Track.m4a
196
- ├── mp3/
197
- │ └── Artist/
198
- │ └── YYYY__Album/
199
- │ ├── 01__Track_Title.mp3
200
- │ └── 02__Another_Track.mp3
201
- ├── source/
202
- │ └── Artist/
203
- │ └── YYYY__Album/
204
- │ ├── 01__Track_Title.flac
205
- │ ├── 02__Another_Track.flac
206
- │ └── Manifest.yaml
207
- ```
208
-
209
- ### Advanced Usage ###
210
-
211
- #### Ripping CDs ####
212
-
213
- ```bash
214
- # Basic CD rip
215
- audiolibrarian rip
216
-
217
- # Specify artist and album
218
- audiolibrarian rip --artist "Artist Name" --album "Album Name"
219
-
220
- # Specify MusicBrainz release ID (for better metadata)
221
- audiolibrarian rip --mb-release-id "12345678-1234-1234-1234-123456789012"
222
-
223
- # Specify disc number for multi-disc sets
224
- audiolibrarian rip --disc "1/2" # First disc of two
225
- ```
226
-
227
- #### Converting Audio Files ####
228
-
229
- ```bash
230
- # Convert with specific artist and album
231
- audiolibrarian convert --artist "Artist Name" --album "Album Name" /path/to/audio/files
232
-
233
- # Convert with MusicBrainz release ID
234
- audiolibrarian convert --mb-release-id "12345678-1234-1234-1234-123456789012" /path/to/audio/files
235
-
236
- # Convert multi-disc release
237
- audiolibrarian convert --disc "1/2" /path/to/disc1/files
238
- ```
239
-
240
- #### Working with Manifests ####
241
-
242
- ```bash
243
- # Create manifest for existing files
244
- audiolibrarian manifest /path/to/audio/files
245
-
246
- # Specify CD as source
247
- audiolibrarian manifest --cd /path/to/audio/files
248
-
249
- # Specify MusicBrainz artist and release IDs
250
- audiolibrarian manifest \
251
- --mb-artist-id "12345678-1234-1234-1234-123456789012" \
252
- --mb-release-id "87654321-4321-4321-4321-210987654321" \
253
- /path/to/audio/files
254
- ```
255
-
256
- #### Reconverting Files ####
257
-
258
- ```bash
259
- # Reconvert all files in directory
260
- audiolibrarian reconvert /path/to/source/directories
261
-
262
- # Reconvert with dry run (no changes)
263
- audiolibrarian reconvert --dry-run /path/to/source/directories
264
- ```
265
-
266
- #### Renaming Files ####
267
-
268
- ```bash
269
- # Rename files based on tags
270
- audiolibrarian rename /path/to/audio/directories
271
-
272
- # Preview renames without making changes
273
- audiolibrarian rename --dry-run /path/to/audio/directories
274
- ```
275
-
276
- #### Using Different Normalization Presets ####
277
-
278
- ```bash
279
- # Use radio normalization preset (default)
280
- export AUDIOLIBRARIAN__NORMALIZE_PRESET="radio"
281
-
282
- # Use album normalization preset
283
- export AUDIOLIBRARIAN__NORMALIZE_PRESET="album"
284
- ```
285
-
286
- #### Combining Configuration Sources ####
287
-
288
- Configuration sources are combined with the following precedence (highest to lowest):
289
- 1. Environment variables
290
- 2. YAML configuration file
291
- 3. Default values
292
-
293
- For example, with this `config.yaml`:
294
-
295
- ```yaml
296
- # config.yaml
297
- library_dir: /media/music/library
298
- normalize_gain: 5.0
299
- ```
300
-
301
- And this environment variable:
302
-
303
- ```bash
304
- export AUDIOLIBRARIAN__NORMALIZE_GAIN="8.0"
305
- ```
306
-
307
- The effective value of `normalize_gain` will be `8.0` (from the environment variable), while
308
- `library_dir` will be set to `/media/music/library` from the YAML file.
309
-
310
- ### Troubleshooting ###
311
-
312
- #### Increasing Verbosity ####
313
-
314
- ```bash
315
- # Show more detailed output
316
- audiolibrarian --log-level INFO cd
317
-
318
- # Show debug information
319
- audiolibrarian --log-level DEBUG cd
320
- ```
321
-
322
- #### MusicBrainz Issues ####
323
-
324
- If you encounter MusicBrainz-related errors:
325
-
326
- 1. Verify your credentials are correct
327
- 2. Check your Internet connection
328
- 3. Use the debug log level to get more information
329
- 4. Increase the rate limit if you're hitting rate limits
330
-
331
- ```bash
332
- export AUDIOLIBRARIAN__MUSICBRAINZ__RATE_LIMIT="2.0"
333
- ```