==========
tagrenamer
==========
.. image:: https://img.shields.io/github/languages/top/nielsvm/tagrenamer.svg
:target: https://github.com/nielsvm/tagrenamer
.. image:: https://img.shields.io/github/license/nielsvm/tagrenamer.svg
:target: https://raw.githubusercontent.com/nielsvm/tagrenamer/master/LICENSE
.. image:: https://img.shields.io/pypi/v/tagrenamer.svg
:target: https://pypi.python.org/pypi/tagrenamer
.. image:: https://img.shields.io/readthedocs/tagrenamer.svg
:target: https://tagrenamer.readthedocs.io/
*Mass music collection renamer.*
**Tagrenamer completely cleans up your music folder for you, all you need**
**to do is to make sure all music files have the right tags.**
Imagine this is inside your music folder:
.. code-block:: console
Music/
├── MUTTER (2001) - Adios.mp3
├── MUTTER (2001) - Feuer Frei.mp3
├── MUTTER (2001) - Ich Will.mp3
├── MUTTER (2001) - Links 2 3 4.mp3
├── MUTTER (2001) - Mein Herz Brennt.mp3
├── MUTTER (2001) - Mutter.mp3
├── MUTTER (2001) - Nebel.mp3
├── MUTTER (2001) - Rein Raus.mp3
├── MUTTER (2001) - Sonne.mp3
├── MUTTER (2001) - Spieluhr.mp3
└── MUTTER (2001) - Zwitter.mp3
What a mess, let's clean it up:
.. code-block:: console
$ tagrenamer --format '{artist}/{album}/{artist}-{title}.{ext}' Music/
- Tagrenamer version 0.0.3.
- Leftovers directory '__LEFTOVERS/' created.
- Stage directory '__STAGE/' created.
- Traverse the collection and extract music tags.
- Validating tag input and sanitizing variables.
- Moving non music files to '__LEFTOVERS/'.
- Moving music to new tree in stage directory '__STAGE/'.
- Remove empty directories (except stage/leftover directories).
- Move everything from stage into the final location.
- Deleting the temporary stage directory '__STAGE/'.
- Deleting the empty leftovers directory '__LEFTOVERS/'.
- DONE! Processed 11 files.
.. code-block:: console
Music/
└── rammstein
└── mutter
├── rammstein-adios.mp3
├── rammstein-feuer frei.mp3
├── rammstein-ich will.mp3
├── rammstein-links 2 3 4.mp3
├── rammstein-mein herz brennt.mp3
├── rammstein-mutter.mp3
├── rammstein-nebel.mp3
├── rammstein-rein raus.mp3
├── rammstein-sonne.mp3
├── rammstein-spieluhr.mp3
└── rammstein-zwitter.mp3
Features
--------
#. **Python**
Pure Python command-line application that is cross-platform and strives to
meet all modern quality criteria such as PEP8-compliance and test coverage.
#. **Formats**
Supports ``.mp3``, ``.ogg`` and ``.flac`` files and more are easy to add.
#. **Only deals with music**
Files that are not music, are moved into a folder named ``__LEFTOVERS/``
which contains the original structure they were originally in. Letting you
decide what to do with them.
#. **Fail-safe**
Tagrenamer leverages an internal staging process in which it detects failures
before it touched a single file. The paranoid can combine ``--dry-run`` and
``-vvvv`` to see what is going on under the hood or even run with ``--shell``
to generate Shell commands for you to inspect without renaming anything.
#. **Scalability**
Renames a few music albums as well as a 2Tb music collection.
Installation
------------
Install Tagrenamer directly from `PyPI`_ using ``pip``:
.. code-block:: console
$ pip3 install tagrenamer
.. _PyPI: https://pypi.org/project/tagrenamer/
=========
Changelog
=========
Unreleased
----------
0.0.3 (2024-03-29)
------------------
* Updated dependencies.
* Added tagrenamer.toml to move away from setup.py.
* Replaced setup.py-based instructions.
* Updated development installation instructions to suggest pipx.
0.0.2 (2021-11-26)
------------------
* Development procedures refined and release tested.
* Integrated readthedocs: https://tagrenamer.readthedocs.io/
* Updated changelog to reflect 0.0.1 release.
0.0.1 (2021-11-26)
------------------
* Ported the code from 2013 to Python 3.
* Reorganized the project to become a first-class Python package.
* Updated majority of PEP8 violations but not all.
* Added documentation.
Raw data
{
"_id": null,
"home_page": "https://github.com/nielsvm/tagrenamer",
"name": "tagrenamer",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "tagrenamer",
"author": "Niels van Mourik",
"author_email": "niels@nielsvm.org",
"download_url": "https://files.pythonhosted.org/packages/f4/48/03199f00aa7bb13b45967a31093a05b72a171b8bd04e479b6e54cb05ebcf/tagrenamer-0.0.3.tar.gz",
"platform": null,
"description": "==========\ntagrenamer\n==========\n\n.. image:: https://img.shields.io/github/languages/top/nielsvm/tagrenamer.svg\n :target: https://github.com/nielsvm/tagrenamer\n\n.. image:: https://img.shields.io/github/license/nielsvm/tagrenamer.svg\n :target: https://raw.githubusercontent.com/nielsvm/tagrenamer/master/LICENSE\n\n.. image:: https://img.shields.io/pypi/v/tagrenamer.svg\n :target: https://pypi.python.org/pypi/tagrenamer\n\n.. image:: https://img.shields.io/readthedocs/tagrenamer.svg\n :target: https://tagrenamer.readthedocs.io/\n\n*Mass music collection renamer.*\n\n**Tagrenamer completely cleans up your music folder for you, all you need**\n**to do is to make sure all music files have the right tags.**\n\nImagine this is inside your music folder:\n\n.. code-block:: console\n\n Music/\n \u251c\u2500\u2500 MUTTER (2001) - Adios.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Feuer Frei.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Ich Will.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Links 2 3 4.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Mein Herz Brennt.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Mutter.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Nebel.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Rein Raus.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Sonne.mp3\n \u251c\u2500\u2500 MUTTER (2001) - Spieluhr.mp3\n \u2514\u2500\u2500 MUTTER (2001) - Zwitter.mp3\n\nWhat a mess, let's clean it up:\n\n.. code-block:: console\n\n $ tagrenamer --format '{artist}/{album}/{artist}-{title}.{ext}' Music/\n - Tagrenamer version 0.0.3.\n - Leftovers directory '__LEFTOVERS/' created.\n - Stage directory '__STAGE/' created.\n - Traverse the collection and extract music tags.\n - Validating tag input and sanitizing variables.\n - Moving non music files to '__LEFTOVERS/'.\n - Moving music to new tree in stage directory '__STAGE/'.\n - Remove empty directories (except stage/leftover directories).\n - Move everything from stage into the final location.\n - Deleting the temporary stage directory '__STAGE/'.\n - Deleting the empty leftovers directory '__LEFTOVERS/'.\n - DONE! Processed 11 files.\n\n.. code-block:: console\n\n Music/\n \u2514\u2500\u2500 rammstein\n \u2514\u2500\u2500 mutter\n \u251c\u2500\u2500 rammstein-adios.mp3\n \u251c\u2500\u2500 rammstein-feuer frei.mp3\n \u251c\u2500\u2500 rammstein-ich will.mp3\n \u251c\u2500\u2500 rammstein-links 2 3 4.mp3\n \u251c\u2500\u2500 rammstein-mein herz brennt.mp3\n \u251c\u2500\u2500 rammstein-mutter.mp3\n \u251c\u2500\u2500 rammstein-nebel.mp3\n \u251c\u2500\u2500 rammstein-rein raus.mp3\n \u251c\u2500\u2500 rammstein-sonne.mp3\n \u251c\u2500\u2500 rammstein-spieluhr.mp3\n \u2514\u2500\u2500 rammstein-zwitter.mp3\n\nFeatures\n--------\n\n#. **Python**\n\n Pure Python command-line application that is cross-platform and strives to\n meet all modern quality criteria such as PEP8-compliance and test coverage.\n#. **Formats**\n\n Supports ``.mp3``, ``.ogg`` and ``.flac`` files and more are easy to add.\n\n#. **Only deals with music**\n\n Files that are not music, are moved into a folder named ``__LEFTOVERS/``\n which contains the original structure they were originally in. Letting you\n decide what to do with them.\n\n#. **Fail-safe**\n\n Tagrenamer leverages an internal staging process in which it detects failures\n before it touched a single file. The paranoid can combine ``--dry-run`` and\n ``-vvvv`` to see what is going on under the hood or even run with ``--shell``\n to generate Shell commands for you to inspect without renaming anything.\n\n#. **Scalability**\n\n Renames a few music albums as well as a 2Tb music collection.\n\nInstallation\n------------\n\nInstall Tagrenamer directly from `PyPI`_ using ``pip``:\n\n.. code-block:: console\n\n $ pip3 install tagrenamer\n\n.. _PyPI: https://pypi.org/project/tagrenamer/\n\n\n\n=========\nChangelog\n=========\n\nUnreleased\n----------\n\n0.0.3 (2024-03-29)\n------------------\n\n* Updated dependencies.\n* Added tagrenamer.toml to move away from setup.py.\n* Replaced setup.py-based instructions.\n* Updated development installation instructions to suggest pipx.\n\n0.0.2 (2021-11-26)\n------------------\n\n* Development procedures refined and release tested.\n* Integrated readthedocs: https://tagrenamer.readthedocs.io/\n* Updated changelog to reflect 0.0.1 release.\n\n\n0.0.1 (2021-11-26)\n------------------\n\n* Ported the code from 2013 to Python 3.\n* Reorganized the project to become a first-class Python package.\n* Updated majority of PEP8 violations but not all.\n* Added documentation.\n",
"bugtrack_url": null,
"license": "GNU General Public License v3",
"summary": "Mass music collection renamer.",
"version": "0.0.3",
"project_urls": {
"Homepage": "https://github.com/nielsvm/tagrenamer"
},
"split_keywords": [
"tagrenamer"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9a6c840ed4e5180c8471991c3c4b67a60ddaa27cc4dc43b5675aab9d3155f337",
"md5": "226bdbfb2ae73890e5921e7c76543b4f",
"sha256": "58e89f4775a55ce135f93ee8375d3139b9af21f8d2c2bce656bb978f12e147b5"
},
"downloads": -1,
"filename": "tagrenamer-0.0.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "226bdbfb2ae73890e5921e7c76543b4f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.6",
"size": 29008,
"upload_time": "2024-03-29T10:36:57",
"upload_time_iso_8601": "2024-03-29T10:36:57.126325Z",
"url": "https://files.pythonhosted.org/packages/9a/6c/840ed4e5180c8471991c3c4b67a60ddaa27cc4dc43b5675aab9d3155f337/tagrenamer-0.0.3-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f44803199f00aa7bb13b45967a31093a05b72a171b8bd04e479b6e54cb05ebcf",
"md5": "af527dc26185de631ebf5f62384bc0bf",
"sha256": "65a7a7c7504cb3260e2a1290d028823908f035007323f25926da0f23961c92d7"
},
"downloads": -1,
"filename": "tagrenamer-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "af527dc26185de631ebf5f62384bc0bf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 27119,
"upload_time": "2024-03-29T10:36:58",
"upload_time_iso_8601": "2024-03-29T10:36:58.884438Z",
"url": "https://files.pythonhosted.org/packages/f4/48/03199f00aa7bb13b45967a31093a05b72a171b8bd04e479b6e54cb05ebcf/tagrenamer-0.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-29 10:36:58",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "nielsvm",
"github_project": "tagrenamer",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "tagrenamer"
}