{ "info": { "author": "David Gasaway", "author_email": "dave@gasaway.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 2 :: Only", "Topic :: Multimedia :: Sound/Audio", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Introduction\n============\n\n*kantag* is a set of Python libraries and tools for managing audio file (flac,\nogg vorbis, mp3, and m4a) metadata using external text files called \"kantag\nfiles\". The format of the file is identical regardless of audio file type. \nIncluded is a tool to generate the text file from existing tags, path, and\n`MusicBrainz `_ data, ``initkan``; a tool to write the\nmetadata to the audio file tags, ``applykan``; and a tool to display metadata,\n``showkan``. A typical *kantag* file would have lines that look like like\nthis::\n\n # Album / common track info\n a AlbumArtist=Rush\n a AlbumArtistSort=Rush\n a Album=2112\n a Date=1976-03-12\n\n a Composer=Geddy Lee\n a ComposerSort=Lee, Geddy\n t 01-05 Composer=Alex Lifeson\n t 01-05 ComposerSort=Lifeson, Alex\n t 01-03,06 Lyricist=Neil Peart\n t 01-03,06 LyricistSort=Peart, Neil\n\n t 01 Title=2112\n t 01 Part=1. Overture\n t 01 Part=2. The Temples of Syrinx\n t 01 Part=3. Discovery\n t 01 Part=4. Presentation\n t 01 Part=5. Oracle: The Dream\n t 01 Part=6. Soliloquy\n t 01 Part=7. Grand Finale\n\n\nTypical Usage\n=============\n\nIn a typical *kantag* workflow, the user will have an album of audio files,\nwhether ripped from a CD, purchased from an online store, downloaded from\nBandcamp, or another source. In most cases, the files will already contain\nmetadata tags. `MusicBrainz Picard `_ is a\nrecommended choice for setting the initial metadata, especially for files ripped\nfrom physical media. The tool ``initkan`` will produce a baseline file for\na set of audio files::\n\n $ initkan -v -b=y -M=y *.ogg > tags.kan\n\nThe output would typically be retained as a file in the same folder as the audio\nfiles, as in the above example. Then, the file can be edited by any available\ntext editor, to meet the user's personal tastes. Note, there are additional \ntags recognized by by the *kantag* tools that are not necessary output by \n``initkan``. To write the tags back to the audio files, use ``applykan``::\n\n $ applykan -v tags.kan *.ogg\n\nInstallation\n============\n\n.. warning::\n\n Some Linux distributions discourage installation of system-level python\n packages using ``pip`` or ``setup.py install``, due to collisions with the\n system package manager. In those cases, dependencies should be installed\n through the package manager, if possible, or choose a user folder\n installation method.\n\nInstalling with pip\n-------------------\n\nIf your system has ``pip`` installed, and you have access to install software in\nthe system packages, then *kantag* kan be installed as administrator from \n`PyPI `_::\n\n # pip install kantag\n\nIf you do not have access to install system packages, or do not wish to install\nin the system location, it can be installed in a user folder::\n\n $ pip install --user kantag\n\nInstalling from source\n----------------------\n\nEither download a release tarball from the\n`Downloads `_ page, and\nunpack::\n\n $ tar zxvf kantag-1.1.0.tar.gz\n\nOr get the latest source from the Mercurial repository::\n\n $ hg clone https://bitbucket.org/dgasaway/kantag\n\nIf you have access to install software in the system packages, then it can be\ninstalled as administrator::\n\n # python setup.py install\n\nIf you do not have access to install system packages, or do not wish to install\nin the system location, it can be installed in a user folder::\n\n $ python setup.py install --user\n\n\nFile Format\n===========\n\nOverall, if the *kantag* file contains any non-ASCII characters, it should be\nUTF-8 encoded without BOM. Each line is parsed according to the rules below.\nBlank lines are allowed and ignored.\n\n\nLine format\n-----------\n\nThe first character of a line indicates the line type:\n\n+------+------------------------------------------------+\n| Char | Description |\n+======+================================================+\n| # | A comment line that will be ignored. |\n+------+------------------------------------------------+\n| a | A tag that will be applied to all files. |\n+------+------------------------------------------------+\n| d | A tag that will be applied to selected discs. |\n+------+------------------------------------------------+\n| t | A tag that will be applied to selected tracks. |\n+------+------------------------------------------------+\n\nFor disc and track types, next is a space followed by a list of disc/track\nnumbers to which the tag applies. The list is comma separated and may\ncontain ranges indicated by a hyphen. Some examples: \n\n+---------------+---------------------------------------------+\n| Selector | Description |\n+===============+=============================================+\n| t 10 | Applies to track 10. |\n+---------------+---------------------------------------------+\n| d 2 | Applies to all tracks on disc 2. |\n+---------------+---------------------------------------------+\n| d 1-3 | Applies to all tracks on discs 1, 2, and 3. |\n+---------------+---------------------------------------------+\n| t 01,05-07,10 | Applies to tracks 1, 5, 6, 7, and 10. |\n+---------------+---------------------------------------------+\n\nThe numbers may need to be zero padded as in the above track example if the\naudio filename has the disc or track number zero padded. This can also depend\non the setting the ``--path-regex`` option passed to ``applykan``. With default\nsettings, track numbers should be padded to two digits in the *kantag* file and\nin filenames. In addition, when working with a multi-disc release, track numbers\nshould be prepended with the disc number, as in these examples:\n\n+---------------+-------------------------------------------------------------+\n| Selector | Description |\n+===============+=============================================================+\n| t 101-103 | Applies to tracks 1 to 3 of disc 1. |\n+---------------+-------------------------------------------------------------+\n| t 105,201-202 | Applies to track 5 of disc 1, and tracks 1 and 2 of disc 2. |\n+---------------+-------------------------------------------------------------+\n\nNext comes a space and the tag name/value pair separated by an equal sign.\nAnything before the first equal sign will be used as the tag name, anything\nafter and to the end of the line is the value. Putting it all together, you\nhave something like this::\n\n t 07 Composer=Jarom\u00edr Weinberger\n\nThere is no support for multi-line values. Instead, use multiple instances of\nthe tag::\n\n t 07 Comment=Work premi\u00e8red in 1927.\n t 07 Comment=Known in English as \"\u0160vanda the Bagpiper\" or \"Schwanda the Bagpiper\".\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://bitbucket.org/dgasaway/kantag/downloads/", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/dgasaway/kantag", "keywords": "audio music metadata tags", "license": "GNU GPL v2", "maintainer": "", "maintainer_email": "", "name": "kantag", "package_url": "https://pypi.org/project/kantag/", "platform": "", "project_url": "https://pypi.org/project/kantag/", "project_urls": { "Download": "https://bitbucket.org/dgasaway/kantag/downloads/", "Homepage": "https://bitbucket.org/dgasaway/kantag" }, "release_url": "https://pypi.org/project/kantag/1.2.0/", "requires_dist": [ "mutagen (>=1.20)", "musicbrainzngs (>=0.6); extra == 'MusicBrainz'" ], "requires_python": "~=2.7", "summary": "manage audio file metadata using external text files", "version": "1.2.0" }, "last_serial": 3991145, "releases": { "1.1.0": [ { "comment_text": "", "digests": { "md5": "6f6dfbc55389ad7452474cccdfafd436", "sha256": "75979d75cf5d87caa790670763f72a487216b8f5d93861d3ddbd3c6400c32aea" }, "downloads": -1, "filename": "kantag-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "6f6dfbc55389ad7452474cccdfafd436", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": "~=2.7", "size": 40672, "upload_time": "2018-03-19T02:41:14", "url": "https://files.pythonhosted.org/packages/5e/43/2cd214f53874f3c25bc443d01103b162311f26454dbd17160b16387ff9b8/kantag-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "530f700e70d3118323d05d847cfa8425", "sha256": "0a92d158cbb3be1c3a89af94d4b150aa45586124e8bbfa983de32a1908185d94" }, "downloads": -1, "filename": "kantag-1.1.0.tar.gz", "has_sig": false, "md5_digest": "530f700e70d3118323d05d847cfa8425", "packagetype": "sdist", "python_version": "source", "requires_python": "~=2.7", "size": 38454, "upload_time": "2018-03-19T02:41:17", "url": "https://files.pythonhosted.org/packages/20/cb/87f84ba12b2da50ca4e92a47879737c61c29cf55f1d9f5d7dca99c10fa99/kantag-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "7de1a32552f1867ccd3bc572c3672f70", "sha256": "2e6481a063774543f4843bee1c84847ead9d4fd92413642b6f5aa867327a64a0" }, "downloads": -1, "filename": "kantag-1.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "7de1a32552f1867ccd3bc572c3672f70", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": "~=2.7", "size": 52240, "upload_time": "2018-06-23T03:27:35", "url": "https://files.pythonhosted.org/packages/3d/56/4bf735037327b2ab158c57184d1d4eb675482c5059894a1fef8bbaa3d47e/kantag-1.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52d6b75d1216bef8d349745570166fcb", "sha256": "904cdc1e2dce56c1de58ead8e29c9ccd812ade87dc9bf1b8563bd1da4e2ceae6" }, "downloads": -1, "filename": "kantag-1.2.0.tar.gz", "has_sig": false, "md5_digest": "52d6b75d1216bef8d349745570166fcb", "packagetype": "sdist", "python_version": "source", "requires_python": "~=2.7", "size": 50582, "upload_time": "2018-06-23T03:27:38", "url": "https://files.pythonhosted.org/packages/6d/a5/34bf00d1b91471b1c325bb3cff5c09671ca9f2d481f82ca699b3b692f146/kantag-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7de1a32552f1867ccd3bc572c3672f70", "sha256": "2e6481a063774543f4843bee1c84847ead9d4fd92413642b6f5aa867327a64a0" }, "downloads": -1, "filename": "kantag-1.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "7de1a32552f1867ccd3bc572c3672f70", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": "~=2.7", "size": 52240, "upload_time": "2018-06-23T03:27:35", "url": "https://files.pythonhosted.org/packages/3d/56/4bf735037327b2ab158c57184d1d4eb675482c5059894a1fef8bbaa3d47e/kantag-1.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52d6b75d1216bef8d349745570166fcb", "sha256": "904cdc1e2dce56c1de58ead8e29c9ccd812ade87dc9bf1b8563bd1da4e2ceae6" }, "downloads": -1, "filename": "kantag-1.2.0.tar.gz", "has_sig": false, "md5_digest": "52d6b75d1216bef8d349745570166fcb", "packagetype": "sdist", "python_version": "source", "requires_python": "~=2.7", "size": 50582, "upload_time": "2018-06-23T03:27:38", "url": "https://files.pythonhosted.org/packages/6d/a5/34bf00d1b91471b1c325bb3cff5c09671ca9f2d481f82ca699b3b692f146/kantag-1.2.0.tar.gz" } ] }