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.
- audiolibrarian/__init__.py +1 -1
- {audiolibrarian-0.16.3.dist-info → audiolibrarian-0.16.4.dist-info}/METADATA +114 -109
- {audiolibrarian-0.16.3.dist-info → audiolibrarian-0.16.4.dist-info}/RECORD +8 -8
- picard_src/README.md +3 -3
- {audiolibrarian-0.16.3.dist-info → audiolibrarian-0.16.4.dist-info}/WHEEL +0 -0
- {audiolibrarian-0.16.3.dist-info → audiolibrarian-0.16.4.dist-info}/entry_points.txt +0 -0
- {audiolibrarian-0.16.3.dist-info → audiolibrarian-0.16.4.dist-info}/licenses/COPYING +0 -0
- {audiolibrarian-0.16.3.dist-info → audiolibrarian-0.16.4.dist-info}/licenses/LICENSE +0 -0
audiolibrarian/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: audiolibrarian
|
3
|
-
Version: 0.16.
|
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
|
31
|
-
|
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
|
52
|
-
`audiolibrarian` provides the tools you need to keep your music collection
|
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
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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,
|
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
|
-
-
|
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
|
126
|
-
|
127
|
-
| `library_dir` |
|
128
|
-
| `work_dir` |
|
129
|
-
| `discid_device` | `null`
|
130
|
-
| `normalize_gain` | `5`
|
131
|
-
| `normalize_preset` | `"radio"`
|
132
|
-
| `musicbrainz.username` | (not set)
|
133
|
-
| `musicbrainz.password` | (not set)
|
134
|
-
| `musicbrainz.rate_limit` | `1.5`
|
135
|
-
|
136
|
-
> **
|
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
|
-
###
|
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
|
-
|
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
|
-
|
181
|
-
```bash
|
182
|
-
export AUDIOLIBRARIAN__NORMALIZE_GAIN="8.0"
|
183
|
-
```
|
182
|
+
**Processed audio files** (organized by format):
|
184
183
|
|
185
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
229
|
-
--mb-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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=
|
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=
|
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.
|
24
|
-
audiolibrarian-0.16.
|
25
|
-
audiolibrarian-0.16.
|
26
|
-
audiolibrarian-0.16.
|
27
|
-
audiolibrarian-0.16.
|
28
|
-
audiolibrarian-0.16.
|
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.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|