TonieToolbox 0.5.0a1__tar.gz → 0.6.0a1__tar.gz

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.
Files changed (39) hide show
  1. {tonietoolbox-0.5.0a1/TonieToolbox.egg-info → tonietoolbox-0.6.0a1}/PKG-INFO +141 -98
  2. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/README.md +141 -98
  3. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/__init__.py +1 -1
  4. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/__main__.py +148 -127
  5. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/artwork.py +12 -7
  6. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/audio_conversion.py +104 -33
  7. tonietoolbox-0.6.0a1/TonieToolbox/config.py +1 -0
  8. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/constants.py +93 -9
  9. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/filename_generator.py +6 -8
  10. tonietoolbox-0.6.0a1/TonieToolbox/integration.py +20 -0
  11. tonietoolbox-0.6.0a1/TonieToolbox/integration_macos.py +428 -0
  12. tonietoolbox-0.6.0a1/TonieToolbox/integration_ubuntu.py +1 -0
  13. tonietoolbox-0.6.0a1/TonieToolbox/integration_windows.py +404 -0
  14. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/logger.py +8 -10
  15. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/media_tags.py +22 -101
  16. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/ogg_page.py +39 -39
  17. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/opus_packet.py +13 -13
  18. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/recursive_processor.py +32 -33
  19. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/tags.py +3 -4
  20. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/teddycloud.py +50 -50
  21. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/tonie_analysis.py +24 -23
  22. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/tonie_file.py +86 -71
  23. tonietoolbox-0.6.0a1/TonieToolbox/tonies_json.py +1371 -0
  24. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/version_handler.py +12 -15
  25. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1/TonieToolbox.egg-info}/PKG-INFO +141 -98
  26. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox.egg-info/SOURCES.txt +5 -0
  27. tonietoolbox-0.5.0a1/TonieToolbox/tonies_json.py +0 -579
  28. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/LICENSE.md +0 -0
  29. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/MANIFEST.in +0 -0
  30. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/dependency_manager.py +0 -0
  31. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/tonie_header.proto +0 -0
  32. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox/tonie_header_pb2.py +0 -0
  33. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox.egg-info/dependency_links.txt +0 -0
  34. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox.egg-info/entry_points.txt +0 -0
  35. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox.egg-info/requires.txt +0 -0
  36. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/TonieToolbox.egg-info/top_level.txt +0 -0
  37. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/pyproject.toml +0 -0
  38. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/setup.cfg +0 -0
  39. {tonietoolbox-0.5.0a1 → tonietoolbox-0.6.0a1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TonieToolbox
3
- Version: 0.5.0a1
3
+ Version: 0.6.0a1
4
4
  Summary: Create files for the Tonie box and interact with TeddyCloud servers
5
5
  Home-page: https://github.com/Quentendo64/TonieToolbox
6
6
  Author: Quentendo64
@@ -31,14 +31,22 @@ Dynamic: home-page
31
31
  Dynamic: license-file
32
32
  Dynamic: requires-python
33
33
 
34
- # TonieToolbox
35
- ### WIP - Work in Progress
36
- Happy Testing :-P
34
+ # TonieToolbox 🎵📦
37
35
 
38
- A Python tool for converting audio files to Tonie box compatible format (TAF - Tonie Audio Format).
36
+ [![Publish to DockerHub](https://github.com/Quentendo64/TonieToolbox/actions/workflows/publish-to-docker.yml/badge.svg)](https://github.com/Quentendo64/TonieToolbox/actions)
37
+ [![Publish to PyPI](https://github.com/Quentendo64/TonieToolbox/actions/workflows/publish-to-pypi.yml/badge.svg)](https://github.com/Quentendo64/TonieToolbox/actions)
39
38
 
40
- # Beginners Guide
41
- - [HOWTO](HOWTO.md)
39
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
40
+ [![PyPI version](https://badge.fury.io/py/tonietoolbox.svg)](https://badge.fury.io/py/tonietoolbox)
41
+ [![Python 3.6+](https://img.shields.io/badge/python-3.6+-blue.svg)](https://www.python.org/downloads/)
42
+ [![Docker](https://img.shields.io/docker/pulls/quentendo64/tonietoolbox)](https://hub.docker.com/r/quentendo64/tonietoolbox)
43
+
44
+ A Toolkit for converting various audio formats into the Tonie-compatible TAF format (Tonie Audio Format) and interacting with [TeddyCloud powered by RevvoX](https://github.com/toniebox-reverse-engineering/teddycloud)
45
+
46
+ ## 🚀 Get Started
47
+
48
+ → [HOWTO Guide for Beginners](HOWTO.md)
49
+ → [Contributing Guidelines](CONTRIBUTING.md)
42
50
 
43
51
  ## Table of Contents
44
52
 
@@ -64,6 +72,7 @@ A Python tool for converting audio files to Tonie box compatible format (TAF - T
64
72
  - [Related Projects](#related-projects)
65
73
  - [Contributing](#contributing)
66
74
  - [Legal Notice](#legal-notice)
75
+ - [Support](#support)
67
76
 
68
77
  ## Overview
69
78
 
@@ -90,14 +99,14 @@ The tool provides several capabilities:
90
99
  - opus-tools (specifically `opusenc` for encoding to opus format)
91
100
  - mutagen (for reading audio file metadata, auto-installed when needed)
92
101
 
93
- Make sure FFmpeg and opus-tools are installed on your system and accessible in your PATH.
94
- If the requirements are not found in PATH. TonieToolbox will download the missing requirements with --auto-download.
102
+ ***Make sure FFmpeg and opus-tools are installed on your system and accessible in your PATH.***
103
+ If the requirements are not found in PATH, TonieToolbox will download the missing requirements with --auto-download.
95
104
 
96
105
  ## Installation
97
106
 
98
107
  ### Install from PyPI (Recommended)
99
108
 
100
- ```
109
+ ```shell
101
110
  pip install tonietoolbox
102
111
  ```
103
112
 
@@ -105,7 +114,7 @@ This will install TonieToolbox and its dependencies, making the `tonietoolbox` c
105
114
 
106
115
  ### Install from Source
107
116
 
108
- ```
117
+ ```shell
109
118
  # Clone the repository
110
119
  git clone https://github.com/Quentendo64/TonieToolbox.git
111
120
  cd TonieToolbox
@@ -120,7 +129,7 @@ TonieToolbox is available as a Docker image, which comes with all dependencies p
120
129
 
121
130
  #### Pull the Docker Image
122
131
 
123
- ```
132
+ ```shell
124
133
  # From Docker Hub
125
134
  docker pull quentendo64/tonietoolbox:latest
126
135
 
@@ -130,13 +139,13 @@ docker pull ghcr.io/quentendo64/tonietoolbox:latest
130
139
 
131
140
  #### Build the Docker Image Locally
132
141
 
133
- ```
142
+ ```shell
134
143
  docker build -t tonietoolbox .
135
144
  ```
136
145
 
137
146
  Or using docker-compose:
138
147
 
139
- ```
148
+ ```shell
140
149
  docker-compose build
141
150
  ```
142
151
 
@@ -147,12 +156,14 @@ docker-compose build
147
156
  **Convert a single audio file to Tonie format:**
148
157
 
149
158
  If installed via pip:
150
- ```
159
+
160
+ ```shell
151
161
  tonietoolbox input.mp3
152
162
  ```
153
163
 
154
164
  If installed from source:
155
- ```
165
+
166
+ ```shell
156
167
  python TonieToolbox.py input.mp3
157
168
  ```
158
169
 
@@ -160,7 +171,7 @@ This will create a file named `input.taf` in the `.\output` directory.
160
171
 
161
172
  **Specify output filename:**
162
173
 
163
- ```
174
+ ```shell
164
175
  tonietoolbox input.mp3 my_tonie.taf
165
176
  ```
166
177
 
@@ -170,13 +181,13 @@ This will create a file named `my_tonie.taf` in the `.\output` directory.
170
181
 
171
182
  You can specify a directory to convert all audio files within it:
172
183
 
173
- ```
184
+ ```shell
174
185
  tonietoolbox input_directory/
175
186
  ```
176
187
 
177
188
  Or use a list file (.lst) containing paths to multiple audio files:
178
189
 
179
- ```
190
+ ```shell
180
191
  tonietoolbox playlist.lst
181
192
  ```
182
193
 
@@ -184,7 +195,7 @@ tonietoolbox playlist.lst
184
195
 
185
196
  To process an entire folder structure with multiple audio folders:
186
197
 
187
- ```
198
+ ```shell
188
199
  tonietoolbox --recursive "Music/Albums"
189
200
  ```
190
201
 
@@ -192,7 +203,7 @@ This will scan all subfolders, identify those containing audio files, and create
192
203
 
193
204
  By default, all generated TAF files are saved in the `.\output` directory. If you want to save each TAF file in its source directory instead:
194
205
 
195
- ```
206
+ ```shell
196
207
  tonietoolbox --recursive --output-to-source "Music/Albums"
197
208
  ```
198
209
 
@@ -202,26 +213,33 @@ Using TonieToolbox with Docker simplifies the setup process as all dependencies
202
213
 
203
214
  **Convert a single audio file to Tonie format:**
204
215
 
216
+ **On Windows PowerShell/Unix/macOS:**
217
+
205
218
  ```bash
206
- # Use docker run
207
219
  docker run --rm -v "$(pwd)/input:/tonietoolbox/input" -v "$(pwd)/output:/tonietoolbox/output" quentendo64/tonietoolbox input/my-audio-file.mp3
220
+ ```
208
221
 
209
- # Or using docker-compose
222
+ **On Windows (CMD):**
223
+
224
+ ```cmd
225
+ docker run --rm -v "%cd%\input:/tonietoolbox/input" -v "%cd%\output:/tonietoolbox/output" quentendo64/tonietoolbox input/my-audio-file.mp3
226
+ ```
227
+
228
+ **Or using docker-compose**
229
+
230
+ ```shell
210
231
  docker-compose run --rm tonietoolbox input/my-audio-file.mp3
211
232
  ```
212
233
 
213
234
  **Process folders recursively:**
214
235
 
215
236
  ```bash
216
- # Use docker run
217
237
  docker run --rm -v "$(pwd)/input:/tonietoolbox/input" -v "$(pwd)/output:/tonietoolbox/output" quentendo64/tonietoolbox --recursive input/folder
218
-
219
238
  ```
220
239
 
221
240
  **Advanced options with Docker:**
222
241
 
223
242
  ```bash
224
- # Convert with custom settings
225
243
  docker run --rm -v "$(pwd)/input:/tonietoolbox/input" -v "$(pwd)/output:/tonietoolbox/output" quentendo64/tonietoolbox --recursive --use-media-tags --name-template "{album} - {artist}" --bitrate 128 input/folder
226
244
  ```
227
245
 
@@ -235,12 +253,13 @@ docker run --rm -v "$(pwd)/input:/tonietoolbox/input" -v "$(pwd)/output:/tonieto
235
253
 
236
254
  Run the following command to see all available options:
237
255
 
238
- ```
256
+ ```shell
239
257
  tonietoolbox -h
240
258
  ```
241
259
 
242
260
  Output:
243
- ```
261
+
262
+ ```shell
244
263
  usage: TonieToolbox.py [-h] [-v] [--upload URL] [--include-artwork] [--get-tags URL]
245
264
  [--ignore-ssl-verify] [--special-folder FOLDER] [--path PATH]
246
265
  [--show-progress] [--connection-timeout SECONDS]
@@ -299,6 +318,7 @@ optional arguments:
299
318
  -C, --compare FILE2 Compare input file with another .taf file for debugging
300
319
  -D, --detailed-compare
301
320
  Show detailed OGG page differences when comparing files
321
+ --no-mono-conversion Do not convert mono audio to stereo (default: convert mono to stereo)
302
322
  Media Tag Options:
303
323
  -m, --use-media-tags Use media tags from audio files for naming
304
324
  --name-template TEMPLATE
@@ -323,51 +343,51 @@ Logging Options:
323
343
 
324
344
  ### Common Usage Examples
325
345
 
326
- #### Analyze a Tonie file:
346
+ #### Analyze a Tonie file
327
347
 
328
- ```
348
+ ```shell
329
349
  tonietoolbox --info my_tonie.taf
330
350
  ```
331
351
 
332
- #### Split a Tonie file into individual opus tracks:
352
+ #### Split a Tonie file into individual opus tracks
333
353
 
334
- ```
354
+ ```shell
335
355
  tonietoolbox --split my_tonie.taf
336
356
  ```
337
357
 
338
- #### Compare TAF files:
358
+ #### Compare TAF files
339
359
 
340
360
  Compare two TAF files for debugging purposes:
341
361
 
342
- ```
362
+ ```shell
343
363
  tonietoolbox file1.taf --compare file2.taf
344
364
  ```
345
365
 
346
366
  For detailed comparison including OGG page differences:
347
367
 
348
- ```
368
+ ```shell
349
369
  tonietoolbox file1.taf --compare file2.taf --detailed-compare
350
370
  ```
351
371
 
352
- #### Custom timestamp options:
372
+ #### Custom timestamp options
353
373
 
354
- ```
374
+ ```shell
355
375
  tonietoolbox input.mp3 --timestamp 1745078762 # UNIX Timestamp
356
376
  tonietoolbox input.mp3 --timestamp 0x6803C9EA # Bitstream time
357
377
  tonietoolbox input.mp3 --timestamp ./reference.taf # Reference TAF for extraction
358
378
  ```
359
379
 
360
- #### Set custom bitrate:
380
+ #### Set custom bitrate
361
381
 
362
- ```
382
+ ```shell
363
383
  tonietoolbox input.mp3 --bitrate 128
364
384
  ```
365
385
 
366
- #### Constant bitrate encoding:
386
+ #### Constant bitrate encoding
367
387
 
368
388
  For more predictable file sizes and consistent quality, use constant bitrate (CBR) encoding:
369
389
 
370
- ```
390
+ ```shell
371
391
  # Encode with constant bitrate at 96 kbps (default)
372
392
  tonietoolbox input.mp3 --cbr
373
393
 
@@ -375,36 +395,36 @@ tonietoolbox input.mp3 --cbr
375
395
  tonietoolbox input.mp3 --cbr --bitrate 128
376
396
  ```
377
397
 
378
- #### Append Tonie tag:
398
+ #### Append Tonie tag
379
399
 
380
400
  You can append a hexadecimal tag to the filename, which is useful for organizing Tonie files:
381
401
 
382
- ```
402
+ ```shell
383
403
  # Add an 8-character hex tag to filename
384
404
  tonietoolbox input.mp3 --append-tonie-tag 7F8A6B2E
385
405
 
386
406
  # The output will be named "input-7F8A6B2E.taf"
387
407
  ```
388
408
 
389
- #### Process a complex folder structure:
409
+ #### Process a complex folder structure
390
410
 
391
411
  Process an audiobook series with multiple folders:
392
412
 
393
- ```
394
- tonietoolbox --recursive "\Hörspiele\Die drei Fragezeichen\Folgen"
413
+ ```shell
414
+ tonietoolbox --recursive "C:\Hörspiele\Die drei Fragezeichen\Folgen"
395
415
  ```
396
416
 
397
417
  Process a music collection with nested album folders and save TAF files alongside the source directories:
398
418
 
399
- ```
400
- tonietoolbox --recursive --output-to-source "\Hörspiele\"
419
+ ```shell
420
+ tonietoolbox --recursive --output-to-source "C:\Hörspiele\"
401
421
  ```
402
422
 
403
- #### Automatic dependency download:
423
+ #### Automatic dependency download
404
424
 
405
425
  If FFmpeg or opusenc are not found in your PATH, TonieToolbox can automatically download them:
406
426
 
407
- ```
427
+ ```shell
408
428
  # Automatically download dependencies when needed
409
429
  tonietoolbox input.mp3 --auto-download
410
430
 
@@ -412,36 +432,38 @@ tonietoolbox input.mp3 --auto-download
412
432
  tonietoolbox input.mp3 --ffmpeg "C:\path\to\ffmpeg.exe" --opusenc "C:\path\to\opusenc.exe"
413
433
  ```
414
434
 
415
- #### Keep temporary files:
435
+ #### Keep temporary files
416
436
 
417
437
  When troubleshooting or debugging, you can keep the temporary opus files:
418
438
 
419
- ```
439
+ ```shell
420
440
  # Keep temporary opus files in the temp folder
421
441
  tonietoolbox input.mp3 --keep-temp
422
442
 
423
443
  ```
424
444
 
425
- #### Working with list files:
445
+ #### Working with list files
426
446
 
427
447
  Create a text file (.lst) with paths to audio files for batch processing:
428
448
 
429
- ```
449
+ ```text
430
450
  # Contents of playlist.lst:
431
451
  C:\Music\song1.mp3
432
452
  "C:\Music\song2.flac"
433
453
  C:\Music\song3.wav
434
454
  "C:\Music Path With Spaces\song2.flac"
455
+ ```
435
456
 
457
+ ```shell
436
458
  # Process the list file
437
459
  tonietoolbox playlist.lst my_playlist.taf
438
460
  ```
439
461
 
440
- #### TeddyCloud advanced options:
462
+ #### TeddyCloud advanced options
441
463
 
442
464
  Customize your TeddyCloud uploads with connection options:
443
465
 
444
- ```
466
+ ```shell
445
467
  # Upload with custom timeouts and retry parameters
446
468
  tonietoolbox my_tonie.taf --upload https://teddycloud.example.com --connection-timeout 20 --read-timeout 600 --max-retries 5 --retry-delay 10
447
469
 
@@ -452,19 +474,19 @@ tonietoolbox my_tonie.taf --upload https://teddycloud.example.com --show-progres
452
474
  tonietoolbox my_tonie.taf --upload https://teddycloud.example.com --special-folder library
453
475
  ```
454
476
 
455
- #### Get available tags from TeddyCloud:
477
+ #### Get available tags from TeddyCloud
456
478
 
457
479
  To see which tags you can use with your TeddyCloud server:
458
480
 
459
- ```
481
+ ```shell
460
482
  tonietoolbox --get-tags https://teddycloud.example.com
461
483
  ```
462
484
 
463
- #### Version checking and updates:
485
+ #### Version checking and updates
464
486
 
465
487
  TonieToolbox can check for newer versions and notify you when there are updates available:
466
488
 
467
- ```
489
+ ```shell
468
490
  # Skip checking for updates if you're offline or want faster startup
469
491
  tonietoolbox input.mp3 --skip-update-check
470
492
 
@@ -475,29 +497,29 @@ tonietoolbox input.mp3 --force-refresh-cache
475
497
  tonietoolbox --clear-version-cache
476
498
  ```
477
499
 
478
- #### Legacy tag options:
500
+ #### Legacy tag options
479
501
 
480
502
  Use legacy hardcoded tags instead of dynamic TonieToolbox tags:
481
503
 
482
- ```
504
+ ```shell
483
505
  tonietoolbox input.mp3 --use-legacy-tags
484
506
  ```
485
507
 
486
- #### Create custom JSON data:
508
+ #### Create custom JSON data
487
509
 
488
510
  When uploading to TeddyCloud, you can also update the custom Tonies JSON data with information about the uploaded file:
489
511
 
490
- ```
512
+ ```shell
491
513
  tonietoolbox input.mp3 --upload https://teddycloud.example.com --create-custom-json
492
514
  ```
493
515
 
494
516
  This will fetch and update the custom Tonies JSON data in the TeddyCloud server with information from your audio files.
495
517
 
496
- #### Logging and Troubleshooting:
518
+ #### Logging and Troubleshooting
497
519
 
498
520
  Control the verbosity of console output with different logging levels:
499
521
 
500
- ```
522
+ ```shell
501
523
  # Enable detailed debug information (useful for troubleshooting)
502
524
  tonietoolbox input.mp3 --debug
503
525
 
@@ -513,7 +535,7 @@ tonietoolbox input.mp3 --silent
513
535
 
514
536
  You can combine logging options with other commands:
515
537
 
516
- ```
538
+ ```shell
517
539
  # Debug mode while splitting a TAF file
518
540
  tonietoolbox --split my_tonie.taf --debug
519
541
 
@@ -525,45 +547,45 @@ tonietoolbox --recursive "Music/Collection/" --quiet
525
547
 
526
548
  TonieToolbox can read metadata tags from audio files (such as ID3 tags in MP3 files, Vorbis comments in FLAC/OGG files, etc.) and use them to create more meaningful filenames or display information about your audio collection.
527
549
 
528
- #### View available tags in audio files:
550
+ #### View available tags in audio files
529
551
 
530
552
  To see what tags are available in your audio files:
531
553
 
532
- ```
554
+ ```shell
533
555
  tonietoolbox --show-tags input.mp3
534
556
  ```
535
557
 
536
558
  This will display all readable tags from the file, which can be useful for creating naming templates.
537
559
 
538
- #### Use media tags for file naming:
560
+ #### Use media tags for file naming
539
561
 
540
562
  To use the metadata from audio files when generating output filenames:
541
563
 
542
- ```
564
+ ```shell
543
565
  tonietoolbox input.mp3 --use-media-tags
544
566
  ```
545
567
 
546
568
  For single files, this will use a default template of "{title} - {artist}" for the output filename.
547
569
 
548
- #### Custom naming templates:
570
+ #### Custom naming templates
549
571
 
550
572
  You can specify custom templates for generating filenames based on the audio metadata:
551
573
 
552
- ```
574
+ ```shell
553
575
  tonietoolbox input.mp3 --use-media-tags --name-template "{artist} - {album} - {title}"
554
576
  ```
555
577
 
556
- #### Recursive processing with media tags:
578
+ #### Recursive processing with media tags
557
579
 
558
580
  When processing folders recursively, media tags can provide more consistent naming:
559
581
 
560
- ```
582
+ ```shell
561
583
  tonietoolbox --recursive --use-media-tags "Music/Collection/"
562
584
  ```
563
585
 
564
586
  This will attempt to use the album information from the audio files for naming the output files:
565
587
 
566
- ```
588
+ ```shell
567
589
  tonietoolbox --recursive --use-media-tags --name-template "{date} - {album} ({artist})" "Music/Collection/"
568
590
  ```
569
591
 
@@ -571,56 +593,59 @@ tonietoolbox --recursive --use-media-tags --name-template "{date} - {album} ({ar
571
593
 
572
594
  TonieToolbox can upload files directly to a TeddyCloud server, which is an alternative to the official Tonie cloud for managing custom Tonies.
573
595
 
574
- #### Upload a Tonie file to TeddyCloud:
596
+ #### Upload a Tonie file to TeddyCloud
575
597
 
576
- ```
598
+ ```shell
577
599
  tonietoolbox --upload https://teddycloud.example.com my_tonie.taf
578
600
  ```
579
601
 
580
602
  This will upload the specified Tonie file to the TeddyCloud server.
581
603
 
582
- #### Upload a newly created Tonie file:
604
+ #### Upload a newly created Tonie file
583
605
 
584
606
  You can combine conversion and upload in a single command:
585
607
 
586
- ```
608
+ ```shell
587
609
  tonietoolbox input.mp3 --upload https://teddycloud.example.com
588
610
  ```
589
611
 
590
612
  This will convert the input file to TAF format and then upload it to the TeddyCloud server.
591
613
 
592
- #### Upload with custom path:
614
+ #### Upload with custom path
593
615
 
594
- ```
616
+ ```shell
595
617
  tonietoolbox my_tonie.taf --upload https://teddycloud.example.com --path "/custom_audio"
596
- The path needs to be existing in the TeddyCloud Library.
618
+ # The path must already exist in the TeddyCloud Library.
597
619
  ```
598
620
 
599
- #### Upload with artwork:
621
+ #### Upload with artwork
622
+
623
+ > **Note:** This function will only work if the `/custom_img` folder is mounted in the TeddyCloud Library. For an easy start and to handle this automatically (and much more), use [TeddyCloudStarter](https://github.com/Quentendo64/TeddyCloudStarter).
600
624
 
601
625
  TonieToolbox can automatically find and upload cover artwork alongside your Tonie files:
602
626
 
603
- ```
627
+ ```shell
604
628
  tonietoolbox my_tonie.taf --upload https://teddycloud.example.com --include-artwork
605
629
  ```
606
630
 
607
631
  This will:
632
+
608
633
  1. Look for cover images (like "cover.jpg", "artwork.png", etc.) in the source directory
609
634
  2. If no cover image is found, attempt to extract embedded artwork from the audio files
610
635
  3. Upload the artwork to the "/custom_img" directory on the TeddyCloud server
611
636
  4. The artwork will be uploaded with the same filename as the Tonie file for easier association
612
637
 
613
- #### Recursive processing with uploads:
638
+ #### Recursive processing with uploads
614
639
 
615
- ```
640
+ ```shell
616
641
  tonietoolbox --recursive "Music/Albums" --upload https://teddycloud.example.com --include-artwork
617
642
  ```
618
643
 
619
644
  This will process all folders recursively, create TAF files, and upload both the TAF files and their cover artwork to the TeddyCloud server.
620
645
 
621
- #### Upload with SSL certificate verification disabled:
646
+ #### Upload with SSL certificate verification disabled
622
647
 
623
- ```
648
+ ```shell
624
649
  tonietoolbox my_tonie.taf --upload https://teddycloud.example.com --ignore-ssl-verify
625
650
  ```
626
651
 
@@ -632,11 +657,12 @@ Use this option if the TeddyCloud server uses a self-signed certificate.
632
657
 
633
658
  To convert an entire audiobook series with proper metadata and upload to TeddyCloud:
634
659
 
635
- ```
636
- tonietoolbox --recursive --use-media-tags --name-template "{YEAR} - {ALBUMARTIST} - {ALBUM}" --bitrate 128 --upload https://teddycloud.example.com --include-artwork "C:\Hörspiele\Die Drei Fragezeichen"
660
+ ```shell
661
+ tonietoolbox --recursive --use-media-tags --name-template "{year} - {albumartist} - {album}" --bitrate 128 --upload https://teddycloud.example.com --include-artwork "C:\Hörspiele\Die Drei Fragezeichen"
637
662
  ```
638
663
 
639
664
  This command will:
665
+
640
666
  1. Recursively process the Die Drei Fragezeichen audioplays directory
641
667
  2. Use a naming template based on source metadata
642
668
  3. Encode at 128 kbps
@@ -646,23 +672,23 @@ This command will:
646
672
 
647
673
  For a custom children's story collection with chapters:
648
674
 
649
- ```
675
+ ```shell
650
676
  tonietoolbox story_collection.lst kids_stories.taf --bitrate 96 --cbr --auto-download --use-media-tags --name-template "{title} Stories" --debug
651
677
  ```
652
678
 
653
679
  This command:
680
+
654
681
  1. Processes a list of story audio files
655
682
  2. Names the output based on metadata
656
683
  3. Uses constant bitrate encoding for consistent quality
657
684
  4. Automatically downloads dependencies if needed
658
685
  5. Shows detailed debug information during the process
659
686
 
660
-
661
687
  ### Advanced Media Tag Usage
662
688
 
663
689
  For complex media tag processing:
664
690
 
665
- ```
691
+ ```shell
666
692
  # First check available tags
667
693
  tonietoolbox --show-tags "C:\Music\Classical\Bach"
668
694
 
@@ -670,7 +696,7 @@ tonietoolbox --show-tags "C:\Music\Classical\Bach"
670
696
  tonietoolbox "C:\Music\Classical\Bach" --use-media-tags --name-template "{composer} - {opus} in {key} ({conductor}, {orchestra})"
671
697
  ```
672
698
 
673
- The first command shows what tags are available, allowing you to create precise naming templates for classical music collections as example.
699
+ The first command shows what tags are available, allowing you to create precise naming templates for classical music collections.
674
700
 
675
701
  ## Technical Details
676
702
 
@@ -687,6 +713,7 @@ Located at the beginning of the file, structured as:
687
713
  - Padding to fill the entire 4096 bytes (0x1000)
688
714
 
689
715
  The Protocol Buffer structure contains:
716
+
690
717
  ```protobuf
691
718
  message TonieHeader {
692
719
  bytes dataHash = 1; // SHA1 hash of the audio data
@@ -700,6 +727,7 @@ message TonieHeader {
700
727
  #### 2. Audio Data
701
728
 
702
729
  The audio data consists of:
730
+
703
731
  - Opus encoded audio in Ogg container format
704
732
  - Every page after the header has a fixed size of 4096 bytes (0x1000)
705
733
  - First page contains the Opus identification header
@@ -710,11 +738,17 @@ The audio data consists of:
710
738
  #### 3. Special Requirements
711
739
 
712
740
  For optimal compatibility with Tonie boxes:
713
- - Audio must be stereo (2 channels)
741
+
742
+ - Audio should be stereo (2 channels)
714
743
  - Sample rate must be 48 kHz
715
744
  - Pages must be aligned to 4096 byte boundaries
716
745
  - Bitrate of 96 kbps VBR is recommended
717
746
 
747
+ **Mono audio handling:**
748
+
749
+ - By default, TonieToolbox will automatically convert mono audio files to stereo for compatibility.
750
+ - To disable this behavior (and require your input to already be stereo), use the `--no-mono-conversion` flag.
751
+
718
752
  ### File Analysis
719
753
 
720
754
  When using the `--info` flag, TonieToolbox checks and displays detailed information about a .TAF (Tonie Audio File):
@@ -746,7 +780,8 @@ This is particularly useful for debugging when creating TAF files with different
746
780
  This project is inspired by and builds upon the work of other Tonie-related open source projects:
747
781
 
748
782
  - [opus2tonie](https://github.com/bailli/opus2tonie) - A command line utility to convert opus files to the Tonie audio format
749
- - [teddycloud](https://github.com/toniebox-reverse-engineering/teddycloud) - Self-hosted alternative to the Tonie cloud for managing custom Tonies
783
+ - [teddycloud](https://github.com/toniebox-reverse-engineering/teddycloud) - Self-hosted alternative to the Tonie cloud / Boxine cloud for managing custom content
784
+ - [TeddyCloudStarter](https://github.com/Quentendo64/TeddyCloudStarter) - A Wizard for Docker-based deployment of [teddycloud](https://github.com/toniebox-reverse-engineering/teddycloud)
750
785
 
751
786
  ## Contributing
752
787
 
@@ -756,10 +791,18 @@ Contributions are welcome! Please feel free to submit a Pull Request.
756
791
 
757
792
  This project is an independent, community-driven effort created for educational and personal use purposes.
758
793
 
759
- - tonies®, toniebox®, Hörfigur® are registered trademarks of [tonies GmbH](https://tonies.com).
794
+ - tonies®, toniebox®, and Hörfigur® are registered trademarks of [tonies GmbH](https://tonies.com).
760
795
  - This project is not affiliated with, endorsed by, or connected to tonies GmbH in any way.
761
796
  - TonieToolbox is provided "as is" without warranty of any kind, either express or implied.
762
797
  - Users are responsible for ensuring their usage complies with all applicable copyright and intellectual property laws.
763
798
  - This tool is intended for personal use with legally owned content only.
764
799
 
765
800
  By using TonieToolbox, you acknowledge that the authors of this software take no responsibility for any potential misuse or any damages that might result from the use of this software.
801
+
802
+ ## Support
803
+
804
+ If you need help, have questions, or want to report a bug, please use the following channels:
805
+
806
+ - [GitHub Issues](https://github.com/Quentendo64/TonieToolbox/issues) for bug reports and feature requests
807
+ - [GitHub Discussions](https://github.com/Quentendo64/TonieToolbox/discussions) for general questions and community support
808
+ - [HOWTO Guide](HOWTO.md) for common usage instructions