audiolibrarian 0.16.2__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.2"
19
+ __version__ = "0.16.4"
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: audiolibrarian
3
- Version: 0.16.2
3
+ Version: 0.16.4
4
4
  Summary: Manage my audio library.
5
- Project-URL: Repository, https://bitbucket.org/toadstule/audiolibrarian/
5
+ Project-URL: Repository, https://github.com/toadstule/audiolibrarian
6
6
  Author-email: Steve Jibson <steve@jibson.com>
7
7
  License-File: COPYING
8
8
  License-File: LICENSE
@@ -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,77 +46,78 @@ 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)
70
-
71
- ### Install from PyPI ###
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)
72
73
 
73
- `audiolibrarian` is not available on PyPI, but it can be installed from a local PyPI.
74
+ It also requires the [libdiscid](https://musicbrainz.org/doc/libdiscid) library.
74
75
 
75
- ```bash
76
- pip install --user --extra-index-url=https://pypi.example.com/simple audiolibrarian
77
- ```
76
+ ### Install from PyPI ###
78
77
 
79
- ### Install from Bitbucket ###
78
+ `audiolibrarian` is available on PyPI:
80
79
 
81
80
  ```bash
82
- pip install --user git+https://bitbucket.org/toadstule/audiolibrarian
81
+ pip install audiolibrarian
83
82
  ```
84
83
 
85
84
  ## Configuration ##
86
85
 
87
- `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:
88
88
 
89
89
  1. **Environment Variables** (highest precedence)
90
90
  - Prefix: `AUDIOLIBRARIAN__`
91
91
  - Nested fields: Use `__` as delimiter (e.g., `AUDIOLIBRARIAN__MUSICBRAINZ__USERNAME`)
92
92
  - Example:
93
+
93
94
  ```bash
94
- # Override library directory
95
+ # Override library directory (library_dir)
95
96
  export AUDIOLIBRARIAN__LIBRARY_DIR="/mnt/music/library"
96
97
 
97
- # Set MusicBrainz credentials
98
+ # Set MusicBrainz credentials (musicbrainz.username and musicbrainz.password)
98
99
  export AUDIOLIBRARIAN__MUSICBRAINZ__USERNAME="your_username"
99
100
  export AUDIOLIBRARIAN__MUSICBRAINZ__PASSWORD="your_password"
100
101
  ```
101
102
 
102
- 2. **YAML Configuration File**
103
- - 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`
104
105
  - Example:
106
+
105
107
  ```yaml
106
108
  # Base directory for your music library
107
109
  library_dir: "~/music/library"
108
-
110
+
109
111
  # Cache and working directory
110
112
  work_dir: "~/.cache/audiolibrarian"
111
-
113
+
112
114
  # CD/DVD device path (use null for default device)
113
115
  discid_device: null
114
-
116
+
115
117
  # Audio normalization settings
116
118
  normalize_gain: 5 # dB gain for normalization
117
119
  normalize_preset: "radio" # "album" or "radio"
118
-
120
+
119
121
  # MusicBrainz API settings (optional)
120
122
  musicbrainz:
121
123
  username: "your_username" # For personal genre preferences
@@ -128,18 +130,23 @@ pip install --user git+https://bitbucket.org/toadstule/audiolibrarian
128
130
 
129
131
  ### Available Settings ###
130
132
 
131
- | Setting | Default | Description |
132
- |--------------------------|----------------------------------|-------------------------------------------|
133
- | `library_dir` | `library` (in the current dir) | Directory for storing audio files |
134
- | `work_dir` | `$XDG_CACHE_HOME/audiolibrarian` | Directory for temporary files |
135
- | `discid_device` | `null` | CD device path (null for default device) |
136
- | `normalize_gain` | `5` | Normalization gain in dB |
137
- | `normalize_preset` | `"radio"` | Normalization preset ("album" or "radio") |
138
- | `musicbrainz.username` | (not set) | MusicBrainz username |
139
- | `musicbrainz.password` | (not set) | MusicBrainz password |
140
- | `musicbrainz.rate_limit` | `1.5` | Seconds between requests |
141
-
142
- > **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.
143
150
 
144
151
  ## Usage ##
145
152
 
@@ -168,31 +175,40 @@ audiolibrarian genre /path/to/audio/directories --tag # Update tags with MB gen
168
175
  audiolibrarian --help
169
176
  ```
170
177
 
171
- ### Combining Configuration Sources ###
172
-
173
- Configuration sources are combined with the following precedence (highest to lowest):
174
- 1. Environment variables
175
- 2. YAML configuration file
176
- 3. Default values
177
-
178
- For example, with this `config.yaml`:
178
+ ### Directory Structure ###
179
179
 
180
- ```yaml
181
- # config.yaml
182
- library_dir: /media/music/library
183
- normalize_gain: 5.0
184
- ```
180
+ `audiolibrarian` organizes files in the following structure:
185
181
 
186
- And this environment variable:
187
- ```bash
188
- export AUDIOLIBRARIAN__NORMALIZE_GAIN="8.0"
189
- ```
182
+ **Processed audio files** (organized by format):
190
183
 
191
- 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
+ ```
192
208
 
193
209
  ### Advanced Usage ###
194
210
 
195
- 1. **Ripping CDs**
211
+ #### Ripping CDs ####
196
212
 
197
213
  ```bash
198
214
  # Basic CD rip
@@ -208,7 +224,7 @@ audiolibrarian rip --mb-release-id "12345678-1234-1234-1234-123456789012"
208
224
  audiolibrarian rip --disc "1/2" # First disc of two
209
225
  ```
210
226
 
211
- 2. **Converting Audio Files**
227
+ #### Converting Audio Files ####
212
228
 
213
229
  ```bash
214
230
  # Convert with specific artist and album
@@ -221,7 +237,7 @@ audiolibrarian convert --mb-release-id "12345678-1234-1234-1234-123456789012" /p
221
237
  audiolibrarian convert --disc "1/2" /path/to/disc1/files
222
238
  ```
223
239
 
224
- 2. **Working with Manifests**
240
+ #### Working with Manifests ####
225
241
 
226
242
  ```bash
227
243
  # Create manifest for existing files
@@ -231,11 +247,13 @@ audiolibrarian manifest /path/to/audio/files
231
247
  audiolibrarian manifest --cd /path/to/audio/files
232
248
 
233
249
  # Specify MusicBrainz artist and release IDs
234
- audiolibrarian manifest --mb-artist-id "12345678-1234-1234-1234-123456789012" \
235
- --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
236
254
  ```
237
255
 
238
- 3. **Reconverting Files**
256
+ #### Reconverting Files ####
239
257
 
240
258
  ```bash
241
259
  # Reconvert all files in directory
@@ -245,7 +263,7 @@ audiolibrarian reconvert /path/to/source/directories
245
263
  audiolibrarian reconvert --dry-run /path/to/source/directories
246
264
  ```
247
265
 
248
- 4. **Renaming Files**
266
+ #### Renaming Files ####
249
267
 
250
268
  ```bash
251
269
  # Rename files based on tags
@@ -255,7 +273,7 @@ audiolibrarian rename /path/to/audio/directories
255
273
  audiolibrarian rename --dry-run /path/to/audio/directories
256
274
  ```
257
275
 
258
- 5. **Using Different Normalization Presets**
276
+ #### Using Different Normalization Presets ####
259
277
 
260
278
  ```bash
261
279
  # Use radio normalization preset (default)
@@ -265,9 +283,33 @@ export AUDIOLIBRARIAN__NORMALIZE_PRESET="radio"
265
283
  export AUDIOLIBRARIAN__NORMALIZE_PRESET="album"
266
284
  ```
267
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
+
268
310
  ### Troubleshooting ###
269
311
 
270
- 1. **Increasing Verbosity**
312
+ #### Increasing Verbosity ####
271
313
 
272
314
  ```bash
273
315
  # Show more detailed output
@@ -277,58 +319,15 @@ audiolibrarian --log-level INFO cd
277
319
  audiolibrarian --log-level DEBUG cd
278
320
  ```
279
321
 
280
- 2. **Checking Dependencies**
281
-
282
- ```bash
283
- # Verify all required tools are installed
284
- audiolibrarian --log-level DEBUG cd
285
- ```
286
-
287
- 3. **MusicBrainz Issues**
322
+ #### MusicBrainz Issues ####
288
323
 
289
324
  If you encounter MusicBrainz-related errors:
290
325
 
291
326
  1. Verify your credentials are correct
292
- 2. Check your internet connection
327
+ 2. Check your Internet connection
293
328
  3. Use the debug log level to get more information
294
329
  4. Increase the rate limit if you're hitting rate limits
295
330
 
296
331
  ```bash
297
332
  export AUDIOLIBRARIAN__MUSICBRAINZ__RATE_LIMIT="2.0"
298
333
  ```
299
-
300
- ### Directory Structure ###
301
-
302
- `audiolibrarian` organizes files in the following structure:
303
-
304
- 1. **Source files** (original audio files):
305
- ```
306
- library/source/
307
- └── Artist/
308
- └── YYYY__Album/
309
- ├── 01__Track_Title.flac
310
- ├── 02__Another_Track.flac
311
- └── Manifest.yaml
312
- ```
313
-
314
- 2. **Processed audio files** (organized by format):
315
- ```
316
- library/
317
- ├── flac/
318
- │ └── Artist/
319
- │ └── YYYY__Album/
320
- │ ├── 01__Track_Title.flac
321
- │ └── 02__Another_Track.flac
322
- ├── m4a/
323
- │ └── Artist/
324
- │ └── YYYY__Album/
325
- │ ├── 01__Track_Title.m4a
326
- │ └── 02__Another_Track.m4a
327
- └── mp3/
328
- └── Artist/
329
- └── YYYY__Album/
330
- ├── 01__Track_Title.mp3
331
- └── 02__Another_Track.mp3
332
- ```
333
-
334
- 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=NAyvdXQNHBEMka12z9FEosPLDRdFPkrB6aPPdZ2MweM,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.2.dist-info/METADATA,sha256=EIrFJiGcWJVgqQcCCO8dwKDtiWU52kEA3Bp2I_l5WP8,10756
24
- audiolibrarian-0.16.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
25
- audiolibrarian-0.16.2.dist-info/entry_points.txt,sha256=reubnr_SGbTTDXji8j7z8aTmIL0AEQKVSLcnmFG3YYY,59
26
- audiolibrarian-0.16.2.dist-info/licenses/COPYING,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
27
- audiolibrarian-0.16.2.dist-info/licenses/LICENSE,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
28
- audiolibrarian-0.16.2.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.