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.
- audiolibrarian/__init__.py +1 -1
- {audiolibrarian-0.16.2.dist-info → audiolibrarian-0.16.4.dist-info}/METADATA +117 -118
- {audiolibrarian-0.16.2.dist-info → audiolibrarian-0.16.4.dist-info}/RECORD +8 -8
- picard_src/README.md +3 -3
- {audiolibrarian-0.16.2.dist-info → audiolibrarian-0.16.4.dist-info}/WHEEL +0 -0
- {audiolibrarian-0.16.2.dist-info → audiolibrarian-0.16.4.dist-info}/entry_points.txt +0 -0
- {audiolibrarian-0.16.2.dist-info → audiolibrarian-0.16.4.dist-info}/licenses/COPYING +0 -0
- {audiolibrarian-0.16.2.dist-info → audiolibrarian-0.16.4.dist-info}/licenses/LICENSE +0 -0
audiolibrarian/__init__.py
CHANGED
@@ -1,8 +1,8 @@
|
|
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
|
-
Project-URL: Repository, https://
|
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
|
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,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
|
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
|
-
|
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
|
-
|
74
|
+
It also requires the [libdiscid](https://musicbrainz.org/doc/libdiscid) library.
|
74
75
|
|
75
|
-
|
76
|
-
pip install --user --extra-index-url=https://pypi.example.com/simple audiolibrarian
|
77
|
-
```
|
76
|
+
### Install from PyPI ###
|
78
77
|
|
79
|
-
|
78
|
+
`audiolibrarian` is available on PyPI:
|
80
79
|
|
81
80
|
```bash
|
82
|
-
pip install
|
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,
|
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
|
-
-
|
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
|
132
|
-
|
133
|
-
| `library_dir` |
|
134
|
-
| `work_dir` |
|
135
|
-
| `discid_device` | `null`
|
136
|
-
| `normalize_gain` | `5`
|
137
|
-
| `normalize_preset` | `"radio"`
|
138
|
-
| `musicbrainz.username` | (not set)
|
139
|
-
| `musicbrainz.password` | (not set)
|
140
|
-
| `musicbrainz.rate_limit` | `1.5`
|
141
|
-
|
142
|
-
> **
|
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
|
-
###
|
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
|
-
|
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
|
-
|
187
|
-
```bash
|
188
|
-
export AUDIOLIBRARIAN__NORMALIZE_GAIN="8.0"
|
189
|
-
```
|
182
|
+
**Processed audio files** (organized by format):
|
190
183
|
|
191
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
235
|
-
--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
|
236
254
|
```
|
237
255
|
|
238
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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=
|
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
|