Name | sync-music JSON |
Version |
0.5.1
JSON |
| download |
home_page | None |
Summary | Sync music library to external devices |
upload_time | 2025-08-04 19:41:54 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | None |
keywords |
music
synchronization
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
[](https://github.com/fetzerch/sync_music/actions)
[](https://codecov.io/github/fetzerch/sync_music)
[](https://pypi.org/project/sync_music)
# sync_music - Sync music library to external devices
This program allows you to synchronize your music library for the usage
on primitive music players that don\'t support the diversity of your
collection.
In normal operation mode, *sync_music* performs its synchronization
tasks depending on the input file format. Music files in FLAC, Ogg
Vorbis and M4A format are transcoded to MP3. MP3 audio files and other
files are transferred unchanged. Filenames are adapted where necessary
to comply with the FAT32 format. If preferred, *sync_music* can also
forcefully transcode all files in order to save disk space. Another
operation mode applies volume normalization based on
[ReplayGain](https://en.wikipedia.org/wiki/ReplayGain) tags.
Transcoding is a time consuming operation, therefore the first run of
*sync_music* can take several minutes. In subsequent runs however, it
will only process files that changed in the source. To optimize the
detection of file changes, the script stores and compares a hash build
on a fixed size block at the beginning of each file.
Besides audio files, *sync_music* is also able to export M3U playlists
to the destination folder. Absolute paths are hereby replaced with
relative paths in addition to the FAT32 filename adaptations.
## Dependencies
- Python \>= 3.9
- [FFmpeg](https://ffmpeg.org) (for transcoding to MP3)
- [Mutagen](https://mutagen.readthedocs.io) \>= 1.29 (for tag
manipulation)
## Installation
The first step is to install [FFmpeg](https://ffmpeg.org). Most Linux
distributions offer packages that can be directly installed. On Ubuntu
18.04 or later there\'s an official package that can simply be installed
using:
# apt install ffmpeg
Then *sync_music* can be installed from PyPI with:
# pip3 install sync_music
The following command installs the current development version:
# pip3 install https://github.com/fetzerch/sync_music/archive/master.zip
## Usage
### Quick start
The following basic command synchronizes all audio files from the source
to the destination directory:
sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER>
Additionally M3U playlist syncing can be enabled by specifying the path
to the playlists:
sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER> --playlist-src=<FOLDER>
Besides that *sync_music* supports a number of advanced options. A full
list of supported options is available in the built in help message:
sync_music --help
### Transcoding
The operation mode can be changed with the `--mode` parameter.
In `transcode` mode MP3 files are transcoded as well (instead of just
copied to the destination):
sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER> --mode=transcode
Transcoding MP3 files can lead to significantly smaller files if the
source contains many 320kbps CBR MP3s as the target rate is 190kbps VBR.
The drawback is that transcoding is slower and needs more CPU power.
The `replaygain` and `replaygain-album` modes apply (track or album)
based volume normalization from
[ReplayGain](https://en.wikipedia.org/wiki/ReplayGain) tags when
transcoding:
sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER> --mode=replaygain
Transcoding modes require that the MP3 files can be decoded by
[FFMpeg](https://ffmpeg.org) without issues. Problematic input files can
be analyzed and fixed for example with [MP3
Diags](http://mp3diags.sourceforge.net).
### Hacks
Some media players don\'t properly support album artist tags. This
restriction can be bypassed by writing the album artist information into
the artist field. This can be enabled by adding the
`--albumartist-artist-hack` parameter.
Some media players don\'t properly support album artist tags, but they
do support the composer field. This restriction can be bypassed by
writing the album artist information into the composer field. This can
be enabled by adding the `--albumartist-composer-hack` parameter.
Some media players don\'t properly support artist tags. This restriction
can be bypassed by writing the artist information into the album artist
field. This can be enabled by adding the `--artist-albumartist-hack`
parameter.
Some media players don\'t properly support disc number tags with tracks
numbered starting with 1 for every disc. The user typically wants to
group them by disc and not by track position. This can be solved by
creating a different album for each disc. With the `--discnumber-hack`
option, the disc number is appended to the album field.
Some media players don\'t properly support track number tags containing
the total number of tracks on the disk. With the `--tracknumber-hack`
option, the track total is removed from the track number field.
## License
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the [GNU
General Public License](http://www.gnu.org/licenses/gpl-2.0.html) for
more details.
Raw data
{
"_id": null,
"home_page": null,
"name": "sync-music",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "music, synchronization",
"author": null,
"author_email": "Christian Fetzer <fetzer.ch@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/87/2b/e13b32f872499d1208e5e5947633e0fe99476e3921dbbdca50384c038ade/sync_music-0.5.1.tar.gz",
"platform": null,
"description": "[](https://github.com/fetzerch/sync_music/actions)\n[](https://codecov.io/github/fetzerch/sync_music)\n[](https://pypi.org/project/sync_music)\n\n# sync_music - Sync music library to external devices\n\nThis program allows you to synchronize your music library for the usage\non primitive music players that don\\'t support the diversity of your\ncollection.\n\nIn normal operation mode, *sync_music* performs its synchronization\ntasks depending on the input file format. Music files in FLAC, Ogg\nVorbis and M4A format are transcoded to MP3. MP3 audio files and other\nfiles are transferred unchanged. Filenames are adapted where necessary\nto comply with the FAT32 format. If preferred, *sync_music* can also\nforcefully transcode all files in order to save disk space. Another\noperation mode applies volume normalization based on\n[ReplayGain](https://en.wikipedia.org/wiki/ReplayGain) tags.\n\nTranscoding is a time consuming operation, therefore the first run of\n*sync_music* can take several minutes. In subsequent runs however, it\nwill only process files that changed in the source. To optimize the\ndetection of file changes, the script stores and compares a hash build\non a fixed size block at the beginning of each file.\n\nBesides audio files, *sync_music* is also able to export M3U playlists\nto the destination folder. Absolute paths are hereby replaced with\nrelative paths in addition to the FAT32 filename adaptations.\n\n## Dependencies\n\n- Python \\>= 3.9\n- [FFmpeg](https://ffmpeg.org) (for transcoding to MP3)\n- [Mutagen](https://mutagen.readthedocs.io) \\>= 1.29 (for tag\n manipulation)\n\n## Installation\n\nThe first step is to install [FFmpeg](https://ffmpeg.org). Most Linux\ndistributions offer packages that can be directly installed. On Ubuntu\n18.04 or later there\\'s an official package that can simply be installed\nusing:\n\n # apt install ffmpeg\n\nThen *sync_music* can be installed from PyPI with:\n\n # pip3 install sync_music\n\nThe following command installs the current development version:\n\n # pip3 install https://github.com/fetzerch/sync_music/archive/master.zip\n\n## Usage\n\n### Quick start\n\nThe following basic command synchronizes all audio files from the source\nto the destination directory:\n\n sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER>\n\nAdditionally M3U playlist syncing can be enabled by specifying the path\nto the playlists:\n\n sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER> --playlist-src=<FOLDER>\n\nBesides that *sync_music* supports a number of advanced options. A full\nlist of supported options is available in the built in help message:\n\n sync_music --help\n\n### Transcoding\n\nThe operation mode can be changed with the `--mode` parameter.\n\nIn `transcode` mode MP3 files are transcoded as well (instead of just\ncopied to the destination):\n\n sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER> --mode=transcode\n\nTranscoding MP3 files can lead to significantly smaller files if the\nsource contains many 320kbps CBR MP3s as the target rate is 190kbps VBR.\nThe drawback is that transcoding is slower and needs more CPU power.\n\nThe `replaygain` and `replaygain-album` modes apply (track or album)\nbased volume normalization from\n[ReplayGain](https://en.wikipedia.org/wiki/ReplayGain) tags when\ntranscoding:\n\n sync_music --audio-src=<FOLDER> --audio-dest=<FOLDER> --mode=replaygain\n\nTranscoding modes require that the MP3 files can be decoded by\n[FFMpeg](https://ffmpeg.org) without issues. Problematic input files can\nbe analyzed and fixed for example with [MP3\nDiags](http://mp3diags.sourceforge.net).\n\n### Hacks\n\nSome media players don\\'t properly support album artist tags. This\nrestriction can be bypassed by writing the album artist information into\nthe artist field. This can be enabled by adding the\n`--albumartist-artist-hack` parameter.\n\nSome media players don\\'t properly support album artist tags, but they\ndo support the composer field. This restriction can be bypassed by\nwriting the album artist information into the composer field. This can\nbe enabled by adding the `--albumartist-composer-hack` parameter.\n\nSome media players don\\'t properly support artist tags. This restriction\ncan be bypassed by writing the artist information into the album artist\nfield. This can be enabled by adding the `--artist-albumartist-hack`\nparameter.\n\nSome media players don\\'t properly support disc number tags with tracks\nnumbered starting with 1 for every disc. The user typically wants to\ngroup them by disc and not by track position. This can be solved by\ncreating a different album for each disc. With the `--discnumber-hack`\noption, the disc number is appended to the album field.\n\nSome media players don\\'t properly support track number tags containing\nthe total number of tracks on the disk. With the `--tracknumber-hack`\noption, the track total is removed from the track number field.\n\n## License\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the [GNU\nGeneral Public License](http://www.gnu.org/licenses/gpl-2.0.html) for\nmore details.\n",
"bugtrack_url": null,
"license": null,
"summary": "Sync music library to external devices",
"version": "0.5.1",
"project_urls": {
"Repository": "https://github.com/fetzerch/sync_music"
},
"split_keywords": [
"music",
" synchronization"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "db5f5cbfbb74c33dc6fd6d816db781e380f0de8e2cbab5bf11f60b156cbba870",
"md5": "526d51797b9237e83300c51e406bd845",
"sha256": "a39ee17a9cf8431b9ff0435be04480717e07719d689b52dbbf03d4da47f89021"
},
"downloads": -1,
"filename": "sync_music-0.5.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "526d51797b9237e83300c51e406bd845",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 26563,
"upload_time": "2025-08-04T19:41:53",
"upload_time_iso_8601": "2025-08-04T19:41:53.148037Z",
"url": "https://files.pythonhosted.org/packages/db/5f/5cbfbb74c33dc6fd6d816db781e380f0de8e2cbab5bf11f60b156cbba870/sync_music-0.5.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "872be13b32f872499d1208e5e5947633e0fe99476e3921dbbdca50384c038ade",
"md5": "caded6740c046ef908b58474fb2488fa",
"sha256": "5f94e63cb3cc2782bfa26cdde7e12b605cb1f59169c918874878064ccd1ceba0"
},
"downloads": -1,
"filename": "sync_music-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "caded6740c046ef908b58474fb2488fa",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 1007981,
"upload_time": "2025-08-04T19:41:54",
"upload_time_iso_8601": "2025-08-04T19:41:54.912374Z",
"url": "https://files.pythonhosted.org/packages/87/2b/e13b32f872499d1208e5e5947633e0fe99476e3921dbbdca50384c038ade/sync_music-0.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-04 19:41:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fetzerch",
"github_project": "sync_music",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "sync-music"
}