audiolibrarian 0.16.3__py3-none-any.whl → 0.16.4__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.3"
19
+ __version__ = "0.16.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: audiolibrarian
3
- Version: 0.16.3
3
+ Version: 0.16.4
4
4
  Summary: Manage my audio library.
5
5
  Project-URL: Repository, https://github.com/toadstule/audiolibrarian
6
6
  Author-email: Steve Jibson <steve@jibson.com>
@@ -27,8 +27,9 @@ Description-Content-Type: text/markdown
27
27
 
28
28
  ## Overview ##
29
29
 
30
- `audiolibrarian` is a powerful command-line tool for managing digital music libraries. It provides a streamlined
31
- workflow for ripping, converting, organizing, and tagging audio files with high-quality metadata from MusicBrainz.
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.
32
33
 
33
34
  ### Key Features ###
34
35
 
@@ -45,28 +46,32 @@ workflow for ripping, converting, organizing, and tagging audio files with high-
45
46
  - **Consistent Quality**: Maintains audio quality through the conversion process
46
47
  - **Accurate Metadata**: Leverages MusicBrainz for comprehensive music information
47
48
  - **Automated Workflow**: Reduces manual work in organizing and tagging music
48
- - **Scriptable**: Perfect for automating large music library management tasks
49
49
  - **Open Source**: Free to use and modify under the GPL-3.0 license
50
50
 
51
- Whether you're digitizing a CD collection, organizing existing music files, or managing a large digital library,
52
- `audiolibrarian` provides the tools you need to keep your music collection well-organized and properly tagged.
53
-
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
54
 
55
55
  ## Installation ##
56
56
 
57
+ > **NOTE:** This library has only been tested on Linux. It may not work on other operating
58
+ > systems.
59
+
57
60
  ### External Requirements ###
58
61
 
59
62
  `audiolibrarian` uses a few command-line tools to run:
60
63
 
61
- * `cd-paranoia`: [cd-paranoia](https://www.gnu.org/software/libcdio/)
62
- * `eject`: [util-linux](https://github.com/util-linux/util-linux)
63
- * `faad`: [faad2](https://github.com/knik0/faad2)
64
- * `fdkaac`: [fdkaac](https://github.com/nu774/fdkaac)
65
- * `flac`: [flac](https://github.com/xiph/flac)
66
- * `lame`: [lame](https://lame.sourceforge.io/)
67
- * `mpg123`: [mpg123](https://www.mpg123.de/)
68
- * `sndfile-convert`: [libsndfile](https://github.com/libsndfile/libsndfile)
69
- * `wavegain`: [wavegain](https://rarewares.org/others.php)
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.
70
75
 
71
76
  ### Install from PyPI ###
72
77
 
@@ -78,38 +83,41 @@ pip install audiolibrarian
78
83
 
79
84
  ## Configuration ##
80
85
 
81
- `audiolibrarian` uses a flexible configuration system that supports multiple configuration sources, listed in order of precedence:
86
+ `audiolibrarian` uses a flexible configuration system that supports multiple configuration sources,
87
+ listed in order of precedence:
82
88
 
83
89
  1. **Environment Variables** (highest precedence)
84
90
  - Prefix: `AUDIOLIBRARIAN__`
85
91
  - Nested fields: Use `__` as delimiter (e.g., `AUDIOLIBRARIAN__MUSICBRAINZ__USERNAME`)
86
92
  - Example:
93
+
87
94
  ```bash
88
- # Override library directory
95
+ # Override library directory (library_dir)
89
96
  export AUDIOLIBRARIAN__LIBRARY_DIR="/mnt/music/library"
90
97
 
91
- # Set MusicBrainz credentials
98
+ # Set MusicBrainz credentials (musicbrainz.username and musicbrainz.password)
92
99
  export AUDIOLIBRARIAN__MUSICBRAINZ__USERNAME="your_username"
93
100
  export AUDIOLIBRARIAN__MUSICBRAINZ__PASSWORD="your_password"
94
101
  ```
95
102
 
96
- 2. **YAML Configuration File**
97
- - Location: `~/.config/audiolibrarian/config.yaml` (or `$XDG_CONFIG_HOME/audiolibrarian/config.yaml` if set)
103
+ 2. **YAML Configuration File** (medium precedence)
104
+ - Default location: `~/.config/audiolibrarian/config.yaml`
98
105
  - Example:
106
+
99
107
  ```yaml
100
108
  # Base directory for your music library
101
109
  library_dir: "~/music/library"
102
-
110
+
103
111
  # Cache and working directory
104
112
  work_dir: "~/.cache/audiolibrarian"
105
-
113
+
106
114
  # CD/DVD device path (use null for default device)
107
115
  discid_device: null
108
-
116
+
109
117
  # Audio normalization settings
110
118
  normalize_gain: 5 # dB gain for normalization
111
119
  normalize_preset: "radio" # "album" or "radio"
112
-
120
+
113
121
  # MusicBrainz API settings (optional)
114
122
  musicbrainz:
115
123
  username: "your_username" # For personal genre preferences
@@ -122,18 +130,23 @@ pip install audiolibrarian
122
130
 
123
131
  ### Available Settings ###
124
132
 
125
- | Setting | Default | Description |
126
- |--------------------------|----------------------------------|-------------------------------------------|
127
- | `library_dir` | `library` (in the current dir) | Directory for storing audio files |
128
- | `work_dir` | `$XDG_CACHE_HOME/audiolibrarian` | Directory for temporary files |
129
- | `discid_device` | `null` | CD device path (null for default device) |
130
- | `normalize_gain` | `5` | Normalization gain in dB |
131
- | `normalize_preset` | `"radio"` | Normalization preset ("album" or "radio") |
132
- | `musicbrainz.username` | (not set) | MusicBrainz username |
133
- | `musicbrainz.password` | (not set) | MusicBrainz password |
134
- | `musicbrainz.rate_limit` | `1.5` | Seconds between requests |
135
-
136
- > **Note**: The `musicbrainz` section is optional but recommended for accessing personal genre preferences on [MusicBrainz](https://musicbrainz.org/).
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.
137
150
 
138
151
  ## Usage ##
139
152
 
@@ -162,31 +175,40 @@ audiolibrarian genre /path/to/audio/directories --tag # Update tags with MB gen
162
175
  audiolibrarian --help
163
176
  ```
164
177
 
165
- ### Combining Configuration Sources ###
166
-
167
- Configuration sources are combined with the following precedence (highest to lowest):
168
- 1. Environment variables
169
- 2. YAML configuration file
170
- 3. Default values
171
-
172
- For example, with this `config.yaml`:
178
+ ### Directory Structure ###
173
179
 
174
- ```yaml
175
- # config.yaml
176
- library_dir: /media/music/library
177
- normalize_gain: 5.0
178
- ```
180
+ `audiolibrarian` organizes files in the following structure:
179
181
 
180
- And this environment variable:
181
- ```bash
182
- export AUDIOLIBRARIAN__NORMALIZE_GAIN="8.0"
183
- ```
182
+ **Processed audio files** (organized by format):
184
183
 
185
- The effective value of `normalize_gain` will be `8.0` (from the environment variable), while `library_dir` will be set to `/media/music/library` from the YAML file.
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
+ ```
186
208
 
187
209
  ### Advanced Usage ###
188
210
 
189
- 1. **Ripping CDs**
211
+ #### Ripping CDs ####
190
212
 
191
213
  ```bash
192
214
  # Basic CD rip
@@ -202,7 +224,7 @@ audiolibrarian rip --mb-release-id "12345678-1234-1234-1234-123456789012"
202
224
  audiolibrarian rip --disc "1/2" # First disc of two
203
225
  ```
204
226
 
205
- 2. **Converting Audio Files**
227
+ #### Converting Audio Files ####
206
228
 
207
229
  ```bash
208
230
  # Convert with specific artist and album
@@ -215,7 +237,7 @@ audiolibrarian convert --mb-release-id "12345678-1234-1234-1234-123456789012" /p
215
237
  audiolibrarian convert --disc "1/2" /path/to/disc1/files
216
238
  ```
217
239
 
218
- 2. **Working with Manifests**
240
+ #### Working with Manifests ####
219
241
 
220
242
  ```bash
221
243
  # Create manifest for existing files
@@ -225,11 +247,13 @@ audiolibrarian manifest /path/to/audio/files
225
247
  audiolibrarian manifest --cd /path/to/audio/files
226
248
 
227
249
  # Specify MusicBrainz artist and release IDs
228
- audiolibrarian manifest --mb-artist-id "12345678-1234-1234-1234-123456789012" \
229
- --mb-release-id "12345678-1234-1234-1234-123456789012" /path/to/audio/files
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
230
254
  ```
231
255
 
232
- 3. **Reconverting Files**
256
+ #### Reconverting Files ####
233
257
 
234
258
  ```bash
235
259
  # Reconvert all files in directory
@@ -239,7 +263,7 @@ audiolibrarian reconvert /path/to/source/directories
239
263
  audiolibrarian reconvert --dry-run /path/to/source/directories
240
264
  ```
241
265
 
242
- 4. **Renaming Files**
266
+ #### Renaming Files ####
243
267
 
244
268
  ```bash
245
269
  # Rename files based on tags
@@ -249,7 +273,7 @@ audiolibrarian rename /path/to/audio/directories
249
273
  audiolibrarian rename --dry-run /path/to/audio/directories
250
274
  ```
251
275
 
252
- 5. **Using Different Normalization Presets**
276
+ #### Using Different Normalization Presets ####
253
277
 
254
278
  ```bash
255
279
  # Use radio normalization preset (default)
@@ -259,9 +283,33 @@ export AUDIOLIBRARIAN__NORMALIZE_PRESET="radio"
259
283
  export AUDIOLIBRARIAN__NORMALIZE_PRESET="album"
260
284
  ```
261
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
+
262
310
  ### Troubleshooting ###
263
311
 
264
- 1. **Increasing Verbosity**
312
+ #### Increasing Verbosity ####
265
313
 
266
314
  ```bash
267
315
  # Show more detailed output
@@ -271,58 +319,15 @@ audiolibrarian --log-level INFO cd
271
319
  audiolibrarian --log-level DEBUG cd
272
320
  ```
273
321
 
274
- 2. **Checking Dependencies**
275
-
276
- ```bash
277
- # Verify all required tools are installed
278
- audiolibrarian --log-level DEBUG cd
279
- ```
280
-
281
- 3. **MusicBrainz Issues**
322
+ #### MusicBrainz Issues ####
282
323
 
283
324
  If you encounter MusicBrainz-related errors:
284
325
 
285
326
  1. Verify your credentials are correct
286
- 2. Check your internet connection
327
+ 2. Check your Internet connection
287
328
  3. Use the debug log level to get more information
288
329
  4. Increase the rate limit if you're hitting rate limits
289
330
 
290
331
  ```bash
291
332
  export AUDIOLIBRARIAN__MUSICBRAINZ__RATE_LIMIT="2.0"
292
333
  ```
293
-
294
- ### Directory Structure ###
295
-
296
- `audiolibrarian` organizes files in the following structure:
297
-
298
- 1. **Source files** (original audio files):
299
- ```
300
- library/source/
301
- └── Artist/
302
- └── YYYY__Album/
303
- ├── 01__Track_Title.flac
304
- ├── 02__Another_Track.flac
305
- └── Manifest.yaml
306
- ```
307
-
308
- 2. **Processed audio files** (organized by format):
309
- ```
310
- library/
311
- ├── flac/
312
- │ └── Artist/
313
- │ └── YYYY__Album/
314
- │ ├── 01__Track_Title.flac
315
- │ └── 02__Another_Track.flac
316
- ├── m4a/
317
- │ └── Artist/
318
- │ └── YYYY__Album/
319
- │ ├── 01__Track_Title.m4a
320
- │ └── 02__Another_Track.m4a
321
- └── mp3/
322
- └── Artist/
323
- └── YYYY__Album/
324
- ├── 01__Track_Title.mp3
325
- └── 02__Another_Track.mp3
326
- ```
327
-
328
- Each track filename follows the format: `track_number__track_name.extension` (e.g., `01__Call_to_Arms.flac`).
@@ -1,4 +1,4 @@
1
- audiolibrarian/__init__.py,sha256=TA0WxXg92zvPld0b_-oYxDuKp-7Svu7k09p45NcRxBk,787
1
+ audiolibrarian/__init__.py,sha256=VVNnoovlK4Pl3YDm2ETbU5q14mKK3UH6PvNQIVxNq7Y,787
2
2
  audiolibrarian/audiosource.py,sha256=EtoSQb6R2zfHUwxiR9ZqGwjxrX2mTB5gPpmKangps4s,8573
3
3
  audiolibrarian/base.py,sha256=54s_NacDvyGpvc_uOJO5apmQin4HKUGfPrlw0XFiJoI,19428
4
4
  audiolibrarian/cli.py,sha256=azX49RO2t4q8qyUJ9WTOlDqUO13p17mq0wNmEdl6QGw,4211
@@ -17,12 +17,12 @@ audiolibrarian/audiofile/formats/__init__.py,sha256=ZV5urTtQQ4ZX_K2s9qFsSzDunvdQ
17
17
  audiolibrarian/audiofile/formats/flac.py,sha256=3MfzdgnAqTVSbAraAVde2BSHwdAyi-fKkc55OvuRNSc,9708
18
18
  audiolibrarian/audiofile/formats/m4a.py,sha256=S0aFZxMzgwpzkwYE2D_K_US0Dnh0objK21ph1S_8rJk,10552
19
19
  audiolibrarian/audiofile/formats/mp3.py,sha256=ipuanK7CIYSk9LqW0AvAgKAUZeU9ecwK0uZf2AhAGXo,12881
20
- picard_src/README.md,sha256=TTnzIGmZ8_G11G1VCz5DHdlidIrtkGFYxWFooyTKcbI,403
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.3.dist-info/METADATA,sha256=2nYUbyqd_w-sUmlSMhwYGUk2rvqKjbLeyPdtFddOfUQ,10533
24
- audiolibrarian-0.16.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
25
- audiolibrarian-0.16.3.dist-info/entry_points.txt,sha256=reubnr_SGbTTDXji8j7z8aTmIL0AEQKVSLcnmFG3YYY,59
26
- audiolibrarian-0.16.3.dist-info/licenses/COPYING,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
27
- audiolibrarian-0.16.3.dist-info/licenses/LICENSE,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
28
- audiolibrarian-0.16.3.dist-info/RECORD,,
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,,
picard_src/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  Code in this directory comes from (or is derived from) the super-cool Picard project.
4
4
 
5
- https://github.com/metabrainz/picard
5
+ [Picard](https://github.com/metabrainz/picard)
6
6
 
7
7
  I'd like to express my thanks to all of have contributed to that project.
8
8
 
9
- Note: we could have just set the Picard library as a dependency of audiolibrarian, but
10
- it includes other dependencies (such as PyQT) that add a lot of overhead not required
9
+ Note: we could have just set the Picard library as a dependency of audiolibrarian, but
10
+ it includes other dependencies (such as PyQT) that add a lot of overhead not required
11
11
  by this project.